Dada una lista de enteros L
y un entero N
, la salida se L
dividió en N
sublistas de igual longitud.
Longitudes no divisibles
Si N
no divide la longitud de L
, entonces no es posible que todas las sublistas tengan la misma longitud.
En cualquier caso, la última sublista de la salida es la que adapta su longitud para contener el resto de la lista.
Esto significa que todas las sublistas de, L
excepto la última, deben ser largas length(L) // N
, donde //
se divide el piso (por ejemplo 3//2 = 1
).
Algunas reglas
L
Puede estar vacío.N >= 1
.Puede usar cualquier incorporado que desee.
Puede tomar la entrada
STDIN
, como un argumento de función, o algo similar.Puede imprimir el resultado
STDOUT
, devolverlo desde una función o algo similar.Puede elegir cualquier formato para las listas y el entero, siempre que sea la representación más natural de las listas y los enteros en su idioma.
Casos de prueba
Input: [1,2,3,4], 2
Output: [[1,2],[3,4]]
Input: [-1,-2,3,4,-5], 2
Output: [[-1,-2],[3,4,-5]]
Input: [1,2,3,4], 1
Output: [[1,2,3,4]]
Input: [4,8,15,16,23,42], 5
Output: [[4],[8],[15],[16],[23,42]]
Input: [4,8,15,16,23,42], 7
Output: [[],[],[],[],[],[],[4,8,15,16,23,42]]
Input: [2,3,5,7,11,13,17,19,23], 3
Output: [[2,3,5],[7,11,13],[17,19,23]]
Input: [], 3
Output: [[],[],[]]
Input: [1,2,3,4,5,6,7,8], 3
Output: [[1,2],[3,4],[5,6,7,8]]
Puntuación
Este es el código de golf , por lo que gana la respuesta más corta en bytes.
fuente
Respuestas:
Pyth,
1110 bytes1 byte gracias a @FryAmTheEggman .
Banco de pruebas.
Toma entradas en orden inverso.
Entrada de muestra:
Salida de muestra:
Explicación
fuente
JavaScript (ES6), 63 bytes
fuente
Python,
7673 bytesBásicamente, una función sin nombre que realiza la tarea. ¡Gracias a LeakyNun por los bytes guardados!
fuente
Lisp común, 114 bytes
Sin golf:
Llamada de ejemplo:
Pruébalo aquí!
Básicamente:
p = |L| / N
elementos de la lista y únalos al resultado de una llamada recursiva en el resto.i
es un contador de iteraciones utilizado para la condición de detención.Al principio había entendido mal el desafío, pensando que el programa debería construir grupos de
N
elementos en lugar deN
grupos. De todos modos, esta versión hace el trabajo por 10 bytes adicionales. LisP no ganará esta vez, pero realmente no podría perder la oportunidad: ')fuente
Haskell,
6967 bytesEjemplo de uso:
[1,2,3,4] % 3
->[[1],[2],[3,4]]
.Un enfoque recursivo simple, similar a la respuesta de @ xnor .
Editar: @Will Ness guardó 2 bytes. ¡Gracias!
fuente
h:t#(n-1)
También funciona.PowerShell v2 +, 125 bytes
Se siente demasiado tiempo, pero parece que no puedo encontrar una manera de hacer que el corte funcione correctamente si hay matrices vacías en la salida, por lo que necesito encapsular
if
/else
para manejar esos casos. Además, dado que el valor predeterminado de PowerShell.ToString()
para las matrices a través de la salida de la consola puede parecer un poco extraño, puede agregar a-join','
para mostrar las matrices como separadas por comas en lugar de separadas por nueva línea en la consola. Lo hice en los ejemplos a continuación para aclarar el resultado, pero no querrá hacerlo si está dejando el resultado en la tubería para que otro comando lo tome.Explicación
Toma entrada
param($l,$n)
para la lista y el número de particiones, respectivamente. Luego ingresamos una declaraciónif
/else
. Si el tamaño de cada partición$p
no es cero (configurando el asistente$c
para que esté.count
en el camino), estamos en elif
.En el interior
if
, hacemos un bucle de1
a$n
con|%{...}
, y en cada iteración estamos haciendo un corte de matriz de aspecto bastante complejo$l[(($_-1)*$p)..((($_*$p-1),$c)[!($_-$n)])]
. Los primeros parens son nuestro índice de inicio, en función de en qué partición estamos y qué tan grande es el tamaño de nuestra partición. La alineamos..
con nuestro índice final, que se forma a partir de un pseudoternario . Aquí, estamos eligiendo entre$c
(el extremo literal de la matriz) o la longitud de nuestra partición, en función de si estamos en el último fragmento$_-$n
o no.De lo contrario, estamos en el
else
. Construimos una matriz vacía con el operador de coma,''*
igual a una partición menos de la solicitada, y luego agregamos la matriz de entrada como el elemento final.Ejemplos
Aquí estoy mostrando las particiones separadas con líneas nuevas y cada elemento individual separado
,
, como se describió anteriormente.fuente
F #,
10098 bytesUsando el corte de la lista F #, con una cláusula if que decide si elegir un elemento o todos los elementos restantes.
fuente
Prólogo,
10099 bytes.Llamar p. Ej.
fuente
PHP, 109 bytes
Todos los casos de prueba
fuente