136 lines
3.3 KiB
JavaScript
136 lines
3.3 KiB
JavaScript
const imposter = `
|
|
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
|
|
KKKKKKKKKKKKK00OOOOOOkkkOO0KKKKKKKKKKKKK
|
|
KKKKKKKKKK0Oxl.... . .-.. coxO0KKKKKKKKK
|
|
KKKKKKKKKOo.-.ldxxxxxxddol. --lx0KKKKKKK
|
|
KKKKKKKK0o- oO0KKKKKKKKKK00ko..-lk0KKKKK
|
|
KKKKKKK0d-.d0KKK0Oxddollccclc. ..ck0KKKK
|
|
KKKKKK0k .lOKKKOl.. - ccloooolc....oO0KK
|
|
KKKKK00d .d0KK0o. okOO000KKKK00Okd...x0K
|
|
KOkdolc .cOKKKOl- kKKKKKKKKKKKKKKKOl-ckK
|
|
kc- --- -o0KKKOo. x0KKKKKKKKKKKKKK0d--xK
|
|
l. d00k..o0KKK0x- cxO0KKKKKKKKKK0ko..ckK
|
|
c.cOK0x .o0KKKK0d. -- odkkkkxdol.--.ck0K
|
|
c lOK0d--d0KKKKK0ko- ... - . .-cl. .d0KK
|
|
.-oOK0d-.d0KKKKKKK00OOkxxxxkkOO0Kx. d0KK
|
|
-.d0K0d-.o0KKKKKKKKKKKKKKKKKKKKKKx--oOKK
|
|
.d0K0d. d0KKKKKKKKKKKKKKKKKKKKKKx--lOKK
|
|
.d0K0d--d0KKKKKKKKKKKKKKKKKKKKKKx. oOKK
|
|
--oOK0x- o0KKKKKKKKKKKKKKKKKKKKKKd..d0KK
|
|
c.cOK0k -o0KKKKKKKKKKKKKKKKKKKKKOl .kKKK
|
|
d .lxkd-.o0KKKKKKK0OOO00KKKKKKKKk .cOKKK
|
|
0dc.-. .-cOKKKKK0kl. --cccloxO00d- o0KKK
|
|
K00kxxdc--k0KKKK0d .- oc--lkO0KOc -kKKKK
|
|
KKKKKK0o--x0KKKK0o -.o0d -xKKKKkc-cOKKKK
|
|
KKKKKK0d. d0KKKK0o..-d0x .lkkkko..d0KKKK
|
|
KKKKKK0x .lO0KK0.-x-lx00o.. lOKKKKK
|
|
`
|
|
const morseCode = {
|
|
"A": ".-",
|
|
"B": "-...",
|
|
"C": "-.-.",
|
|
"D": "-..",
|
|
"E": ".",
|
|
"F": "..-.",
|
|
"G": "--.",
|
|
"H": "....",
|
|
"I": "..",
|
|
"J": ".---",
|
|
"K": "-.-",
|
|
"L": ".-..",
|
|
"M": "--",
|
|
"N": "-.",
|
|
"O": "---",
|
|
"P": ".--.",
|
|
"Q": "--.-",
|
|
"R": ".-.",
|
|
"S": "...",
|
|
"T": "-",
|
|
"U": "..-",
|
|
"V": "...-",
|
|
"W": ".--",
|
|
"X": "-..-",
|
|
"Y": "-.--",
|
|
"Z": "--..",
|
|
"?": "..--..",
|
|
"!": "-.-.--"
|
|
}
|
|
|
|
const convertToMorse = (str) => str.toUpperCase().split("").map(el => morseCode[el] ? morseCode[el] : el).join(" ");
|
|
|
|
const main = (str, key) => {
|
|
|
|
const morse = convertToMorse(str).split("")
|
|
let i = 0;
|
|
let j = 0;
|
|
|
|
const newImposter = imposter.split("").map(imp => {
|
|
if(imp === "." || imp === "-" || imp === " ") {
|
|
if(i < morse.length) {
|
|
return morse[i++]
|
|
} else {
|
|
return ' '
|
|
}
|
|
} else {
|
|
if(j < key.length && imp !== '\n') {
|
|
return key[j++]
|
|
} else {
|
|
return imp
|
|
}
|
|
}
|
|
}).join("")
|
|
|
|
console.log(newImposter)
|
|
|
|
return newImposter
|
|
}
|
|
|
|
const map = {
|
|
a: 'v',
|
|
b: 'u',
|
|
c: 'w',
|
|
d: 'e',
|
|
e: 'n',
|
|
f: 'd',
|
|
g: 'l',
|
|
h: 'g',
|
|
i: 'z',
|
|
j: 'k',
|
|
k: 'b',
|
|
l: 't',
|
|
m: 's',
|
|
n: 'h',
|
|
o: 'p',
|
|
p: 'o',
|
|
q: 'c',
|
|
r: 'm',
|
|
s: 'y',
|
|
t: 'x',
|
|
u: 'j',
|
|
v: 'f',
|
|
w: 'i',
|
|
x: 'a',
|
|
y: 'r',
|
|
z: 'q',
|
|
"?": '?',
|
|
"!": '!'
|
|
}
|
|
|
|
const flipMap = Object.fromEntries(Object.entries(map).map(([k, v]) => [v, k]))
|
|
const encode = (str) => {
|
|
console.log(str)
|
|
const val = str.split("").map(c => flipMap[c]).join('')
|
|
console.log(val)
|
|
return val
|
|
}
|
|
|
|
|
|
const flipMorse = Object.fromEntries(Object.entries(morseCode).map(([k, v]) => [v, k]))
|
|
const convertFromMorse = (str) => str.split(" ").map(el => flipMorse[el] ? flipMorse[el] : el).join("")
|
|
const decode = (imposter) => {
|
|
const val = convertFromMorse(imposter.split('').filter(imp => imp === '.' || imp === '-' || imp === ' ').join('')).toLowerCase().split('').map(c => map[c]).join('')
|
|
console.log(val)
|
|
return val
|
|
}
|
|
|
|
decode(main(encode('helloisthisamongusimposterimposterfromamongus'), Object.entries(map).flat().join(''))) |