const alphabet = [
"๐ต", "๐", "๐ฆ", "๐ฆง", "๐ถ", "๐", "๐ฆฎ", "๐ฉ", "๐บ", "๐ฆ", "๐ฆ",
"๐ฑ", "๐", "๐ฆ", "๐ฏ", "๐
", "๐", "๐ด", "๐งฎ", "๐ฆ", "๐ฆ", "๐ฆ",
"๐ฆฌ", "๐ฎ", "๐", "๐", "๐", "๐ท", "๐", "๐", "๐ฝ", "๐", "๐",
"๐", "๐ช", "๐ซ", "๐ฆ", "๐ฆ", "๐", "๐ฆฃ", "๐ฆ", "๐ฆ", "๐ญ", "๐",
"๐", "๐น", "๐ฐ", "๐", "๐", "๐ฆซ", "๐ฆ", "๐ฆ", "๐ป", "๐จ", "๐ผ",
"๐ฆฅ", "๐ฆฆ", "๐ฆจ", "๐ฆ", "๐ฆก", "๐พ", "๐ฆ", "๐น", "๐", "๐ฃ", "๐ค",
"๐ฅ", "๐ฆ", "๐ง", "๐", "๐ฆ
", "๐ฆ", "๐ฆข", "๐ฆ", "๐ฆค", "๐ชถ", "๐ฆฉ",
"๐ฆ", "๐ฆ", "๐ฒ", "๐", "๐ข", "๐ฆ", "๐", "๐", "๐ฆ", "๐ฆ", "๐ณ",
"๐", "๐ฌ", "๐ฆญ", "๐", "๐ ", "๐ก", "๐ฆ", "๐", "๐", "๐", "๐ฆ",
"๐", "๐", "๐", "๐ชฒ", "๐", "๐ฆ", "๐ญ", "๐", "๐งฌ", "๐ชฑ", "๐ฆ ",
"๐", "๐ธ", "๐ ", "๐", "๐น", "๐งฃ", "๐บ", "๐ป", "๐ผ", "๐ท", "๐ฑ",
"๐ชด", "๐ฒ", "๐ณ", "๐ด", "๐ต", "๐พ", "๐ฟ", "๐ค", "๐", "๐", "๐ชบ",
"๐ฝ", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐ฅญ", "๐", "๐",
"๐", "๐", "๐", "๐", "๐ซ", "๐ฅ", "๐
", "๐ซ", "๐ฅฅ", "๐ฅ", "๐",
"๐ฅ", "๐ฅ", "๐ฝ", "๐งธ", "๐ซ", "๐ฅ", "๐ฅฌ", "๐ฅฆ", "๐ง", "๐ง
", "๐",
"๐ฅ", "๐ฐ", "๐", "๐ฅ", "๐ฅ", "๐ฉ", "๐ฅจ", "๐ฅฏ", "๐ฅ", "๐ง", "๐ง",
"๐ถ", "๐ธ", "๐พ", "๐จ", "๐", "๐ญ", "๐", "๐ญ", "๐ฅช", "๐ฎ", "๐ฏ",
"๐ธ", "๐ท", "๐", "๐ฅ", "๐", "๐ผ", "๐", "๐พ", "๐ป", "๐ฅ", "๐ฟ",
"๐งฉ", "๐", "๐ฅซ", "๐ธ", "๐", "๐", "๐", "๐", "๐", "๐", "๐ ",
"๐ข", "๐ฃ", "๐ค", "๐ฅ", "๐ฅฎ", "๐ก", "๐ฅ", "๐ฅ ", "๐ฉฐ", "๐ฆ", "๐ฆ",
"๐ฆ", "๐ฆ", "๐ก", "๐ฆ", "๐ง", "๐จ", "๐ฉ", "๐ช", "๐", "๐ฐ", "๐ง",
"๐ฅง", "๐ซ", "๐ฌ", "๐ญ", "๐ฎ", "๐", "๐ผ", "๐ฎ", "๐น", "๐ซ", "๐",
"๐", "๐", "๐งญ", "๐ ", "๐ช", "๐ช", "๐งต", "๐งถ", "๐ง", "๐", "๐ช",
"๐", "๐", "๐"
];
const alphabetBytesToChars: string[] = alphabet.reduce<string[]>((p, c, i) => {
p[i] = c;
return p;
}, []);
const alphabetCharsToBytes: number[] = alphabet.reduce<number[]>((p, c, i) => {
p[c.codePointAt(0) as number] = i;
return p;
}, []);
export function encode(data: Uint8Array): string {
return data.reduce((p, c) => {
p += alphabetBytesToChars[c];
return p;
}, "");
}
export function decode(str: string): Uint8Array {
const byts = [];
for (const char of str) {
const byt = alphabetCharsToBytes[char.codePointAt(0) as number];
if (byt === undefined) {
throw new Error(`Non-base256kitten character: ${char}`);
}
byts.push(byt);
}
return new Uint8Array(byts);
}