この課題では、リストにパーティションを作成する必要があります。パーティションには、最大サイズ、最小サイズ、および適切なサイズがあります。(min,pref,max)
この課題では、表記を使用してサイズを示します。
パーティション設定に不慣れな方のために、次のリストは3の部分に分割されています。
[0..9] -> [[0,1,2],[3,4,5],[6,7,8]]
リストが均等に分割できない場合は、パーティションを可能な限り推奨サイズに近づける必要があります[0..10], (2,4,5) -> [[0,1,2,3],[4,5,6],[7,8,9]]
。[[0,1,2,3],[4,5,6,7],[8,9]]
後者の方が好ましい長さですが、この分割はに優先します。正式には(partitionLength-preferredSize)^2
、各パーティションの合計を最小化する必要があります。
パーティションの長さの順序は重要ではありません:については[0..5], (2,3,3)
、いずれか[[0,1,2],[3,4]]
または[[0,1],[2,3,4]]
作品を。パーティションを作成できない場合は、空の配列を返します[0..7], (4,4,5) -> []
。
あなた1<=min<=pref<=max
は、あなたに渡された配列が空でない整数の配列であると仮定することができます。配列は常に最初の引数になります。min、max、およびprefは、任意の順序で、タプルまたは個別の引数として受け入れることができます。
プログラムは数秒で実行する必要があります。基本的に、境界内で可能なすべてのパーティションサイズを反復することはできません。
テストケース:
[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]]
これはコードゴルフですので、好きな言語でできるだけ少ないバイトを目指してください!
[a..b]
含まa
や除外b
、正しいですか?