2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
|
|
@ -5,18 +5,18 @@ var d = document.getElementById('result');
|
|||
|
||||
function perm(list, ret)
|
||||
{
|
||||
if (list.length == 0) {
|
||||
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);
|
||||
}
|
||||
if (list.length == 0) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
perm([1, 2, 'A', 4], []);
|
||||
|
|
|
|||
|
|
@ -1,30 +1,12 @@
|
|||
(function () {
|
||||
function perm(a) {
|
||||
if (a.length < 2) return [a];
|
||||
var c, d, b = [];
|
||||
for (c = 0; c < a.length; c++) {
|
||||
var e = a.splice(c, 1),
|
||||
f = perm(a);
|
||||
for (d = 0; d < f.length; d++) b.push([e].concat(f[d]));
|
||||
a.splice(c, 0, e[0])
|
||||
} return b
|
||||
}
|
||||
|
||||
// [a] -> [[a]]
|
||||
function permutations(xs) {
|
||||
return xs.length ? (
|
||||
chain( xs, function (x) {
|
||||
return chain( permutations(deleted(x, xs)), function (ys) {
|
||||
|
||||
return ( [[x].concat(ys)] );
|
||||
|
||||
})})) : [[]]
|
||||
}
|
||||
|
||||
// monadic bind/chain for lists
|
||||
function chain(xs, f) {
|
||||
return [].concat.apply([], xs.map(f));
|
||||
}
|
||||
|
||||
// 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))
|
||||
)
|
||||
) : [];
|
||||
}
|
||||
|
||||
return permutations(['Aardvarks', 'eat', 'ants'])
|
||||
|
||||
})();
|
||||
console.log(perm(['Aardvarks', 'eat', 'ants']).join("\n"));
|
||||
|
|
|
|||
|
|
@ -1 +1,6 @@
|
|||
[["Aardvarks", "eat", "ants"], ["Aardvarks", "ants", "eat"], ["eat", "Aardvarks", "ants"], ["eat", "ants", "Aardvarks"], ["ants", "Aardvarks", "eat"], ["ants", "eat", "Aardvarks"]]
|
||||
Aardvarks,eat,ants
|
||||
Aardvarks,ants,eat
|
||||
eat,Aardvarks,ants
|
||||
eat,ants,Aardvarks
|
||||
ants,Aardvarks,eat
|
||||
ants,eat,Aardvarks
|
||||
|
|
|
|||
39
Task/Permutations/JavaScript/permutations-4.js
Normal file
39
Task/Permutations/JavaScript/permutations-4.js
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
(function () {
|
||||
|
||||
// permutations :: [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'])
|
||||
|
||||
})();
|
||||
3
Task/Permutations/JavaScript/permutations-5.js
Normal file
3
Task/Permutations/JavaScript/permutations-5.js
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
[["Aardvarks", "eat", "ants"], ["Aardvarks", "ants", "eat"],
|
||||
["eat", "Aardvarks", "ants"], ["eat", "ants", "Aardvarks"],
|
||||
["ants", "Aardvarks", "eat"], ["ants", "eat", "Aardvarks"]]
|
||||
19
Task/Permutations/JavaScript/permutations-6.js
Normal file
19
Task/Permutations/JavaScript/permutations-6.js
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
(function (lst) {
|
||||
'use strict';
|
||||
|
||||
const 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"]);
|
||||
3
Task/Permutations/JavaScript/permutations-7.js
Normal file
3
Task/Permutations/JavaScript/permutations-7.js
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
[["Aardvarks", "eat", "ants"], ["Aardvarks", "ants", "eat"],
|
||||
["eat", "Aardvarks", "ants"], ["eat", "ants", "Aardvarks"],
|
||||
["ants", "Aardvarks", "eat"], ["ants", "eat", "Aardvarks"]]
|
||||
Loading…
Add table
Add a link
Reference in a new issue