42 private encodeChar(ch:
string):
string {
48 const binary = index.toString(2).padStart(5,
"0");
49 return binary.replace(/0/g,
"A").replace(/1/g,
"B");
58 private decodeToken(token:
string):
string {
59 if (!/^[AB]{5}$/.test(token)) {
63 const binary = token.replace(/A/g,
"0").replace(/B/g,
"1");
64 const index = parseInt(binary, 2);
75 encode(plainText:
string =
""):
string {
76 const tokens:
string[] = [];
78 for (
const ch of plainText) {
79 tokens.push(this.encodeChar(ch));
82 return tokens.join(
" ");
92 decode(cipherText:
string =
""):
string {
93 const tokens:
string[] = cipherText.split(/\s+/);
94 const output:
string[] = [];
96 for (
const token of tokens) {
97 output.push(this.decodeToken(token));
100 return output.join(
"");