Skip to content

Instantly share code, notes, and snippets.

@reggie3
Created July 4, 2016 20:27
Show Gist options
  • Save reggie3/70c5d83a752b0ac05b45381b59807aa5 to your computer and use it in GitHub Desktop.
Save reggie3/70c5d83a752b0ac05b45381b59807aa5 to your computer and use it in GitHub Desktop.
var perms = [];
function permAlone(str) {
var strArr = str.split("");
//console.log(strArr);
// empty the answer array each time this function is called
perms = [];
permutator(strArr.length, strArr);
console.log(str + " - num perms: " + perms.length);
// console.log(perms.join(", "));
perms = removeDuplicates();
console.log(perms.length);
return perms.length;
}
function removeDuplicates() {
var removeCounter = 0;
var regEx = /(.)\1{1}/;
var finalPerms = perms.filter(function (element, index, array) {
if (element.search(regEx) !== -1) {
console.log("removing: " + element);
removeCounter++;
return false;
}
return true;
});
console.log("Removed: " + removeCounter);
return finalPerms;
}
/**
* permutator
*
* @param {any} arr - an array of characters to be permutated
* @return perms - an array of permutated strings
*/
function permutator(n, array) {
if (n === 1) {
perms.push(array.join(""));
return array;
}
else {
for (var i = 0; i < n - 1; i++) {
permutator(n - 1, array);
var temp;
if (i % 2 === 0) {
temp = array[i];
array[i] = array[n - 1];
array[n - 1] = temp;
}
else {
temp = array[0];
array[0] = array[n - 1];
array[n - 1] = temp;
}
}
// console.log(array.toString());
permutator(n - 1, array);
}
//return perms;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment