博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Caesars Cipher(算法)
阅读量:4992 次
发布时间:2019-06-12

本文共 1460 字,大约阅读时间需要 4 分钟。

题目

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

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

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

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

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

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

提示

思路

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

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

 

 

转载于:https://www.cnblogs.com/codepen2010/p/6825087.html

你可能感兴趣的文章
docker镜像mac下保存路径
查看>>
docker使用 命令
查看>>
关于C#操作INI文件的总结
查看>>
ZeptoLab Code Rush 2015 B. Om Nom and Dark Park
查看>>
ctci1.2
查看>>
[译]RabbitMQ教程C#版 - 路由
查看>>
升级项目到.NET Core 2.0,在Linux上安装Docker,并成功部署
查看>>
调用API函数减少c#内存占用(20+m减至1m以下)
查看>>
Android:onNewIntent()触发机制及注意事项
查看>>
珠宝公司之感想
查看>>
项目问题
查看>>
scss侦听并压缩
查看>>
我有接口文档, 你有酒吗?
查看>>
iOS - Push 通知推送
查看>>
[FJOI2007]轮状病毒
查看>>
Azure AADSTS7000215 其中一种问题的解决
查看>>
关于吃苦
查看>>
uva 1629切蛋糕(dp)
查看>>
生成awr报告
查看>>
cocos2d-x 3.0rc2 对于每个包执行情况的重要平台 (超级方便)
查看>>