Erstelle eine Implementierung der Rotationschiffre, die manchmal auch Caesar-Chiffre genannt wird.
Die Caesar-Chiffre ist eine einfache Verschiebechiffre: Sie verschiebt alle Buchstaben des Alphabets mit einem ganzzahligen Schlüssel zwischen 0 und 26.
Ein Schlüssel von 0 oder 26 liefert wegen der modularen Arithmetik immer dieselbe Ausgabe.
Der Buchstabe wird um so viele Stellen verschoben, wie es der Wert des Schlüssels vorgibt.
Die allgemeine Schreibweise für Rotationschiffren ist ROT + <key>.
Die am häufigsten verwendete Rotationschiffre ist ROT13.
Ein ROT13 auf dem lateinischen Alphabet sieht so aus:
Plain: abcdefghijklmnopqrstuvwxyz
Cipher: nopqrstuvwxyzabcdefghijklm
Sie ist stärker als die Atbash-Chiffre, weil sie 27 mögliche Schlüssel und 25 nutzbare Schlüssel hat.
Der Geheimtext wird in derselben Formatierung wie die Eingabe geschrieben, einschließlich Leerzeichen und Satzzeichen.
omg ergibt trl
c ergibt c
Cool ergibt Cool
The quick brown fox jumps over the lazy dog. ergibt Gur dhvpx oebja sbk whzcf bire gur ynml qbt.
Gur dhvpx oebja sbk whzcf bire gur ynml qbt. ergibt The quick brown fox jumps over the lazy dog.
Du sollst die Funktion rotate implementieren, die einen Int und einen String entgegennimmt und den String anschließend mit einer Rotationschiffre verschlüsselt.
Du kannst die vorgegebene Signatur verwenden, wenn du dir bei den Typen unsicher bist, aber lass dich davon nicht in deiner Kreativität einschränken.
Diese Übung arbeitet mit Textdaten. Aus historischen Gründen ist der Typ String in Haskell gleichbedeutend mit [Char], einer Liste von Zeichen. Für einen effizienteren Umgang mit Textdaten kannst du den Typ Text verwenden.
Als optionale Erweiterung dieser Übung kannst du
- text zu deiner Liste der Abhängigkeiten in package.yaml hinzufügen.Data.Text auf die folgende Weise importieren:import qualified Data.Text as T
import Data.Text (Text)
Text verwenden, z. B. rotate :: Int -> Text -> Text, und Data.Text-Kombinatoren zum Beispiel als T.pack ansprechen.Data.Text nachschlagen.String durch Text ersetzen, d. h.:rotate :: Int -> Text -> Text
Dieser Teil ist völlig optional.
Melde dich bei Exercism an, um Haskell mit 107 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.