Last active
March 6, 2023 17:06
-
-
Save ekaitz-zarraga/45d9655e203595a8d50e3b756affea7c to your computer and use it in GitHub Desktop.
Markov text generator example ftw. Run with `node markov_greeter.js` several times to watch it do its magic.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// TRANSITION DAG | |
////////////////////////////////////////////////////////////////////////////// | |
let areYou = { | |
value: " are you!", | |
transitions: [] | |
}; | |
let questionMark = { | |
value: "?", | |
transitions: [] | |
}; | |
let today = { | |
value: " today", | |
transitions: [ | |
{ | |
probability: 1, | |
to: questionMark | |
} | |
] | |
} | |
let doing = { | |
value: " doing", | |
transitions: [ | |
{ | |
probability: 0.5, | |
to: questionMark | |
}, | |
{ | |
probability: 0.5, | |
to: today | |
} | |
] | |
}; | |
let there = { | |
value: ", there", | |
transitions: [ | |
{ | |
probability: 1, | |
to: areYou | |
} | |
] | |
}; | |
let everyone = { | |
value: " everyone!", | |
transitions: [] | |
}; | |
let areYou_Doing = { | |
value: " are you", | |
transitions: [ | |
{ | |
probability: 0.5, | |
to: doing | |
}, | |
{ | |
probability: 0.5, | |
to: questionMark | |
} | |
] | |
}; | |
let isEveryone = { | |
value: " is everyone", | |
transitions: [ | |
{ | |
probability: 0.5, | |
to: doing | |
}, | |
{ | |
probability: 0.5, | |
to: questionMark | |
} | |
] | |
}; | |
let commaHow = { | |
value: ", how", | |
transitions: [ | |
{ | |
probability: 0.5, | |
to: areYou_Doing | |
}, | |
{ | |
probability: 0.5, | |
to: isEveryone | |
} | |
] | |
}; | |
let entry = { | |
value: "Hello", | |
transitions: [ | |
{ | |
probability: 0.40, | |
to: everyone | |
}, | |
{ | |
probability: 0.40, | |
to: commaHow | |
}, | |
{ | |
probability: 0.20, | |
to: there | |
} | |
] | |
}; | |
// CODE | |
////////////////////////////////////////////////////////////////////////////// | |
function transition(transitions){ | |
if(transitions.length == 0){ | |
return ""; | |
} | |
let random = Math.random(); | |
for(let transition of transitions){ | |
if(transition.probability > random){ | |
return generate(transition.to); | |
} else { | |
random -= transition.probability; | |
} | |
} | |
} | |
function generate( entry ){ | |
return entry.value + transition(entry.transitions); | |
} | |
console.log(generate(entry)); | |
console.log(generate(entry)); | |
console.log(generate(entry)); | |
console.log(generate(entry)); | |
console.log(generate(entry)); | |
console.log(generate(entry)); | |
console.log(generate(entry)); | |
console.log(generate(entry)); | |
console.log(generate(entry)); | |
console.log(generate(entry)); | |
console.log(generate(entry)); | |
console.log(generate(entry)); | |
console.log(generate(entry)); | |
console.log(generate(entry)); | |
console.log(generate(entry)); | |
console.log(generate(entry)); | |
console.log(generate(entry)); | |
console.log(generate(entry)); | |
console.log(generate(entry)); | |
console.log(generate(entry)); | |
console.log(generate(entry)); | |
console.log(generate(entry)); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment