In questa sfida, è necessario partizionare un elenco, in cui le partizioni hanno una dimensione massima, una dimensione minima e una dimensione preferita. Userò la notazione (min,pref,max)
per indicare le dimensioni in questa sfida.
Per coloro che non hanno familiarità con il partizionamento, il seguente elenco è stato partizionato in parti di 3:
[0..9] -> [[0,1,2],[3,4,5],[6,7,8]]
Quando l'elenco non è divisibile, è necessario le partizioni di essere il più vicino alla dimensione preferita possibile: [0..10], (2,4,5) -> [[0,1,2,3],[4,5,6],[7,8,9]]
. È preferibile questo partizionamento [[0,1,2,3],[4,5,6,7],[8,9]]
, anche se quest'ultimo ha una lunghezza maggiore. Formalmente, dobbiamo ridurre al minimo la somma di (partitionLength-preferredSize)^2
per ogni partizione.
L'ordine delle lunghezze delle partizioni non ha importanza: per [0..5], (2,3,3)
, o [[0,1,2],[3,4]]
o [[0,1],[2,3,4]]
funziona. Se nessuna partizione è possibile restituire un array vuoto: [0..7], (4,4,5) -> []
.
Puoi presumere che 1<=min<=pref<=max
e che l'array passato a te sia un array di numeri interi non vuoto. L'array sarà sempre il primo argomento. Puoi accettare min, max e pref in qualsiasi ordine e come tupla o come argomenti separati.
Il programma deve essere eseguito in un paio di secondi. Fondamentalmente, non è consentito scorrere ogni possibile dimensione della partizione all'interno dei limiti.
Casi 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]]
Questo è un codice-golf , quindi mira al minor numero di byte possibile nella tua lingua preferita!
[a..b]
includea
ed escludeb
, corretta?