Tantangannya adalah untuk membuat daftar semua partisi yang dipesan (komposisi (kombinatorik)) dari bilangan bulat positif yang diberikan n. Ini adalah daftar nomor dari 1ke nyang jumlahnya adalah n. Misalnya, diberi masukan n = 4, hasilnya harus:
4
1, 3
3, 1
2, 2
2, 1, 1
1, 2, 1
1, 1, 2
1, 1, 1, 1
Hasilnya bisa dalam urutan apa pun, tetapi harus berisi setiap partisi yang dipesan satu kali. Ini berarti bahwa untuk n = 4, [1, 1, 2], [1, 2, 1]dan [2, 1, 1]semua harus menjadi bagian dari hasilnya.
Ini kode JavaScript saya sendiri yang mencapai ini:
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 bytes ):
n=>n?[].concat(...[...Array(n)].map((x,i)=>i+1).map(b=>m(n-b).map(a=>[b,...a]))):[[]]