UNPKG

simple-pure-utils

Version:

Funciones puras para manipulación de objetos, arreglos, promesas y observables

126 lines 11.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.maxDigit = exports.zeroPad = exports.maxValue = exports.minValue = exports.random = exports.toBaseN = exports.midpoint = exports.half = exports.increment = exports.add = exports.halfAdder = exports.createBase = void 0; const logic_1 = require("../logic"); function createBase(digits) { const arr = digits.split(""); return { charMap: arr, digitMap: (0, logic_1.arrayToMap)(arr, x => x, (x, i) => i) }; } exports.createBase = createBase; function digitAt(a, index, system) { if (index < 0) return 0; return system.digitMap[a.substr(index, 1)]; } function toChar(digit, system) { return system.charMap[digit]; } function base(system) { return system.charMap.length; } function zero(system) { return system.charMap[0]; } function one(system) { return system.charMap[1]; } function halfAdder(a, b, carry, system) { if (a.length != 1 || b.length != 1) throw new Error(); const ret = digitAt(a, 0, system) + digitAt(b, 0, system) + (carry ? 1 : 0); if (ret >= base(system)) { return { carry: true, ret: toChar(ret - base(system), system), }; } else { return { carry: false, ret: toChar(ret, system), }; } } exports.halfAdder = halfAdder; /**Agrega dos numeros baseN, note que devuelve un numero con un digito de mas para que quepa toda la suma * @param small No agregar un digito extra al resultado, puede ser que el resultado no quepa */ function add(a, b, system, small = false) { var ret = new Array((a.length > b.length ? a.length : b.length) + (small ? 0 : 1)); let carry = false; for (let i = ret.length - 1; i >= 0; i--) { const aIndex = i - ret.length + a.length; const bIndex = i - ret.length + b.length; const aDigit = aIndex < 0 ? zero(system) : a.substr(aIndex, 1); const bDigit = bIndex < 0 ? zero(system) : b.substr(bIndex, 1); const half = halfAdder(aDigit, bDigit, carry, system); ret[i] = half.ret; carry = half.carry; } return ret.join(""); } exports.add = add; /**Incrementa en 1, note que no cambia el tamaño del numero */ function increment(a, system) { return add(a, one(system), system, true); } exports.increment = increment; function isEven(a, system) { return digitAt(a, a.length - 1, system) % 2 == 0; } function half(a, system) { if (base(system) % 2 != 0) throw new Error("Only even base supported"); let ret = new Array(a.length); for (let i = -1; i < a.length - 1; i++) { const first = digitAt(a, i, system); const second = digitAt(a, i + 1, system); const fEven = first % 2 == 0; const num = Math.floor(second / 2) + (fEven ? 0 : base(system) / 2); ret[i + 1] = toChar(num, system); } return ret.join(""); } exports.half = half; function midpoint(a, b, system) { return half(add(a, b, system), system).substr(1); //Le quita el digito extra que agrego el add } exports.midpoint = midpoint; function toBaseN(n, size, system) { let ret = new Array(size); for (let i = (size - 1); i >= 0; i--) { ret[i] = toChar(n % base(system), system); // NOTE: Can't use << here because javascript will convert to int and lose the upper bits. n = Math.floor(n / base(system)); } return ret.join(""); } exports.toBaseN = toBaseN; function random(size, system) { let ret = new Array(size); for (let i = 0; i < size; i++) { ret[i] = toChar(Math.floor(Math.random() * base(system)), system); } return ret.join(""); } exports.random = random; function minValue(size, system) { return system.charMap[0].repeat(size); } exports.minValue = minValue; function maxValue(size, system) { return system.charMap[system.charMap.length - 1].repeat(size); } exports.maxValue = maxValue; function zeroPad(num, size, system) { return zero(system).repeat(size - num.length) + num; } exports.zeroPad = zeroPad; function maxDigit(system) { return system.charMap[system.charMap.length - 1]; } exports.maxDigit = maxDigit; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlnbnVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3B1c2hpZC9iaWdudW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0NBQXNDO0FBVXRDLFNBQWdCLFVBQVUsQ0FBQyxNQUFjO0lBQ3JDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0IsT0FBTztRQUNILE9BQU8sRUFBRSxHQUFHO1FBQ1osUUFBUSxFQUFFLElBQUEsa0JBQVUsRUFBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDakQsQ0FBQztBQUNOLENBQUM7QUFORCxnQ0FNQztBQUVELFNBQVMsT0FBTyxDQUFDLENBQVMsRUFBRSxLQUFhLEVBQUUsTUFBcUI7SUFDNUQsSUFBSSxLQUFLLEdBQUcsQ0FBQztRQUNULE9BQU8sQ0FBQyxDQUFDO0lBQ2IsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVELFNBQVMsTUFBTSxDQUFDLEtBQWEsRUFBRSxNQUFxQjtJQUNoRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVELFNBQVMsSUFBSSxDQUFDLE1BQXFCO0lBQy9CLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDakMsQ0FBQztBQUVELFNBQVMsSUFBSSxDQUFDLE1BQXFCO0lBQy9CLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRUQsU0FBUyxHQUFHLENBQUMsTUFBcUI7SUFDOUIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFD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