Exact source used by this build. SHA-256: 142d677d116755a8f7d6ac7ce1173aa18f841ea0f9c65a8a434c28f93f241aed.
1 /** A compact deterministic PRNG whose numeric state can be persisted directly in JSON. */
2 export interface SeededRng { state: number; next(): number; nextInt(maxExclusive: number): number }
3
4 export function createRng(seed: number): SeededRng {
5 let state = seed >>> 0;
6 const rng: SeededRng = {
7 get state() { return state; },
8 set state(value: number) { state = value >>> 0; },
9 next() {
10 state = (state + 0x6d2b79f5) >>> 0;
11 let value = state;
12 value = Math.imul(value ^ (value >>> 15), value | 1);
13 value ^= value + Math.imul(value ^ (value >>> 7), value | 61);
14 return ((value ^ (value >>> 14)) >>> 0) / 4294967296;
15 },
16 nextInt(maxExclusive) { return Math.floor(rng.next() * maxExclusive); },
17 };
18 return rng;
19 }
20