snippetjavascriptModerate
More efficient loops to generate unpronounceable words
Viewed 0 times
unpronounceablewordsloopsmoreefficientgenerate
Problem
I wanted to write a function to generate only unpronounceable words. I realised afterwards that the same thing could probably be achieved by just taking out the vowels. Regardless, I feel that there is probably a better way to iterate through the syllable checking.
function unpronouncable(length) {
var twoLetters = ['aa','ae','ag','ai','ar','ao','as','aw','ay','ba','da','de','ed','ef','eh','ei','em','en','er','et','ex','fa','fe','fu','gi','go','hm','ho','so','id','ie','jo','ka','ki','ku','lo','mi','mm','mu','na','ne','nu','od','oe','oi','om','op','os','os','oy','pe','pi','qi','re','se','ta','ti','ut','wo','xi','xi','ya','yu','za','zo','co','my','qu','ge','ro','ra','xa','wa'];
var threeLetters = ['thm','css','dvd','buh','bad','rue','cun','pub','puk','pul'];
var letters = "abcdefghijklmnopqrstuvwxyz";
var string = "";
for (var i = 0; i < length; i += 1) {
string += letters[Math.floor(Math.random() * letters.length)];
}
function generate() {
for (var j = 0; j < string.length; j += 1) {
var test = string.slice(j,j+2);
for (var k = 0; k < twoLetters.length; k += 1) {
if (twoLetters[k] === test) {
console.log('Has two letter syllable');
return unpronouncable(length);
}
}
}
for (var j = 0; j < string.length; j += 1) {
var test = string.slice(j,j+3);
for (var k = 0; k < twoLetters.length; k += 1) {
if (threeLetters[k] === test) {
console.log('Has three letter syllable');
return unpronouncable(length);
}
}
}
return string;
}
return generate();
}
console.log(unpronouncable(8));Solution
Copy Pasting
If you are copy-pasting code, it is a sign that you should write it differently (your two
Bug
I'm pretty sure that here:
you meant to change it to
And just out of curiosity: how would you pronounce
If you are copy-pasting code, it is a sign that you should write it differently (your two
for loops are quite obviously copy pasted).Bug
I'm pretty sure that here:
for (var k = 0; k < twoLetters.length; k += 1) {
if (threeLetters[k] === test) {you meant to change it to
k -1; to check if a string contains another string.And just out of curiosity: how would you pronounce
css or dvd?Code Snippets
for (var k = 0; k < twoLetters.length; k += 1) {
if (threeLetters[k] === test) {function generateHelper(string, array, charCount) {
for (var j = 0; j < string.length; j += 1) {
var test = string.slice(j,j+charCount);
for (var k = 0; k < array.length; k += 1) {
if (array[k] === test) {
console.log('Has ' + charCount + ' letter syllable');
return unpronouncable(length);
}
}
}
}function generate() {
}
return generate();function unpronouncable(length) {
// filter these out
var twoLetters = ['aa', 'ae', 'ag', 'ai', 'ar', 'ao', 'as', 'aw', 'ay', 'ba', 'da', 'de', 'ed', 'ef', 'eh', 'ei', 'em', 'en', 'er', 'et', 'ex', 'fa', 'fe', 'fu', 'gi', 'go', 'hm', 'ho', 'so', 'id', 'ie', 'jo', 'ka', 'ki', 'ku', 'lo', 'mi', 'mm', 'mu', 'na', 'ne', 'nu', 'od', 'oe', 'oi', 'om', 'op', 'os', 'os', 'oy', 'pe', 'pi', 'qi', 're', 'se', 'ta', 'ti', 'ut', 'wo', 'xi', 'xi', 'ya', 'yu', 'za', 'zo', 'co', 'my', 'qu', 'ge', 'ro', 'ra', 'xa', 'wa'];
var threeLetters = ['thm', 'css', 'dvd', 'buh', 'bad', 'rue', 'cun', 'pub', 'puk', 'pul'];
// generate a new string until one is found that does not contain the filters
var generatedString = "";
var done = false;
while (!done) {
generatedString = generate(length);
done = !contains(generatedString, twoLetters, 2) && !contains(generatedString, threeLetters, 3);
}
return generatedString;
// generates a random string with given length
function generate(length) {
var letters = "abcdefghijklmnopqrstuvwxyz";
var string = "";
for (var i = 0; i < length; i++) {
string += letters[Math.floor(Math.random() * letters.length)];
}
return string;
}
// returns true if string contains any characters in the stringArray.
function contains(string, stringArray, charCount) {
for (var k = 0; k < stringArray.length; k++) {
if (string.indexOf(stringArray[k]) > -1) {
console.log('Has ' + charCount + ' letter syllable');
return true;
}
}
return false;
}
}
console.log(unpronouncable(8));Context
StackExchange Code Review Q#61483, answer score: 10
Revisions (0)
No revisions yet.