core/factories/seed.factory.ts

core/factories/seed.factory.ts is a file in GovLab Patterns. 15 lines of code and 5 definitions.

import type { Rng } from "#types/seed.types";

const MODULUS = 2_147_483_647;
const MULTIPLIER = 16_807;

export const createRng = function createRng(seed: number): Rng {
    let state = Math.abs(Math.floor(seed)) % MODULUS;
    if (state === 0) {
        state = 1;
    }
    return {
        next(): number {
            state = (state * MULTIPLIER) % MODULUS;
            return state / MODULUS;
        },
    };
};