Implementa o método clássico para compor mensagens secretas conhecido como código quadrado.
Dado um texto em inglês, devolve a versão codificada desse texto.
Primeiro, a entrada é normalizada: os espaços e a pontuação são removidos do texto em inglês e a mensagem passa para minúsculas.
De seguida, os carateres normalizados são divididos em linhas. Estas linhas podem ser encaradas como formando um retângulo quando impressas com quebras de linha entre elas.
Por exemplo, a frase
"If man was meant to stay on the ground, god would have given us roots."
é normalizada para:
"ifmanwasmeanttostayonthegroundgodwouldhavegivenusroots"
O texto simples deve ser organizado num retângulo o mais quadrado possível. O tamanho do retângulo é determinado pelo comprimento da mensagem.
Se c for o número de colunas e r o número de linhas, então, para o retângulo r x c, encontra o menor número inteiro possível c tal que:
r * c >= length of message,c >= r,c - r <= 1.O nosso texto normalizado tem 54 carateres, o que dá um retângulo com c = 8 e r = 7:
"ifmanwas"
"meanttos"
"tayonthe"
"groundgo"
"dwouldha"
"vegivenu"
"sroots "
A mensagem codificada obtém-se lendo as colunas de cima para baixo, da esquerda para a direita.
A mensagem acima fica codificada assim:
"imtgdvsfearwermayoogoanouuiontnnlvtwttddesaohghnsseoau"
Devolve o texto codificado em blocos que preenchem retângulos perfeitos (r X c), com c blocos de comprimento r, separados por espaços.
Nas frases que ficam n carateres aquém do retângulo perfeito, preenche cada um dos últimos n blocos com um único espaço no fim.
"imtgdvs fearwer mayoogo anouuio ntnnlvt wttddes aohghn sseoau "
Repara que, se empilhássemos estes blocos, conseguiríamos descodificar visualmente o texto cifrado de volta à mensagem original:
"imtgdvs"
"fearwer"
"mayoogo"
"anouuio"
"ntnnlvt"
"wttddes"
"aohghn "
"sseoau "
Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.