import { MersenneTwister19937, integer } from "random-js"; /** * Hashes a string to a 32-bit integer. * @param {string} seed - The input string to hash. */ function hashString(seed: string) { let hash = 0; for (let i = 0; i < seed.length; i++) { const char = seed.charCodeAt(i); hash = (hash << 5) - hash + char; hash |= 0; // Convert to 32bit integer } return hash; } /** * returns a function that generates same sequence of random numbers for a given seed between 0 and 1. */ export function seededRandom(seed: string) { const seedHash = hashString(seed); const engine = MersenneTwister19937.seed(seedHash); return () => integer(0, Number.MAX_SAFE_INTEGER)(engine) / Number.MAX_SAFE_INTEGER; } this is really cool algo, i need to deep dive into this and explore this rabbit hole https://arxiv.org/pdf/2309.16682