29 private readonly letters: Record<string, string>;
34 private readonly inverseLetters: Record<string, string>;
45 'A':
'.-',
'B':
'-...',
'C':
'-.-.',
'D':
'-..',
46 'E':
'.',
'F':
'..-.',
'G':
'--.',
'H':
'....',
47 'I':
'..',
'J':
'.---',
'K':
'-.-',
'L':
'.-..',
48 'M':
'--',
'N':
'-.',
'O':
'---',
'P':
'.--.',
49 'Q':
'--.-',
'R':
'.-.',
'S':
'...',
'T':
'-',
50 'U':
'..-',
'V':
'...-',
'W':
'.--',
'X':
'-..-',
51 'Y':
'-.--',
'Z':
'--..'
54 this.inverseLetters = {};
55 for (
const letter in this.letters) {
56 this.inverseLetters[this.letters[letter]] = letter;
67 encode(plainText:
string =
""): string {
68 const encodedTokens: string[] = [];
70 for (
const ch of plainText) {
71 const token = this.letters[ch.toUpperCase()] ?? ch;
72 encodedTokens.push(token);
75 return encodedTokens.join(
" ");
85 decode(cipherText:
string =
""):
string {
86 const decodedTokens:
string[] = [];
88 const tokens = cipherText.split(
" ");
89 for (
const token of tokens) {
90 decodedTokens.push(this.inverseLetters[token] ?? token);
93 return decodedTokens.join(
"");