Permutations: Difference between revisions
→{{header|JavaScript}} Functional (ES5)
PatGarrett (talk | contribs) (→{{header|360 Assembly}}: shorter) |
|||
Line 2,069:
=={{header|JavaScript}}==
===Imperative===
Copy the following as an HTML file and load in a browser.
<lang javascript><html><head><title>Permutations</title></head>
Line 2,093 ⟶ 2,096:
perm([1, 2, 'A', 4], []);
</script></body></html></lang>
===Functional (ES5)===
{{trans|Haskell}}
(Simple version – assuming a unique list of objects comparable by the JS === operator)
<lang JavaScript>(function () {
// monadic bind/chain for lists
function chain(xs, f) {
return [].concat.apply([], xs.map(f));
}
// monadic return/inject for lists
function inject(x) {
return [x];
}
// drops first instance found
function deleted(x, xs) {
return xs.length ? (
x === xs[0] ? xs.slice(1) : [xs[0]].concat(
deleted(x, xs.slice(1))
)
) : [];
}
function permutations(xs) {
return xs.length ? (
chain(xs, function (x) {
return chain(permutations(deleted(x, xs)), function (ys) {
return inject([x].concat(ys));
})
})
) : [[]]
}
return permutations(['Aardvarks', 'eat', 'ants'])
})();</lang>
{{out}}
<lang JavaScript>[["Aardvarks", "eat", "ants"], ["Aardvarks", "ants", "eat"], ["eat", "Aardvarks", "ants"], ["eat", "ants", "Aardvarks"], ["ants", "Aardvarks", "eat"], ["ants", "eat", "Aardvarks"]]</lang>
=={{header|jq}}==
"permutations" generates a stream of the permutations of the input array.
|