eyea / freecodecampNotes

make notes in issues .
0 stars 0 forks source link

凯撒密码(移位密码) #7

Open eyea opened 6 years ago

eyea commented 6 years ago

Goals to achieve

rot13("SERR PBQR PNZC") 应该解码为 "FREE CODE CAMP"
rot13("SERR CVMMN!") 应该解码为 "FREE PIZZA!"
rot13("SERR YBIR?") 应该解码为 "FREE LOVE?"
rot13("GUR DHVPX OEBJA QBT WHZCRQ BIRE GUR YNML SBK.") 应该解码为 "THE QUICK BROWN DOG JUMPED OVER THE LAZY FOX."

Basic info

移位密码也就是密码中的字母会按照指定的数量来做移位。

一个常见的案例就是ROT13密码,字母会移位13个位置。由'A' ↔ 'N', 'B' ↔ 'O',以此类推。

写一个ROT13函数,实现输入加密字符串,输出解密字符串。

所有的字母都是大写,不要转化任何非字母形式的字符(例如:空格,标点符号),遇到这些特殊字符,跳过它们。

Code

function rot13(str) {
  var res = []; // 将处理的结果放在res数组里面
 for(var i=0;i<str.length;i++) {
    var codeNum = str[i].toUpperCase().charCodeAt();
    // 'A'.charCodeAt() = 65; 'Z'.charCodeAt() = 90;
    if(codeNum>=65 && codeNum<=77) {
      codeNum += 13;
    } else if (codeNum<91 && codeNum>77) {
      codeNum -= 13;
    }
    res.push(String.fromCharCode(codeNum));
  }
  return res.join('');
}
rot13("SERR CVMMN!")
// "FREE PIZZA!"
eyea commented 6 years ago

相关拓展: