В настоящее время я прохожу испытание FreeCodeCamp, в котором вас просят создать шифр ROT13 (очень простой шифр, который сдвигает каждую букву на 13 букв перед ней в бесконечном алфавите). Мой код ниже:
function rot13(str) {
let lettersRegex = /[A-Z]/;
let alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
let charCodes = [];
for(let i = 0; i < str.length; i++) {
if(str.charAt(i).match(lettersRegex)) {
charCodes.push(str.charCodeAt(i));
} else {
charCodes.push(str.charAt(i));
}
}
let ret = '';
console.log(`charCodes is currently ${charCodes}`);
for(let i = 0; i < charCodes.length; i ++) {
let temp = 0;
if(lettersRegex.test(String.fromCharCode(charCodes[i]))) {
if((alphabet.indexOf(String.fromCharCode(charCodes[i])) + 13) > alphabet.length) {
temp = charCodes[i] + alphabet.indexOf(charCodes[i]) - 12;
}
else {
temp = charCodes[i] + 13;
}
ret += String.fromCharCode(temp);
} else {
ret += charCodes[i];
}
}
console.log(ret);
return ret;
}
rot13("GUR DHVPX OEBJA SBK WHZCF BIRE GUR YNML QBT.");
//THE QUICK BROWN FOX JUMPS OVER THE L[ZY DOG.
Обычно каждая буква, кроме буквы «А», переходит на правильный ответ после шифра. Что может быть причиной того, что «А» превращается в «[» вместо «N» в этом коде?
Любые комментарии или советы по моему коду также приветствуются.