Вызов теории большого взрыва - PullRequest
1 голос
/ 27 мая 2020

В эпизоде ​​Большого взрыва, который я смотрел сегодня (Сезон 11, Эпизод 20), доктор Уолкотт, теоретический космолог, занимающийся психическим трудом, написал свои записи задом наперед и заменил все буквы на числа, что сделало Шелдону очень трудным читать. Я подумал, что мне будет неплохо решить эту задачу, поскольку я новичок в программировании.

Мне удалось создать функцию, которая может шифровать слова в числа, чтобы Шелдон мог общаться с доктором Уолкоттом, но я не смог расшифровать числа в слова, чтобы доктор Уолкотт мог общаться с Шелдоном.

Основная проблема, с которой я столкнулся, - это преобразование чисел double-di git в буквы.

Например, encrypt ('z') вернет 25, индекс этой буквы, но decrypt ('25 ') вернет' f c 'not' 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');

1 Ответ

0 голосов
/ 27 мая 2020

Как продолжение моего комментария выше, следующий код должен работать.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...