Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

Challange encriptador

Estoy terminando mi desafío del encriptador, practicamente ya está todo listo pero no he podido resolver el problema de la palabra "James". Cuando encripto la palabra "james" me devuelve el valor de "jaimenters" lo cual es correcto, pero al intentar desencriptar para regresar al valor original solo me devuelve "ja" Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

La función que se encarga de desencriptar es la siguiente:

function desencriptar(mensaje){
        for(let i=0;i<matriz_code.length;i++){
            if(mensaje.includes(matriz_code[i][1])){
                mensaje=mensaje.replaceAll(
                    matriz_code[i][1],
                    matriz_code[i][0]
                )
            }
        }
        return mensaje;

    }

Le he estado dando vueltas al asunto pero no he podido encontrar una respuesta. ¿Hay alguna sugerencia que pueda tomar en cuenta para que esto no pase? Gracias de antemano :)

2 respuestas
solución!

¡Hola Israel!

Gracias por compartir tu duda con nosotros. Parece que estás teniendo problemas al desencriptar la palabra "James" en tu desafío del encriptador. Según el código que compartiste, estás recorriendo una matriz llamada "matriz_code" para buscar y reemplazar las palabras encriptadas por sus equivalentes originales.

El problema podría estar relacionado con el uso de la función "replaceAll" en JavaScript. Esta función reemplaza todas las ocurrencias de una cadena por otra. Sin embargo, en tu caso, estás reemplazando la palabra encriptada por la original en cada iteración del bucle "for". Esto significa que si hay más de una ocurrencia de la palabra encriptada en el mensaje, solo se reemplazará la primera ocurrencia en cada iteración.

Una posible solución sería utilizar una expresión regular con el modificador "g" para realizar el reemplazo globalmente en todo el mensaje. Aquí tienes un ejemplo de cómo podrías modificar tu código:

function desencriptar(mensaje){
    for(let i=0;i<matriz_code.length;i++){
        if(mensaje.includes(matriz_code[i][1])){
            const regex = new RegExp(matriz_code[i][1], 'g');
            mensaje = mensaje.replace(regex, matriz_code[i][0]);
        }
    }
    return mensaje;
}

Al utilizar la expresión regular con el modificador "g", se reemplazarán todas las ocurrencias de la palabra encriptada en el mensaje, no solo la primera.

Espero que esta sugerencia te ayude a solucionar el problema. Si tienes alguna otra pregunta, no dudes en preguntar. ¡Buena suerte con tu desafío del encriptador!

Espero haber ayudado y buenos estudios!

Agradezco tu ayuda, ya quedó listo el chalange