about summary refs log tree commit diff stats
path: root/js
diff options
context:
space:
mode:
authorelioat <hi@eli.li>2023-12-30 15:55:22 -0500
committerelioat <hi@eli.li>2023-12-30 15:55:22 -0500
commit915c9dd4d52105180a6a18761917db65c975a309 (patch)
tree4fabe5aa09ff18af41b9782b51682fa583f3ef65 /js
parentdc9f7198c2a946f8749de3d3934e51a882e57351 (diff)
downloadtour-915c9dd4d52105180a6a18761917db65c975a309.tar.gz
*
Diffstat (limited to 'js')
-rw-r--r--js/bird-words/beak.js47
1 files changed, 24 insertions, 23 deletions
diff --git a/js/bird-words/beak.js b/js/bird-words/beak.js
index 12c6a79..a87bc0d 100644
--- a/js/bird-words/beak.js
+++ b/js/bird-words/beak.js
@@ -43,38 +43,39 @@ for (let i = 0; i < storyLength; i++) {
     story += " " + randomPair.split(' ')[1];
 }
 
-// console.log(wrap(prettyItUp(story), 40));
-
-
-
 let nouns = fs.readFileSync('nouns.txt', 'utf8').split('\n');
 let adjectives = fs.readFileSync('adjectives.txt', 'utf8').split('\n');
 let places = fs.readFileSync('places.txt', 'utf8').split('\n');
 
-function fillGaps(script) {
-    let parts = script.split('@');
-    for (let i = 0; i < parts.length; i++) {
-        if (parts[i].startsWith('NOUN')) {
-            parts[i] = nouns[Math.floor(Math.random() * nouns.length)];
-        } else if (parts[i].startsWith('ADJECTIVE')) {
-            parts[i] = adjectives[Math.floor(Math.random() * adjectives.length)];
-        } else if (parts[i].startsWith('PLACE')) {
-            parts[i] = places[Math.floor(Math.random() * places.length)];
-        } else if (parts[i].startsWith('MARKOV')) {
-            let length = parseInt(parts[i].split(' ')[1]);
+const fillGaps = (script, nouns, adjectives, places, markovChain, pairs) => {
+    return script.split('@').map(part => {
+        if (part.startsWith('NOUN')) {
+            return nouns[Math.floor(Math.random() * nouns.length)] + ' ';
+        } else if (part.startsWith('ADJECTIVE')) {
+            return adjectives[Math.floor(Math.random() * adjectives.length)]  + ' ';
+        } else if (part.startsWith('PLACE')) {
+            return places[Math.floor(Math.random() * places.length)];
+        } else if (part.startsWith('MARKOV')) {
+            const length = parseInt(part.split(' ')[1]);
             let chain = '';
             let pair = pairs[Math.floor(Math.random() * pairs.length)];
             for (let j = 0; j < length; j++) {
-                let nextWords = markovChain.get(pair);
-                let nextWord = nextWords[Math.floor(Math.random() * nextWords.length)];
+                const nextWords = markovChain.get(pair);
+                const nextWord = nextWords[Math.floor(Math.random() * nextWords.length)];
                 chain += ' ' + nextWord;
                 pair = pair.split(' ')[1] + ' ' + nextWord;
             }
-            parts[i] = chain;
+            return chain;
+        } else {
+            return part;
         }
-    }
-    return parts.join('');
-}
+    }).join('');
+};
+
+const script = 'The @NOUN@ of @ADJECTIVE@ @NOUN@ was found in @PLACE@ where there was a partial inscription that read, @MARKOV 22@';
+
+// example of how to use fillGaps to generate a story
+console.log(wrap(prettyItUp(fillGaps(script, nouns, adjectives, places, markovChain, pairs)), 40));
 
-let script = 'The @NOUN@ of @ADJECTIVE@ @NOUN@ was found in @PLACE@, where there was a partial inscription that read, @MARKOV 22@';
-console.log(fillGaps(script));
\ No newline at end of file
+// example of how to just use markov chain to generate a story
+console.log(wrap(prettyItUp(story), 40));
\ No newline at end of file