UNPKG

runelib

Version:

runestones encode and decode

34 lines (33 loc) 1.01 kB
"use strict"; 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;