У меня есть код ниже для Цезаря, который увеличивается на 13 символов для каждого входного символа. Он работает практически для всех входов, но, похоже, будет пропускать случайные символы. Я просто не могу понять, почему ?! Я все еще учусь, так что любая помощь была бы фантастической!
Ввод - это кодированная строка символов, которая будет выводиться при перемещении каждого знака на 13 позиций вперед. Ожидаемый результат должен быть читаемой строкой.
Если я введу rot13 ('GUR DHVPX OEBJA SBK WHZCF BIRE GUR YNML QBT.'), Я бы ожидал, что «БЫСТРЫЙ КОРИЧНЕВЫЙ ФОКС ПЕРЕХОДИТ НА ЛЕНЮ СОБАКУ». Но вместо этого я получаю 'THEQUICKBROWNFBXJHMPS BVREGURLAZYDBG.'
Я ценю, что это может быть дубликатом, но я пока не смог найти ответ на эту конкретную проблему.
function rot13(str) {
let newStr = [];
for (let i = 0; i < str.length; i++) {
let charNum = str.charCodeAt(i);
console.log(charNum);
if (charNum > 64 && charNum < 78) {
let res = str.replace(str[i], String.fromCharCode(charNum + 13));
newStr.push(res[i]);
} else if (charNum > 77 && charNum < 91) {
let res = str.replace(str[i], String.fromCharCode(charNum - 13));
newStr.push(res[i]);
} else {
newStr.push(str[i]);
}
}
console.log(newStr);
return newStr.join(" ");
}
rot13('GUR DHVPX OEBJA SBK WHZCF BIRE GUR YNML QBT.');