Не понимаю почему не работает шифровка Цезаря
function rot13(message){
message = message.toLowerCase();
const alphabet = [...'abcdefghijklmnopqrstuvwxyz'];
alphabet.forEach(letter=> {
message.replace(letter, alphabet.indexOf(letter) + 13);
});
return message;
}
console.log(rot13('i love you'));
Код должен шифровать текст определенным образом. Заменять каждую букву на 13-ую после нее. Я точно где-то ошиблась, но могу постараться объяснить свой алгоритм. В функцию принимаем сообщение. Оно приводится к LowerCase. Затем у нас есть массив алфавита. Мы проходимся по нему и каждую букву заменяем на letter + 13
Ответы (1 шт):
Вы не изменяете message. Метод message.replace ВОЗВРАЩАЕТ новую строку.
Вы заменяете букву на номер этой буквы + 13. А вам же надо брать букву под полученным номером.
Номер должен быть зациклен. Таким образом 27 буква должна стать первой. Для этого поможет оператор %
Заменив вначале одну букву она может заменится потом. Для этого надо вначале перевести строку в номера букв, а только потом уже обратно в строку
Вынести 13 стоит как параметр
Да и вообще легче пройтись по каждой букве сообщения, а не по каждой букве алфавита
Исправленный код:
function rot(message, n){
message = [...message.toLowerCase()]
const alphabet = [...'abcdefghijklmnopqrstuvwxyz'];
message.forEach((letter, i) => {
let index = alphabet.indexOf(letter);
if (index<0) {return;}
message[i] = alphabet[(index + n) % alphabet.length]
});
return message.join("");
}