zoukankan      html  css  js  c++  java
  • Caesars Cipher(算法)

    题目

    让上帝的归上帝,凯撒的归凯撒。

    下面我们来介绍风靡全球的凯撒密码Caesar cipher,又叫移位密码。

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

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

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

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

    提示

    String.charCodeAt()

    String.fromCharCode()

    思路

    本题的核心在于提示里给出的两个方法,我们来分别了解一下。

    String.prototype.charCodeAt()

    语法:

    str.charCodeAt(index)

    示例:

    "ABC".charCodeAt(0) // returns 65

    上例返回 65,即 A 的 Unicode 值。

    String.fromCharCode()

    语法:

    String.fromCharCode(num1, ..., numN)

    该方法返回一个字符串,而不是一个 String 对象。

    由于 fromCharCode 是 String 的静态方法,所以应该像这样使用:String.fromCharCode(),而不是作为你创建的 String 对象的方法。

    示例:

    String.fromCharCode(65,66,67) // returns "ABC"

    好了,回到题目。传入的字符串都是大写,而大写字母 A 到 Z 的 Unicode 值是升序排列的。加密算法的核心是前13个字母 Unicode 值加13,后13个字母 Unicode 值减13从字母表重新回滚。而其他大写字母以外的空白符符号等等字符原样不变。

    解法

    function rot13(str) { // LBH QVQ VG!
      var index = null;
      var temp = "";
      var _A = "A".charCodeAt(0);
      var _Z = "Z".charCodeAt(0);
      var mid = (_A + _Z)/2;
      for(var i = 0; i < str.length; i++){
        index = str.charCodeAt(i);
        if(index >= _A && index <= mid ){
          temp += String.fromCharCode(index + 13);
        }else if(index <= _Z && index > mid ){
          temp += String.fromCharCode(index - 13);
        }else{
          temp += String.fromCharCode(index);
        }   
      }
      return temp;
    }

    测试

    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."

     

     
  • 相关阅读:
    函数的命名空间和作用域
    python 各个地方导航(方便查询,持续更新!)
    零基础学虚幻4(UE4):蓝图+VR 丁树凯教程
    UE4打包后的游戏,无法打卡其他关卡的解决办法
    【精辟】进制转换
    Git仓库的初始化
    【编程】杂碎知识点
    MFC制作带界面的DLL库
    StartImage.DLL使用说明
    MFC对话框程序:实现程序启动画面
  • 原文地址:https://www.cnblogs.com/codepen2010/p/6825087.html
Copyright © 2011-2022 走看看