美文网首页Web前端之路让前端飞程序员
FreeCodeCamp筆記之:Caesars Cipher 凱

FreeCodeCamp筆記之:Caesars Cipher 凱

作者: delphuy | 来源:发表于2017-09-28 11:01 被阅读70次

題目:

凯撒密码
(让上帝的归上帝,凯撒的归凯撒)
下面我们来介绍风靡全球的凯撒密码Caesar cipher,又叫移位密码。
移位密码也就是密码中的字母会按照指定的数量来做移位。
一个常见的案例就是ROT13密码,字母会移位13个位置。由'A' ↔ 'N', 'B' ↔ 'O',以此类推。
写一个ROT13函数,实现输入加密字符串,输出解密字符串。
所有的字母都是大写,不要转化任何非字母形式的字符(例如:空格,标点符号),遇到这些特殊字符,跳过它们。
当你完成不了挑战的时候,记得开大招'Read-Search-Ask'。
这是一些对你有帮助的资源:
String.charCodeAt()
String.fromCharCode()

解法:

看完就是一臉懵逼,再看再懵逼....
於是拿了草稿紙列了幾條來找規律,又仔細閱讀了charCodeAt(),fromCharCode() 两个方法;
charCodeAt() 是返回字符的Unicode 值,字母A的值是 65,字母Z 的值是90;
fromCharCode() 刚好和上一个相反,是将数值转化为字母;
附:ASCII码对照表
尝试写了如下代码:
(为毛直接写的代码会那么丑,这个富文本编辑器也没有提供插入代码的功能):

-- function rot13(str) { // LBH QVQ VG! // 请把你的代码写在这里
var arr=str.split(''); // 将字符以空格拆分
for(var i=0;i=65&&a<=90){ //判断字符是不是字母
if(b<65){ //不是字母
arr[i]=String.fromCharCode(a);
} else{
arr[i]=String.fromCharCode(b);
}
} else{
arr[i]=arr[i];
} str=arr.join(""); // 将字符加空格合并
}
return str;
}
rot13("SERR PBQR PNZC"); // 你可以修改这一行来测试你的代码

执行之后,不出意外的报错了,于是百度了别人的答案,发现当 a 不是字母的时候,没有位移,我不是很懂这里为什么要 a+13,修正后代码如下:

function rot13(str) { // LBH QVQ VG!
// 请把你的代码写在这里
var arr=str.split(''); // 将字符以空格拆分
for(var i=0;i<arr.length;i++){
var a=arr[i].charCodeAt(0);//加密字符编码
var b=a-13; //位移13个位置
if(a>=65&&a<=90){ //判断字符是不是字母
if(b<65){ //不是字母
arr[i]=String.fromCharCode(a+13);
} else{
arr[i]=String.fromCharCode(b);
}
} else{
arr[i]=arr[i];
} str=arr.join(""); // 将字符加空格合并
}
return str;
}
rot13("SERR PBQR PNZC"); // 你可以修改这一行来测试你的代码

执行结果居然是: FREE CODE CAMP 。。。。

相关文章

  • FreeCodeCamp筆記之:Caesars Cipher 凱

    題目: 凯撒密码(让上帝的归上帝,凯撒的归凯撒)下面我们来介绍风靡全球的凯撒密码Caesar cipher,又叫移...

  • FreeCodeCamp筆記之:Drop it(*)

    题目 队友该卖就卖,千万别舍不得。当你的队伍被敌人包围时,你选择拯救谁、抛弃谁非常重要,如果选择错误就会造成团灭。...

  • FreeCodeCamp筆記之:Steamroller

    题目 对嵌套的数组进行扁平化处理。你必须考虑到不同层级的嵌套。如果你被卡住了,记得开大招 Read-Search-...

  • #268 Caesars Cipher

    解题思路: 将str内小写字母更换为大写(此题条件均无小写) 由上列表可得出,Unicode在何区间需要做出调整,...

  • FreeCodeCamp筆記之:Exact Change

    题目 设计一个收银程序checkCashRegister(),其把购买价格(price)作为第一个参数 , 付款金...

  • FreeCodeCamp筆記之:Symmetric Differ

    题目 创建一个函数,接受两个或多个数组,返回所给数组的对等差分(symmetric difference)(△or...

  • FreeCodeCamp筆記之:Pig Latin

    题目 把指定的字符串翻译成 pig latin。Pig Latin 把一个英文单词的第一个辅音或辅音丛(conso...

  • FreeCodeCamp筆記之:Search and Repla

    题目 使用给定的参数对句子执行一次查找和替换,然后返回新句子。第一个参数是将要对其执行查找和替换的句子。第二个参数...

  • FreeCodeCamp筆記之:DNA Pairing

    题目 DNA 链缺少配对的碱基。依据每一个碱基,为其找到配对的碱基,将结果作为第二个数组返回。Base pairs...

  • FreeCodeCamp筆記之:Finders Keepers

    题目 写一个function,它遍历数组arr,并返回数组中第一个满足func返回值的元素。举个例子,如果arr为...

网友评论

    本文标题:FreeCodeCamp筆記之:Caesars Cipher 凱

    本文链接:https://www.haomeiwen.com/subject/fpemextx.html