random toki pona name

node v14.20.1
version: 1.0.0
endpointsharetweet
const vowels = "aeiou".split(""); const consonants = "jptkmnslw".split(""); const illegalSyllables = ["wu", "wo", "ji", "ti"].flatMap(s => [s, s + "n"]); const vowelStartSyllables = vowels.flatMap(v => [v, v + "n"]); const middleSyllables = vowelStartSyllables.flatMap(s => consonants.map(c => c + s)).filter(s => !illegalSyllables.includes(s)); const afterNasalSyllables = middleSyllables.filter(s => !"nm".includes(s[0])); const allSyllables = vowelStartSyllables.concat(middleSyllables); let lastWasNasal = false; function randomSyllable(choice) { const result = choice[Math.floor(Math.random() * choice.length)]; lastWasNasal = result.endsWith("n"); return result; } const totalSyllables = Math.floor(Math.random() * 5) + 3; // <--- length, change this if you want const firstSyllable = randomSyllable(allSyllables) const remainingSyllables = Array(totalSyllables - 1).fill(0).map(_ => randomSyllable(lastWasNasal ? afterNasalSyllables : middleSyllables)); firstSyllable + remainingSyllables.join("")
Loading…

no comments

    sign in to comment