Skip to content

Instantly share code, notes, and snippets.

@fsjuhl
Created June 1, 2021 13:49
Show Gist options
  • Save fsjuhl/c20ca412f8f056520191ecc3481a9bbb to your computer and use it in GitHub Desktop.
Save fsjuhl/c20ca412f8f056520191ecc3481a9bbb to your computer and use it in GitHub Desktop.
tests = [{"i":"0","o":"MA=="},{"i":"1","o":"MQ=="},{"i":"2","o":"Mg=="},{"i":"5","o":"NQ=="},{"i":"9","o":"OQ=="},{"i":"a","o":"OTc="},{"i":"11","o":"MTE="},{"i":"22","o":"NDI="},{"i":"50","o":"MjUw"},{"i":"90","o":"ODEw"},{"i":"a0","o":"OTQwOTA="},{"i":"111","o":"MTEx"},{"i":"222","o":"MTA0Mg=="},{"i":"500","o":"MTAxMDA="},{"i":"900","o":"MTAwMTAw"},{"i":"a00","o":"MTEwMDAwMTAw"},{"i":"1111","o":"MDExMQ=="},{"i":"2222","o":"MTEwNDI="},{"i":"5000","o":"MjAwMA=="},{"i":"9000","o":"NDAwMA=="},{"i":"a000","o":"NDgwMDA="},{"i":"11111","o":"MTAxMTE="},{"i":"22222","o":"MjExMDQy"},{"i":"50000","o":"NTAwMDA="},{"i":"90000","o":"MTEwMDAw"},{"i":"a0000","o":"MTQxMDAwMA=="},{"i":"111111","o":"YjEwMTEx"},{"i":"222222","o":"YzIxMTA0Mg=="},{"i":"500000","o":"ZjAwMDAw"},{"i":"900000","o":"ajAwMDAw"},{"i":"a00000","o":"aDAwMDAw"},{"i":"adidas","o":"aDE0NDUyMTEwMDEwMDk0MDkxMTU="},{"i":"123","o":"MTQz"},{"i":"231","o":"MTA5MQ=="},{"i":"312","o":"MTExMg=="},{"i":"321","o":"MTE0MQ=="},{"i":"213","o":"MTAxMw=="},{"i":"akt4vs","o":"aDE1MzU4MTAwMTM5MjQxMTU="},{"i":"sp1q3e","o":"ZjE2MDAxMTEwMDAxOTEwMQ=="},{"i":"md3ov5","o":"ajE0NDExMTAxMTExMTM5MjQ1"},{"i":"mk0pcx","o":"ajE1MzAxMTEwMDAwOTgwMTEyMA=="},{"i":"mqz1lr","o":"ajE2MTYxMTExNjY0MTE0"},{"i":"wln7xj","o":"ajE1NDU1MTExMTQ0MDAxMDY="},{"i":"hvwun1","o":"ZTE2NjU5MTExMDEwMTEyMTAwMQ=="},{"i":"qq8mzm","o":"ZDE2MTQxMTAxMTAxMTQ4ODQxMDk="},{"i":"0nb5f2","o":"YTE1NjQ5MTAxMTA0MDQy"},{"i":"rua3st","o":"ZTE2NTQ4MTExMzIyNTExNg=="},{"i":"`m#RJ","o":"MTQwNTQxMDAwMTE2NzI0NzQ="},{"i":"p4@~r","o":"MTYwMjEwMDAwMDAxNTg3NjExNA=="},{"i":"Hzk ;","o":"MTEwNjExMTAxMDExMTAyNDU5"}]
function tryFn(input) {
return input.split("").reverse().map((char, index, allChars) => {
const isNumber = char != " " && Number.isInteger(Number(char))
const charCode = isNumber ? Number(char) : char.charCodeAt()
switch (index) {
case 0:
return charCode
case 1:
return charCode * charCode
case 2:
// binary
return charCode.toString(2)
case 3:
return Math.floor(charCode / 2)
case 4:
if (charCode == 9) return "11" // sorry
if (char == "H") return "110" // sorry
if (isNumber) return charCode
if (charCode <= 100) return charCode + 44
if (charCode < 112) return charCode + 46
return charCode + 48
case 5:
const alphabet = "abcdefghijklmnopqrstuvwxyz"
if (isNumber) return alphabet[charCode]
if (char == "a") return "h" // sorry
const aIndex = alphabet.indexOf(char)
const offset = aIndex > 12 ? -13 : -3
return alphabet[alphabet.indexOf(char) + offset]
}
}).map(String).reverse().join(" ") // missing b64 conversion, for testing
}
tests.forEach(t => {
const result = tryFn(t.i)
let out = atob(t.o)
const knownResult = result.split(" ").reverse().map(part => {
if (out.slice(part.length * -1) == part) {
out = out.slice(0, out.length - part.length)
return false
}
return part
}).filter(t=>t).reverse().join(" ")
if (out.length == 0) return
console.log(out.length == 0 ? `PASSED ${t.i} => ${atob(t.o)} => ${result.split(" ").join("")}` : `${t.i} => ${out} => ${knownResult}`)
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment