이 문제에서는 파티션이 최대 크기, 최소 크기 및 기본 크기를 갖는 목록을 분할해야합니다. (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
각 파티션 의 합계를 최소화해야 합니다.
파티션 길이의 순서는 중요하지 않습니다 : For [0..5], (2,3,3)
, [[0,1,2],[3,4]]
or [[0,1],[2,3,4]]
works. 파티션이 가능하지 않으면 빈 배열을 반환하십시오.[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]]
이것은 code-golf 이므로 원하는 언어로 가능한 한 적은 바이트를 목표로하십시오!
[a..b]
includea
및 excludesb
가 맞습니까?