Created
January 23, 2015 01:30
-
-
Save mattmazzola/92edbd412c66187eeb3f to your computer and use it in GitHub Desktop.
// source http://jsbin.com/juzohunafe
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8"> | |
<title>JS Bin</title> | |
</head> | |
<body> | |
<script id="jsbin-javascript"> | |
function insertNumberAtEachIndex(a, xs) { | |
console.log("insertNumberAtEachIndex(" + a + ", " + JSON.stringify(xs) + ") =>"); | |
var insertions = xs.map(function (x, i, xs) { | |
var insertion = [].concat(xs); | |
insertion.splice(i,0,a); | |
return insertion; | |
}); | |
var lastInsertion = [].concat(xs); | |
lastInsertion.push(a); | |
insertions.push(lastInsertion); | |
console.info(insertions); | |
return insertions; | |
} | |
insertNumberAtEachIndex(1, [2,3]); | |
insertNumberAtEachIndex(1, [2,3,4]); | |
function getPermutations(xs) { | |
console.log("getPermutations(" + JSON.stringify(xs) + ") =>"); | |
var head | |
, tail | |
, tailPermutations | |
, permutations | |
, result | |
; | |
if(xs.length === 0) { | |
result = []; | |
} | |
else if(xs.length === 1) { | |
result = [xs]; | |
} | |
else if(xs.length === 2) { | |
result = [[xs[0],xs[1]],[xs[1],xs[0]]]; | |
} | |
else if(xs.length > 2) { | |
head = xs[0]; | |
tail = xs.slice(1); | |
tailPermutations = getPermutations(tail); | |
permutations = tailPermutations.reduce(function (a, ps) { | |
var permutations2 = insertNumberAtEachIndex(head, ps); | |
return a.concat(permutations2); | |
}, []); | |
result = permutations; | |
} | |
console.log(result); | |
return result; | |
} | |
getPermutations([1]); | |
getPermutations([1,2]); | |
getPermutations([1,2,3]); | |
getPermutations([1,2,3,4]); | |
</script> | |
<script id="jsbin-source-javascript" type="text/javascript">function insertNumberAtEachIndex(a, xs) { | |
console.log("insertNumberAtEachIndex(" + a + ", " + JSON.stringify(xs) + ") =>"); | |
var insertions = xs.map(function (x, i, xs) { | |
var insertion = [].concat(xs); | |
insertion.splice(i,0,a); | |
return insertion; | |
}); | |
var lastInsertion = [].concat(xs); | |
lastInsertion.push(a); | |
insertions.push(lastInsertion); | |
console.info(insertions); | |
return insertions; | |
} | |
insertNumberAtEachIndex(1, [2,3]); | |
insertNumberAtEachIndex(1, [2,3,4]); | |
function getPermutations(xs) { | |
console.log("getPermutations(" + JSON.stringify(xs) + ") =>"); | |
var head | |
, tail | |
, tailPermutations | |
, permutations | |
, result | |
; | |
if(xs.length === 0) { | |
result = []; | |
} | |
else if(xs.length === 1) { | |
result = [xs]; | |
} | |
else if(xs.length === 2) { | |
result = [[xs[0],xs[1]],[xs[1],xs[0]]]; | |
} | |
else if(xs.length > 2) { | |
head = xs[0]; | |
tail = xs.slice(1); | |
tailPermutations = getPermutations(tail); | |
permutations = tailPermutations.reduce(function (a, ps) { | |
var permutations2 = insertNumberAtEachIndex(head, ps); | |
return a.concat(permutations2); | |
}, []); | |
result = permutations; | |
} | |
console.log(result); | |
return result; | |
} | |
getPermutations([1]); | |
getPermutations([1,2]); | |
getPermutations([1,2,3]); | |
getPermutations([1,2,3,4]); | |
</script></body> | |
</html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function insertNumberAtEachIndex(a, xs) { | |
console.log("insertNumberAtEachIndex(" + a + ", " + JSON.stringify(xs) + ") =>"); | |
var insertions = xs.map(function (x, i, xs) { | |
var insertion = [].concat(xs); | |
insertion.splice(i,0,a); | |
return insertion; | |
}); | |
var lastInsertion = [].concat(xs); | |
lastInsertion.push(a); | |
insertions.push(lastInsertion); | |
console.info(insertions); | |
return insertions; | |
} | |
insertNumberAtEachIndex(1, [2,3]); | |
insertNumberAtEachIndex(1, [2,3,4]); | |
function getPermutations(xs) { | |
console.log("getPermutations(" + JSON.stringify(xs) + ") =>"); | |
var head | |
, tail | |
, tailPermutations | |
, permutations | |
, result | |
; | |
if(xs.length === 0) { | |
result = []; | |
} | |
else if(xs.length === 1) { | |
result = [xs]; | |
} | |
else if(xs.length === 2) { | |
result = [[xs[0],xs[1]],[xs[1],xs[0]]]; | |
} | |
else if(xs.length > 2) { | |
head = xs[0]; | |
tail = xs.slice(1); | |
tailPermutations = getPermutations(tail); | |
permutations = tailPermutations.reduce(function (a, ps) { | |
var permutations2 = insertNumberAtEachIndex(head, ps); | |
return a.concat(permutations2); | |
}, []); | |
result = permutations; | |
} | |
console.log(result); | |
return result; | |
} | |
getPermutations([1]); | |
getPermutations([1,2]); | |
getPermutations([1,2,3]); | |
getPermutations([1,2,3,4]); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment