Historia
Día 29
🔗 Clímax encadenado — día 4 de 5. Hoy usas como entrada el canal que devolviste ayer en
activarCanal:'CANAL-ECO-9F'. Si no resolviste el día 28, ni el 27 ni el 26, vuelve y hazlos en orden — esta cadena no funciona si te saltas un eslabón.
El canal está activo. Dentro hay un único mensaje, cifrado con el método que Lía usaba para comentarios privados: César con un desplazamiento que el propio nombre del canal indica.
El sufijo del canal es un número en hexadecimal. Pásalo a decimal, calcula su residuo módulo 26, y ese es el desplazamiento que se aplicó al mensaje original. Para descifrarlo, retrocede cada letra esa misma cantidad.
El texto que vas a leer fue para una persona, pero la persona ya no está.
Tu misión
Tu misión
Implementa descifrarMensaje(canal, textoCifrado) siguiendo cinco pasos:
1. Valida el formato del canal
Tres partes separadas por guion: "CANAL", "ECO", "<hex>". Si no cumple, devuelve '' y termina.
2. Extrae el sufijo y pásalo a entero
"CANAL-ECO-9F" → sufijo "9F" → parseInt("9F", 16) → 159.
3. Calcula el desplazamiento
shift = hex mod 26. Para 9F: 159 mod 26 = 3.
4. Aplica César inverso al texto
Para cada letra mayúscula del texto cifrado, retrocede shift posiciones en el alfabeto. Si te pasas de A, envuelve por el final (A retrocedido 3 → X).
Todo lo que no sea A-Z mayúscula (espacios, puntuación, dígitos, minúsculas) se deja intacto.
5. Devuelve el resultado
Ejemplo paso a paso
Canal: 'CANAL-ECO-9F'
Sufijo hex: '9F' → 159 (decimal)
Shift: 159 % 26 = 3
Aplicado a 'WH KH EXVFDGR WRGR HVWH WLHPSR' con shift 3 hacia atrás:
| Letra | Posición | -3 | Resultado |
|---|---|---|---|
| W (22) | 22 - 3 | 19 | T |
| H (7) | 7 - 3 | 4 | E |
| (espacio) | — | — | (espacio) |
| K (10) | 10 - 3 | 7 | H |
| H (7) | 7 - 3 | 4 | E |
| ... | ... | ... | ... |
Resultado completo: 'TE HE BUSCADO TODO ESTE TIEMPO'.
Casos rápidos
descifrarMensaje('CANAL-ECO-9F', 'WH KH EXVFDGR WRGR HVWH WLHPSR')
// → 'TE HE BUSCADO TODO ESTE TIEMPO'
descifrarMensaje('CANAL-ECO-00', 'HOLA MUNDO')
// → 'HOLA MUNDO' (shift 0 = sin cambio)
descifrarMensaje('OTRO-9F', 'X')
// → '' (formato inválido)
Casos de prueba
- [01]el último mensaje de Lía
- [02]formato de canal incorrecto
- [03]shift 0, sin cambios
- [04]0x1A = 26, 26 mod 26 = 0 → sin desplazamiento
- [05]shift 3 en una palabra cualquiera