runelib
Version:
runestones encode and decode
34 lines (33 loc) • 1.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.base26Decode = exports.base26Encode = void 0;
function base26Encode(input) {
let result = 0n;
for (let i = 0; i < input.length; i++) {
const charCode = BigInt(input.charCodeAt(i) - 'A'.charCodeAt(0));
const iInv = BigInt(input.length) - 1n - BigInt(i);
if (iInv == 0n) {
result += charCode;
}
else {
const base = 26n ** iInv;
result += base * (charCode + 1n);
}
}
return result;
}
exports.base26Encode = base26Encode;
function base26Decode(s) {
if (s === 340282366920938463463374607431768211455n) {
return "BCGDENLQRQWDSLRUGSNLBTMFIJAV";
}
s += 1n;
let symbol = [];
while (s > 0) {
const i = (s - 1n) % 26n;
symbol.push("ABCDEFGHIJKLMNOPQRSTUVWXYZ".charAt(Number(i)));
s = (s - 1n) / 26n;
}
return symbol.reverse().join('');
}
exports.base26Decode = base26Decode;