write-ups-challenges-2021-2022/sussy_imposter/sus_maker.js

136 lines
3.3 KiB
JavaScript
Raw Normal View History

2021-12-02 23:33:26 +00:00
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('')))