String permutations
by LyndseyB
HTML
Take each letter in turn as a prefix
For each letter, append to the prefix and recurse the remaining letters
Babel + JSX
const permute = (source, prefix = '', words = []) => {
if(typeof source !== 'string') {
throw('Expected string source');
}
const word = prefix + source;
const letters = source.split('');
if(!words.includes(word)) {
words.push(word);
}
letters.forEach((letter, index) => {
const remainder = source.substring(0, index) + source.substring(index + 1);
permute(remainder, prefix + letter, words);
});
return words;
};
console.time('perms');
const permutations = permute('ABCD');
console.timeEnd('perms');
console.log(permutations);