Dada uma lista de números inteiros L
e um número inteiro N
, a saída L
dividida em N
sublistas de comprimento igual.
Comprimentos não divisíveis
Se N
não divide o comprimento de L
, então não é possível que todas as sublistas tenham o mesmo comprimento.
De qualquer forma, a última sub-lista da saída é a que adapta seu comprimento para conter o restante da lista.
Isso significa que todas as sublistas de, L
exceto a última, devem ter comprimento length(L) // N
, onde //
está a divisão com piso (por exemplo 3//2 = 1
).
Algumas regras
L
pode estar vazio.N >= 1
.Você pode usar qualquer built-in que desejar.
Você pode levar a entrada por meio de
STDIN
, como argumento de função, ou algo semelhante.Você pode imprimir a saída
STDOUT
, retorná-la de uma função ou algo semelhante.Você pode escolher qualquer formato para as listas e o número inteiro, desde que seja a representação mais natural de listas e números inteiros no seu idioma.
Casos de teste
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]]
Pontuação
Isso é código-golfe , então a resposta mais curta em bytes vence.
fonte
Respostas:
Pitão,
1110 bytes1 byte graças a @FryAmTheEggman .
Suíte de teste.
Recebe entradas em ordem inversa.
Entrada de amostra:
Saída de amostra:
Explicação
fonte
JavaScript (ES6), 63 bytes
fonte
Python,
7673 bytesBasicamente, uma função sem nome que executa a tarefa. Obrigado a LeakyNun pelos bytes salvos!
fonte
Lisp comum, 114 bytes
Ungolfed:
Chamada de exemplo:
Experimente aqui!
Basicamente:
p = |L| / N
elementos da lista e junte-os ao resultado de uma chamada recursiva no restante.i
é um contador de iteração usado para a condição de parada.Eu havia entendido mal o desafio a princípio, pensando que o programa deveria criar grupos de
N
elementos em vez deN
grupos. De qualquer forma, esta versão faz o trabalho por 10 bytes extras. O LisP não ganhará desta vez, mas não pude perder a oportunidade: ')fonte
Haskell,
6967 bytesExemplo de uso:
[1,2,3,4] % 3
->[[1],[2],[3,4]]
.Uma abordagem recursiva simples, semelhante à resposta do @ xnor .
Edit: @Will Ness salvou 2 bytes. Obrigado!
fonte
h:t#(n-1)
também funciona.PowerShell v2 +, 125 bytes
Parece muito longo, mas não consigo encontrar uma maneira de fazer com que o fatiamento funcione feliz se houver matrizes vazias na saída, portanto, preciso do encapsulamento
if
/else
para lidar com esses casos. Além disso, como o padrão do PowerShell.ToString()
para matrizes via saída do console pode parecer um pouco estranho, você pode usar um-join','
para mostrar as matrizes como separadas por vírgula, em vez de separadas por nova linha no console. Fiz isso nos exemplos abaixo para tornar a saída mais clara, mas você não vai querer fazer isso se estiver deixando a saída no pipeline para outro comando pegar.Explicação
Recebe entrada
param($l,$n)
para a lista e o número de partições, respectivamente. Em seguida, inserimos uma instruçãoif
/else
. Se o tamanho de cada partição$p
for diferente de zero (definindo o auxiliar$c
como.count
o caminho), estamos noif
.Dentro do
if
, fazemos um loop de1
para$n
com|%{...}
, e a cada iteração, estamos fazendo uma fatia de matriz bastante complexa$l[(($_-1)*$p)..((($_*$p-1),$c)[!($_-$n)])]
. A primeira parênteses é o nosso índice inicial, com base em qual partição estamos e quão grande é o tamanho da partição. Variamos isso..
com nosso índice final, formado a partir de um pseudo-ternário . Aqui, estamos escolhendo entre$c
(o final literal da matriz) ou o comprimento da nossa partição, com base no fato de estarmos no último bloco$_-$n
ou não.Caso contrário, estamos no
else
. Construímos uma matriz vazia com o operador de vírgula,''*
igual a menos partições que o solicitado e, em seguida, aderimos à matriz de entrada como o elemento final.Exemplos
Aqui, estou mostrando as partições separadas por novas linhas e cada elemento individual por separado
,
, conforme descrito acima.fonte
F #,
10098 bytesUsando o faturamento da lista F #, com uma cláusula if que decide se deve escolher um elemento ou todos os elementos restantes.
fonte
Prolog,
10099 bytes.Ligue por exemplo
fonte
PHP, 109 bytes
Todos os casos de teste
fonte