Este es un proyecto de freecodecamp donde una cadena se cifra por los valores de las letras se desplazan 13 lugares. Todas las letras estarán en mayúsculas. No transforme ningún carácter no alfabético (es decir, espacios, puntuación), pero páselos. pruebo numadd por regex numadd es igual a num+13 o numadd-26. alguna letra salió mal y no devuelve una letra mayúscula por favor que alguien explique lo que está mal
function rot13(str) { var str2 = ''; var arr1 = [] var arr2 = [] var reg = /[^AZ]/ // var char if (str.includes(' ') == false) { for (let i = 0; i < str.length; i++) { var char = ''; var numres let num = str.charCodeAt(i) // console.log(num) // var numadd = num + 13; // if num+13 not uppercase if (reg.test(num + 13)) { numres = num - 13 } // if num+13 is uppercase else { numres = num + 13 } char = String.fromCharCode(numres) str2 += char } console.log(str2); } } rot13("SERRPBQRPNZC");reg.test(num + 13) verifica la representación textual del número num + 13 (aplicando conversión de tipo implícita ) por lo que siempre dice True (no coincide con una letra mayúscula) y siempre se calcula numres = num - 13 .
Use reg.test(String.fromCharCode(num + 13)) en su lugar de la siguiente manera:
function rot13(str) { var str2 = ''; var arr1 = [] var arr2 = [] var reg = /[^AZ]/ // var char if (str.includes(' ') == false) { for (let i = 0; i < str.length; i++) { var char = ''; var numres let num = str.charCodeAt(i) // console.log(num) // var numadd = num + 13; // if num+13 not uppercase // ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ if (reg.test(String.fromCharCode(num + 13))) { numres = num - 13 } // if num+13 is uppercase else { numres = num + 13 } char = String.fromCharCode(numres) str2 += char } console.log(str2); } } rot13("SERRPBQRPNZC");