(original) (raw)
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); function getDefaultExportFromCjs (x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; } var _build$1 = {}; var extraMath = {exports: {}}; (function (module) { function getDefaultExportFromCjs (x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; } var _build$1 = {}; var extraNumber = {}; Object.defineProperty(extraNumber, '__esModule', { value: true }); var _build = {}; Object.defineProperty(_build, "__esModule", { value: true }); extraNumber.mean = _build.mean = extraNumber.arithmeticMean = _build.arithmeticMean = extraNumber.variance = _build.variance = extraNumber.range = _build.range = extraNumber.modes = _build.modes = extraNumber.median = _build.median = extraNumber.product = _build.product = extraNumber.sum = _build.sum = extraNumber.radians = _build.radians = extraNumber.degrees = _build.degrees = extraNumber.multinomial = _build.multinomial = extraNumber.binomial = _build.binomial = extraNumber.factorial = _build.factorial = extraNumber.lcm = _build.lcm = extraNumber.hcf = _build.hcf = extraNumber.gcd = _build.gcd = extraNumber.isPrime = _build.isPrime = extraNumber.primeExponentials = _build.primeExponentials = extraNumber.primeFactors = _build.primeFactors = extraNumber.greatestPrimeFactor = _build.greatestPrimeFactor = extraNumber.maxPrimeFactor = _build.maxPrimeFactor = extraNumber.leastPrimeFactor = _build.leastPrimeFactor = extraNumber.minPrimeFactor = _build.minPrimeFactor = extraNumber.aliquotSum = _build.aliquotSum = extraNumber.aliquotParts = _build.aliquotParts = extraNumber.properDivisors = _build.properDivisors = extraNumber.log = _build.log = extraNumber.root = _build.root = extraNumber.nextPow = _build.nextPow = extraNumber.prevPow = _build.prevPow = extraNumber.isPow = _build.isPow = extraNumber.lerp = _build.lerp = extraNumber.map = _build.map = extraNumber.remap = _build.remap = extraNumber.norm = _build.norm = extraNumber.normalize = _build.normalize = extraNumber.clamp = _build.clamp = extraNumber.constrain = _build.constrain = extraNumber.modp = _build.modp = extraNumber.mod = _build.mod = extraNumber.rem = _build.rem = extraNumber.roundDiv = _build.roundDiv = extraNumber.ceilDiv = _build.ceilDiv = extraNumber.floorDiv = _build.floorDiv = extraNumber.round = _build.round = extraNumber.ceil = _build.ceil = extraNumber.floor = _build.floor = extraNumber.compare = _build.compare = extraNumber.significantDigits = _build.significantDigits = extraNumber.is = _build.is = void 0; extraNumber.toRoman = _build.toRoman = extraNumber.toRomanNumerals = _build.toRomanNumerals = extraNumber.fromRoman = _build.fromRoman = extraNumber.fromRomanNumerals = _build.fromRomanNumerals = extraNumber.cubicMean = _build.cubicMean = extraNumber.rootMeanSquare = _build.rootMeanSquare = extraNumber.quadriaticMean = _build.quadriaticMean = extraNumber.harmonicMean = _build.harmonicMean = extraNumber.geometricMean = _build.geometricMean = void 0; function is(v) { return typeof v === "number"; } extraNumber.is = _build.is = is; function significantDigits(x) { var a = x.toExponential(); return a.replace(/e[\+\-0-9]*$/, "").replace(/^0\.?0*|\./, "").length; } extraNumber.significantDigits = _build.significantDigits = significantDigits; function compare(x, y) { return x - y; } extraNumber.compare = _build.compare = compare; function floor(x, pre = 1) { return Math.floor(x / pre) * pre; } extraNumber.floor = _build.floor = floor; function ceil(x, pre = 1) { return Math.ceil(x / pre) * pre; } extraNumber.ceil = _build.ceil = ceil; function round(x, pre = 1) { return Math.round(x / pre) * pre; } extraNumber.round = _build.round = round; function floorDiv(x, y) { return Math.floor(x / y); } extraNumber.floorDiv = _build.floorDiv = floorDiv; function ceilDiv(x, y) { return Math.ceil(x / y); } extraNumber.ceilDiv = _build.ceilDiv = ceilDiv; function roundDiv(x, y) { return Math.round(x / y); } extraNumber.roundDiv = _build.roundDiv = roundDiv; function rem(x, y) { return x % y; } extraNumber.rem = _build.rem = rem; function mod(x, y) { return x - y * Math.floor(x / y); } extraNumber.mod = _build.mod = mod; function modp(x, y) { return x - Math.abs(y) * Math.floor(x / Math.abs(y)); } extraNumber.modp = _build.modp = modp; function constrain(x, min, max) { return Math.min(Math.max(x, min), max); } extraNumber.constrain = _build.constrain = constrain; extraNumber.clamp = _build.clamp = constrain; function normalize(x, r, R) { return (x - r) / (R - r); } extraNumber.normalize = _build.normalize = normalize; extraNumber.norm = _build.norm = normalize; function remap(x, r, R, t, T) { return t + ((x - r) / (R - r)) * (T - t); } extraNumber.remap = _build.remap = remap; extraNumber.map = _build.map = remap; function lerp(x, y, t) { return x + t * (y - x); } extraNumber.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; } extraNumber.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); } extraNumber.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); } extraNumber.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); } extraNumber.root = _build.root = root; function log(x, b = Math.E) { return Math.log(x) / Math.log(b); } extraNumber.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; } extraNumber.properDivisors = _build.properDivisors = properDivisors; extraNumber.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; } extraNumber.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; } extraNumber.minPrimeFactor = _build.minPrimeFactor = minPrimeFactor; extraNumber.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; } extraNumber.maxPrimeFactor = _build.maxPrimeFactor = maxPrimeFactor; extraNumber.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; } extraNumber.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; } extraNumber.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); } extraNumber.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; } extraNumber.gcd = _build.gcd = gcd; extraNumber.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; } extraNumber.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; } extraNumber.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; } extraNumber.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; } extraNumber.multinomial = _build.multinomial = multinomial; function degrees(x) { return x * (180 / Math.PI); } extraNumber.degrees = _build.degrees = degrees; function radians(x) { return x * (Math.PI / 180); } extraNumber.radians = _build.radians = radians; function sum(...xs) { var a = 0; for (var x of xs) a += x; return a; } extraNumber.sum = _build.sum = sum; function product(...xs) { var a = 1; for (var x of xs) a *= x; return a; } extraNumber.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; } extraNumber.median = _build.median = median; function modes(...xs) { xs.sort((a, b) => a - b); var r = maxRepeat(xs); return getRepeats(xs, r); } extraNumber.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)]; } extraNumber.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; } extraNumber.variance = _build.variance = variance; function arithmeticMean(...xs) { if (xs.length === 0) return 0; return sum(...xs) / xs.length; } extraNumber.arithmeticMean = _build.arithmeticMean = arithmeticMean; extraNumber.mean = _build.mean = arithmeticMean; function geometricMean(...xs) { var n = xs.length; return root(product(...xs), n); } extraNumber.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; } extraNumber.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); } extraNumber.quadriaticMean = _build.quadriaticMean = quadriaticMean; extraNumber.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); } extraNumber.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; } extraNumber.fromRomanNumerals = _build.fromRomanNumerals = fromRomanNumerals; extraNumber.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; } extraNumber.toRomanNumerals = _build.toRomanNumerals = toRomanNumerals; extraNumber.toRoman = _build.toRoman = toRomanNumerals; extraNumber.default = _build; (function (exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.quadriaticMean = exports.harmonicMean = exports.geometricMean = exports.mean = exports.arithmeticMean = exports.variance = exports.range = exports.modes = exports.median = exports.product = exports.sum = exports.radians = exports.degrees = exports.multinomial = exports.binomial = exports.factorial = exports.lcm = exports.hcf = exports.gcd = exports.isPrime = exports.primeExponentials = exports.primeFactors = exports.greatestPrimeFactor = exports.maxPrimeFactor = exports.leastPrimeFactor = exports.minPrimeFactor = exports.aliquotSum = exports.aliquotParts = exports.properDivisors = exports.log = exports.root = exports.nextPow = exports.prevPow = exports.isPow = exports.map = exports.remap = exports.lerp = exports.norm = exports.normalize = exports.clamp = exports.constrain = exports.modp = exports.mod = exports.rem = exports.roundDiv = exports.ceilDiv = exports.floorDiv = exports.round = exports.ceil = exports.floor = void 0; exports.distance = exports.magnitude = exports.cubicMean = exports.rootMeanSquare = void 0; var extra_number_1 = extraNumber; Object.defineProperty(exports, "floor", { enumerable: true, get: function () { return extra_number_1.floor; } }); Object.defineProperty(exports, "ceil", { enumerable: true, get: function () { return extra_number_1.ceil; } }); Object.defineProperty(exports, "round", { enumerable: true, get: function () { return extra_number_1.round; } }); Object.defineProperty(exports, "floorDiv", { enumerable: true, get: function () { return extra_number_1.floorDiv; } }); Object.defineProperty(exports, "ceilDiv", { enumerable: true, get: function () { return extra_number_1.ceilDiv; } }); Object.defineProperty(exports, "roundDiv", { enumerable: true, get: function () { return extra_number_1.roundDiv; } }); Object.defineProperty(exports, "rem", { enumerable: true, get: function () { return extra_number_1.rem; } }); Object.defineProperty(exports, "mod", { enumerable: true, get: function () { return extra_number_1.mod; } }); Object.defineProperty(exports, "modp", { enumerable: true, get: function () { return extra_number_1.modp; } }); Object.defineProperty(exports, "constrain", { enumerable: true, get: function () { return extra_number_1.constrain; } }); Object.defineProperty(exports, "clamp", { enumerable: true, get: function () { return extra_number_1.constrain; } }); Object.defineProperty(exports, "normalize", { enumerable: true, get: function () { return extra_number_1.normalize; } }); Object.defineProperty(exports, "norm", { enumerable: true, get: function () { return extra_number_1.normalize; } }); Object.defineProperty(exports, "lerp", { enumerable: true, get: function () { return extra_number_1.lerp; } }); Object.defineProperty(exports, "remap", { enumerable: true, get: function () { return extra_number_1.remap; } }); Object.defineProperty(exports, "map", { enumerable: true, get: function () { return extra_number_1.remap; } }); Object.defineProperty(exports, "isPow", { enumerable: true, get: function () { return extra_number_1.isPow; } }); Object.defineProperty(exports, "prevPow", { enumerable: true, get: function () { return extra_number_1.prevPow; } }); Object.defineProperty(exports, "nextPow", { enumerable: true, get: function () { return extra_number_1.nextPow; } }); Object.defineProperty(exports, "root", { enumerable: true, get: function () { return extra_number_1.root; } }); Object.defineProperty(exports, "log", { enumerable: true, get: function () { return extra_number_1.log; } }); Object.defineProperty(exports, "properDivisors", { enumerable: true, get: function () { return extra_number_1.properDivisors; } }); Object.defineProperty(exports, "aliquotParts", { enumerable: true, get: function () { return extra_number_1.properDivisors; } }); Object.defineProperty(exports, "aliquotSum", { enumerable: true, get: function () { return extra_number_1.aliquotSum; } }); Object.defineProperty(exports, "minPrimeFactor", { enumerable: true, get: function () { return extra_number_1.minPrimeFactor; } }); Object.defineProperty(exports, "leastPrimeFactor", { enumerable: true, get: function () { return extra_number_1.minPrimeFactor; } }); Object.defineProperty(exports, "maxPrimeFactor", { enumerable: true, get: function () { return extra_number_1.maxPrimeFactor; } }); Object.defineProperty(exports, "greatestPrimeFactor", { enumerable: true, get: function () { return extra_number_1.maxPrimeFactor; } }); Object.defineProperty(exports, "primeFactors", { enumerable: true, get: function () { return extra_number_1.primeFactors; } }); Object.defineProperty(exports, "primeExponentials", { enumerable: true, get: function () { return extra_number_1.primeExponentials; } }); Object.defineProperty(exports, "isPrime", { enumerable: true, get: function () { return extra_number_1.isPrime; } }); Object.defineProperty(exports, "gcd", { enumerable: true, get: function () { return extra_number_1.gcd; } }); Object.defineProperty(exports, "hcf", { enumerable: true, get: function () { return extra_number_1.gcd; } }); Object.defineProperty(exports, "lcm", { enumerable: true, get: function () { return extra_number_1.lcm; } }); Object.defineProperty(exports, "factorial", { enumerable: true, get: function () { return extra_number_1.factorial; } }); Object.defineProperty(exports, "binomial", { enumerable: true, get: function () { return extra_number_1.binomial; } }); Object.defineProperty(exports, "multinomial", { enumerable: true, get: function () { return extra_number_1.multinomial; } }); Object.defineProperty(exports, "degrees", { enumerable: true, get: function () { return extra_number_1.degrees; } }); Object.defineProperty(exports, "radians", { enumerable: true, get: function () { return extra_number_1.radians; } }); Object.defineProperty(exports, "sum", { enumerable: true, get: function () { return extra_number_1.sum; } }); Object.defineProperty(exports, "product", { enumerable: true, get: function () { return extra_number_1.product; } }); Object.defineProperty(exports, "median", { enumerable: true, get: function () { return extra_number_1.median; } }); Object.defineProperty(exports, "modes", { enumerable: true, get: function () { return extra_number_1.modes; } }); Object.defineProperty(exports, "range", { enumerable: true, get: function () { return extra_number_1.range; } }); Object.defineProperty(exports, "variance", { enumerable: true, get: function () { return extra_number_1.variance; } }); Object.defineProperty(exports, "arithmeticMean", { enumerable: true, get: function () { return extra_number_1.arithmeticMean; } }); Object.defineProperty(exports, "mean", { enumerable: true, get: function () { return extra_number_1.arithmeticMean; } }); Object.defineProperty(exports, "geometricMean", { enumerable: true, get: function () { return extra_number_1.geometricMean; } }); Object.defineProperty(exports, "harmonicMean", { enumerable: true, get: function () { return extra_number_1.harmonicMean; } }); Object.defineProperty(exports, "quadriaticMean", { enumerable: true, get: function () { return extra_number_1.quadriaticMean; } }); Object.defineProperty(exports, "rootMeanSquare", { enumerable: true, get: function () { return extra_number_1.quadriaticMean; } }); Object.defineProperty(exports, "cubicMean", { enumerable: true, get: function () { return extra_number_1.cubicMean; } }); function magnitude(xs) { var a = 0; for (var i = 0, I = xs.length; i < I; i++) a += xs[i] ** 2; return Math.sqrt(a); } exports.magnitude = magnitude; function distance(xs, ys) { var a = 0; for (var i = 0, I = xs.length; i < I; i++) a += (xs[i] - ys[i]) ** 2; return Math.sqrt(a); } exports.distance = distance; } (_build$1)); var index = getDefaultExportFromCjs(_build$1); module.exports = index; } (extraMath)); var extraMathExports = extraMath.exports; getDefaultExportFromCjs(extraMathExports); var extraFunction = {}; Object.defineProperty(extraFunction, '__esModule', { value: true }); var _build = {}; Object.defineProperty(_build, "__esModule", { value: true }); extraFunction.throttleEarly = _build.throttleEarly = extraFunction.throttle = _build.throttle = extraFunction.debounceEarly = _build.debounceEarly = extraFunction.debounce = _build.debounce = extraFunction.after = _build.after = extraFunction.restrictAfter = _build.restrictAfter = extraFunction.before = _build.before = extraFunction.restrictBefore = _build.restrictBefore = extraFunction.once = _build.once = extraFunction.restrictOnce = _build.restrictOnce = extraFunction.restrict = _build.restrict = extraFunction.delay = _build.delay = extraFunction.defer = _build.defer = extraFunction.curryRight = _build.curryRight = extraFunction.curry = _build.curry = extraFunction.composeRight = _build.composeRight = extraFunction.compose = _build.compose = extraFunction.partialRight = _build.partialRight = extraFunction.attachRight = _build.attachRight = extraFunction.partial = _build.partial = extraFunction.attach = _build.attach = extraFunction.unspread = _build.unspread = extraFunction.spread = _build.spread = extraFunction.flip = _build.flip = extraFunction.reverse = _build.reverse = extraFunction.memoize = _build.memoize = extraFunction.negate = _build.negate = extraFunction.decontextify = _build.decontextify = extraFunction.contextify = _build.contextify = extraFunction.isGenerator = _build.isGenerator = extraFunction.isAsync = _build.isAsync = extraFunction.is = _build.is = extraFunction.apply = _build.apply = extraFunction.call = _build.call = extraFunction.bind = _build.bind = extraFunction.arity = _build.arity = extraFunction.length = _build.length = extraFunction.name = _build.name = extraFunction.ARGUMENTS = _build.ARGUMENTS = extraFunction.COMPARE = _build.COMPARE = extraFunction.IDENTITY = _build.IDENTITY = extraFunction.TRUE = _build.TRUE = extraFunction.FALSE = _build.FALSE = extraFunction.NOOP = _build.NOOP = void 0; function NOOP(...args) { } extraFunction.NOOP = _build.NOOP = NOOP; function FALSE(...args) { return false; } extraFunction.FALSE = _build.FALSE = FALSE; function TRUE(...args) { return true; } extraFunction.TRUE = _build.TRUE = TRUE; function IDENTITY(v) { return v; } extraFunction.IDENTITY = _build.IDENTITY = IDENTITY; function COMPARE(a, b) { return a < b ? -1 : (a > b ? 1 : 0); } extraFunction.COMPARE = _build.COMPARE = COMPARE; function ARGUMENTS(...args) { return args; } extraFunction.ARGUMENTS = _build.ARGUMENTS = ARGUMENTS; function name(x) { return x.name; } extraFunction.name = _build.name = name; function length$1(x) { return x.length; } extraFunction.length = _build.length = length$1; extraFunction.arity = _build.arity = length$1; function bind(x, ths, ...prefix) { return x.bind(ths, ...prefix); } extraFunction.bind = _build.bind = bind; function call(x, ths = null, ...args) { return x.call(ths, ...args); } extraFunction.call = _build.call = call; function apply(x, ths = null, args) { return x.apply(ths, args); } extraFunction.apply = _build.apply = apply; function is$1(v) { return typeof v === "function"; } extraFunction.is = _build.is = is$1; function isAsync(v) { const AsyncFunction = (async function () { }).constructor; return v instanceof AsyncFunction; } extraFunction.isAsync = _build.isAsync = isAsync; function isGenerator(v) { const GeneratorFunction = (function* () { }).constructor; return v instanceof GeneratorFunction; } extraFunction.isGenerator = _build.isGenerator = isGenerator; function contextify(x) { return function (...args) { return x(this, ...args); }; } extraFunction.contextify = _build.contextify = contextify; function decontextify(x) { return (ths = null, ...args) => x.call(ths, ...args); } extraFunction.decontextify = _build.decontextify = decontextify; function negate(x) { return (...args) => !x(...args); } extraFunction.negate = _build.negate = negate; function memoize(x, fr = null, cache = null) { var fr = fr || IDENTITY; var cache = cache || new Map(); return (...args) => { var k = fr(...args); if (cache.has(k)) return cache.get(k); var v = x(...args); cache.set(k, v); return v; }; } extraFunction.memoize = _build.memoize = memoize; function reverse$1(x) { return (...args) => x(...args.reverse()); } extraFunction.reverse = _build.reverse = reverse$1; extraFunction.flip = _build.flip = reverse$1; function spread(x) { return (...args) => x(args); } extraFunction.spread = _build.spread = spread; function unspread(x) { return (args) => x(...args); } extraFunction.unspread = _build.unspread = unspread; function attach(x, ...prefix) { return (...args) => x(...prefix, ...args); } extraFunction.attach = _build.attach = attach; extraFunction.partial = _build.partial = attach; function attachRight(x, ...suffix) { return (...args) => x(...args, ...suffix); } extraFunction.attachRight = _build.attachRight = attachRight; extraFunction.partialRight = _build.partialRight = attachRight; function compose(...xs) { return composeRight(...xs.reverse()); } extraFunction.compose = _build.compose = compose; function composeRight(...xs) { return (...args) => { if (xs.length === 0) return; var a = xs[0](...args); for (var i = 1, I = xs.length; i < I; i++) a = xs[i](a); return a; }; } extraFunction.composeRight = _build.composeRight = composeRight; function curry(x, n = x.length) { return (...args) => { if (args.length >= n) return x(...args); else return curry((...rest) => x(...args, ...rest), n - args.length); }; } extraFunction.curry = _build.curry = curry; function curryRight(x, n = x.length) { return curry(reverse$1(x), n); } extraFunction.curryRight = _build.curryRight = curryRight; function defer(x) { return (...args) => { var h = setImmediate(flush); function clear() { clearImmediate(h); h = null; } function flush() { x(...args); clear(); } return { clear, flush }; }; } extraFunction.defer = _build.defer = defer; function delay(x, t) { return (...args) => { var h = setTimeout(flush, t); function clear() { clearTimeout(h); h = null; } function flush() { x(...args); clear(); } return { clear, flush }; }; } extraFunction.delay = _build.delay = delay; function restrict(x, start, end = -1) { var i = -1; return (...args) => { if ((++i < start) === (i < end || end < 0)) return; return x(...args); }; } extraFunction.restrict = _build.restrict = restrict; function restrictOnce(x) { return restrict(x, 0, 1); } extraFunction.restrictOnce = _build.restrictOnce = restrictOnce; extraFunction.once = _build.once = restrictOnce; function restrictBefore(x, n) { return restrict(x, 0, n); } extraFunction.restrictBefore = _build.restrictBefore = restrictBefore; extraFunction.before = _build.before = restrictBefore; function restrictAfter(x, n) { return restrict(x, n); } extraFunction.restrictAfter = _build.restrictAfter = restrictAfter; extraFunction.after = _build.after = restrictAfter; function debounce(x, t, T = -1) { var savedArgs; var h = null, H = null; function clear() { clearTimeout(h); clearTimeout(H); h = H = null; } function flush() { x(...savedArgs); clear(); } return (...args) => { savedArgs = args; if (T >= 0) H = H || setTimeout(flush, T); if (T < 0 || t < T) { clearTimeout(h); h = setTimeout(flush, t); } return { clear, flush }; }; } extraFunction.debounce = _build.debounce = debounce; function debounceEarly(x, t, T = -1) { var h = null, H = null; function clear() { h = H = null; } function flush() { clear(); } return (...args) => { if (!h && !H) x(...args); if (T >= 0) H = H || setTimeout(flush, T); if (T < 0 || t < T) { clearTimeout(h); h = setTimeout(flush, t); } return { clear, flush }; }; } extraFunction.debounceEarly = _build.debounceEarly = debounceEarly; function throttle(x, t) { var savedArgs; var h = null; function clear() { h = null; } function flush() { x(...savedArgs); clear(); } return (...args) => { savedArgs = args; h = h || setTimeout(flush, t); return { clear, flush }; }; } extraFunction.throttle = _build.throttle = throttle; function throttleEarly(x, t) { var h = null; function clear() { h = null; } function flush() { clear(); } return (...args) => { if (!h) x(...args); h = h || setTimeout(flush, t); return { clear, flush }; }; } extraFunction.throttleEarly = _build.throttleEarly = throttleEarly; extraFunction.default = _build; Object.defineProperty(_build$1, "__esModule", { value: true }); exports.rangedSort$ = _build$1.rangedSort$ = exports.rangedSort = _build$1.rangedSort = exports.sort$ = _build$1.sort$ = exports.toSorted = _build$1.toSorted = exports.sort = _build$1.sort = exports.searchUnsortedValue = _build$1.searchUnsortedValue = exports.hasUnsortedValue = _build$1.hasUnsortedValue = exports.isSorted = _build$1.isSorted = exports.removePath$ = _build$1.removePath$ = exports.remove$ = _build$1.remove$ = exports.remove = _build$1.remove = exports.swapRanges$ = _build$1.swapRanges$ = exports.swapRanges = _build$1.swapRanges = exports.swap$ = _build$1.swap$ = exports.swap = _build$1.swap = exports.setPath$ = _build$1.setPath$ = exports.set$ = _build$1.set$ = exports.with = _build$1.with = exports.set = _build$1.set = exports.hasPath = _build$1.hasPath = exports.getPath = _build$1.getPath = exports.getAll = _build$1.getAll = exports.at = _build$1.at = exports.get = _build$1.get = exports.clear$ = _build$1.clear$ = exports.resize$ = _build$1.resize$ = exports.size = _build$1.size = exports.length = _build$1.length = exports.isEmpty = _build$1.isEmpty = exports.indexRange = _build$1.indexRange = exports.index = _build$1.index = exports.ientries = _build$1.ientries = exports.entries = _build$1.entries = exports.ivalues = _build$1.ivalues = exports.values = _build$1.values = exports.ikeys = _build$1.ikeys = exports.keys = _build$1.keys = exports.is = _build$1.is = exports.deepClone = _build$1.deepClone = exports.clone = _build$1.clone = exports.shallowClone = _build$1.shallowClone = exports.from$ = _build$1.from$ = exports.fromIterable$ = _build$1.fromIterable$ = exports.from = _build$1.from = exports.fromIterable = _build$1.fromIterable = exports.fromApply = _build$1.fromApply = exports.fromApplication = _build$1.fromApplication = exports.fromCall = _build$1.fromCall = exports.fromInvocation = _build$1.fromInvocation = exports.fromRange = _build$1.fromRange = void 0; exports.hasPermutation = _build$1.hasPermutation = exports.hasSubsequence = _build$1.hasSubsequence = exports.hasInfix = _build$1.hasInfix = exports.endsWith = _build$1.endsWith = exports.hasSuffix = _build$1.hasSuffix = exports.startsWith = _build$1.startsWith = exports.hasPrefix = _build$1.hasPrefix = exports.searchMismatch = _build$1.searchMismatch = exports.searchMismatchedValue = _build$1.searchMismatchedValue = exports.searchAdjacentDuplicate = _build$1.searchAdjacentDuplicate = exports.searchAdjacentDuplicateValue = _build$1.searchAdjacentDuplicateValue = exports.searchValueAll = _build$1.searchValueAll = exports.searchValueRight = _build$1.searchValueRight = exports.searchValue = _build$1.searchValue = exports.hasValue = _build$1.hasValue = exports.includes = _build$1.includes = exports.slice$ = _build$1.slice$ = exports.slice = _build$1.slice = exports.middle = _build$1.middle = exports.back = _build$1.back = exports.last = _build$1.last = exports.init = _build$1.init = exports.tail = _build$1.tail = exports.first = _build$1.first = exports.front = _build$1.front = exports.head = _build$1.head = exports.compare = _build$1.compare = exports.isEqual = _build$1.isEqual = exports.searchMaximumValues = _build$1.searchMaximumValues = exports.searchMinimumValues = _build$1.searchMinimumValues = exports.searchMaximumValue = _build$1.searchMaximumValue = exports.searchMinimumValue = _build$1.searchMinimumValue = exports.maximumEntries = _build$1.maximumEntries = exports.maximums = _build$1.maximums = exports.minimumEntries = _build$1.minimumEntries = exports.minimums = _build$1.minimums = exports.rangeEntries = _build$1.rangeEntries = exports.range = _build$1.range = exports.maxEntry = _build$1.maxEntry = exports.maximumEntry = _build$1.maximumEntry = exports.max = _build$1.max = exports.maximum = _build$1.maximum = exports.minEntry = _build$1.minEntry = exports.minimumEntry = _build$1.minimumEntry = exports.min = _build$1.min = exports.minimum = _build$1.minimum = exports.rangedPartialSort$ = _build$1.rangedPartialSort$ = exports.rangedPartialSort = _build$1.rangedPartialSort = exports.partialSort$ = _build$1.partialSort$ = exports.partialSort = _build$1.partialSort = void 0; exports.findIndex = _build$1.findIndex = exports.search = _build$1.search = exports.lastIndexOf = _build$1.lastIndexOf = exports.indexOf = _build$1.indexOf = exports.scanUntilRight = _build$1.scanUntilRight = exports.scanUntil = _build$1.scanUntil = exports.scanWhileRight = _build$1.scanWhileRight = exports.scanWhile = _build$1.scanWhile = exports.dropWhileRight = _build$1.dropWhileRight = exports.dropWhile = _build$1.dropWhile = exports.dropRight = _build$1.dropRight = exports.drop = _build$1.drop = exports.takeWhileRight = _build$1.takeWhileRight = exports.takeWhile = _build$1.takeWhile = exports.right = _build$1.right = exports.takeRight = _build$1.takeRight = exports.left = _build$1.left = exports.take = _build$1.take = exports.findRight = _build$1.findRight = exports.find = _build$1.find = exports.shuffle$ = _build$1.shuffle$ = exports.permute$ = _build$1.permute$ = exports.permutation$ = _build$1.permutation$ = exports.randomPermutation$ = _build$1.randomPermutation$ = exports.permutation = _build$1.permutation = exports.randomPermutation = _build$1.randomPermutation = exports.subsequence = _build$1.subsequence = exports.randomSubsequence = _build$1.randomSubsequence = exports.infix = _build$1.infix = exports.randomInfix = _build$1.randomInfix = exports.suffix = _build$1.suffix = exports.randomSuffix = _build$1.randomSuffix = exports.prefix = _build$1.prefix = exports.randomPrefix = _build$1.randomPrefix = exports.value = _build$1.value = exports.randomValue = _build$1.randomValue = exports.searchSubsequence = _build$1.searchSubsequence = exports.searchInfixAll = _build$1.searchInfixAll = exports.searchInfixRight = _build$1.searchInfixRight = exports.searchInfix = _build$1.searchInfix = exports.ipermutations = _build$1.ipermutations = exports.permutations = _build$1.permutations = exports.isubsequences = _build$1.isubsequences = exports.subsequences = _build$1.subsequences = exports.iinfixes = _build$1.iinfixes = exports.infixes = _build$1.infixes = exports.isuffixes = _build$1.isuffixes = exports.suffixes = _build$1.suffixes = exports.iprefixes = _build$1.iprefixes = exports.prefixes = _build$1.prefixes = void 0; exports.unshift = _build$1.unshift = exports.popFront$ = _build$1.popFront$ = exports.shift$ = _build$1.shift$ = exports.popFront = _build$1.popFront = exports.shift = _build$1.shift = exports.popBack$ = _build$1.popBack$ = exports.pop$ = _build$1.pop$ = exports.popBack = _build$1.popBack = exports.pop = _build$1.pop = exports.append$ = _build$1.append$ = exports.pushBack$ = _build$1.pushBack$ = exports.push$ = _build$1.push$ = exports.append = _build$1.append = exports.pushBack = _build$1.pushBack = exports.push = _build$1.push = exports.fill$ = _build$1.fill$ = exports.fill = _build$1.fill = exports.zip = _build$1.zip = exports.interleave = _build$1.interleave = exports.intermix = _build$1.intermix = exports.interpolate = _build$1.interpolate = exports.intersperse = _build$1.intersperse = exports.adjacentCombine$ = _build$1.adjacentCombine$ = exports.adjacentCombine = _build$1.adjacentCombine = exports.inclusiveScan$ = _build$1.inclusiveScan$ = exports.accumulate = _build$1.accumulate = exports.inclusiveScan = _build$1.inclusiveScan = exports.exclusiveScan$ = _build$1.exclusiveScan$ = exports.exclusiveScan = _build$1.exclusiveScan = exports.flatMap = _build$1.flatMap = exports.flat = _build$1.flat = exports.rejectAt = _build$1.rejectAt = exports.reject$ = _build$1.reject$ = exports.reject = _build$1.reject = exports.filterAt = _build$1.filterAt = exports.filter$ = _build$1.filter$ = exports.findAll = _build$1.findAll = exports.filter = _build$1.filter = exports.reduceRight = _build$1.reduceRight = exports.reduce = _build$1.reduce = exports.map$ = _build$1.map$ = exports.map = _build$1.map = exports.allOf = _build$1.allOf = exports.every = _build$1.every = exports.anyOf = _build$1.anyOf = exports.some = _build$1.some = exports.forEach = _build$1.forEach = exports.searchAll = _build$1.searchAll = exports.findLastIndex = _build$1.findLastIndex = exports.searchRight = _build$1.searchRight = void 0; exports.cartesianProduct = _build$1.cartesianProduct = exports.symmetricDifference = _build$1.symmetricDifference = exports.difference = _build$1.difference = exports.intersection = _build$1.intersection = exports.union$ = _build$1.union$ = exports.union = _build$1.union = exports.unique = _build$1.unique = exports.isDisjoint = _build$1.isDisjoint = exports.isUnique = _build$1.isUnique = exports.rotate$ = _build$1.rotate$ = exports.rotate = _build$1.rotate = exports.reverse$ = _build$1.reverse$ = exports.toReversed = _build$1.toReversed = exports.reverse = _build$1.reverse = exports.repeat = _build$1.repeat = exports.cycle = _build$1.cycle = exports.join = _build$1.join = exports.concat$ = _build$1.concat$ = exports.concat = _build$1.concat = exports.chunk = _build$1.chunk = exports.group = _build$1.group = exports.cutAtRight = _build$1.cutAtRight = exports.cutAt = _build$1.cutAt = exports.cutRight = _build$1.cutRight = exports.cut = _build$1.cut = exports.splitAt = _build$1.splitAt = exports.split = _build$1.split = exports.partitionAs = _build$1.partitionAs = exports.groupToMap = _build$1.groupToMap = exports.partitionEach = _build$1.partitionEach = exports.partition = _build$1.partition = exports.countAs = _build$1.countAs = exports.countEach = _build$1.countEach = exports.count = _build$1.count = exports.splice$ = _build$1.splice$ = exports.toSpliced = _build$1.toSpliced = exports.splice = _build$1.splice = exports.moveWithin$ = _build$1.moveWithin$ = exports.moveWithin = _build$1.moveWithin = exports.copyWithin$ = _build$1.copyWithin$ = exports.copyWithin = _build$1.copyWithin = exports.copy$ = _build$1.copy$ = exports.copy = _build$1.copy = exports.prepend$ = _build$1.prepend$ = exports.pushFront$ = _build$1.pushFront$ = exports.unshift$ = _build$1.unshift$ = exports.prepend = _build$1.prepend = exports.pushFront = _build$1.pushFront = void 0; const extra_math_1 = extraMathExports; const extra_function_1 = extraFunction; function toSet(x, fm = null) { if (!fm) return new Set(x); var a = new Set(), i = -1; for (var v of x) a.add(fm(v, ++i, x)); return a; } function fromRange(v, V, dv = 1) { var n = (V - v) / dv, a = []; for (var i = 0; i < n; ++i, v += dv) a.push(v); return a; } exports.fromRange = _build$1.fromRange = fromRange; function fromInvocation(fn, n) { var a = []; for (var i = 0; i < n; ++i) a.push(fn()); return a; } exports.fromInvocation = _build$1.fromInvocation = fromInvocation; exports.fromCall = _build$1.fromCall = fromInvocation; function fromApplication(fm, v, n) { var a = []; if (n !== 0) a.push(v); for (var i = 1; i !== n; ++i) a.push(v = fm(v, i, null)); return a; } exports.fromApplication = _build$1.fromApplication = fromApplication; exports.fromApply = _build$1.fromApply = fromApplication; function fromIterable(x) { return [...x]; } exports.fromIterable = _build$1.fromIterable = fromIterable; exports.from = _build$1.from = fromIterable; function fromIterable$(x) { return Array.isArray(x) ? x : [...x]; } exports.fromIterable$ = _build$1.fromIterable$ = fromIterable$; exports.from$ = _build$1.from$ = fromIterable$; function shallowClone(x) { return x.slice(); } exports.shallowClone = _build$1.shallowClone = shallowClone; exports.clone = _build$1.clone = shallowClone; function deepClone(x) { return structuredClone(x); } exports.deepClone = _build$1.deepClone = deepClone; function is(v) { return Array.isArray(v); } exports.is = _build$1.is = is; function keys(x) { return [...x.keys()]; } exports.keys = _build$1.keys = keys; function ikeys(x) { return x.keys(); } exports.ikeys = _build$1.ikeys = ikeys; function values(x) { return x.slice(); } exports.values = _build$1.values = values; function ivalues(x) { return x.values(); } exports.ivalues = _build$1.ivalues = ivalues; function entries(x) { return [...x.entries()]; } exports.entries = _build$1.entries = entries; function ientries(x) { return x.entries(); } exports.ientries = _build$1.ientries = ientries; function index(x, i) { var X = x.length; return i >= 0 ? Math.min(i, X) : Math.max(X + i, 0); } exports.index = _build$1.index = index; function indexRange(x, i = 0, I = x.length) { var X = x.length; var i = i >= 0 ? Math.min(i, X) : Math.max(X + i, 0); var I = I >= 0 ? Math.min(I, X) : Math.max(X + I, 0); return [i, Math.max(i, I)]; } exports.indexRange = _build$1.indexRange = indexRange; function isEmpty(x) { return x.length === 0; } exports.isEmpty = _build$1.isEmpty = isEmpty; function length(x, i = 0, I = x.length) { var [i, I] = indexRange(x, i, I); return I - i; } exports.length = _build$1.length = length; exports.size = _build$1.size = length; function resize$(x, n, vd) { var X = x.length; x.length = n; if (n > X) x.fill(vd, X); return x; } exports.resize$ = _build$1.resize$ = resize$; function clear$(x) { x.length = 0; return x; } exports.clear$ = _build$1.clear$ = clear$; function get(x, i) { return x[index(x, i)]; } exports.get = _build$1.get = get; exports.at = _build$1.at = get; function getAll(x, is) { return is.map(i => get(x, i)); } exports.getAll = _build$1.getAll = getAll; function getPath(x, p) { for (var i of p) x = is(x) ? get(x, i) : undefined; return x; } exports.getPath = _build$1.getPath = getPath; function hasPath(x, p) { for (var i of p) { if (!is(x)) return false; x = get(x, i); } return true; } exports.hasPath = _build$1.hasPath = hasPath; function set(x, i, v) { return set$(x.slice(), i, v); } exports.set = _build$1.set = set; exports.with = _build$1.with = set; function set$(x, i, v) { x[index(x, i)] = v; return x; } exports.set$ = _build$1.set$ = set$; function setPath$(x, p, v) { var y = getPath(x, p.slice(0, -1)); if (is(y)) set$(y, last(p), v); return x; } exports.setPath$ = _build$1.setPath$ = setPath$; function swap(x, i, j) { return swap$(x.slice(), i, j); } exports.swap = _build$1.swap = swap; function swap$(x, i, j) { var i = index(x, i), j = index(x, j); var t = x[i]; x[i] = x[j]; x[j] = t; return x; } exports.swap$ = _build$1.swap$ = swap$; function swapRaw$(x, i, j) { var t = x[i]; x[i] = x[j]; x[j] = t; return x; } function swapRanges(x, i, I, j, J) { var [i, I] = indexRange(x, i, I); var [j, J] = indexRange(x, j, J); if (j < i) [i, I, j, J] = [j, J, i, I]; if (j < I) return x.slice(); return x.slice(0, i).concat(x.slice(j, J), x.slice(i, j), x.slice(I)); } exports.swapRanges = _build$1.swapRanges = swapRanges; function swapRanges$(x, i, I, j, J) { var [i, I] = indexRange(x, i, I); var [j, J] = indexRange(x, j, J); if (j < i) [i, I, j, J] = [j, J, i, I]; if (j < I) return x; var t = x.slice(i, I); x.splice(i, I - i, ...x.slice(j, J)); x.splice(j, J - j, ...t); return x; } exports.swapRanges$ = _build$1.swapRanges$ = swapRanges$; function remove(x, i) { var i = index(x, i); return x.slice(0, i).concat(x.slice(i + 1)); } exports.remove = _build$1.remove = remove; function remove$(x, i) { x.splice(i, 1); return x; } exports.remove$ = _build$1.remove$ = remove$; function removePath$(x, p) { var y = getPath(x, p.slice(0, -1)); if (is(y)) y.splice(last(p), 1); return x; } exports.removePath$ = _build$1.removePath$ = removePath$; function isSorted(x, fc = null, fm = null) { return searchUnsortedValue(x, fc, fm) === -1; } exports.isSorted = _build$1.isSorted = isSorted; function hasUnsortedValue(x, fc = null, fm = null) { return searchUnsortedValue(x, fc, fm) >= 0; } exports.hasUnsortedValue = _build$1.hasUnsortedValue = hasUnsortedValue; function searchUnsortedValue(x, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var X = x.length; if (X <= 1) return -1; var w0 = fm(x[0], 0, x); for (var i = 1; i < X; ++i) { var w = fm(x[i], i, x); if (fc(w0, w) > 0) return i; w0 = w; } return -1; } exports.searchUnsortedValue = _build$1.searchUnsortedValue = searchUnsortedValue; function sort(x, fc = null, fm = null, fs = null) { return sort$(x.slice(), fc, fm, fs); } exports.sort = _build$1.sort = sort; exports.toSorted = _build$1.toSorted = sort; function sort$(x, fc = null, fm = null, fs = null) { var fc = fc || extra_function_1.COMPARE; if (!fm && !fs) return x.sort(fc); var X = x.length; var fm = fm || extra_function_1.IDENTITY; var fs = fs || swapRaw$; return rangedPartialIntroSort$(x, 0, X, X, fc, fm, fs); } exports.sort$ = _build$1.sort$ = sort$; function rangedSort(x, i, I, fc = null, fm = null, fs = null) { return rangedSort$(x.slice(), i, I, fc, fm, fs); } exports.rangedSort = _build$1.rangedSort = rangedSort; function rangedSort$(x, i, I, fc = null, fm = null, fs = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var fs = fs || swapRaw$; var [i, I] = indexRange(x, i, I); return rangedPartialIntroSort$(x, i, I, I - i, fc, fm, fs); } exports.rangedSort$ = _build$1.rangedSort$ = rangedSort$; function partialSort(x, n, fc = null, fm = null, fs = null) { return partialSort$(x.slice(), n, fc, fm, fs); } exports.partialSort = _build$1.partialSort = partialSort; function partialSort$(x, n, fc = null, fm = null, fs = null) { return rangedPartialSort$(x, 0, x.length, n, fc, fm, fs); } exports.partialSort$ = _build$1.partialSort$ = partialSort$; function rangedPartialSort(x, i, I, n, fc = null, fm = null, fs = null) { return rangedPartialSort$(x.slice(), i, I, n, fc, fm, fs); } exports.rangedPartialSort = _build$1.rangedPartialSort = rangedPartialSort; function rangedPartialSort$(x, i, I, n, fc = null, fm = null, fs = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var fs = fs || swapRaw$; var [i, I] = indexRange(x, i, I); return rangedPartialIntroSort$(x, i, I, n, fc, fm, fs); } exports.rangedPartialSort$ = _build$1.rangedPartialSort$ = rangedPartialSort$; function rangedPartialIntroSort$(x, i, I, n, fc, fm, fs) { var d = Math.floor(Math.log2(I - i) * 2); var s = 16; return rangedPartialIntroSortDo$(x, i, I, d, s, n, fc, fm, fs); } function rangedPartialIntroSortDo$(x, i, I, d, s, n, fc, fm, fs) { if (n <= 0 || I - i <= 1) return x; if (I - i <= s) return rangedPartialInsertionSort$(x, i, I, n, fc, fm, fs); if (d <= 0) return rangedPartialHeapSort$(x, i, I, n, fc, fm, fs); var p = i + Math.floor((I - i) * Math.random()); var p = rangedQuickSortPartition$(x, i, I, p, fc, fm, fs); rangedPartialIntroSortDo$(x, i, p, d, s, Math.min(p - i, n), fc, fm, fs); rangedPartialIntroSortDo$(x, p + 1, I, d, s, Math.min(I - p - 1, n), fc, fm, fs); return x; } function rangedQuickSortPartition$(x, i, I, p, fc, fm, fs) { var wp = fm(x[p], p, x); var j = i - 1; fs(x, p, I - 1); for (var k = i; k < I - 1; ++k) { var wk = fm(x[k], k, x); if (fc(wk, wp) > 0) continue; fs(x, ++j, k); } fs(x, ++j, I - 1); return j; } function rangedPartialHeapSort$(x, i, I, n, fc, fm, fs) { rangedBuildReverseMinHeap$(x, i, I, fc, fm, fs); for (var r = I - 1; n > 0 && i < I; ++i, --n) { fs(x, i, r); rangedReverseMinHeapify$(x, i + 1, I, r, fc, fm, fs); } return x; } function rangedBuildReverseMinHeap$(x, i, I, fc, fm, fs) { for (var r = I - Math.floor((I - i) / 2); r < I; ++r) rangedReverseMinHeapify$(x, i, I, r, fc, fm, fs); } function rangedReverseMinHeapify$(x, i, I, r, fc, fm, fs) { var s = r; var lt = 2 * r - I; var rt = lt - 1; if (lt >= i && fc(fm(x[lt], lt, x), fm(x[s], s, x)) < 0) s = lt; if (rt >= i && fc(fm(x[rt], rt, x), fm(x[s], s, x)) < 0) s = rt; if (s !== r) { fs(x, s, r); rangedReverseMinHeapify$(x, i, I, s, fc, fm, fs); } } function rangedBuildMaxHeap$(x, i, I, fc, fm, fs) { for (var r = i + Math.floor((I - i) / 2) - 1; r >= i; --r) rangedMaxHeapify$(x, i, I, r, fc, fm, fs); } function rangedMaxHeapify$(x, i, I, r, fc, fm, fs) { var s = r; var lt = 2 * r - i + 1; var rt = lt + 1; if (lt < I && fc(fm(x[lt], lt, x), fm(x[s], s, x)) > 0) s = lt; if (rt < I && fc(fm(x[rt], rt, x), fm(x[s], s, x)) > 0) s = rt; if (s !== r) { fs(x, s, r); rangedMaxHeapify$(x, i, I, s, fc, fm, fs); } } function rangedPartialInsertionSort$(x, i, I, n, fc, fm, fs) { if (fs === swapRaw$) return rangedPartialInsertionSortSwapless$(x, i, I, n, fc, fm); else return rangedPartialInsertionSortSwap$(x, i, I, n, fc, fm, fs); } function rangedPartialInsertionSortSwap$(x, i, I, n, fc, fm, fs) { for (var j = i + 1; j < I; ++j) { var key = x[j]; var wkey = fm(key, j, x); for (var k = j - 1; k >= i && fc(fm(x[k], k, x), wkey) > 0; --k) fs(x, k, k + 1); } return x; } function rangedPartialInsertionSortSwapless$(x, i, I, n, fc, fm, fs) { for (var j = i + 1; j < I; ++j) { var key = x[j]; var wkey = fm(key, j, x); for (var k = j - 1; k >= i && fc(fm(x[k], k, x), wkey) > 0; --k) x[k + 1] = x[k]; x[k + 1] = key; } return x; } function minimum(x, fc = null, fm = null) { var i = searchMinimumValue(x, fc, fm); return x[i]; } exports.minimum = _build$1.minimum = minimum; exports.min = _build$1.min = minimum; function minimumEntry(x, fc = null, fm = null) { var i = searchMinimumValue(x, fc, fm); return [i, x[i]]; } exports.minimumEntry = _build$1.minimumEntry = minimumEntry; exports.minEntry = _build$1.minEntry = minimumEntry; function maximum(x, fc = null, fm = null) { var i = searchMaximumValue(x, fc, fm); return x[i]; } exports.maximum = _build$1.maximum = maximum; exports.max = _build$1.max = maximum; function maximumEntry(x, fc = null, fm = null) { var i = searchMaximumValue(x, fc, fm); return [i, x[i]]; } exports.maximumEntry = _build$1.maximumEntry = maximumEntry; exports.maxEntry = _build$1.maxEntry = maximumEntry; function range(x, fc = null, fm = null) { var [a, b] = rangeEntries(x, fc, fm); return [a[1], b[1]]; } exports.range = _build$1.range = range; function rangeEntries(x, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var X = x.length; if (X === 0) return [[-1, undefined], [-1, undefined]]; var v = x[0], w = fm(v, 0, x); var mi = 0, mv = v, mw = w; var ni = 0, nv = v, nw = w; for (var i = 1; i < X; ++i) { var v = x[i], w = fm(v, i, x); if (fc(w, mw) < 0) { mi = i; mv = v; mw = w; } if (fc(w, nw) > 0) { ni = i; nv = v; nw = w; } } return [[mi, mv], [ni, nv]]; } exports.rangeEntries = _build$1.rangeEntries = rangeEntries; function minimums(x, n, fc = null, fm = null) { var is = searchMinimumValues(x, n, fc, fm); return is.map(i => x[i]); } exports.minimums = _build$1.minimums = minimums; function minimumEntries(x, n, fc = null, fm = null) { var is = searchMinimumValues(x, n, fc, fm); return is.map(i => [i, x[i]]); } exports.minimumEntries = _build$1.minimumEntries = minimumEntries; function maximums(x, n, fc = null, fm = null) { var is = searchMaximumValues(x, n, fc, fm); return is.map(i => x[i]); } exports.maximums = _build$1.maximums = maximums; function maximumEntries(x, n, fc = null, fm = null) { var is = searchMaximumValues(x, n, fc, fm); return is.map(i => [i, x[i]]); } exports.maximumEntries = _build$1.maximumEntries = maximumEntries; function searchMinimumValue(x, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var X = x.length; if (X === 0) return -1; var mi = 0, mw = fm(x[0], 0, x); for (var i = 1; i < X; ++i) { var w = fm(x[i], i, x); if (fc(w, mw) < 0) { mi = i; mw = w; } } return mi; } exports.searchMinimumValue = _build$1.searchMinimumValue = searchMinimumValue; function searchMaximumValue(x, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var X = x.length; if (X === 0) return -1; var ni = 0, nw = fm(x[0], 0, x); for (var i = 1; i < X; ++i) { var w = fm(x[i], i, x); if (fc(w, nw) > 0) { ni = i; nw = w; } } return ni; } exports.searchMaximumValue = _build$1.searchMaximumValue = searchMaximumValue; function searchMinimumValues(x, n, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var X = x.length; var IH = Math.min(n, X); var ih = fromRange(0, IH); rangedBuildMaxHeap$(ih, 0, IH, fc, i => fm(x[i], i, x), swapRaw$); var wr = fm(x[ih[0]], ih[0], x); for (var i = n; i < X; ++i) { var w = fm(x[i], i, x); if (fc(w, wr) >= 0) continue; ih[0] = i; rangedMaxHeapify$(ih, 0, IH, 0, fc, i => fm(x[i], i, x), swapRaw$); var wr = fm(x[ih[0]], ih[0], x); } ih.sort((i, j) => fc(fm(x[i], i, x), fm(x[j], j, x))); return ih; } exports.searchMinimumValues = _build$1.searchMinimumValues = searchMinimumValues; function searchMaximumValues(x, n, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fd = (a, b) => -fc(a, b); return searchMinimumValues(x, n, fd, fm); } exports.searchMaximumValues = _build$1.searchMaximumValues = searchMaximumValues; function isEqual(x, y, fc = null, fm = null) { var X = x.length, Y = y.length; return X === Y && compare(x, y, fc, fm) === 0; } exports.isEqual = _build$1.isEqual = isEqual; function compare(x, y, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var X = x.length; var Y = y.length; for (var i = 0, I = Math.min(X, Y); i < I; ++i) { var wx = fm(x[i], i, x); var wy = fm(y[i], i, y); var c = fc(wx, wy); if (c !== 0) return c; } return Math.sign(X - Y); } exports.compare = _build$1.compare = compare; function head(x, vd) { return x.length > 0 ? x[0] : vd; } exports.head = _build$1.head = head; exports.front = _build$1.front = head; exports.first = _build$1.first = head; function tail(x) { return x.slice(1); } exports.tail = _build$1.tail = tail; function init(x) { return x.slice(0, -1); } exports.init = _build$1.init = init; function last(x, vd) { return x.length > 0 ? x[x.length - 1] : vd; } exports.last = _build$1.last = last; exports.back = _build$1.back = last; function middle(x, i, n = 1) { var i = index(x, i); var n = Math.max(n, 0); return x.slice(i, i + n); } exports.middle = _build$1.middle = middle; function slice(x, i = 0, I = x.length) { return x.slice(i, I); } exports.slice = _build$1.slice = slice; function slice$(x, i = 0, I = x.length) { x.copyWithin(0, i, I); x.length = length(x, i, I); return x; } exports.slice$ = _build$1.slice$ = slice$; function includes(x, v, i = 0) { return x.includes(v, i); } exports.includes = _build$1.includes = includes; function hasValue(x, v, fc = null, fm = null) { return searchValue(x, v, fc, fm) >= 0; } exports.hasValue = _build$1.hasValue = hasValue; function searchValue(x, v, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var w = fm(v, 0, null), i = -1; for (var vx of x) { var wx = fm(vx, ++i, x); if (fc(wx, w) === 0) return i; } return -1; } exports.searchValue = _build$1.searchValue = searchValue; function searchValueRight(x, v, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var w = fm(v, 0, null); for (var i = x.length - 1; i >= 0; --i) { var wx = fm(x[i], i, x); if (fc(wx, w) === 0) return i; } return -1; } exports.searchValueRight = _build$1.searchValueRight = searchValueRight; function searchValueAll(x, v, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var w = fm(v, 0, null); var i = -1, a = []; for (var vx of x) { var wx = fm(vx, ++i, x); if (fc(wx, w) === 0) a.push(i); } return a; } exports.searchValueAll = _build$1.searchValueAll = searchValueAll; function searchAdjacentDuplicateValue(x, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var X = x.length; if (X <= 1) return -1; var w0 = fm(x[0], 0, x); for (var i = 1; i < X; ++i) { var w = fm(x[i], i, x); if (fc(w0, w) === 0) return i; w0 = w; } return -1; } exports.searchAdjacentDuplicateValue = _build$1.searchAdjacentDuplicateValue = searchAdjacentDuplicateValue; exports.searchAdjacentDuplicate = _build$1.searchAdjacentDuplicate = searchAdjacentDuplicateValue; function searchMismatchedValue(x, y, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var X = x.length; var Y = y.length; for (var i = 0, I = Math.min(X, Y); i < I; ++i) { var wx = fm(x[i], i, x); var wy = fm(y[i], i, y); if (fc(wx, wy) !== 0) return i; } return X === Y ? -1 : I; } exports.searchMismatchedValue = _build$1.searchMismatchedValue = searchMismatchedValue; exports.searchMismatch = _build$1.searchMismatch = searchMismatchedValue; function hasPrefix(x, y, fc = null, fm = null) { var Y = y.length; return Y === 0 || compare(x.slice(0, Y), y, fc, fm) === 0; } exports.hasPrefix = _build$1.hasPrefix = hasPrefix; exports.startsWith = _build$1.startsWith = hasPrefix; function hasSuffix(x, y, fc = null, fm = null) { var Y = y.length; return Y === 0 || compare(x.slice(-Y), y, fc, fm) === 0; } exports.hasSuffix = _build$1.hasSuffix = hasSuffix; exports.endsWith = _build$1.endsWith = hasSuffix; function hasInfix(x, y, fc = null, fm = null) { return searchInfix(x, y, fc, fm) >= 0; } exports.hasInfix = _build$1.hasInfix = hasInfix; function hasSubsequence(x, y, fc = null, fm = null) { return searchSubsequence(x, y, fc, fm) >= 0; } exports.hasSubsequence = _build$1.hasSubsequence = hasSubsequence; function hasPermutation(x, y, fc = null, fm = null) { var x1 = fm ? x.map(fm) : x.slice(); var y1 = fm ? y.map(fm) : y.slice(); return hasSubsequence(x1.sort(), y1.sort(), fc, fm); } exports.hasPermutation = _build$1.hasPermutation = hasPermutation; function prefixes(x, n = -1) { return [...iprefixes(x, n)]; } exports.prefixes = _build$1.prefixes = prefixes; function* iprefixes(x, n = -1) { var X = x.length; if (n > X) return; if (n >= 0) { yield x.slice(0, n); return; } for (var i = 0; i <= X; ++i) yield x.slice(0, i); } exports.iprefixes = _build$1.iprefixes = iprefixes; function suffixes(x, n = -1) { return [...isuffixes(x, n)]; } exports.suffixes = _build$1.suffixes = suffixes; function* isuffixes(x, n = -1) { var X = x.length; if (n > X) return; if (n >= 0) { yield x.slice(x.length - n); return; } for (var i = 0; i <= X; ++i) yield x.slice(i); } exports.isuffixes = _build$1.isuffixes = isuffixes; function infixes(x, n = -1) { return [...iinfixes(x, n)]; } exports.infixes = _build$1.infixes = infixes; function iinfixes(x, n = -1) { if (n >= 0) return infixesFixed(x, n); else return infixesAll(x); } exports.iinfixes = _build$1.iinfixes = iinfixes; function* infixesFixed(x, n) { var X = x.length; if (n > X) return; if (n === 0) { yield []; return; } for (var i = 0, I = X - n + 1; i < I; ++i) yield x.slice(i, i + n); } function* infixesAll(x) { var X = x.length; yield []; for (var i = 0; i < X; ++i) { for (var j = i + 1; j <= X; ++j) yield x.slice(i, j); } } function subsequences(x, n = -1) { return [...isubsequences(x, n)]; } exports.subsequences = _build$1.subsequences = subsequences; function* isubsequences(x, n = -1) { var X = x.length; if (n > X) return; if (n === X) { yield x; return; } if (n === 0 || X === 0) { yield []; return; } var y = x.slice(0, -1); yield* isubsequences(y, n); for (var s of isubsequences(y, n - 1)) { s.push(x[X - 1]); yield s; } } exports.isubsequences = _build$1.isubsequences = isubsequences; function permutations(x, n = -1) { return [...ipermutations(x, n)]; } exports.permutations = _build$1.permutations = permutations; function* ipermutations(x, n = -1) { var X = x.length; if (n > X) return; var i = n < 0 ? 0 : n; var I = n < 0 ? X : n; for (; i <= I; ++i) yield* ipermutationsFixed(x, i); } exports.ipermutations = _build$1.ipermutations = ipermutations; function* ipermutationsFixed(x, n) { var X = x.length; if (X === 0 || n === 0) { yield []; return; } for (var i = 0; i < X; ++i) { var y = splice(x, i, 1); for (var p of ipermutationsFixed(y, n - 1)) yield [x[i], ...p]; } } function searchInfix(x, y, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var X = x.length, Y = y.length; for (var i = 0; i <= X - Y; ++i) if (isInfixAt(x, y, i, fc, fm)) return i; return -1; } exports.searchInfix = _build$1.searchInfix = searchInfix; function searchInfixRight(x, y, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var X = x.length, Y = y.length; for (var i = X - Y; i >= 0; --i) if (isInfixAt(x, y, i, fc, fm)) return i; return -1; } exports.searchInfixRight = _build$1.searchInfixRight = searchInfixRight; function searchInfixAll(x, y, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var X = x.length, Y = y.length, a = []; for (var i = 0; i <= X - Y; ++i) if (isInfixAt(x, y, i, fc, fm)) a.push(i); return a; } exports.searchInfixAll = _build$1.searchInfixAll = searchInfixAll; function isInfixAt(x, y, i, fc, fm) { var Y = y.length; for (var j = 0; j < Y; ++j) { var wx = fm(x[i + j], i + j, x); var wy = fm(y[j], j, y); if (fc(wx, wy) !== 0) return false; } return true; } function searchSubsequence(x, y, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var y1 = [...y].map(fm), Y = y1.length; var a = -1, i = -1, j = 0; for (var vx of x) { var wx = fm(vx, ++i, x); if (fc(wx, y1[j]) !== 0) continue; if (a < 0) a = i; if (++j >= Y) return a; } return -1; } exports.searchSubsequence = _build$1.searchSubsequence = searchSubsequence; function randomValue(x, fr = Math.random) { var i = Math.floor(fr() * x.length); return x[i]; } exports.randomValue = _build$1.randomValue = randomValue; exports.value = _build$1.value = randomValue; function randomPrefix(x, n = -1, fr = Math.random) { var X = x.length; if (n > X) return null; var n = n >= 0 ? n : Math.floor((X + 1) * fr()); return x.slice(0, n); } exports.randomPrefix = _build$1.randomPrefix = randomPrefix; exports.prefix = _build$1.prefix = randomPrefix; function randomSuffix(x, n = -1, fr = Math.random) { var X = x.length; if (n > X) return null; var n = n >= 0 ? n : Math.floor((X + 1) * fr()); return x.slice(X - n); } exports.randomSuffix = _build$1.randomSuffix = randomSuffix; exports.suffix = _build$1.suffix = randomSuffix; function randomInfix(x, n = -1, fr = Math.random) { var X = x.length; if (n > X) return null; var n = n >= 0 ? n : randomInfixLength(X, fr()); var i = Math.floor((X + 1 - n) * fr()); return x.slice(i, i + n); } exports.randomInfix = _build$1.randomInfix = randomInfix; exports.infix = _build$1.infix = randomInfix; function randomInfixLength(X, r) { var C = 0.5 * X * (X + 1) + 1; var n = 0.5 * Math.sqrt(1 + 8 * r * C) - 0.5; return X + 1 - Math.floor(n + 1); } function randomSubsequence(x, n = -1, fr = Math.random) { var X = x.length; if (n > X) return null; if (n >= 0) return randomSubsequenceFixed(x, n, fr); else return randomSubsequenceAll(x, fr); } exports.randomSubsequence = _build$1.randomSubsequence = randomSubsequence; exports.subsequence = _build$1.subsequence = randomSubsequence; function randomSubsequenceFixed(x, n, fr) { var is = fromRange(0, x.length); randomPermutation$(is, n, fr).sort(); return getAll(x, is); } function randomSubsequenceAll(x, fr) { var a = []; for (var v of x) if (fr() < 0.5) a.push(v); return a; } function randomPermutation(x, n = -1, fr = Math.random) { var X = x.length; if (n > X) return null; return randomPermutation$(x.slice(), n, fr); } exports.randomPermutation = _build$1.randomPermutation = randomPermutation; exports.permutation = _build$1.permutation = randomPermutation; function randomPermutation$(x, n = -1, fr = Math.random) { var X = x.length; if (n > X) return x; var n = n >= 0 ? n : Math.floor((X + 1) * fr()); for (var i = 0; i < n; ++i) { var j = i + Math.floor((X - i) * fr()); var t = x[i]; x[i] = x[j]; x[j] = t; } x.length = n; return x; } exports.randomPermutation$ = _build$1.randomPermutation$ = randomPermutation$; exports.permutation$ = _build$1.permutation$ = randomPermutation$; exports.permute$ = _build$1.permute$ = randomPermutation$; exports.shuffle$ = _build$1.shuffle$ = randomPermutation$; function find(x, ft) { return x.find(ft); } exports.find = _build$1.find = find; function findRight(x, ft) { for (var i = x.length - 1; i >= 0; --i) if (ft(x[i], i, x)) return x[i]; } exports.findRight = _build$1.findRight = findRight; function take(x, n = 1) { var n = Math.max(n, 0); return x.slice(0, n); } exports.take = _build$1.take = take; exports.left = _build$1.left = take; function takeRight(x, n = 1) { var X = x.length; var n = Math.min(Math.max(n, 0), X); return x.slice(X - n); } exports.takeRight = _build$1.takeRight = takeRight; exports.right = _build$1.right = takeRight; function takeWhile(x, ft) { return x.slice(0, scanWhile(x, ft)); } exports.takeWhile = _build$1.takeWhile = takeWhile; function takeWhileRight(x, ft) { return x.slice(scanWhileRight(x, ft)); } exports.takeWhileRight = _build$1.takeWhileRight = takeWhileRight; function drop(x, n = 1) { var n = Math.max(n, 0); return x.slice(n); } exports.drop = _build$1.drop = drop; function dropRight(x, n = 1) { var X = x.length; var n = Math.min(Math.max(n, 0), X); return x.slice(0, X - n); } exports.dropRight = _build$1.dropRight = dropRight; function dropWhile(x, ft) { return x.slice(scanWhile(x, ft)); } exports.dropWhile = _build$1.dropWhile = dropWhile; function dropWhileRight(x, ft) { return x.slice(0, scanWhileRight(x, ft)); } exports.dropWhileRight = _build$1.dropWhileRight = dropWhileRight; function scanWhile(x, ft) { var i = -1; for (var v of x) if (!ft(v, ++i, x)) return i; return ++i; } exports.scanWhile = _build$1.scanWhile = scanWhile; function scanWhileRight(x, ft) { for (var i = x.length - 1; i >= 0; --i) if (!ft(x[i], i, x)) break; return ++i; } exports.scanWhileRight = _build$1.scanWhileRight = scanWhileRight; function scanUntil(x, ft) { var i = -1; for (var v of x) if (ft(v, ++i, x)) return i; return ++i; } exports.scanUntil = _build$1.scanUntil = scanUntil; function scanUntilRight(x, ft) { for (var i = x.length - 1; i >= 0; --i) if (ft(x[i], i, x)) break; return ++i; } exports.scanUntilRight = _build$1.scanUntilRight = scanUntilRight; function indexOf(x, v, i = 0) { return x.indexOf(v, i); } exports.indexOf = _build$1.indexOf = indexOf; function lastIndexOf(x, v, i = x.length - 1) { return x.lastIndexOf(v, i); } exports.lastIndexOf = _build$1.lastIndexOf = lastIndexOf; function search(x, ft) { return x.findIndex(ft); } exports.search = _build$1.search = search; exports.findIndex = _build$1.findIndex = search; function searchRight(x, ft) { for (var i = x.length - 1; i >= 0; --i) if (ft(x[i], i, x)) return i; return -1; } exports.searchRight = _build$1.searchRight = searchRight; exports.findLastIndex = _build$1.findLastIndex = searchRight; function searchAll(x, ft) { var i = -1, a = []; for (var v of x) if (ft(v, ++i, x)) a.push(i); return a; } exports.searchAll = _build$1.searchAll = searchAll; function forEach(x, fp) { x.forEach(fp); } exports.forEach = _build$1.forEach = forEach; function some(x, ft = null) { if (ft) return x.some(ft); else return someBoolean(x); } exports.some = _build$1.some = some; exports.anyOf = _build$1.anyOf = some; function someBoolean(x) { for (var i = 0, I = x.length; i < I; ++i) if (x[i]) return true; return false; } function every(x, ft = null) { if (ft) return x.every(ft); else return everyBoolean(x); } exports.every = _build$1.every = every; exports.allOf = _build$1.allOf = every; function everyBoolean(x) { for (var i = 0, I = x.length; i < I; ++i) if (!x[i]) return false; return true; } function map(x, fm) { return x.map(fm); } exports.map = _build$1.map = map; function map$(x, fm) { for (var i = 0, I = x.length; i < I; ++i) x[i] = fm(x[i], i, x); return x; } exports.map$ = _build$1.map$ = map$; function reduce(x, fr, acc) { var init = arguments.length <= 2; return init ? x.reduce(fr) : x.reduce(fr, acc); } exports.reduce = _build$1.reduce = reduce; function reduceRight(x, fr, acc) { var init = arguments.length <= 2; for (var i = x.length - 1; i >= 0; --i) { if (init) { acc = x[i]; init = false; } else acc = fr(acc, x[i], i, x); } return acc; } exports.reduceRight = _build$1.reduceRight = reduceRight; function filter(x, ft) { return x.filter(ft); } exports.filter = _build$1.filter = filter; exports.findAll = _build$1.findAll = filter; function filter$(x, ft) { for (var i = 0, j = 0, I = x.length; i < I; ++i) if (ft(x[i], i, x)) x[j++] = x[i]; x.length = j; return x; } exports.filter$ = _build$1.filter$ = filter$; function filterAt(x, is) { var X = x.length, a = []; for (var i of is) if (i >= 0 && i < X) a.push(x[i]); return a; } exports.filterAt = _build$1.filterAt = filterAt; function reject(x, ft) { var i = -1, a = []; for (var v of x) if (!ft(v, ++i, x)) a.push(v); return a; } exports.reject = _build$1.reject = reject; function reject$(x, ft) { for (var i = 0, j = 0, I = x.length; i < I; ++i) if (!ft(x[i], i, x)) x[j++] = x[i]; x.length = j; return x; } exports.reject$ = _build$1.reject$ = reject$; function rejectAt(x, is) { var i = -1, a = []; for (var v of x) if (!is.includes(++i)) a.push(v); return a; } exports.rejectAt = _build$1.rejectAt = rejectAt; function flat(x, n = -1, fm = null, ft = null) { var fm = fm || extra_function_1.IDENTITY; var ft = ft || is; return flatTo$([], x, n, fm, ft); } exports.flat = _build$1.flat = flat; function flatTo$(a, x, n, fm, ft) { var i = -1; for (var v of x) { var w = fm(v, ++i, x); if (n !== 0 && ft(w, i, x)) flatTo$(a, v, n - 1, fm, ft); else a.push(w); } return a; } function flatMap(x, fm = null, ft = null) { var fm = fm || extra_function_1.IDENTITY; var ft = ft || is; var i = -1, a = []; for (var v of x) { var w = fm(v, ++i, x); if (ft(w, i, x)) concat$(a, w); else a.push(w); } return a; } exports.flatMap = _build$1.flatMap = flatMap; function exclusiveScan(x, fr, acc) { var a = []; for (var i = 0, I = x.length; i < I; ++i) { a.push(acc); acc = fr(acc, x[i], i, x); } return a; } exports.exclusiveScan = _build$1.exclusiveScan = exclusiveScan; function exclusiveScan$(x, fr, acc) { for (var i = 0, I = x.length; i < I; ++i) { var v = x[i]; x[i] = acc; acc = fr(acc, v, i, x); } return x; } exports.exclusiveScan$ = _build$1.exclusiveScan$ = exclusiveScan$; function inclusiveScan(x, fr, acc) { var init = arguments.length <= 2, a = []; for (var i = 0, I = x.length; i < I; ++i) { acc = init ? x[i] : fr(acc, x[i], i, x); a.push(acc); init = false; } return a; } exports.inclusiveScan = _build$1.inclusiveScan = inclusiveScan; exports.accumulate = _build$1.accumulate = inclusiveScan; function inclusiveScan$(x, fr, acc) { for (var i = 0, I = x.length; i < I; ++i) acc = x[i] = fr(acc, x[i], i, x); return x; } exports.inclusiveScan$ = _build$1.inclusiveScan$ = inclusiveScan$; function adjacentCombine(x, fc, acc) { var a = []; if (x.length > 0) a.push(fc(acc, x[0])); for (var i = 1, I = x.length; i < I; ++i) a.push(fc(x[i - 1], x[i])); return a; } exports.adjacentCombine = _build$1.adjacentCombine = adjacentCombine; function adjacentCombine$(x, fc, acc) { var X = x.length; if (X === 0) return x; var v = x[0]; x[0] = fc(acc, v); for (var i = 1; i < X; ++i) { var w = x[i]; x[i] = fc(v, w); v = w; } return x; } exports.adjacentCombine$ = _build$1.adjacentCombine$ = adjacentCombine$; function intersperse(x, v) { var a = [], i = -1; for (var u of x) { if (++i > 0) a.push(v); a.push(u); } return a; } exports.intersperse = _build$1.intersperse = intersperse; function interpolate(x, fc) { var a = [], u, i = -1; for (var v of x) { if (++i > 0) a.push(fc(u, v)); a.push(u = v); } return a; } exports.interpolate = _build$1.interpolate = interpolate; function intermix(x, y, m = 1, n = 1, s = m, t = n) { var X = x.length, Y = y.length, a = []; var m = Math.max(m, 0); var n = Math.max(n, 0); var s = Math.max(s, 1); var t = Math.max(t, 1); for (var i = 0, j = 0; i < X; i += s) { if (i > 0) { for (var k = j, K = k + n; k < K; ++k) a.push(y[k % Y]); j += t; } concat$(a, x.slice(i, i + m)); } return a; } exports.intermix = _build$1.intermix = intermix; function interleave(xs) { var a = []; for (var i = 0;; ++i) { var n = 0; for (var x of xs) if (i < x.length) { a.push(x[i]); ++n; } if (n === 0) break; } return a; } exports.interleave = _build$1.interleave = interleave; function zip(xs, fm = null, fe = null, vd) { var fm = fm || extra_function_1.IDENTITY; var fe = fe || some; var X = xs.length, a = []; if (X === 0) return a; var ds = new Array(X).fill(false); var ls = xs.map(x => x.length); for (var i = 0;; ++i) { for (var j = 0, vs = []; j < X; ++j) { ds[j] = i >= ls[j]; vs[j] = ds[j] ? vd : xs[j][i]; } if (fe(ds)) break; a.push(fm(vs, i, null)); } return a; } exports.zip = _build$1.zip = zip; function fill(x, v, i = 0, I = x.length) { return x.slice().fill(v, i, I); } exports.fill = _build$1.fill = fill; function fill$(x, v, i = 0, I = x.length) { return x.fill(v, i, I); } exports.fill$ = _build$1.fill$ = fill$; function push(x, ...vs) { return x.concat(vs); } exports.push = _build$1.push = push; exports.pushBack = _build$1.pushBack = push; exports.append = _build$1.append = push; function push$(x, ...vs) { x.push(...vs); return x; } exports.push$ = _build$1.push$ = push$; exports.pushBack$ = _build$1.pushBack$ = push$; exports.append$ = _build$1.append$ = push$; function pop(x) { return x.slice(0, -1); } exports.pop = _build$1.pop = pop; exports.popBack = _build$1.popBack = pop; exports.popBack$ = _build$1.popBack$ = pop; function pop$(x) { x.pop(); return x; } exports.pop$ = _build$1.pop$ = pop$; function shift(x) { return x.slice(1); } exports.shift = _build$1.shift = shift; exports.popFront = _build$1.popFront = shift; function shift$(x) { x.shift(); return x; } exports.shift$ = _build$1.shift$ = shift$; exports.popFront$ = _build$1.popFront$ = shift$; function unshift(x, ...vs) { return concat$(vs, x); } exports.unshift = _build$1.unshift = unshift; exports.pushFront = _build$1.pushFront = unshift; exports.prepend = _build$1.prepend = unshift; function unshift$(x, ...vs) { x.unshift(...vs); return x; } exports.unshift$ = _build$1.unshift$ = unshift$; exports.pushFront$ = _build$1.pushFront$ = unshift$; exports.prepend$ = _build$1.prepend$ = unshift$; function copy(x, y, j = 0, i = 0, I = y.length) { return copy$(x.slice(), y, j, i, I); } exports.copy = _build$1.copy = copy; function copy$(x, y, j = 0, i = 0, I = y.length) { var j = index(x, j); var [i, I] = indexRange(y, i, I); for (; i < I; ++i, ++j) x[j] = y[i]; return x; } exports.copy$ = _build$1.copy$ = copy$; function copyWithin(x, j = 0, i = 0, I = x.length) { return x.slice().copyWithin(j, i, I); } exports.copyWithin = _build$1.copyWithin = copyWithin; function copyWithin$(x, j = 0, i = 0, I = x.length) { return x.copyWithin(j, i, I); } exports.copyWithin$ = _build$1.copyWithin$ = copyWithin$; function moveWithin(x, j = 0, i = 0, I = x.length) { var j = index(x, j); var [i, I] = indexRange(x, i, I); if (j < i) return movePart(x, j, i, I); else return movePart(x, i, I, j); } exports.moveWithin = _build$1.moveWithin = moveWithin; function movePart(x, i, j, k) { return x.slice(0, i).concat(x.slice(j, k), x.slice(i, j), x.slice(k)); } function moveWithin$(x, j = 0, i = 0, I = x.length) { var j = index(x, j); var [i, I] = indexRange(x, i, I); var p = x.slice(i, I), P = p.length; if (j < i) x.copyWithin(j + P, j, i); else x.copyWithin(i, I, j); return copy$(x, p, j < i ? j : j - P); } exports.moveWithin$ = _build$1.moveWithin$ = moveWithin$; function splice(x, i, n = x.length, ...vs) { var i = index(x, i); var n = Math.max(n, 0); return concat$(x.slice(0, i), vs, x.slice(i + n)); } exports.splice = _build$1.splice = splice; exports.toSpliced = _build$1.toSpliced = splice; function splice$(x, i, n = x.length, ...vs) { x.splice(i, n, ...vs); return x; } exports.splice$ = _build$1.splice$ = splice$; function count(x, ft) { var i = -1, a = 0; for (var v of x) if (ft(v, ++i, x)) ++a; return a; } exports.count = _build$1.count = count; function countEach(x, fm = null) { var fm = fm || extra_function_1.IDENTITY; var i = -1, a = new Map(); for (var v of x) { var w = fm(v, ++i, x); a.set(w, (a.get(w) || 0) + 1); } return a; } exports.countEach = _build$1.countEach = countEach; exports.countAs = _build$1.countAs = countEach; function partition(x, ft) { var t = [], f = [], i = -1; for (var v of x) { if (ft(v, ++i, x)) t.push(v); else f.push(v); } return [t, f]; } exports.partition = _build$1.partition = partition; function partitionEach(x, fm = null) { var fm = fm || extra_function_1.IDENTITY; var i = -1, a = new Map(); for (var v of x) { var w = fm(v, ++i, x); if (!a.has(w)) a.set(w, []); a.get(w).push(v); } return a; } exports.partitionEach = _build$1.partitionEach = partitionEach; exports.groupToMap = _build$1.groupToMap = partitionEach; exports.partitionAs = _build$1.partitionAs = partitionEach; function split(x, ft) { var i = -1, a = [], b = []; for (var v of x) { if (!ft(v, ++i, x)) b.push(v); else if (b.length) { a.push(b); b = []; } } if (b.length) a.push(b); return a; } exports.split = _build$1.split = split; function splitAt(x, is) { var i = -1, a = [], b = []; for (var v of x) { if (!is.includes(++i)) b.push(v); else if (b.length) { a.push(b); b = []; } } if (b.length) a.push(b); return a; } exports.splitAt = _build$1.splitAt = splitAt; function cut(x, ft) { var j = 0, a = []; for (var i = 0, I = x.length; i < I; ++i) { if (!ft(x[i], i, x)) continue; a.push(x.slice(j, i)); j = i; } a.push(x.slice(j)); return a; } exports.cut = _build$1.cut = cut; function cutRight(x, ft) { var j = 0, a = []; for (var i = 0, I = x.length; i < I; ++i) { if (!ft(x[i], i, x)) continue; a.push(x.slice(j, i + 1)); j = i + 1; } a.push(x.slice(j)); return a; } exports.cutRight = _build$1.cutRight = cutRight; function cutAt(x, is) { var X = x.length; var j = 0, a = []; for (var i of is) { var i = i < 0 ? X + i : i; a.push(x.slice(j, i)); j = Math.max(j, i); } a.push(x.slice(j)); return a; } exports.cutAt = _build$1.cutAt = cutAt; function cutAtRight(x, is) { var X = x.length; var j = 0, a = []; for (var i of is) { var i = i < 0 ? X + i : i; a.push(x.slice(j, i + 1)); j = Math.max(j, i + 1); } a.push(x.slice(j)); return a; } exports.cutAtRight = _build$1.cutAtRight = cutAtRight; function group(x, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var a = [], b = []; var u, i = -1; for (var v of x) { var w = fm(v, ++i, x); if (i === 0 || fc(u, w) === 0) b.push(v); else { a.push(b); b = [v]; } u = w; } a.push(b); return a; } exports.group = _build$1.group = group; function chunk(x, n = 1, s = n) { var a = []; if (n < 0) return a; var s = Math.max(s, 1); for (var i = 0, I = x.length; i < I; i += s) a.push(x.slice(i, i + n)); return a; } exports.chunk = _build$1.chunk = chunk; function concat(...xs) { return [].concat(...xs); } exports.concat = _build$1.concat = concat; function concat$(x, ...ys) { for (var y of ys) x.push(...y); return x; } exports.concat$ = _build$1.concat$ = concat$; function join(x, sep = ",") { return x.join(sep); } exports.join = _build$1.join = join; function cycle(x, i = 0, n = x.length) { var X = x.length; if (n <= 0 || X === 0) return []; var i = (0, extra_math_1.mod)(i, X); var a = x.slice(i, i + n); n -= a.length; for (var m = 0, M = Math.floor(n / X); m < M; ++m) concat$(a, x); return concat$(a, x.slice(0, n % X)); } exports.cycle = _build$1.cycle = cycle; function repeat(x, n = 1) { for (var a = []; n > 0; --n) concat$(a, x); return a; } exports.repeat = _build$1.repeat = repeat; function reverse(x) { return x.slice().reverse(); } exports.reverse = _build$1.reverse = reverse; exports.toReversed = _build$1.toReversed = reverse; function reverse$(x) { return x.reverse(); } exports.reverse$ = _build$1.reverse$ = reverse$; function rotate(x, n = 0) { var n = (0, extra_math_1.mod)(n, x.length); return concat$(x.slice(n), x.slice(0, n)); } exports.rotate = _build$1.rotate = rotate; function rotate$(x, n = 0) { var n = (0, extra_math_1.mod)(n, x.length); var y = x.slice(0, n); x.copyWithin(0, n); return copy$(x, y, x.length - n); } exports.rotate$ = _build$1.rotate$ = rotate$; function isUnique(x, fc = null, fm = null) { if (fc) return isUniqueDual(x, fc, fm); else return isUniqueMap(x, fm); } exports.isUnique = _build$1.isUnique = isUnique; function isUniqueMap(x, fm = null) { var fm = fm || extra_function_1.IDENTITY; var s = new Set(), i = -1; for (var v of x) { var w = fm(v, ++i, x); if (s.has(w)) return false; s.add(w); } return true; } function isUniqueDual(x, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var x1 = [...x].map(fm); for (var wx of x1) { for (var wy of x1) if (fc(wx, wy) === 0) return false; } return true; } function isDisjoint(x, y, fc = null, fm = null) { if (fc) return isDisjointDual(x, y, fc, fm); else return isDisjointMap(x, y, fm); } exports.isDisjoint = _build$1.isDisjoint = isDisjoint; function isDisjointMap(x, y, fm = null) { var fm = fm || extra_function_1.IDENTITY; var s = toSet(y, fm), i = -1; for (var v of x) { var w = fm(v, ++i, x); if (s.has(w)) return false; } return true; } function isDisjointDual(x, y, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var y1 = [...y].map(fm), i = -1; for (var vx of x) { var wx = fm(vx, ++i, x); for (var wy of y1) if (fc(wx, wy) === 0) return false; } return true; } function unique(x, fc = null, fm = null) { if (fc) return uniqueDual(x, fc, fm); else return uniqueMap(x, fm); } exports.unique = _build$1.unique = unique; function uniqueMap(x, fm = null) { var fm = fm || extra_function_1.IDENTITY; var s = new Set(); var i = -1, a = []; for (var v of x) { var w = fm(v, ++i, x); if (s.has(w)) continue; s.add(w); a.push(v); } return a; } function uniqueDual(x, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var i = -1, s = [], a = []; x: for (var vx of x) { var wx = fm(vx, ++i, x); for (var ws of s) if (fc(ws, wx) === 0) continue x; s.push(wx); a.push(vx); } return a; } function union(x, y, fc = null, fm = null) { return union$(x.slice(), y, fc, fm); } exports.union = _build$1.union = union; function union$(x, y, fc = null, fm = null) { if (fc) return unionDual$(x, y, fc, fm); else return unionMap$(x, y, fm); } exports.union$ = _build$1.union$ = union$; function unionMap$(x, y, fm = null) { var fm = fm || extra_function_1.IDENTITY; var s = toSet(x, fm), i = -1; for (var vy of y) { var wy = fm(vy, ++i, y); if (!s.has(wy)) x.push(vy); } return x; } function unionDual$(x, y, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var x1 = x.map(fm), i = -1; y: for (var vy of y) { var wy = fm(vy, ++i, y); for (var wx of x1) if (fc(wx, wy) === 0) continue y; x.push(vy); } return x; } function intersection(x, y, fc = null, fm = null) { if (fc) return intersectionDual(x, y, fc, fm); else return intersectionMap(x, y, fm); } exports.intersection = _build$1.intersection = intersection; function intersectionMap(x, y, fm = null) { var fm = fm || extra_function_1.IDENTITY; var s = toSet(y, fm); var i = -1, a = []; for (var vx of x) { var wx = fm(vx, ++i, x); if (s.has(wx)) a.push(vx); } return a; } function intersectionDual(x, y, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var y1 = [...y].map(fm); var i = -1, a = []; x: for (var vx of x) { var wx = fm(vx, ++i, x); for (var wy of y1) if (fc(wx, wy) === 0) { a.push(vx); continue x; } } return a; } function difference(x, y, fc = null, fm = null) { if (fc) return differenceDual(x, y, fc, fm); else return differenceMap(x, y, fm); } exports.difference = _build$1.difference = difference; function differenceMap(x, y, fm = null) { var fm = fm || extra_function_1.IDENTITY; var s = toSet(y, fm); var i = -1, a = []; for (var vx of x) { var wx = fm(vx, ++i, x); if (!s.has(wx)) a.push(vx); } return a; } function differenceDual(x, y, fc = null, fm = null) { var fc = fc || extra_function_1.COMPARE; var fm = fm || extra_function_1.IDENTITY; var y1 = [...y].map(fm); var i = -1, a = []; x: for (var vx of x) { var wx = fm(vx, ++i, x); for (var wy of y1) if (fc(wx, wy) === 0) continue x; a.push(vx); } return a; } function symmetricDifference(x, y, fc = null, fm = null) { var x0 = fromIterable$(x); var y0 = fromIterable$(y); var ax = difference(x0, y0, fc, fm); var ay = difference(y0, x0, fc, fm); return concat$(ax, ay); } exports.symmetricDifference = _build$1.symmetricDifference = symmetricDifference; function cartesianProduct(xs, fm = null) { var fm = fm || extra_function_1.IDENTITY; var XS = xs.length, a = []; if (XS === 0) return a; var is = new Array(XS).fill(0); var ls = xs.map(x => x.length); if (ls.some(l => l === 0)) return a; for (var i = 0;; ++i) { for (var j = 0, vs = []; j < XS; ++j) vs.push(xs[j][is[j]]); a.push(fm(vs, i, null)); for (var r = XS - 1; r >= 0; --r) { if (++is[r] < ls[r]) break; is[r] = 0; } if (r < 0) break; } return a; } exports.cartesianProduct = _build$1.cartesianProduct = cartesianProduct; exports.default = _build$1;