Skip to content

Instantly share code, notes, and snippets.

@cimadai
Created November 3, 2016 08:37
Show Gist options
  • Save cimadai/17429c9decf4b2fd13471965b7b5c414 to your computer and use it in GitHub Desktop.
Save cimadai/17429c9decf4b2fd13471965b7b5c414 to your computer and use it in GitHub Desktop.
var plain = "I have a pen. I have an apple. Apple-pen!";
var encoded = "I oari a fib. I oari ab affwi. Affwi-fib!";
var cpA = "a".codePointAt(); // 97
var cpZ = "z".codePointAt(); // 122
var deltaOfAandZ = cpZ - cpA; // 25
function encode(str) {
var ret = [];
for (var i = 0, l = str.length; i < l; ++i) {
var char = str[i];
var cp = char.codePointAt();
var delta = cp - cpA;
if (delta > 0) {
var newCp = cp + delta > cpZ ? cpA + (cp + delta) % cpZ : cp + delta;
ret.push(String.fromCodePoint(newCp));
} else {
ret.push(char);
}
}
return ret.join("");
}
console.log(encode(plain) == encoded);
function decode(str) {
var ret = [];
for (var i = 0, l = str.length; i < l; ++i) {
var char = str[i];
var cp = char.codePointAt();
var delta = cp - cpA;
if (delta > 0) {
var newCp = cpA + (delta % 2 == 0 ? delta / 2 : (delta + deltaOfAandZ) / 2);
ret.push(String.fromCodePoint(newCp));
} else {
ret.push(char);
}
}
return ret.join("");
}
console.log(decode(encoded) == plain);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment