simple-pure-utils
Version:
Funciones puras para manipulación de objetos, arreglos, promesas y observables
126 lines • 11.2 kB
JavaScript
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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
;