My badly coded function:
function generateDotSeparatedWords(word) {
let results = new Set();
// base case
if (word.split(".").length === Math.ceil(word.length / 2)) {
return results;
}
// check each letter (or dot) of the word, except the first letter
for (let i = 1; i < word.length; i++) {
// if char at pos i or any of its neighbors is a dot, we skip
if (word[i - 1] === "." || word[i] === "." || word[i + 1] === ".") {
continue;
}
// we add a dot: ab -> a.b (at letter 'b')
let dotSeparatedWord = word.slice(0, i) + "." + word.slice(i);
results.add(dotSeparatedWord);
// results = new Set([...results, ...generateDotSeparatedWords(dotSeparatedWord)]);
for (let w of generateDotSeparatedWords(dotSeparatedWord).values()) {
results.add(w);
}
}
return results;
}
Example:
In: "word"
Out: ["w.ord","w.o.rd","w.o.r.d","wo.rd","wor.d","w.or.d"]
Any suggestions to optimize this? Or even completely rewrite it?