Permutations: Difference between revisions

Line 2,362:
'use strict';
 
let permutations = (xs) => xs.length ? (
flatMap((x) => ysflatMap((xs) => [[x].concat(ysxs)],
permutations(del(x, xs))), xs)
), xs)) : [[]],
 
flatMap = (f, xs) => [].concat.apply([], xs.map(f)),
// [a] -> [[a]]
let permutations = (xs) =>
xs.length ? (concatMap(
x => concatMap(
ys => [[x].concat(ys)],
permutations(
delete1(x, xs)
)
), xs)) : [[]],
 
del = (x, xs) => xs.length ? (concatMapx === xs[0] ? (
 
// GENERIC LIBRARY FUNCTIONS xs.slice(1)
) : [xs[0]].concat(
 
// concatMap :: del(ax, -> [b]xs.slice(1)) -> [a] -> [b]
concatMap = (f, xs) =>: [].concat.apply([], xs.map(f)),;
 
// delete first instance of a in [a]
// delete1 :: a -> [a] -> [a]
delete1 = (x, xs) =>
deleteBy((a, b) => a === b, x, xs),
 
 
// deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]
deleteBy = (fnEq, x, xs) =>
xs.length ? fnEq(x, xs[0]) ? xs.slice(1) : [xs[0]]
.concat(deleteBy(fnEq, x, xs.slice(1))) : [];
 
 
return permutations(lst);
 
})(['"Aardvarks'", '"eat'", '"ants'"]);</lang>
 
 
9,659

edits