Δημιούργησε μια υλοποίηση του κρυπτογραφήματος περιστροφής, που μερικές φορές ονομάζεται και κρυπτογράφημα του Καίσαρα.
Το κρυπτογράφημα του Καίσαρα είναι ένα απλό κρυπτογράφημα μετατόπισης που βασίζεται στη μετάθεση όλων των γραμμάτων του αλφαβήτου χρησιμοποιώντας έναν ακέραιο κλειδί μεταξύ 0 και 26.
Η χρήση κλειδιού 0 ή 26 θα δίνει πάντα την ίδια έξοδο, λόγω της αριθμητικής υπολοίπων.
Το γράμμα μετατοπίζεται κατά τόσες θέσεις όση είναι η τιμή του κλειδιού.
Ο γενικός συμβολισμός για τα κρυπτογραφήματα περιστροφής είναι ROT + <key>.
Το πιο συνηθισμένο κρυπτογράφημα περιστροφής είναι το ROT13.
Ένα ROT13 στο λατινικό αλφάβητο θα ήταν ως εξής:
Plain: abcdefghijklmnopqrstuvwxyz
Cipher: nopqrstuvwxyzabcdefghijklm
Είναι ισχυρότερο από το κρυπτογράφημα Atbash, γιατί έχει 27 πιθανά κλειδιά και 25 χρησιμοποιήσιμα κλειδιά.
Το κρυπτοκείμενο γράφεται με την ίδια μορφοποίηση όπως η είσοδος, συμπεριλαμβανομένων των κενών και της στίξης.
omg δίνει trl
c δίνει c
Cool δίνει Cool
The quick brown fox jumps over the lazy dog. δίνει Gur dhvpx oebja sbk whzcf bire gur ynml qbt.
Gur dhvpx oebja sbk whzcf bire gur ynml qbt. δίνει The quick brown fox jumps over the lazy dog.
Πρέπει να υλοποιήσεις τη συνάρτηση rotate, η οποία παίρνει ένα Int και ένα String και έπειτα το κωδικοποιεί χρησιμοποιώντας ένα κρυπτογράφημα περιστροφής.
Μπορείς να χρησιμοποιήσεις την υπογραφή που σου δίνεται αν δεν είσαι σίγουρος για τους τύπους, αλλά μην αφήσεις αυτό να περιορίσει τη δημιουργικότητά σου.
Αυτή η άσκηση δουλεύει με δεδομένα κειμένου. Για ιστορικούς λόγους, ο τύπος
String της Haskell είναι συνώνυμος με το [Char], μια λίστα χαρακτήρων. Για πιο
αποδοτικό χειρισμό δεδομένων κειμένου, μπορεί να χρησιμοποιηθεί ο τύπος Text.
Ως προαιρετική επέκταση αυτής της άσκησης, μπορείς να
- text στη λίστα εξαρτήσεών σου στο package.yaml.Data.Text με τον ακόλουθο
τρόπο:import qualified Data.Text as T
import Data.Text (Text)
Text, π.χ. rotate :: Int -> Text -> Text, και αναφερθείς
στους συνδυαστές του Data.Text ως π.χ. T.pack.Data.Text.String με Text στο RotationalCipher.hs, δηλαδή:rotate :: Int -> Text -> Text
Αυτό το μέρος είναι εντελώς προαιρετικό.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Haskell με 107 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.