volver al archivo
29
MAY
día 29 / 30

Última comunicación

Difícil
stringscipherparsing
historia · contexto

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á.

objetivo · spec

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:

LetraPosición-3Resultado
W (22)22 - 319T
H (7)7 - 34E
(espacio)(espacio)
K (10)10 - 37H
H (7)7 - 34E
............

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)
validación

Casos de prueba

tests/5.casesmostrando 5 de 5
  1. [01]el último mensaje de Lía
  2. [02]formato de canal incorrecto
  3. [03]shift 0, sin cambios
  4. [04]0x1A = 26, 26 mod 26 = 0 → sin desplazamiento
  5. [05]shift 3 en una palabra cualquiera