JavaScript算法练习:Caesars Cipher

这篇文章将要练习的是回转13位密码(ROT13)维基百科是这样描述ROT13的:

套用ROT13到一段文字上仅仅只需要检查字符字母顺序并替换它在13位之后的对应字母,有需要超过时则重新绕回26英文字母开头即可。 A换成N、B换成O、依此类推到M换成Z,然后序列反转:N换成A、O换成B、最后Z换成M。只有这些出现在英文字母里头的字符受影响;数字、符号、空白字符以及所有其他字符都不变。因为只有在英文字母表里头只有26个,并且26 = 2 × 13,ROT13函数是它自己的逆反。如下图所示:

ROT13

比如将DOG向后移13位:

D -> E,F,G,H,I,J,K,L,M,N,O,P,Q
O -> P,Q,R,S,T,U,V,W,X,Y,Z,A,B
G -> H,I,J,K,L,M,N,O,P,Q,R,S,T

DOG转换为QBT。对照上面的图,也可以查出对应的转换值。

ASCII字符

在JavaScript中可以通过String.prototype.charCodeAt()方法返回0至65535这间的整数,代表索引处理字符的UTF-16编码单元。可以通过这个方法查出每个字符对应的ASCII编码:

'a'.charCodeAt();    //97
'A'.charCodeAt();    //65
'abc'.charCodeAt(0); //97
'ABC'.charCodeAt(0); //65

传给String.prototype.charCodeAt()的值如果是:

  • 一个大于等于0,小于字符串长度的整数,如果不是一个数值,则默认为0
  • 如果值小于0或大于字符串的长度,则返回NaN

那么,对应的ROT13中的字符对应的编码如下:

-----------------------------------------------------------------
| 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 |
-----------------------------------------------------------------
| A  | B  | C  | D  | E  | F  | G  | H  | I  | J  | K  | L  | M  |
-----------------------------------------------------------------
| N  | O  | P  | Q  | R  | S  | T  | U  | V  | W  | X  | Y  | Z  |
-----------------------------------------------------------------
| 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 |
-----------------------------------------------------------------

如此一来,A-Z对应的就是65-90。而ROT13是将大写字符串将向后移13位,然后转换成对应的字符。那么:

  • 小于65和大于90对应的就是小写字符a-z
  • 大于等于65和小于等于77对应的就是大写字符A-M
  • 大于等于78和小于等于90对应的就是大写字符N-Z

在实现ROT13功能,

剩余80%内容付费后可查看
* 请输入阅读码(忘记阅读码?

如需转载,烦请注明出处:https://www.w3cplus.com/javascript/bonfire-caesars-cipher-solution.html

如果文章中有不对之处,烦请各位大神拍正。如果你觉得这篇文章对你有所帮助,打个赏,让我有更大的动力去创作。(^_^)。看完了?还不过瘾?点击向作者提问!

赏杯咖啡,鼓励他创作更多优质内容!
返回顶部