extra-number
Version:
A number is a mathematical object used to count, measure, and label.
418 lines (413 loc) • 13.5 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var _build = {};
Object.defineProperty(_build, "__esModule", { value: true });
exports.mean = _build.mean = exports.arithmeticMean = _build.arithmeticMean = exports.variance = _build.variance = exports.range = _build.range = exports.modes = _build.modes = exports.median = _build.median = exports.product = _build.product = exports.sum = _build.sum = exports.radians = _build.radians = exports.degrees = _build.degrees = exports.multinomial = _build.multinomial = exports.binomial = _build.binomial = exports.factorial = _build.factorial = exports.lcm = _build.lcm = exports.hcf = _build.hcf = exports.gcd = _build.gcd = exports.isPrime = _build.isPrime = exports.primeExponentials = _build.primeExponentials = exports.primeFactors = _build.primeFactors = exports.greatestPrimeFactor = _build.greatestPrimeFactor = exports.maxPrimeFactor = _build.maxPrimeFactor = exports.leastPrimeFactor = _build.leastPrimeFactor = exports.minPrimeFactor = _build.minPrimeFactor = exports.aliquotSum = _build.aliquotSum = exports.aliquotParts = _build.aliquotParts = exports.properDivisors = _build.properDivisors = exports.log = _build.log = exports.root = _build.root = exports.nextPow = _build.nextPow = exports.prevPow = _build.prevPow = exports.isPow = _build.isPow = exports.lerp = _build.lerp = exports.map = _build.map = exports.remap = _build.remap = exports.norm = _build.norm = exports.normalize = _build.normalize = exports.clamp = _build.clamp = exports.constrain = _build.constrain = exports.modp = _build.modp = exports.mod = _build.mod = exports.rem = _build.rem = exports.roundDiv = _build.roundDiv = exports.ceilDiv = _build.ceilDiv = exports.floorDiv = _build.floorDiv = exports.round = _build.round = exports.ceil = _build.ceil = exports.floor = _build.floor = exports.compare = _build.compare = exports.significantDigits = _build.significantDigits = exports.is = _build.is = void 0;
exports.toRoman = _build.toRoman = exports.toRomanNumerals = _build.toRomanNumerals = exports.fromRoman = _build.fromRoman = exports.fromRomanNumerals = _build.fromRomanNumerals = exports.cubicMean = _build.cubicMean = exports.rootMeanSquare = _build.rootMeanSquare = exports.quadriaticMean = _build.quadriaticMean = exports.harmonicMean = _build.harmonicMean = exports.geometricMean = _build.geometricMean = void 0;
function is(v) {
return typeof v === "number";
}
exports.is = _build.is = is;
function significantDigits(x) {
var a = x.toExponential();
return a.replace(/e[\+\-0-9]*$/, "").replace(/^0\.?0*|\./, "").length;
}
exports.significantDigits = _build.significantDigits = significantDigits;
function compare(x, y) {
return x - y;
}
exports.compare = _build.compare = compare;
function floor(x, pre = 1) {
return Math.floor(x / pre) * pre;
}
exports.floor = _build.floor = floor;
function ceil(x, pre = 1) {
return Math.ceil(x / pre) * pre;
}
exports.ceil = _build.ceil = ceil;
function round(x, pre = 1) {
return Math.round(x / pre) * pre;
}
exports.round = _build.round = round;
function floorDiv(x, y) {
return Math.floor(x / y);
}
exports.floorDiv = _build.floorDiv = floorDiv;
function ceilDiv(x, y) {
return Math.ceil(x / y);
}
exports.ceilDiv = _build.ceilDiv = ceilDiv;
function roundDiv(x, y) {
return Math.round(x / y);
}
exports.roundDiv = _build.roundDiv = roundDiv;
function rem(x, y) {
return x % y;
}
exports.rem = _build.rem = rem;
function mod(x, y) {
return x - y * Math.floor(x / y);
}
exports.mod = _build.mod = mod;
function modp(x, y) {
return x - Math.abs(y) * Math.floor(x / Math.abs(y));
}
exports.modp = _build.modp = modp;
function constrain(x, min, max) {
return Math.min(Math.max(x, min), max);
}
exports.constrain = _build.constrain = constrain;
exports.clamp = _build.clamp = constrain;
function normalize(x, r, R) {
return (x - r) / (R - r);
}
exports.normalize = _build.normalize = normalize;
exports.norm = _build.norm = normalize;
function remap(x, r, R, t, T) {
return t + ((x - r) / (R - r)) * (T - t);
}
exports.remap = _build.remap = remap;
exports.map = _build.map = remap;
function lerp(x, y, t) {
return x + t * (y - x);
}
exports.lerp = _build.lerp = lerp;
function isPow(x, n) {
if (n === 0)
return x === 0;
var p = log(Math.abs(x), Math.abs(n));
if (p !== Math.floor(p))
return false;
return x < 0 ? n < 0 && (p & 1) === 1 : n > 0 || (p & 1) === 0;
}
exports.isPow = _build.isPow = isPow;
function prevPow(x, n) {
if (x <= 1)
return 0;
var p = Math.floor(Math.log(x) / Math.log(n));
return Math.pow(n, p);
}
exports.prevPow = _build.prevPow = prevPow;
function nextPow(x, n) {
if (x <= 0)
return 1;
var p = Math.ceil(Math.log(x) / Math.log(n));
return Math.pow(n, p);
}
exports.nextPow = _build.nextPow = nextPow;
function root(x, n) {
if ((n & 1) === 0)
return Math.pow(x, 1 / n);
return Math.sign(x) * Math.pow(Math.abs(x), 1 / n);
}
exports.root = _build.root = root;
function log(x, b = Math.E) {
return Math.log(x) / Math.log(b);
}
exports.log = _build.log = log;
function properDivisors(x) {
var x = Math.abs(x), a = [];
for (var i = 1; i < x; i++)
if (x % i === 0)
a.push(i);
return a;
}
exports.properDivisors = _build.properDivisors = properDivisors;
exports.aliquotParts = _build.aliquotParts = properDivisors;
function aliquotSum(x) {
var x = Math.abs(x), a = 0;
for (var i = 0; i < x; i++)
if (x % i === 0)
a += i;
return a;
}
exports.aliquotSum = _build.aliquotSum = aliquotSum;
function minPrimeFactor(x) {
var x = Math.abs(x);
if (x <= 1)
return 0;
if (x <= 3)
return x;
if (x % 2 === 0)
return 2;
if (x % 3 === 0)
return 3;
for (var i = 6, I = Math.sqrt(x) + 1; i <= I; i += 6) {
if (x % (i - 1) === 0)
return i - 1;
if (x % (i + 1) === 0)
return i + 1;
}
return x;
}
exports.minPrimeFactor = _build.minPrimeFactor = minPrimeFactor;
exports.leastPrimeFactor = _build.leastPrimeFactor = minPrimeFactor;
function maxPrimeFactor(x) {
var x = Math.abs(x), a = 0;
if (x <= 1)
return 0;
if (x <= 3)
return x;
for (; x % 2 === 0; a = 2)
x /= 2;
for (; x % 3 === 0; a = 3)
x /= 3;
for (var i = 6, I = Math.sqrt(x) + 1; x > 1 && i <= I; i += 6) {
for (; x % (i - 1) == 0; a = i - 1)
x /= i - 1;
for (; x % (i + 1) == 0; a = i + 1)
x /= i + 1;
}
if (x <= 1)
return a;
return x;
}
exports.maxPrimeFactor = _build.maxPrimeFactor = maxPrimeFactor;
exports.greatestPrimeFactor = _build.greatestPrimeFactor = maxPrimeFactor;
function primeFactors(x) {
var x = Math.abs(x), a = [];
if (x <= 1)
return [];
if (x <= 3)
return [x];
x = pushPrimeFactorTo$(a, x, 2);
x = pushPrimeFactorTo$(a, x, 3);
for (var i = 6, I = Math.sqrt(x) + 1; x > 1 && i <= I; i += 6) {
x = pushPrimeFactorTo$(a, x, i - 1);
x = pushPrimeFactorTo$(a, x, i + 1);
}
if (x > 1)
a.push(x);
return a;
}
exports.primeFactors = _build.primeFactors = primeFactors;
function pushPrimeFactorTo$(a, x, f) {
if (x % f !== 0)
return x;
do {
x /= f;
} while (x % f === 0);
a.push(f);
return x;
}
function primeExponentials(x) {
var x = Math.abs(x), a = [];
if (x <= 1)
return [];
if (x <= 3)
return [[x, 1]];
x = pushPrimeExponentialTo$(a, x, 2);
x = pushPrimeExponentialTo$(a, x, 3);
for (var i = 6, I = Math.sqrt(x) + 1; x > 1 && i <= I; i += 6) {
x = pushPrimeExponentialTo$(a, x, i - 1);
x = pushPrimeExponentialTo$(a, x, i + 1);
}
if (x > 1)
a.push([x, 1]);
return a;
}
exports.primeExponentials = _build.primeExponentials = primeExponentials;
function pushPrimeExponentialTo$(a, x, f) {
if (x % f !== 0)
return x;
var e = 0;
do {
x /= f;
++e;
} while (x % f === 0);
a.push([f, e]);
return x;
}
function isPrime(x) {
return x !== 0 && minPrimeFactor(x) === Math.abs(x);
}
exports.isPrime = _build.isPrime = isPrime;
function gcd(...xs) {
var a = xs[0] || 1;
for (var i = 1, I = xs.length; i < I; i++)
a = gcdPair(a, xs[i]);
return a;
}
exports.gcd = _build.gcd = gcd;
exports.hcf = _build.hcf = gcd;
function gcdPair(x, y) {
while (y !== 0) {
var t = y;
y = x % y;
x = t;
}
return x;
}
function lcm(...xs) {
var a = xs[0] || 1;
for (var i = 1, I = xs.length; i < I; i++)
a = a * xs[i] / gcdPair(a, xs[i]);
return a;
}
exports.lcm = _build.lcm = lcm;
function factorial(n, k = 0) {
if (n < 0)
return 0;
for (var i = k + 1, a = 1; i <= n; i++)
a *= i;
return a;
}
exports.factorial = _build.factorial = factorial;
function binomial(n, k) {
if (k < 0 || k > Math.abs(n))
return 0;
if (n < 0)
return Math.pow(-1, k) * binomial(-n, k);
k = k > n - k ? n - k : k;
for (var a = 1, i = 1; i <= k; i++, n--)
a *= n / i;
return a;
}
exports.binomial = _build.binomial = binomial;
function multinomial(...ks) {
var n = sum(...ks), a = 1;
for (var i = 0, j = 0, I = ks.length; i < I;) {
if (j <= 0)
j = ks[i++];
else
a *= n-- / j--;
}
return a;
}
exports.multinomial = _build.multinomial = multinomial;
function degrees(x) {
return x * (180 / Math.PI);
}
exports.degrees = _build.degrees = degrees;
function radians(x) {
return x * (Math.PI / 180);
}
exports.radians = _build.radians = radians;
function sum(...xs) {
var a = 0;
for (var x of xs)
a += x;
return a;
}
exports.sum = _build.sum = sum;
function product(...xs) {
var a = 1;
for (var x of xs)
a *= x;
return a;
}
exports.product = _build.product = product;
function median(...xs) {
if (xs.length === 0)
return 0;
xs.sort((a, b) => a - b);
var i = xs.length >> 1;
if ((xs.length & 1) === 1)
return xs[i];
return (xs[i - 1] + xs[i]) / 2;
}
exports.median = _build.median = median;
function modes(...xs) {
xs.sort((a, b) => a - b);
var r = maxRepeat(xs);
return getRepeats(xs, r);
}
exports.modes = _build.modes = modes;
function maxRepeat(xs) {
var count = Math.min(xs.length, 1), max = count;
for (var i = 1, I = xs.length; i < I; i++) {
if (xs[i - 1] === xs[i])
count++;
else {
max = Math.max(max, count);
count = 1;
}
}
return Math.max(max, count);
}
function getRepeats(xs, r) {
var a = [];
r--;
for (var i = 0, I = xs.length - r; i < I; i++)
if (xs[i] === xs[i + r])
a.push(xs[i += r]);
return a;
}
function range(...xs) {
return [Math.min(...xs), Math.max(...xs)];
}
exports.range = _build.range = range;
function variance(...xs) {
if (xs.length === 0)
return 0;
var m = arithmeticMean(...xs), a = 0;
for (var x of xs)
a += (x - m) ** 2;
return a / xs.length;
}
exports.variance = _build.variance = variance;
function arithmeticMean(...xs) {
if (xs.length === 0)
return 0;
return sum(...xs) / xs.length;
}
exports.arithmeticMean = _build.arithmeticMean = arithmeticMean;
exports.mean = _build.mean = arithmeticMean;
function geometricMean(...xs) {
var n = xs.length;
return root(product(...xs), n);
}
exports.geometricMean = _build.geometricMean = geometricMean;
function harmonicMean(...xs) {
var n = xs.length;
var p = product(...xs), q = 0;
for (var x of xs)
q += p / x;
return n * p / q;
}
exports.harmonicMean = _build.harmonicMean = harmonicMean;
function quadriaticMean(...xs) {
var n = xs.length, a = 0;
for (var x of xs)
a += x * x;
return Math.sqrt(a / n);
}
exports.quadriaticMean = _build.quadriaticMean = quadriaticMean;
exports.rootMeanSquare = _build.rootMeanSquare = quadriaticMean;
function cubicMean(...xs) {
var n = xs.length, a = 0;
for (var x of xs)
a += x ** 3;
return Math.cbrt(a / n);
}
exports.cubicMean = _build.cubicMean = cubicMean;
const ROMAN_SYMBOLS = ['I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M'];
const ROMAN_VALUES = [1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000];
function fromRomanNumerals(txt) {
var s = ROMAN_SYMBOLS.length - 1;
var n = txt.search(/^\s*-/) >= 0, a = 0;
var txt = txt.replace(/\W/g, '').toUpperCase();
for (var i = 0, I = txt.length; i < I; i += ROMAN_SYMBOLS[s].length) {
while (s >= 0 && txt.substring(i, i + ROMAN_SYMBOLS[s].length) !== ROMAN_SYMBOLS[s])
--s;
if (s < 0)
break;
a += ROMAN_VALUES[s];
}
return n ? -a : a;
}
exports.fromRomanNumerals = _build.fromRomanNumerals = fromRomanNumerals;
exports.fromRoman = _build.fromRoman = fromRomanNumerals;
function toRomanNumerals(x) {
var a = x < 0 ? '-' : '';
var x = Math.abs(x);
for (var s = ROMAN_SYMBOLS.length - 1; s >= 0; --s)
while (x >= ROMAN_VALUES[s]) {
x -= ROMAN_VALUES[s];
a += ROMAN_SYMBOLS[s];
}
return a;
}
exports.toRomanNumerals = _build.toRomanNumerals = toRomanNumerals;
exports.toRoman = _build.toRoman = toRomanNumerals;
exports.default = _build;