Υλοποίησε την κλασική μέθοδο σύνθεσης κρυφών μηνυμάτων που ονομάζεται τετραγωνικός κώδικας.
Δεδομένου ενός αγγλικού κειμένου, βγάλε την κωδικοποιημένη εκδοχή αυτού του κειμένου.
Πρώτα, η είσοδος κανονικοποιείται: τα κενά και η στίξη αφαιρούνται από το αγγλικό κείμενο και το μήνυμα μετατρέπεται σε πεζά.
Έπειτα, οι κανονικοποιημένοι χαρακτήρες χωρίζονται σε σειρές. Αυτές οι σειρές μπορούν να θεωρηθούν ότι σχηματίζουν ένα ορθογώνιο όταν εκτυπώνονται με αλλαγές γραμμής ανάμεσά τους.
Για παράδειγμα, η πρόταση
"If man was meant to stay on the ground, god would have given us roots."
κανονικοποιείται σε:
"ifmanwasmeanttostayonthegroundgodwouldhavegivenusroots"
Το απλό κείμενο πρέπει να οργανωθεί σε ένα ορθογώνιο όσο το δυνατόν πιο τετράγωνο. Το μέγεθος του ορθογωνίου πρέπει να καθορίζεται από το μήκος του μηνύματος.
Αν το c είναι ο αριθμός των στηλών και το r ο αριθμός των σειρών, τότε για το ορθογώνιο r x c βρες τον μικρότερο δυνατό ακέραιο c τέτοιον ώστε:
r * c >= length of message,c >= r,c - r <= 1.Το κανονικοποιημένο κείμενό μας έχει μήκος 54 χαρακτήρες, γεγονός που καθορίζει ένα ορθογώνιο με c = 8 και r = 7:
"ifmanwas"
"meanttos"
"tayonthe"
"groundgo"
"dwouldha"
"vegivenu"
"sroots "
Το κωδικοποιημένο μήνυμα προκύπτει διαβάζοντας προς τα κάτω τις στήλες, από αριστερά προς τα δεξιά.
Το παραπάνω μήνυμα κωδικοποιείται ως:
"imtgdvsfearwermayoogoanouuiontnnlvtwttddesaohghnsseoau"
Βγάλε το κωδικοποιημένο κείμενο σε τμήματα που συμπληρώνουν τέλεια ορθογώνια (r X c), με c τμήματα μήκους r, χωρισμένα με κενά.
Για φράσεις που υπολείπονται n χαρακτήρων από το τέλειο ορθογώνιο, συμπλήρωσε καθένα από τα τελευταία n τμήματα με ένα μόνο κενό στο τέλος.
"imtgdvs fearwer mayoogo anouuio ntnnlvt wttddes aohghn sseoau "
Πρόσεξε ότι αν στοιβάζαμε αυτά, θα μπορούσαμε οπτικά να αποκωδικοποιήσουμε το κρυπτοκείμενο πίσω στο αρχικό μήνυμα:
"imtgdvs"
"fearwer"
"mayoogo"
"anouuio"
"ntnnlvt"
"wttddes"
"aohghn "
"sseoau "
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Ruby με 21 έννοιες121 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.