UNPKG

simple-pure-utils

Version:

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

102 lines 8.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getStringMoves = exports.applyStringMove = void 0; const logic_1 = require("../../logic"); /**Aplica un movimiento de cadena a una cadena */ function applyStringMove(source, move) { switch (move.type) { case "insert": return source.slice(0, move.index).concat([move.value]).concat(source.slice(move.index, source.length + 1)); case "remove": return source.slice(0, move.index).concat(source.slice(move.index + 1, source.length + 1)); case "move": { if (move.sourceIndex == move.destIndex) return source; if (move.destIndex > move.sourceIndex) { return source.slice(0, move.sourceIndex) .concat(source.slice(move.sourceIndex + 1, move.destIndex + 1)) .concat(source.slice(move.sourceIndex, move.sourceIndex + 1)) .concat(source.slice(move.destIndex + 1, source.length + 1)); } ; return source.slice(0, move.destIndex) .concat(source.slice(move.sourceIndex, move.sourceIndex + 1)) .concat(source.slice(move.destIndex, move.sourceIndex)) .concat(source.slice(move.sourceIndex + 1, source.length + 1)); } case "dup": { return source.slice(0, move.destIndex) .concat(source.slice(move.sourceIndex, move.sourceIndex + 1)) .concat(source.slice(move.destIndex, source.length + 1)); } default: return (0, logic_1.assertUnreachable)(move); } } exports.applyStringMove = applyStringMove; /**Obtiene la cantidad mínima de movimientos para llegar de source a dest, considerando los movimientos de "move", "remove", "insert" y "dup" */ function getStringMoves(source, dest, equals) { const eq = equals || logic_1.referenceEquals; let i = 0; let ret = []; while (i < dest.length) { if (eq(source[i], dest[i])) { //Los 2 items encajan, no hay movimientos: i++; continue; } const destItem = dest[i]; const itemSourceIndex = (0, logic_1.indexOf)(source, x => eq(x, destItem)); if (itemSourceIndex == null) { //El elemento es nuevo: const mov = { type: "insert", index: i, value: dest[i] }; ret.push(mov); source = applyStringMove(source, mov); i++; continue; } //El elemento ya existe en source: //Todos los indices donde aparece el elemento, para ver si está repetido const itemDestIndices = (0, logic_1.indicesOf)(dest, x => eq(x, destItem)); const repetido = itemDestIndices.length >= 2; if (repetido) { const mov = { type: "dup", sourceIndex: itemSourceIndex, destIndex: i }; ret.push(mov); source = applyStringMove(source, mov); i++; continue; } //El elemento no está repetido, es un mov: { const mov = { type: "move", sourceIndex: itemSourceIndex, destIndex: itemDestIndices[0], }; ret.push(mov); source = applyStringMove(source, mov); i++; continue; } } const lastDestIndex = i; while (i < source.length) { //Quitar el resto: ret.push({ type: "remove", index: lastDestIndex }); i++; } return ret; } exports.getStringMoves = getStringMoves; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92ZVJlbW92ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdHJpbmdzL2Rpc3RhbmNlL21vdmVSZW1vdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBQXFGO0FBb0NyRixpREFBaUQ7QUFDakQsU0FBZ0IsZUFBZSxDQUFJLE1BQVcsRUFBRSxJQUFxQjtJQUNqRSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDZixLQUFLLFFBQVE7WUFDVCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoSCxLQUFLLFFBQVE7WUFDVCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0YsS0FBSyxNQUFNLENBQUMsQ0FBQztZQUNULElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUztnQkFDbEMsT0FBTyxNQUFNLENBQUM7WUFFbEIsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ25DLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQztxQkFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVB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