{"version":3,"file":"math.mjs","names":[],"sources":["../../../src/common/data/math.ts"],"sourcesContent":["export function getSecureRandom(): number {\n  return crypto.getRandomValues(new Uint32Array(1))[0] / 0xFFFFFFFF\n}\n\nexport function getSecureRandomIfPossible(): number {\n  return typeof crypto !== 'undefined' ? getSecureRandom() : Math.random()\n}\n\nexport function randomBoolean(bias = 0.25): boolean {\n  return getSecureRandomIfPossible() < bias\n}\n\n/** max is not included, min is included */\nexport function randomInt(max = 100, min = 0): number {\n  return min + Math.floor(getSecureRandomIfPossible() * (max - min))\n}\n\nexport function randomFloat(max = 100, min = 0): number {\n  return min + getSecureRandomIfPossible() * (max - min)\n}\n\nexport function between(min: number, value: number, max: number): number {\n  return Math.max(min, Math.min(max, value))\n}\n\n/** See also arraySum */\nexport function sum(array: number[]): number {\n  return array.reduce((acc, value) => acc + value, 0)\n}\n\n/** See also arrayAvg */\nexport function avg(array: number[]): number {\n  return sum(array) / array.length\n}\n\n// export const clamp = (n: number, min: number, max: number) => Math.min(max, Math.max(min, n))\n\n// https://www.noulakaz.net/2007/03/18/a-regular-expression-to-check-for-prime-numbers/\n/** Fancy prime number check ;) */\nexport function isPrimeRX(value: number): boolean {\n  // eslint-disable-next-line regexp/no-super-linear-backtracking\n  return !/^1?$|^(1{2,}?)\\1+$/.test('1'.repeat(value))\n}\n\nexport function isPrime(value: number): boolean {\n  for (let i = 2; i < value; i++) {\n    if (value % i === 0)\n      return false\n  }\n  return value > 1\n}\n\n// http://indiegamr.com/generate-repeatable-random-numbers-in-js/\n// https://softwareengineering.stackexchange.com/questions/260969/original-source-of-seed-9301-49297-233280-random-algorithm\n\nlet _seed = 6\n\n/** Deterministic random */\nexport function seededRandom(max = 0, min = 1, seed?: number) {\n  _seed = ((seed ?? _seed) * 9301 + 49297) % 233280\n  const rnd = _seed / 233280\n  return min + rnd * (max - min)\n}\n\nconst base32Chars = '0123456789abcdefghjkmnpqrtuvwxyz'\n\nexport function numberToBase32(num: number, padding = 0): string {\n  if (num === 0)\n    return '0'\n  let str = ''\n  while (num > 0) {\n    const rem = num % 32\n    str = base32Chars[rem] + str\n    num = Math.floor(num / 32)\n  }\n  while (str.length < padding)\n    str = '0' + str\n  return str\n}\n\nexport function base32ToNumber(str: string): number {\n  let num = 0\n  for (let i = 0; i < str.length; i++) {\n    const index = base32Chars.indexOf(str[i].toLowerCase())\n    if (index === -1)\n      throw new Error(`Invalid base32 character: ${str[i]}`)\n    num = num * 32 + index\n  }\n  return num\n}"],"mappings":";AAAA,SAAgB,kBAA0B;AACxC,QAAO,OAAO,gBAAgB,IAAI,YAAY,EAAE,CAAC,CAAC,KAAK;;AAGzD,SAAgB,4BAAoC;AAClD,QAAO,OAAO,WAAW,cAAc,iBAAiB,GAAG,KAAK,QAAQ;;AAG1E,SAAgB,cAAc,OAAO,KAAe;AAClD,QAAO,2BAA2B,GAAG;;;AAIvC,SAAgB,UAAU,MAAM,KAAK,MAAM,GAAW;AACpD,QAAO,MAAM,KAAK,MAAM,2BAA2B,IAAI,MAAM,KAAK;;AAGpE,SAAgB,YAAY,MAAM,KAAK,MAAM,GAAW;AACtD,QAAO,MAAM,2BAA2B,IAAI,MAAM;;AAGpD,SAAgB,QAAQ,KAAa,OAAe,KAAqB;AACvE,QAAO,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,MAAM,CAAC;;;AAI5C,SAAgB,IAAI,OAAyB;AAC3C,QAAO,MAAM,QAAQ,KAAK,UAAU,MAAM,OAAO,EAAE;;;AAIrD,SAAgB,IAAI,OAAyB;AAC3C,QAAO,IAAI,MAAM,GAAG,MAAM;;;AAO5B,SAAgB,UAAU,OAAwB;AAEhD,QAAO,CAAC,qBAAqB,KAAK,IAAI,OAAO,MAAM,CAAC;;AAGtD,SAAgB,QAAQ,OAAwB;AAC9C,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,IACzB,KAAI,QAAQ,MAAM,EAChB,QAAO;AAEX,QAAO,QAAQ;;AAMjB,IAAI,QAAQ;;AAGZ,SAAgB,aAAa,MAAM,GAAG,MAAM,GAAG,MAAe;AAC5D,WAAU,QAAQ,SAAS,OAAO,SAAS;AAE3C,QAAO,MADK,QAAQ,UACA,MAAM;;AAG5B,MAAM,cAAc;AAEpB,SAAgB,eAAe,KAAa,UAAU,GAAW;AAC/D,KAAI,QAAQ,EACV,QAAO;CACT,IAAI,MAAM;AACV,QAAO,MAAM,GAAG;AAEd,QAAM,YADM,MAAM,MACO;AACzB,QAAM,KAAK,MAAM,MAAM,GAAG;;AAE5B,QAAO,IAAI,SAAS,QAClB,OAAM,MAAM;AACd,QAAO;;AAGT,SAAgB,eAAe,KAAqB;CAClD,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;EACnC,MAAM,QAAQ,YAAY,QAAQ,IAAI,GAAG,aAAa,CAAC;AACvD,MAAI,UAAU,GACZ,OAAM,IAAI,MAAM,6BAA6B,IAAI,KAAK;AACxD,QAAM,MAAM,KAAK;;AAEnB,QAAO"}