Files
EMVs-Creative-coding/Week-4/markov-chain.js
2026-06-08 10:53:23 +02:00

53 lines
1.1 KiB
JavaScript

let myData;
function preload() {
myData = loadStrings("shakespeare.txt");
}
function setup() {
createCanvas(400, 300);
background(220);
const myDataSplit = myData.flatMap((str) => str.split(/\s+/)).filter(Boolean);
let map = new Map();
for (let i = 0; i < myDataSplit.length - 1; i++) {
let currentWord = myDataSplit[i];
let nextWord = myDataSplit[i + 1];
if (!map.has(currentWord)) {
map.set(currentWord, []);
}
map.get(currentWord).push(nextWord);
}
let phraseArray = [];
let currentWord = myDataSplit[Math.floor(Math.random() * myDataSplit.length)];
phraseArray.push(currentWord);
for (let i = 0; i < 150; i++) {
let possibilities = map.get(currentWord);
if (!possibilities || possibilities.length === 0) {
break;
}
let nextWord =
possibilities[Math.floor(Math.random() * possibilities.length)];
phraseArray.push(nextWord);
currentWord = nextWord;
}
let phrase = phraseArray.join(" ");
textAlign(LEFT, TOP);
textFont("Courier New");
textSize(12);
text(phrase, 20, 40, 360, 200);
text("- Someone unnamed", 20, 260);
}