Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 1x 1x 48x 48x 48x 48x 1x 1x 1x 48x 48x 48x | const MAX_LENGTH = 8;
/**
* A simple seeded random number generator
* Not cryptographically secure.
*
* @param a - The seed to use for the PRNG.
* @returns A PsuedoRandomNumberGenerator.
*/
/* eslint-disable */ // CTRL+V implementation from https://stackoverflow.com/a/47593316/1123955
const mulberry32 = (a: number): number => {
let t = (a += 0x6d2b79f5);
t = Math.imul(t ^ (t >>> 15), t | 1);
t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
return (t ^ (t >>> 14)) >>> 0;
};
/* eslint-enable */
/**
* Make a PsuedoRandomNumberGenerator.
*
* @param args - The arguments to make the PRNG.
* @param args.seed - The seed to use for the PRNG.
* @returns A PsuedoRandomNumberGenerator.
*/
export const makeRandom = ({ seed }: { seed?: number }) => {
let _seed = seed ?? 1;
return (length: number = MAX_LENGTH, radix: number = 16): string => {
Iif (length > MAX_LENGTH) {
throw new Error(`Length must be less than or equal to ${MAX_LENGTH}`);
}
// Get a random 32-bit unsigned integer and update the seed
_seed = mulberry32(_seed);
// Convert to hex and slice to desired length
// padStart ensures we have leading zeros if needed
return _seed.toString(radix).padStart(length, '0').slice(0, length);
};
};
|