#268 Caesars Cipher
2017-02-13 本文已影响0人
Kaier5
字母 | UNIcode编码 |
---|---|
A | 65 |
M | 77 |
N | 78 |
Z | 90 |
unicode编码范围 | 对应字符 | 处理 |
---|---|---|
64<X<78 | A-M | + 13 |
78<=X<=90 | N-Z | -13 |
X<=64 | A-Z以外 | 不变 |
90<X | A-Z以外 | 不变 |
解题思路:
- 将str内小写字母更换为大写(此题条件均无小写)
- 由上列表可得出,Unicode在何区间需要做出调整,是+13,还是-13,还是不变?
-
String.charCodeAt()
将字符变换为Unicode; -
String.fromCharCode(num)
将unicode还原为字符 - 建立for循环
-
Arr.join("")
将数组集合为字符串;
答案:
function rot13(str) { // LBH QVQ VG!
arr = str.toUpperCase().split(""); // to upper case of str,and split str to a array - arr;
var Arr =[];
var newstr = "";
var num=0;
for(var i=0;i<str.length;i++){
num = arr[i].charCodeAt();
if(64<num && num<78){
num +=13;
}else if(78<=num && num<=90){
num -=13;
}else{
}
Arr.push(String.fromCharCode(num));
}
return Arr.join("");
}
// Change the inputs below to test
rot13("GUR DHV9X oEBJA QBT WHZCRQ BIRE GUR YNML SBK.");
//
// A-M 65-77
// N-Z 78-90
// **** 65_77 78-90 ****
另外一种解答:
function rot13(str) { // LBH QVQ VG!
var arr=str.toUpperCase().split("");
var Arr=[];
for(var i=0;i<arr.length;i++){
var num=arr[i].charCodeAt();
if(64<num && num<78){
Arr.push(String.fromCharCode(num +13));
}else if(78<=num && num<=90){
Arr.push(String.fromCharCode(num -13));
}else{
Arr.push(String.fromCharCode(num));
}
}
return Arr.join("");
}
// Change the inputs below to test
rot13("GUR DHVPX OEBJA QBT WHZCRQ BIRE GUR YNML SBK.");