Dans ce défi, vous devez partitionner une liste, où les partitions ont une taille maximale, une taille minimale et une taille préférée. Je vais utiliser la notation (min,pref,max)
pour indiquer les tailles dans ce défi.
Pour ceux qui ne connaissent pas le partitionnement, la liste suivante a été partitionnée en parties de 3:
[0..9] -> [[0,1,2],[3,4,5],[6,7,8]]
Lorsque la liste ne sont pas divisibles, vous avez besoin des partitions d'être aussi proche de la taille préférée possible: [0..10], (2,4,5) -> [[0,1,2,3],[4,5,6],[7,8,9]]
. Ce partitionnement est préférable à [[0,1,2,3],[4,5,6,7],[8,9]]
, même si ce dernier a plus de longueur préférée. Formellement, nous devons minimiser la somme de (partitionLength-preferredSize)^2
pour chaque partition.
L'ordre des longueurs de partition n'a pas d'importance: pour [0..5], (2,3,3)
, soit [[0,1,2],[3,4]]
ou [[0,1],[2,3,4]]
fonctionne. Si aucune partition est possible, retourner un tableau vide: [0..7], (4,4,5) -> []
.
Vous pouvez supposer cela 1<=min<=pref<=max
et que le tableau qui vous est transmis est un tableau d'entiers non vide. Le tableau sera toujours le premier argument. Vous pouvez accepter min, max et pref dans n'importe quel ordre et comme tuple ou comme arguments séparés.
Votre programme doit s'exécuter en quelques secondes. Fondamentalement, l'itération à travers toutes les tailles de partition possibles dans les limites n'est pas autorisée.
Cas de test:
[1], (1,3,4) -> [[1]]
[100], (1,2,3) -> [[100]]
[1,2], (1,1,2) -> [[1],[2]]
[1,2], (1,2,2) -> [[1,2]]
[1,2], (1,3,3) -> [[1,2]]
[1,2,3], (1,2,3) -> [[1,2],[3]] or [[1,2,3]]
[1,2,3,4], (1,3,4) -> [[1,2,3,4]]
[1,2,3,4,5], (3,3,4) -> []
[1,2,3,4,5], (2,2,2) -> []
[1,2,3,4,5], (3,3,5) -> [[1,2,3,4,5]]
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49], (2,6,6) -> [[1,2,3,4,5,6],[7,8,9,10,11,12],[13,14,15,16,17,18],[19,20,21,22,23,24],[25,26,27,28,29],[30,31,32,33,34],[35,36,37,38,39],[40,41,42,43,44],[45,46,47,48,49]]
Il s'agit d'un code-golf , alors visez le moins d'octets possible dans votre langue préférée!
[a..b]
incluta
et exclutb
, n'est-ce pas?