Étant donné une liste d'entiers L
et un entier N
, la sortie est L
divisée en N
sous-listes de longueurs égales.
Longueurs non divisibles
Si N
ne divise pas la longueur de L
, alors il n'est pas possible que toutes les sous-listes aient une longueur égale.
Dans tous les cas, la dernière sous-liste de la sortie est celle qui adapte sa longueur pour contenir le reste de la liste.
Cela signifie que toutes les sous-listes à l' L
exception de la dernière doivent être de longueur length(L) // N
, où se //
trouve la division au sol (par exemple 3//2 = 1
).
Certaines règles
L
peut être vide.N >= 1
.Vous pouvez utiliser n'importe quel module intégré de votre choix.
Vous pouvez prendre l'entrée à travers
STDIN
, comme argument de fonction, ou quelque chose de similaire.Vous pouvez imprimer la sortie dans
STDOUT
, la renvoyer à partir d'une fonction ou quelque chose de similaire.Vous pouvez choisir n'importe quel format pour les listes et l'entier tant qu'il s'agit de la représentation la plus naturelle des listes et des entiers dans votre langue.
Cas de test
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]]
Notation
Il s'agit de code-golf , donc la réponse la plus courte en octets l'emporte.
la source
Réponses:
Pyth,
1110 octets1 octet grâce à @FryAmTheEggman .
Suite de tests.
Prend les entrées dans l'ordre inverse.
Exemple d'entrée:
Exemple de sortie:
Explication
la source
JavaScript (ES6), 63 octets
la source
Python,
7673 octetsFondamentalement, une fonction sans nom qui exécute la tâche. Merci à LeakyNun pour les octets enregistrés!
la source
Lisp commun, 114 octets
Non golfé:
Exemple d'appel:
Essayez-le ici!
Fondamentalement:
p = |L| / N
éléments de la liste et joignez-les au résultat d'un appel récursif sur le reste.i
est un compteur d'itérations utilisé pour la condition d'arrêt.Au début, j'avais mal compris le défi, pensant que le programme devait constituer des groupes d'
N
éléments plutôt que desN
groupes. Quoi qu'il en soit, cette version fait le travail pour 10 octets supplémentaires. LisP ne gagnera pas cette fois mais je ne pouvais pas vraiment rater l'occasion: ')la source
Haskell,
6967 octetsExemple d'utilisation:
[1,2,3,4] % 3
->[[1],[2],[3,4]]
.Une approche récursive simple, similaire à la réponse de @ xnor .
Edit: @Will Ness a enregistré 2 octets. Merci!
la source
h:t#(n-1)
fonctionne également.PowerShell v2 +, 125 octets
Cela semble trop long, mais je n'arrive pas à trouver un moyen de faire fonctionner le découpage avec bonheur s'il y a des tableaux vides dans la sortie, j'ai donc besoin de l'encapsulation
if
/else
pour gérer ces cas. De plus, comme la valeur.ToString()
par défaut de PowerShell pour les tableaux via la sortie de la console peut sembler un peu bizarre, vous pouvez ajouter un-join','
pour afficher les tableaux comme séparés par des virgules plutôt que par des sauts de ligne sur la console. J'ai fait cela dans les exemples ci-dessous pour rendre la sortie plus claire, mais vous ne voudrez pas le faire si vous laissez la sortie sur le pipeline pour une autre commande à récupérer.Explication
Prend une entrée
param($l,$n)
pour la liste et le nombre de partitions, respectivement. Nous entrons ensuite une instructionif
/else
. Si la taille de chaque partition$p
est différente de zéro (définissant helper$c
pour être le.count
long du chemin), nous sommes dans leif
.À l'intérieur de
if
, nous bouclons de1
à$n
avec|%{...}
, et chaque itération nous faisons une tranche de tableau d'aspect assez complexe$l[(($_-1)*$p)..((($_*$p-1),$c)[!($_-$n)])]
. La première parens est notre index de départ, basé sur la partition sur laquelle nous nous trouvons et la taille de notre partition. Nous classons cela..
avec notre indice de fin, qui est formé à partir d'un pseudo-ternaire . Ici, nous choisissons entre$c
(la fin littérale du tableau) ou la longueur de notre partition, selon que nous sommes dans le dernier morceau$_-$n
ou non.Sinon, nous sommes dans le
else
. Nous construisons un tableau vide avec l'opérateur virgule,''*
égal à une partition de moins que demandé, puis clouons sur le tableau d'entrée en tant qu'élément final.Exemples
Ici, je montre les partitions séparées par des sauts de ligne et chaque élément individuel séparé avec
,
, comme décrit ci-dessus.la source
F #,
10098 octetsUtilisation du découpage de liste F #, avec une clause if pour décider de choisir un élément ou tous les autres éléments.
la source
Prolog,
10099 octets.Appelez par exemple
la source
PHP, 109 octets
Tous les testcases
la source