type Markov = Record<string, Record<string, number>>;
const markovPairwiseOfStrings = (strings: string[]) => {
const markov: Markov = {};
strings.forEach((input) => {
for (let i = 0; i < input.length - 1; i++) {
const stem = input.slice(i, i + 2);
if (i === 0) {
markov["START"] ??= {};
markov["START"][stem] ??= 0;
markov["START"][stem]++;
}
const next = i === input.length - 2 ? "END" : input.slice(i + 1, i + 3);
markov[stem] ??= {};
markov[stem][next] ??= 0;
markov[stem][next]++;
}
});
return markov;
};