Implémente la méthode classique de composition de messages secrets, appelée code carré.
Étant donné un texte en anglais, produis la version encodée de ce texte.
D'abord, l'entrée est normalisée : on retire les espaces et la ponctuation du texte anglais, et le message est mis en minuscules.
Ensuite, les caractères normalisés sont répartis en lignes. Ces lignes peuvent être considérées comme formant un rectangle lorsqu'on les affiche avec des retours à la ligne entre elles.
Par exemple, la phrase
"If man was meant to stay on the ground, god would have given us roots."
est normalisée en :
"ifmanwasmeanttostayonthegroundgodwouldhavegivenusroots"
Le texte en clair doit être organisé en un rectangle aussi proche que possible d'un carré. La taille du rectangle est déterminée par la longueur du message.
Si c est le nombre de colonnes et r le nombre de lignes, alors pour le rectangle r x c, trouve le plus petit entier c possible tel que :
r * c >= length of message,c >= r,c - r <= 1.Notre texte normalisé fait 54 caractères, ce qui impose un rectangle avec c = 8 et r = 7 :
"ifmanwas"
"meanttos"
"tayonthe"
"groundgo"
"dwouldha"
"vegivenu"
"sroots "
Le message codé s'obtient en lisant les colonnes de haut en bas, de gauche à droite.
Le message ci-dessus est codé ainsi :
"imtgdvsfearwermayoogoanouuiontnnlvtwttddesaohghnsseoau"
Produis le texte encodé par blocs qui forment des rectangles parfaits (r X c), avec c blocs de r caractères, séparés par des espaces.
Si une phrase est à n caractères d'un rectangle parfait, ajoute un unique espace final à chacun des n derniers blocs.
"imtgdvs fearwer mayoogo anouuio ntnnlvt wttddes aohghn sseoau "
Remarque que si l'on empilait ces blocs, on pourrait décoder visuellement le texte chiffré pour retrouver le message d'origine :
"imtgdvs"
"fearwer"
"mayoogo"
"anouuio"
"ntnnlvt"
"wttddes"
"aohghn "
"sseoau "
Inscris-toi sur Exercism pour apprendre et maîtriser PureScript avec 31 exercices, et un vrai mentorat humain, le tout gratuitement.