課題は、特定の正の整数のすべての順序付けられたパーティション(組成(組み合わせ))をリストすること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
結果は任意の順序にすることができますが、順序付けされた各パーティションを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]))):[[]]