Implementa el método clásico para componer mensajes secretos conocido como código cuadrado.
Dado un texto en inglés, devuelve la versión codificada de ese texto.
En primer lugar, la entrada se normaliza: se eliminan los espacios y los signos de puntuación del texto en inglés y el mensaje se convierte a minúsculas.
A continuación, los caracteres normalizados se dividen en filas. Estas filas pueden considerarse como un rectángulo cuando se imprimen con saltos de línea intermedios.
Por ejemplo, la frase
"If man was meant to stay on the ground, god would have given us roots."
se normaliza a:
"ifmanwasmeanttostayonthegroundgodwouldhavegivenusroots"
El texto sin cifrar debe organizarse en un rectángulo lo más cuadrado posible. El tamaño del rectángulo debe venir determinado por la longitud del mensaje.
Si c es el número de columnas y r es el número de filas, para el rectángulo r x c encuentra el menor número entero c posible tal que:
r * c >= length of message,c >= r,c - r <= 1.Nuestro texto normalizado tiene 54 caracteres, lo que determina un rectángulo con c = 8 y r = 7:
"ifmanwas"
"meanttos"
"tayonthe"
"groundgo"
"dwouldha"
"vegivenu"
"sroots "
El mensaje codificado se obtiene leyendo las columnas de arriba abajo, de izquierda a derecha.
El mensaje anterior se codifica así:
"imtgdvsfearwermayoogoanouuiontnnlvtwttddesaohghnsseoau"
Devuelve el texto codificado en fragmentos que formen rectángulos perfectos (r X c), con c fragmentos de longitud r, separados por espacios.
En las frases a las que les falten n caracteres para completar el rectángulo perfecto, rellena cada uno de los últimos n fragmentos con un único espacio final.
"imtgdvs fearwer mayoogo anouuio ntnnlvt wttddes aohghn sseoau "
Fíjate en que, si apiláramos estos fragmentos, podríamos descifrar visualmente el criptograma y recuperar el mensaje original:
"imtgdvs"
"fearwer"
"mayoogo"
"anouuio"
"ntnnlvt"
"wttddes"
"aohghn "
"sseoau "
Regístrate en Exercism para aprender y dominar Python con 17 conceptos146 ejercicios y mentoría humana real, todo gratis.