Le défi est de lister toutes les partitions ordonnées (composition (combinatoire)) d'un entier positif donné n. Ce sont les listes de nombres de 1à ndont la somme est n. Par exemple, pour une entrée donnée n = 4, le résultat devrait être:
4
1, 3
3, 1
2, 2
2, 1, 1
1, 2, 1
1, 1, 2
1, 1, 1, 1
Le résultat peut être dans n'importe quel ordre, mais doit contenir une fois chaque partition ordonnée. Cela signifie que pour n = 4, [1, 1, 2], [1, 2, 1]et [2, 1, 1]doivent tous faire partie du résultat.
Voici mon propre code JavaScript qui y parvient:
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 octets ):
n=>n?[].concat(...[...Array(n)].map((x,i)=>i+1).map(b=>m(n-b).map(a=>[b,...a]))):[[]]