Skip to content

Instantly share code, notes, and snippets.

@ekaitz-zarraga
Last active March 6, 2023 17:06
Show Gist options
  • Save ekaitz-zarraga/45d9655e203595a8d50e3b756affea7c to your computer and use it in GitHub Desktop.
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.
// 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