Caesars Cipher-freecodecamp算法题目

Caesars Cipher(凯撒密码、移位密码)

  1. 要求
    • 字母会按照指定的数量来做移位。
    • 一个常见的案例就是ROT13密码,字母会移位13个位置。由'A' ↔ 'N', 'B' ↔ 'O',以此类推。
    • 写一个ROT13函数,实现输入加密字符串,输出解密字符串。
    • 所有的字母都是大写,不要转化任何非字母形式的字符(例如:空格,标点符号),遇到这些特殊字符,跳过它们。
  2. 思路
    • 将输入字符串分割成二维数组(一维由空格分开,二维分隔单个字符)
    • 在for循环遍历数组所有元素,利用.charCodeAt()判断各个元素的 UTF-16 代码单元值的数字的范围,对其.charCodeAt()进行+/- 13操作或者不进行操作
    • 利用String.fromCharCode()返回加密后的数组,最后用.join()将数组元素拼接成加密后的字符串
  3. 代码
    •  1 function rot13(str) { // LBH QVQ VG!
       2   // 请把你的代码写在这里
       3   var temp = str;
       4   temp = temp.split(' ');
       5   for (var i = 0;i < temp.length;i++){
       6      temp[i] = temp[i].split('');
       7   }
       8   var code = temp;
       9   for (var j =0;j < temp.length;j++){
      10     for (var k = 0;k < temp[j].length;k++){
      11       if(temp[j][k].charCodeAt() <= 77 && temp[j][k].charCodeAt() >= 65){
      12         code[j][k] = temp[j][k].charCodeAt() + 13;
      13       }
      14       else if (temp[j][k].charCodeAt() > 77 && temp[j][k].charCodeAt() < 91)
      15       {code[j][k] = temp[j][k].charCodeAt() - 13;
      16       }
      17       else {code[j][k] = temp[j][k].charCodeAt();}
      18       code[j][k] = String.fromCharCode(code[j][k]);
      19     }
      20   }
      21   for (var l = 0;l < code.length;l++){
      22       code[l] = code[l].join('');
      23   }
      24   code = code.join(' ');
      25   return code;
      26 }
      27 
      28 rot13("SERR PBQR PNZC");  // 你可以修改这一行来测试你的代码
  4. 相关链接
    • http://www.baike.com/wiki/ROT13&prd=so_1_doc
    • https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt
    • https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode
posted @ 2018-07-11 23:10  投弹手的香菇鸡面  阅读(143)  评论(0编辑  收藏  举报