cerceis-lib
Version:
Contains list of quality of life functions that is written in TypeScript and es6
1 lines • 7.91 kB
Source Map (JSON)
{"version":3,"sources":["../../src/number/index.ts"],"sourcesContent":["export const FromNum = {\n /**\n * A generic roll. Anything larger than 100 will be true,\n * lesser than 0 will be false.\n * @param percentage 0~100\n * @returns Fail(false)/Success(true)\n */\n roll(percentage: number): boolean {\n const fixed = percentage / 100;\n if (fixed >= Math.random()) return true;\n return false;\n },\n /**\n * Dice roll for your typical TRPG game.\n * Ex) FromNum.diceRoll(3).D(20) = Roll 3 D20 Dice.\n * Ex) FromNum.diceRoll(1).D(6) = Roll 1 D6 Dice.\n * @param num Number of dice to roll\n */\n diceRoll(num: number) {\n const _roll = (sides: number): number => Math.floor(Math.random() * sides) + 1;\n return {\n /**\n * @param diceType Type of dice (e.g. 6, 10, 20).\n * @returns number[]\n */\n D: (diceType: number): number[] => {\n const rs: number[] = [];\n for (let i = 0; i < num; i++) rs.push(_roll(diceType));\n return rs;\n },\n };\n },\n /**\n * Scale number down to 0 ~ 1.\n * @param x Input number\n * @param min Min number\n * @param max Max number\n */\n minMaxScale(x: number, min: number, max: number): number {\n return (x - min) / (max - min);\n },\n /**\n * Return scaled down number back to normal.\n * @param x Input number\n * @param min Min number\n * @param max Max number\n */\n unMinMaxScale(x: number, min: number, max: number): number {\n return (x * (max - min)) + min;\n },\n /**\n * Return the sum of the values.\n * @param nums Array of numbers\n */\n sum(nums: number[]): number {\n return nums.reduce((a, b) => a + b);\n },\n /**\n * SoftMax / normalized exponential function.\n * Returns a probability distribution of K possible outcomes.\n * @param input Array of numbers\n */\n softMax(input: number[]): number[] {\n if (input.length === 0) return [];\n const total = input.reduce((a, b) => a + Math.exp(b), 0);\n return input.map((n) => Math.exp(n) / total);\n },\n /**\n * Return the arithmetic mean of a list of numbers.\n * @param input Array of numbers\n */\n mean(input: number[]): number {\n if (input.length === 0) return 0;\n return input.reduce((a, b) => a + b, 0) / input.length;\n },\n /**\n * Convert numeric values into Roman Numeral string.\n * @param number Input number.\n */\n toRomanNumeral(number: number): string {\n const strMap: Record<string, number> = {\n M: 1000, CM: 900, D: 500, CD: 400,\n C: 100, XC: 90, L: 50, XL: 40,\n X: 10, IX: 9, V: 5, IV: 4, I: 1,\n };\n let input = number;\n let rs = \"\";\n for (const n in strMap) {\n const tmp = Math.floor(input / strMap[n]);\n for (let i = 0; i < tmp; i++) rs += n;\n input -= tmp * strMap[n];\n }\n return rs;\n },\n /**\n * Sigmoid function — bounded, differentiable, defined for all real inputs.\n * @param x number or number[]\n */\n sigmoid(x: number | number[]): number | number[] {\n const _f = (_x: number) => 1 / (1 + Math.exp(-_x));\n if (Array.isArray(x)) return x.map((n) => _f(n));\n return _f(x);\n },\n /**\n * ReLU (Rectified Linear Unit) — f(x) = max(0, x).\n * Outputs input directly if positive, otherwise zero.\n * @param xs number[]\n */\n relu(xs: number[]): number[] {\n return xs.map((x) => Math.max(0, x));\n },\n /**\n * Softplus — smooth version of ReLU. f(x) = log(1 + exp(x))\n * @param xs number[]\n */\n softPlus(xs: number[]): number[] {\n return xs.map((x) => Math.log(1 + Math.exp(x)));\n },\n /**\n * Round number to nearest specified multiple.\n * @param n Number to round\n * @param r Multiple to round to\n */\n toNearest(n: number, r: number): number {\n return Math.round(n / r) * r;\n },\n /**\n * Convert number into a short readable string.\n * Does not round when truncating decimals.\n * @param n Input number\n * @param decimal Default = 2, number of decimal places to retain.\n * @param maxLen Default = 3, maximum digit length (overwrites decimal).\n */\n toShortReadable(n: number, decimal: number = 2, maxLen: number = 3): string {\n const symbols: Record<string, number> = { \"\": 0, k: 1_000, m: 1_000_000 };\n let symbol = \"\";\n for (const s in symbols) {\n if (symbols[s] > n) break;\n symbol = s;\n }\n if (symbol === \"\") return `${n}`;\n const divided = (n / symbols[symbol]).toFixed(decimal).split(\"\");\n while (divided.length > maxLen + 1) divided.pop(); // +1 for \".\"\n while (divided.at(-1) === \"0\") divided.pop(); // trim trailing zeros\n if (divided.at(-1) === \".\") divided.pop(); // trim trailing dot\n return `${divided.join(\"\")}${symbol}`;\n },\n};\n"],"mappings":"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","names":[]}