2 min read ~ Hello readers! It’s really important for me to continue my practice and learning. Lately, I have been completing a coding challenge a week with codewars. This helps me keep my skills sharp and see how other devs all over the planet would solve these problems. Being able to see other solutions expands my mind for solving future problems in a clever and efficient way. Today, the problem set focuses on JavaScript.
Permutations
In this kata you have to create all permutations of an input string and remove duplicates, if present. This means, you have to shuffle all letters from the input in all possible orders.
Examples:
permutations('a'); // ['a']
permutations('ab'); // ['ab', 'ba']
permutations('aabb'); // ['aabb', 'abab', 'abba', 'baab', 'baba', 'bbaa']
function permutations(string) {
// first a type check to make sure we are dealing with a proper var
if (!string || typeof string !== "string"){
return "Please enter a string"
}
// if the string length is less than 2, then we already know all permutations Ex. 'a'
if (!!string.length && string.length < 2 ){
return [string]
}
let permutationsArr = [];
for (let i = 0; i < string.length; i++){
let char = string[i]
if (string.indexOf(char) != i) {
continue;
}
// get the remainder of the two sides that the character is inbetween
let remainder = string.slice(0, i) + string.slice(i + 1, string.length);
// set another for loop iterating over the recursive return values for the permutations array, this time passing in the remainder of the string
for (let permutation of permutations(remainder)){
permutationsArray.push(char + permutation)
}
}
return permutationsArr;
}
Disclaimer: *Now, as much as I am tempted to use ES8 & ES9 functions to reduce the number of lines in JavaScript, I am always a fan of readable code that others can understand. Therefore, with the JavaScript examples, I will try to write it without fancy functions as much as possible so it can actually be read and absorbed by my readers. All of my solutions are commented to explain my thinking. Of course, they could always be better. Please feel free to share how you would solve it!*
All solutions are also now on my GitHub profile if you want to check out all of the coding challenges I’ve completed so far!
All credit to problem sets goes to codewars