CCC-06 (2006) - S2 (Attack of the CipherTexts)

View as PDF

Submit solution

Points: 20 (partial)
Time limit: 1.0s
Memory limit: 256M

Author:
Problem type
Allowed languages
C, C++, Java, Pascal, Python
Attack of the CipherTexts

Η Ruby είναι αποκρυπτογράφος. Ξέρει ότι οι πολύ μεγάλοι κακοποιοί (ο κύριος X και ο κύριος Z) στέλνουν μυστικά μηνύματα για πολύ κακά πράγματα ο ένας στον άλλο.

Ωστόσο, η Ruby κατάφερε να υποκλέψει ένα μήνυμα απλού κειμένου και το αντίστοιχό του, κρυπτογραφημένου κειμένου μήνυμα. Με τον όρο απλό κείμενο, εννοούμε το μήνυμα πριν κρυπτογραφηθεί (δηλαδή, ευανάγνωστες αγγλικές προτάσεις), και με τον όρο κρυπτογραφημένο κείμενο ή κρυπτοκείμενο, εννοούμε το μήνυμα μετά την κρυπτογράφηση (κάτι ασυνάρτητο). Για να κρυπτογραφηθεί ένα μήνυμα, κάθε γράμμα αντικαθίσταται με ένα νέο γράμμα, έτσι ώστε όταν διαβαστεί το μήνυμα κρυπτογραφημένου κειμένου, να μην είναι προφανές ποιο είναι το μήνυμα απλού κειμένου.

Ωστόσο, η Ruby, ως εξαιρετική αποκρυπτογράφος που είναι, γνωρίζει τον αλγόριθμο που χρησιμοποιούν ο κύριος X και ο κύριος Z . Ξέρει ότι όταν κρυπτογραφούν τα μηνύματά τους απλώς αντιστοιχίζουν ένα γράμμα με ένα άλλο (πιθανώς διαφορετικό) γράμμα. Φυσικά, αυτή η διασικασία αντιστοίχισης πρέπει να είναι "ένα προς ένα", που σημαίνει ότι κάθε γράμμα του απλού κειμένου πρέπει να αντιστοιχεί ακριβώς σε ένα γράμμα του κρυπτοκειμένου, καθώς και «επί», που σημαίνει ότι κάθε γράμμα του κρυπτοκειμένου έχει ακριβώς ένα αντίστοιχο γράμμα απλού κειμένου.

Η δουλειά σας είναι να αυτοματοποιήσετε τη διαδικασία αποκρυπτογράφησης για την Ruby και να βοηθήσετε να σωθεί ο κόσμος!

Είσοδος

Η είσοδος αποτελείται από τρείς συμβολοσειρές, κάθε μια απο αυτές σε ξεχωριστή γραμμή. Η πρώτη συμβολοσειρά είναι το μήνυμα απλού κειμένου για το οποίο γνωρίζει η Ruby. Η δεύτερη συμβολοσειρά είναι το μήνυμα κρυπτογραφημένου κειμένου που αντιστοιχεί στο μήνυμα απλού κειμένου. Η τρίτη συμβολοσειρά είναι άλλο ένα μήνυμα κρυπτογραφημένου κειμένου. Θεωρήστε ότι όλες οι συμβολοσειρές έχουν μήκος τουλάχιστον ενός χαρακτήρα και το πολύ ογδόντα χαρακτήρων. Θεωρήστε επίσης ότι υπάρχουν μόνο 27 έγκυροι χαρακτήρες: τα κεφαλαία γράμματα («A» έως «Z») καθώς και ο χαρακτήρας του διαστήματος ( "\;\;" ). Δηλαδή, δεν θα υπάρχουν σημεία στίξης, πεζά γράμματα ή ειδικοί χαρακτήρες (όπως " ! " ή " @ ") ούτε σε μηνύματα απλού κειμένου ούτε σε μηνύματα κρυπτογραφημένου κειμένου.

Έξοδος

Η έξοδος είναι μια συμβολοσειρά (απλού κειμένου) που αντιστοιχεί στη δεύτερο μήνυμα κρυπτοκειμένου της εισόδου. Μπορεί ωστόσο να μην είναι πάντα δυνατό να προσδιοριστεί κάθε χαρακτήρας του δεύτερου μηνύματος κρυπτοκειμένου. Αν συμβαίνει αυτό, η έξοδος θα πρέπει να έχει ένα χαρακτήρα τελείας («.») στη θέση καθενός από τα γράμματα που δεν μπορούν να προσδιοριστούν.

Παράδειγμα

input

THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
UIFARVJDLACSPXOAGPYAKVNQTAPWFSAUIFAMB ZAEPH
XFABSFAWFSZACBEAQFPQMFAEPJOHAWFSZACBEAUIJOHTAIBAIB

output

WE ARE VERY BAD PEOPLE DOING VERY BAD THINGS HA HA
Επεξήγηση του 1ου παραδείγματος:

Παρατηρήστε ότι κάθε χαρακτήρας του απλού κειμένου της εξόδου εμπεριέχεται στο πρώτο μήνυμα, και έτσι, μπορεί να υπολογιστεί ολόκληρη η αντιστοίχιση.


input

THERE ARE NOT ENOUGH LETTERS
XQAZASEZASNYXSANYLWQSTAXXAZM
JSCENNYXSIACYIASXQJM

output

. .ANNOT .E.O.E TH.S
Επεξήγηση του 2ου παραδείγματος:

Παρατηρήστε ότι οι χαρακτήρες που δεν μπορούν να προσδιοριστούν είναι τα γράμματα J, C, I (του κρυπτοκειμένου), διότι αυτά τα γράμματα δεν εμφανίζονται στο προηγούμενο κρυπτογραφημένο μήνυμα. Όπως φαίνεται, το μήνυμα απλού κειμένου για το τελευταίο μήνυμα κρυπτοκειμένου είναι: «I CANNOT DECODE THIS». Όλα τα υπόλοιπα γράμματα, μεταξύ απλού κειμένου και κρυπτοκειμένου, θα πρέπει να αντιστοιχοίζονται.


Comments

There are no comments at the moment.