주어진 양의 정수로 정렬 된 모든 파티션 (구성 (combinatorics))을 나열해야합니다 n
. 합계가 에서 1
까지 n
인 숫자의 목록입니다 n
. 예를 들어 input이 주어지면 n = 4
결과는 다음과 같아야합니다.
4
1, 3
3, 1
2, 2
2, 1, 1
1, 2, 1
1, 1, 2
1, 1, 1, 1
결과는 어떤 순서로든 가능하지만 각 주문 파티션을 한 번 포함해야합니다. 이 수단에 대한 것으로 n = 4
, [1, 1, 2]
, [1, 2, 1]
그리고 [2, 1, 1]
모든 결과의 일부 여야합니다.
이것을 달성하는 내 자신의 JavaScript 코드는 다음과 같습니다.
function range(n) {
for (var range = [], i = 0; i < n; range.push(++i));
return range;
}
function composition(n) {
return n < 1 ? [[]] : range(n).map(function(i) {
return composition(n - i).map(function(j) {
return [i].concat(j);
});
}).reduce(function(a, b) {
return a.concat(b);
});
}
Golfed, ES6 ( 169 167 119 109 105 89 85 바이트 )
n=>n?[].concat(...[...Array(n)].map((x,i)=>i+1).map(b=>m(n-b).map(a=>[b,...a]))):[[]]