Dada una lista sin clasificar de enteros únicos estrictamente positivos, ordénelo mínimamente en una matriz 2D. Se garantiza que la lista de entrada tendrá una longitud compuesta, lo que significa que la matriz de salida no es necesariamente cuadrada, sino que tiene un tamaño n x m
con n,m > 1
.
"Ordenar mínimamente" aquí significa lo siguiente:
- Ordenar la lista en orden ascendente.
- Compactar la matriz de salida tanto como sea posible - a minimizar la suma de las dimensiones de la matriz (por ejemplo, para
20
elementos de entrada como entrada, una5x4
o4x5
se requiere matriz de salida, y no una2x10
). - Compacte los números ordenados tan lejos como sea posible en la esquina superior izquierda de la matriz, comenzando con el primer elemento en la lista ordenada.
- Puede pensarse en esto como ordenar la lista, luego cortarla a lo largo de las antiagoniales de la matriz, comenzando por la esquina superior izquierda.
Ejemplos:
Para la entrada, la 1..20
salida es una matriz de 5x4 o 4x5 de la siguiente manera:
1 2 4 7 11
3 5 8 12 15
6 9 13 16 18
10 14 17 19 20
1 2 4 7
3 5 8 11
6 9 12 15
10 13 16 18
14 17 19 20
Para la [3, 5, 12, 9, 6, 11]
salida de entrada es un 2x3 o 3x2 de la siguiente manera
3 5 9
6 11 12
3 5
6 9
11 12
Para la entrada [14, 20, 200, 33, 12, 1, 7, 99, 58]
, la salida es un 3x3 de la siguiente manera
1 7 14
12 20 58
33 99 200
Para la entrada, 1..10
la salida debe ser 2x5 o 5x2 de la siguiente manera
1 2 4 6 8
3 5 7 9 10
1 2
3 4
5 6
7 8
9 10
Para la [5, 9, 33, 65, 12, 7, 80, 42, 48, 30, 11, 57, 69, 92, 91]
salida de entrada es un 5x3 o 3x5 de la siguiente manera
5 7 11 33 57
9 12 42 65 80
30 48 69 91 92
5 7 11
9 12 33
30 42 57
48 65 80
69 91 92
Reglas
- Se puede suponer que la entrada se ajusta al tipo de entero nativo de su idioma.
- La entrada y salida se pueden dar por cualquier método conveniente .
- Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
fuente
15
caso de prueba de elemento.Respuestas:
Jalea ,
242220 bytesPruébalo en línea!
Guardado 2 bytes gracias a @ Jonathan Allan .
Explicación
fuente
L%J¬TżṚ$
->LÆDżṚ$
debería salvar a dos, creopSÞỤs
.Python 2 ,
160158153151 bytes-2 bytes gracias a Erik the Outgolfer
-2 bytes gracias al Sr. Xcoder
Pruébalo en línea! o Pruebe todos los casos de prueba
fuente
max(0,n-x)
para -2 bytes.R
11095 bytesPruébalo en línea!
Cómo funciona
Giuseppe ahorró la friolera de 15 (!) Bytes con los siguientes trucos
length(x)
porsum(x|1)
(-1 byte)floor()
no es necesario ya que de:
todas formas se redondea hacia abajo (-7)^.5
es más corto quesqrt()
(-3)col(X) + row(X)
lugar deouter
(¡bonito!)t(X)
- decepcionante;)Solución original
Sería más elegante
outer
ser reemplazado porrow(X)+col(X)
, pero eso requeriría inicializar la matriz de salidaX
primero.Pruébalo en línea!
fuente
JavaScript (ES6), 172 bytes
Explicación
Casos de prueba
Mostrar fragmento de código
fuente
Perl 5 , 132 bytes
Pruébalo en línea!
La subrutina devuelve una matriz 2-D. El enlace TIO incluye un código de pie de página para mostrar el resultado de la prueba.
fuente
Octava , 151 bytes
Usando tres tipos diferentes de construcciones de bucle.
Pruébalo en línea!
Desenrollado:
fuente
'
ennnz(v')
requiere?'
no es necesario si envuelvo la expresión de rango, por ejemplo1:20
, alrededor de corchetes ([1:20]
) en el sitio de la llamada (para que sea un vector real). Aparentemente en Octave, el operador de colon no crea un vector , sino una constante de rango que ocupa mucho menos espacio en la memoria. Por alguna razón,nnz()
no funciona con ese tipo, pero la transposición de la constante de rango produce un vector, por lo que funciona con el apóstrofe. Llamar a la función con un vector real elimina la necesidad de'
.nnz(1:20)
no funcione es probablemente un error (max(1:20)
,sum(1:20)
etc. son válidos).nnz
. ¿Quieres hacerlo tú mismo o lo haré?Casco , 15 bytes
Esto funciona por fuerza bruta, por lo que los casos de prueba más largos pueden expirar. Pruébalo en línea!
Explicación
fuente
C (gcc) , 269 bytes
Pruébalo en línea!
fuente
JavaScript (ES6), 233 bytes
Explicación
fuente
Java 10,
199188186 bytesPruébalo en línea.
Basado en mi respuesta aquí .
Explicación:
fuente