javascript - 生活大爆炸理论挑战
问题描述
在我今天看的大爆炸剧集(第 11 季第 20 集)中,疯狂的理论宇宙学家沃尔科特博士将笔记倒写,并将所有字母都改成了数字,这让谢尔顿很难阅读。我认为这对我来说是一个很好的挑战,因为我是编程新手。
我能够创建一个可以将单词加密为数字的函数,以便 Sheldon 可以与 Wolcott 博士交流,但我无法将这些数字解密为文字,以便 Wolcott 博士与 Sheldon 交流。
我遇到的主要问题是将两位数转换为字母。
例如,encrypt('z') 将返回 25,即该字母的索引,但 decrypt('25') 将返回 'fc' 而不是 'z'
我很难重构和选择好的变量名,所以提前抱歉。也感谢您的帮助,我非常感谢。
const alphabet = 'abcdefghijklmnopqrstuvwxyz';
const alphabetArray = alphabet.split('');
const encrypt = (sentence) => {
const sentenceArray = sentence.toLowerCase().split('').reverse();
const encryption = [];
for (let i = 0; i < sentenceArray.length; i += 1) {
if (sentenceArray[i] === ' ') {
encryption.push(' ');
}
for (let j = 0; j < alphabetArray.length; j += 1) {
if (sentenceArray[i] === alphabetArray[j]) {
const letterIndex = alphabetArray.indexOf(alphabetArray[j]);
encryption.push(letterIndex);
}
}
}
return encryption.join('');
};
encrypt('Abc Def');
const decrypt = (numbers) => {
const numbersArray = numbers.split('').reverse();
const decryption = [];
for (let i = 0; i < numbersArray.length; i += 1) {
if (numbersArray[i] === ' ') {
decryption.push(' ');
}
for (let j = 0; j < alphabetArray.length; j += 1) {
if (parseInt(numbersArray[i]) === alphabetArray.indexOf(alphabetArray[j])) {
decryption.push(alphabetArray[j]);
}
}
}
return decryption.join('');
};
decrypt('543 210');
解决方案
作为我上面评论的后续,下面的代码应该可以工作。
const alphabet = 'abcdefghijklmnopqrstuvwxyz';
const alphabetArray = alphabet.split('');
const encrypt = (sentence) => {
const sentenceArray = sentence.toLowerCase().split('').reverse();
const encryption = [];
for (let i = 0; i < sentenceArray.length; i += 1) {
if (sentenceArray[i] === ' ') {
encryption.push(' ');
}
else {
const letterIndex = alphabetArray.indexOf(sentenceArray[i]);
if (letterIndex < 10)
encryption.push('0' + letterIndex);
else
encryption.push(letterIndex);
}
}
return encryption.join('');
};
e = encrypt('abc Def');
console.log(e);
const decrypt = (numbers) => {
const decryption = [];
const numSegments = numbers.split(' ');
for (let i = 0; i < numSegments.length; i += 1) {
numSegment = numSegments[i];
for (let j = 0; j < numSegment.length; j += 2){
alphabetPosition = parseInt(numSegment.substring(j, j+2));
decryption.push(alphabet[alphabetPosition]);
}
if (i < numSegments.length - 1) {
decryption.push(' ');
}
}
return decryption.reverse().join('');
};
d = decrypt('050403 020100');
console.log(d);
推荐阅读
- forms - 在没有插件的wordpress主题中上传表单
- azure - 如何使用 Azure AD 服务主体从 Sentinel/Log 分析中提取数据到 powerbi
- mysql - 带有搜索数据和计数的 Laravel DB 查询中的问题
- java - 如何使用 DateTimeFormatter 获得一致性
- python-3.x - 在 python 中简化 SYMPY 库中的条件变量
- android - 加密共享首选项导致 Android 9 和 Android 10 上的 ANR
- reactjs - 当父元素具有不透明度时禁用子元素的不透明度反应本机
- javascript - 如何从 Fetch Api 返回值
- java - 在 android 中使用辅助功能服务在警报对话框上单击“确定”
- flask - 登录用户的视图/API 上的 Flask-AppBuilder 安全性