Implementa il metodo classico per comporre messaggi segreti, chiamato codice quadrato.
Dato un testo in inglese, produci in output la versione codificata di quel testo.
Per prima cosa, l'input viene normalizzato: gli spazi e la punteggiatura vengono rimossi dal testo in inglese e il messaggio viene convertito in minuscolo.
Poi i caratteri normalizzati vengono suddivisi in righe. Queste righe si possono considerare come la formazione di un rettangolo quando vengono stampate con dei ritorni a capo tra una e l'altra.
Ad esempio, la frase
"If man was meant to stay on the ground, god would have given us roots."
viene normalizzata in:
"ifmanwasmeanttostayonthegroundgodwouldhavegivenusroots"
Il testo in chiaro va organizzato in un rettangolo il più possibile quadrato. La dimensione del rettangolo è determinata dalla lunghezza del messaggio.
Se c è il numero di colonne e r è il numero di righe, allora per il rettangolo r x c trova il più piccolo intero c possibile tale che:
r * c >= length of message,c >= r,c - r <= 1.Il nostro testo normalizzato è lungo 54 caratteri, quindi il rettangolo ha c = 8 e r = 7:
"ifmanwas"
"meanttos"
"tayonthe"
"groundgo"
"dwouldha"
"vegivenu"
"sroots "
Il messaggio codificato si ottiene leggendo le colonne dall'alto verso il basso, procedendo da sinistra a destra.
Il messaggio qui sopra è codificato come:
"imtgdvsfearwermayoogoanouuiontnnlvtwttddesaohghnsseoau"
Produci in output il testo codificato in blocchi che riempiono rettangoli perfetti (r X c), con c blocchi di lunghezza r, separati da spazi. Per le frasi che sono n caratteri in meno rispetto al rettangolo perfetto, riempi ciascuno degli ultimi n blocchi con un singolo spazio finale.
"imtgdvs fearwer mayoogo anouuio ntnnlvt wttddes aohghn sseoau "
Nota che, se impilassimo questi blocchi, potremmo decodificare visivamente il testo cifrato per tornare al messaggio originale:
"imtgdvs"
"fearwer"
"mayoogo"
"anouuio"
"ntnnlvt"
"wttddes"
"aohghn "
"sseoau "
Iscriviti a Exercism per imparare e padroneggiare AWK con 3 concetti92 esercizi e il mentoring di persone reali, tutto gratis.