Bu meydan okumada, bölümlerin maksimum boyut, minimum boyut ve tercih edilen bir boyuta sahip olduğu bir listeyi bölümlendirmeniz gerekir. Gösterimi (min,pref,max)
bu meydan okumadaki boyutları belirtmek için kullanacağım.
Bölümlemeye aşina olmayanlar için, aşağıdaki liste 3 bölüme ayrılmıştır:
[0..9] -> [[0,1,2],[3,4,5],[6,7,8]]
Liste kalansız olduğunda, bölümleri mümkün olduğunca tercih boyutuna yakın olarak olması gerekir: [0..10], (2,4,5) -> [[0,1,2,3],[4,5,6],[7,8,9]]
. Bu bölümleme, tercih [[0,1,2,3],[4,5,6,7],[8,9]]
edilen uzunluktan daha fazlasına sahip olmasına rağmen tercih edilir. Resmi olarak, (partitionLength-preferredSize)^2
her bölüm için toplamı en aza indirmeliyiz .
Bölüm uzunluklarının sırası önemli değildir: [0..5], (2,3,3)
ya [[0,1,2],[3,4]]
da [[0,1],[2,3,4]]
çalışır. Hiçbir bölüm mümkün değilse, boş bir dizi döndürür: [0..7], (4,4,5) -> []
.
Bunu 1<=min<=pref<=max
ve size iletilen dizinin boş olmayan bir tamsayı dizisi olduğunu varsayabilirsiniz . Dizi her zaman ilk argüman olacaktır. Min, maks ve pref'yi herhangi bir sırada ve bir demet olarak veya ayrı bağımsız değişkenler olarak kabul edebilirsiniz.
Programınız birkaç saniye içinde çalışmalıdır. Temel olarak, sınırlar içindeki olası her bölüm boyutunun yinelenmesine izin verilmez.
Test senaryoları:
[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]]
Bu bir kod golf , bu yüzden en sevdiğiniz dilde mümkün olduğunca az bayt hedefleyin!
[a..b]
içerira
ve hariç tutarb
, doğru mu?