Skip to content

Instantly share code, notes, and snippets.

@Heliodex
Created June 10, 2023 17:28
Show Gist options
  • Save Heliodex/5a3daf9a6f467df0ecc5d0eb22f9f90d to your computer and use it in GitHub Desktop.
Save Heliodex/5a3daf9a6f467df0ecc5d0eb22f9f90d to your computer and use it in GitHub Desktop.
context @ https://twitter.com/lwinklly/status/1667583839642824705. deno run "stupid translator.ts" encode / deno run "stupid translator.ts" decode
"civet deno"
* as c from "https://deno.land/[email protected]/fmt/colors.ts"
console.log()
encodeLetters: { [k: string]: string } :=
a: "@"
b: "b"
c: "("
d: "6"
e: "3"
f: "f"
g: "g"
h: ")-("
i: "1"
j: "j"
k: "|<"
l: "|"
m: "m"
n: "^"
o: "0"
p: "9"
q: "q"
r: "r"
s: "$"
t: "t"
u: "u"
v: "v"
w: "\\/\\/"
x: "x"
y: "¥"
z: "z"
decodeLetters := Object.fromEntries Object.entries(encodeLetters).map .reverse()
allLetters := Object.keys encodeLetters
.join ""
.split ""
.concat Object.keys decodeLetters
.join ""
.split ""
decodeMode := Deno.args.0 == "decode"
entry := prompt c.green `Enter a string to ${decodeMode ? "de" : "en"}code:`
if !entry
console.error c.red "No string entered"
Deno.exit 1
// The ¥ character is interpreted incorrectly and must be fixed
word := entry.replaceAll "�", "¥"
newWord := []
if decodeMode
letters := Object.keys decodeLetters
// Set of characters being decoded, eg. ["|", "<"] for k
currentSet .= []
for i .= 0; i < word.length; i++
letter := word[i]
currentSet.push letter.trim()
currentLetter := currentSet.join ""
// Prevents |< from being decoded as l, then < being un-decodable
if letters.includes(currentLetter) and !letters.includes currentLetter + word[i + 1]
currentSet = []
newWord.push decodeLetters[currentLetter]
else if currentLetter == ""
newWord.push " "
else if !allLetters.includes letter
currentSet = []
newWord.push currentLetter
else for i of word
newWord.push encodeLetters[i] or i
console.log c.cyan newWord.join ""
console.log()
import * as c from "https://deno.land/[email protected]/fmt/colors.ts"
console.log()
const encodeLetters: { [k: string]: string } = {
a: "@",
b: "b",
c: "(",
d: "6",
e: "3",
f: "f",
g: "g",
h: ")-(",
i: "1",
j: "j",
k: "|<",
l: "|",
m: "m",
n: "^",
o: "0",
p: "9",
q: "q",
r: "r",
s: "$",
t: "t",
u: "u",
v: "v",
w: "\\/\\/",
x: "x",
y: "¥",
z: "z",
}
const decodeLetters = Object.fromEntries(
Object.entries(encodeLetters).map($ => $.reverse())
)
const allLetters = Object.keys(encodeLetters)
.join("")
.split("")
.concat(Object.keys(decodeLetters))
.join("")
.split("")
const decodeMode = Deno.args[0] == "decode"
const entry = prompt(
c.green(`Enter a string to ${decodeMode ? "de" : "en"}code:`)
)
if (!entry) {
console.error(c.red("No string entered"))
Deno.exit(1)
}
// The ¥ character is interpreted incorrectly and must be fixed
const word = entry.replaceAll("�", "¥")
const newWord = []
if (decodeMode) {
const letters = Object.keys(decodeLetters)
// Set of characters being decoded, eg. ["|", "<"] for k
let currentSet = []
for (let i = 0; i < word.length; i++) {
const letter = word[i]
currentSet.push(letter.trim())
const currentLetter = currentSet.join("")
// Prevents |< from being decoded as l, then < being un-decodable
if (
letters.includes(currentLetter) &&
!letters.includes(currentLetter + word[i + 1])
) {
currentSet = []
newWord.push(decodeLetters[currentLetter])
} else if (currentLetter == "") newWord.push(" ")
else if (!allLetters.includes(letter)) {
currentSet = []
newWord.push(currentLetter)
}
}
} else for (const i of word) newWord.push(encodeLetters[i] || i)
console.log(c.cyan(newWord.join("")))
console.log()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment