Cipher Map Cipher Map

"Nikola, A1213pokl, bAse730onE."

"Sí Sofía, ¿qué es eso?"

"¡Dímelo tú! Tu instrumento de tortura está alterando mis circuitos con su nuevo léxico. No hay manera de que pueda recordar estas nuevas contraseñas, y esa cosa no acepta las que son sencillas y fáciles."

"Oh, esas serían buenas contraseñas, podrías utilizarlas."

"¿Por qué no las usas tú?" Sofía replicó casi histérica. "¡Yo ya las olvidé! ¿Quieres que me quede fuera de mi propia casa por siempre? Tienes que idear algo más sencillo, de forma que yo no tenga que mantener toda esa jerigonza aleatoria en mi cabeza." Sofía rara vez actúa de manera exigente, pero esta vez había alcanzado su punto de agitación. El estrés de los últimos días junto con su agotamiento la habían llevado al límite.

"No te preocupes, me esperaba algo más fácil de recordar ¿Por qué no usas un mapa de cifrado para tu contraseña? Con él podemos codificar todas las contraseñas y dejarlas justo al lado de la puerta o en cualquier lugar especial que acordemos, ya que solo podrían ser decodificados usando el mapa, y este lo mantendríamos con nosotros en nuestro viaje"

"¿Así que no necesitaría recordar todas esas contraseñas? ¿Todo lo que tendríamos que hacer es asegurarnos de no perder el mapa de cifrado?" -preguntó Sofía con esperanza.

"Si, es correcto."

"Increíble. Muéstrame el mapa de cifrado y explícame cómo funciona todo una vez más."

Ayuda a Sofía a escribir un decodificador para las contraseñas que Nikola codificará utilizando un mapa de cifrado (cipher map). Una reglilla de cifrado es un cuadrado de papel de 4x4, con cuatro ventanas recortadas. Colocando dicha reglilla sobre una hoja de papel del mismo tamaño, el codificador escribe los primeros cuatro símbolos de su contraseña dentro de las ventanas (ver fig. más bajo). Enseguida, el codificador gira la reglilla 90 grados hacia la derecha. Los símbolos escritos anteriormente quedan ocultos por la reglilla, y nuevos espacios en blanco aparecen dentro de las ventanas. El codificador escribe entonces los siguientes cuatro símbolos de la contraseña, y vuelve a girar la reglilla 90 grados. Una vez más , procede a escribir cuatro símbolos y realiza un último giro. Para concluir el codificado, se escriben los 4 símbolos restantes de la contraseña en los espacios disponibles.

Sin la misma reglilla de cifrado, es difícil discernir la contraseña de la cuadricula resultante que se compone de 16 símbolos. Por este motivo, el codificador puede estar tranquilo ya que ningún vándalo obtendrá fácilmente el acceso a la puerta cerrada.

Escribe un módulo que permita a los robots recordar fácilmente sus contraseñas cuando regresen a casa.

La reglilla de cifrado y la contraseña cifrada se representan como una matriz (tuplas) de cadenas (str).

Datos de Entrada: Una reglilla de cifrado y una contraseña cifrada, como tuplas de cadenas (str).

Salida: La contraseña, como una cadena (str.

Ejemplo:

recallPassword(
    ['X...',
     '..X.',
     'X..X',
     '....'],
    ['itdf',
     'gdce',
     'aton',
     'qrdi']) == 'icantforgetiddqd'

recallPassword(
    ['....',
     'X..X',
     '.X..',
     '...X'],
    ['xhwc',
     'rsqx',
     'xqzz',
     'fyzr']) == 'rxqrwsfzxqxzhczy'

¿Cómo se usa?: Aquí podrás aprender cómo trabajar con matrices 2D. También aprenderás sobre las antiguas reglilla de cifrado, una técnica de codificar mensajes que ha sido utilizada durante medio milenio. La primera descripción conocida de la rejilla de cifrado viene del matemático italiano Girolamo Cardano en 1550.

Condiciones: len(cipher_grille) == 4
len(ciphered_password) == 4
all(len(row) == 4 for row in ciphered_password)
all(len(row) == 4 for row in cipher_grille)
all(all(ch in string.ascii_lowercase for ch in row) for row in ciphered_password)
all(all(ch == "X" or ch == "." for ch in row) for row in cipher_grille)