JavascriptでROT13 ROT47

昨日のRubyでROT13 ROT47 - 深く、広く、高くJavascriptでやってみる。
JavacriptではRubyのような便利な書き方ができないので、対応表を作成するか、ASCIIコードを数字に変換して足し引きするか、どっちかだろう。
ということで。

ASCIIコードバージョン ROT13

function rot13(str){
  var ret_str="";
  var code_A = 'A'.charCodeAt(0);
  var code_a = 'a'.charCodeAt(0);
  var code_N = 'N'.charCodeAt(0);
  var code_n = 'n'.charCodeAt(0);
  var code_Z = 'Z'.charCodeAt(0);
  var code_z = 'z'.charCodeAt(0);

  for(var i=0; i<str.length; i++){
    var code = str.charCodeAt(i);
    if((code_A <= code && code < code_N) || (code_a <= code && code < code_n)){
      code = code + 13;
    }else if((code_N <= code && code <= code_Z) || (code_n <= code && code <= code_z)){
      code = code - 13;
    }
    ret_str += String.fromCharCode(code);
  }
  return ret_str;
}

print(rot13('hello!'));//=>uryyb!

ROT13の範囲外の文字はスルーする。

対応表バージョン ROT47

var LookupTable = new Object();
for(var i='!'.charCodeAt(0); i<'P'.charCodeAt(0); i++){
  LookupTable[String.fromCharCode(i)] = String.fromCharCode(i+47);
  LookupTable[String.fromCharCode(i+47)] = String.fromCharCode(i);
}
function rot47(str){
  ret_str = "";
  for(var i=0; i<str.length; i++){
    ret_str += LookupTable[str[i]];
  }
  return ret_str;
}

print(rot47('hello!'));//=>96==@P

入力値のチェックはしておりません。あしからず。