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

     

     
  • 相关阅读:
    ios开发之-- tableview/collectionview获取当前点击的cell
    使用 urllib 进行身份验证
    关于 Handler 与 opener
    使用 urllib 构造请求对象
    使用 urllib 发送请求
    urllib 基础模块
    urllib 简介
    网络爬虫的分析算法
    网络爬虫的更新策略
    网络爬虫的爬行策略
  • 原文地址:https://www.cnblogs.com/codepen2010/p/6825087.html
Copyright © 2011-2022 走看看