首页 > 解决方案 > 生活大爆炸理论挑战

问题描述

在我今天看的大爆炸剧集(第 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');

标签: javascriptencryptiontranslation

解决方案


作为我上面评论的后续,下面的代码应该可以工作。

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);


推荐阅读