Simple Stupid Number Obfuscation

Run Settings
LanguageJavaScript
Language Version
Run Command
// just a random number const rnd = (p) => Math.floor(Math.random() * (p - 1)) + 1 // our secret, there are maximum `p*p` equivalent ways of representing any number by this obfuscation method const p = 19 const start = 2048 // obfuscate i const enc = i => { const r = rnd(p) return r * (i + start) * p + r } // deobfuscate e const dec = e => { const r = e % p const ri = (e - r) / p return (ri / r) - start } // test: must return an empty array `[]` console.log( [...new Array(100000).keys()].map(i => [i, enc(i)] ).filter(([i, e]) => dec(e) != i) ) // some examples: console.log( [...new Array(30).keys()] .concat( [...new Array(100).keys()].map(i => rnd(10000)).sort((a, b) => a <= b ? -1 : 1) ) .map(i => [i, enc(i)] ) ) const veryLargeNumber = Math.pow(10,12) + rnd(Math.pow(10,13)) const encVeryLargeNumber = enc(veryLargeNumber) console.log(veryLargeNumber, encVeryLargeNumber, dec(encVeryLargeNumber))
Editor Settings
Theme
Key bindings
Full width
Lines