Skip to content

Instantly share code, notes, and snippets.

@audreyt
Created December 7, 2012 15:26
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save audreyt/4233938 to your computer and use it in GitHub Desktop.
Save audreyt/4233938 to your computer and use it in GitHub Desktop.
ROT encode/decode
#!/usr/bin/env lsc
# 使用前請先 curl -O http://cpansearch.perl.org/src/DANKOGAI/Unicode-Unihan-0.04/srctxt/Mandarin.txt
require! fs
c2p = {}; p2c = {}
for l in "#{fs.read-file-sync 'Mandarin.txt'}" / /\n/
[code, pin] = l / /\s+/
continue unless code is /^....$/ # BMP
char = String.fromCharCode parseInt code, 16
c2p[char] = pin
(p2c[pin] ?= [])push char
encode = -> (* '') <| for c in it
p = c2p[c]
if not p then c else
cs = p2c[p]
idx = (cs.indexOf c) + 1
idx = 0 if idx is cs.length
cs[idx]
decode = -> (* '') <| for c in it
p = c2p[c]
if not p then c else
cs = p2c[p]
idx = (cs.indexOf c) - 1
idx = cs.length - 1 if idx is -1
cs[idx]
console.log encode "主席:黃委員還是堅持刪減200萬?但我們委員從原先的全刪,改為一成,後來又改為5%,現在又改為500萬,而經過本席折 衝,建議減列300萬。我再最後一次詢問各位,是否互相折衝一下,減列300萬?"
console.log decode "嘱棤:黄娓园鍰昰奸歭剼湕200蟃?僤捰们娓园悰厡嘕的啳剼,絠煟伊承,洉俫右絠煟5%,県扗右絠煟500蟃,耏经㳀楍棤摺 蹖,徤讛湕劣300蟃。捰在栬洉伊絘询妏嗰卫,昰殕冱箱摺蹖伊吓,湕劣300蟃?"
@audreyt
Copy link
Author

audreyt commented Dec 7, 2012

(function(){
  var fs, c2p, p2c, i$, ref$, len$, l, ref1$, code, pin, char, encode, decode, split$ = ''.split, join$ = [].join;
  fs = require('fs');
  c2p = {};
  p2c = {};
  for (i$ = 0, len$ = (ref$ = (fs.readFileSync('Mandarin.txt') + "").split(/\n/)).length; i$ < len$; ++i$) {
    l = ref$[i$];
    ref1$ = split$.call(l, /\s+/), code = ref1$[0], pin = ref1$[1];
    if (!/^....$/.test(code)) {
      continue;
    }
    char = String.fromCharCode(parseInt(code, 16));
    c2p[char] = pin;
    ((ref1$ = p2c[pin]) != null
      ? ref1$
      : p2c[pin] = []).push(char);
  }
  encode = function(it){
    var c, p, cs, idx;
    return (function(it){
      return join$.call(it, '');
    })((function(){
      var i$, ref$, len$, results$ = [];
      for (i$ = 0, len$ = (ref$ = it).length; i$ < len$; ++i$) {
        c = ref$[i$];
        p = c2p[c];
        if (!p) {
          results$.push(c);
        } else {
          cs = p2c[p];
          idx = cs.indexOf(c) + 1;
          if (idx === cs.length) {
            idx = 0;
          }
          results$.push(cs[idx]);
        }
      }
      return results$;
    }()));
  };
  decode = function(it){
    var c, p, cs, idx;
    return (function(it){
      return join$.call(it, '');
    })((function(){
      var i$, ref$, len$, results$ = [];
      for (i$ = 0, len$ = (ref$ = it).length; i$ < len$; ++i$) {
        c = ref$[i$];
        p = c2p[c];
        if (!p) {
          results$.push(c);
        } else {
          cs = p2c[p];
          idx = cs.indexOf(c) - 1;
          if (idx === -1) {
            idx = cs.length - 1;
          }
          results$.push(cs[idx]);
        }
      }
      return results$;
    }()));
  };
  console.log(encode("主席:黃委員還是堅持刪減200萬?但我們委員從原先的全刪,改為一成,後來又改為5%,現在又改為500萬,而經過本席折 衝,建議減列300萬。我再最後一次詢問各位,是否互相折衝一下,減列300萬?"));
  console.log(decode("嘱棤:黄娓园鍰昰奸歭剼湕200蟃?僤捰们娓园悰厡嘕的啳剼,絠煟伊承,洉俫右絠煟5%,県扗右絠煟500蟃,耏经㳀楍棤摺 蹖,徤讛湕劣300蟃。捰在栬洉伊絘询妏嗰卫,昰殕冱箱摺蹖伊吓,湕劣300蟃?"));
}).call(this);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment