Jump to content

Permutations: Difference between revisions

m (→‎{{header|AppleScript}}: Updated primitive)
Line 2,465:
=={{header|JavaScript}}==
 
Genuine js code, assuming no duplicate.
===Imperative===
 
<lang JavaScript>
Copy the following as an HTML file and load in a browser.
function perm(a) {
<lang javascript><html><head><title>Permutations</title></head>
if (a.length < 2) return a;
<body><pre id="result"></pre>
var c, d, b = [];
<script type="text/javascript">
for (c = 0; c < a.length; c++) {
var d = document.getElementById('result');
var e = a.splice(c, 1),
 
function f = perm(list, reta);
for (d = 0; d < f.length; d++) b.push([e].concat(f[d]));
{
a.splice(c, 0, e)
if (list.length == 0) {
} return b
var row = document.createTextNode(ret.join(' ') + '\n');
d.appendChild(row);
return;
}
for (var i = 0; i < list.length; i++) {
var x = list.splice(i, 1);
ret.push(x);
perm(list, ret);
ret.pop();
list.splice(i, 0, x);
}
}
 
console.log(perm([1, 2'Aardvarks', 'Aeat', 4], ['ants']).join("\n"));
</script></body></html></lang>
 
===Functional===
 
 
====ES5====
 
{{trans|Haskell}}
 
(Simple version – assuming a unique list of objects comparable by the JS === operator)
 
<lang JavaScript>(function () {
 
// [a] -> [[a]]
function permutations(xs) {
return xs.length ? (concatMap(
function (x) {
return concatMap(
function (ys) {
return ([[x].concat(ys)]);
}, permutations(delete1(x, xs)))
}, xs)) : [[]]
}
 
 
// GENERIC LIBRARY FUNCTIONS
 
// concatMap :: (a -> [b]) -> [a] -> [b]
function concatMap(f, xs) {
return [].concat.apply([], xs.map(f));
}
// delete first instance of a in [a]
// delete1 :: a -> [a] -> [a]
function delete1(x, xs) {
return deleteBy(function (a, b) {
return a === b;
}, x, xs);
}
 
// deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]
function deleteBy(fnEq, x, xs) {
return xs.length ? fnEq(x, xs[0]) ? xs.slice(1) : [xs[0]]
.concat(deleteBy(fnEq, x, xs.slice(1))) : [];
}
 
 
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>
 
 
====ES6====
 
<lang JavaScript>(function (lst) {
'use strict';
 
let permutations = (xs) => xs.length ? (
flatMap((x) => flatMap((xs) => [[x].concat(xs)],
permutations(del(x, xs))), xs)
) : [[]],
 
flatMap = (f, xs) => [].concat.apply([], xs.map(f)),
 
del = (x, xs) => xs.length ? x === xs[0] ? (
xs.slice(1)
) : [xs[0]].concat(del(x, xs.slice(1))
) : [];
 
 
return permutations(lst);
 
})(["Aardvarks", "eat", "ants"]);</lang>
 
 
{{Out}}
<lang JavaScript>[["Aardvarks", "eat", "ants"], ["Aardvarks", "ants", "eat"],
["eat", "Aardvarks", "ants"], ["eat", "ants", "Aardvarks"],
["ants"eat, "Aardvarks", "eat"], ["ants", "eat", "Aardvarks"]]</lang>
eat,ants,Aardvarks
ants,Aardvarks,eat
ants,eat,Aardvarks</lang>
 
=={{header|jq}}==
Cookies help us deliver our services. By using our services, you agree to our use of cookies.