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
入力値のチェックはしておりません。あしからず。