main
 1export function mulberry32(a: number) {
 2  return () => {
 3    a += 0x6d2b79f5;
 4    let t = a;
 5    t = Math.imul(t ^ (t >>> 15), t | 1);
 6    t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
 7    return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
 8  };
 9}
10
11export function shuffle<T>(arr: readonly T[], generator = Math.random): T[] {
12  const a = arr.slice();
13  for (let i = a.length - 1; i > 0; i--) {
14    const j = Math.floor(generator() * (i + 1));
15    [a[i], a[j]] = [a[j], a[i]];
16  }
17  return a;
18}