Verschlüsselung
Zeichen verschlüsseln
Nun wollen wir die map
-Funktion verwenden, um eine
Zeichenkette bzw. eine Liste von Zeichen zu verschlüsseln.
Hier noch einmal die Verschlüsselungstabelle:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z | | | | | | | | | | | | | | | | | | | | | | | | | | G K X C S L Z U A H W D B M T Y E N J V P O I R F Q
Wir benötigen also eine Funktion, die ein einzelnes Zeichen anhand der Tabelle verschlüsselt. Die einfachste Möglichkeit zur Implementierung dieser Funktion besteht darin, alle Fälle aufzulisten:
verschluesseltesZeichen : Char -> Char
verschluesseltesZeichen zeichen =
case zeichen of
'A' -> 'G'
'B' -> 'K'
'C' -> 'X'
'D' -> 'C'
'E' -> 'S'
'F' -> 'L'
'G' -> 'Z'
'H' -> 'U'
'I' -> 'A'
'J' -> 'H'
'K' -> 'W'
'L' -> 'D'
'M' -> 'B'
'N' -> 'M'
'O' -> 'T'
'P' -> 'Y'
'Q' -> 'E'
'R' -> 'N'
'S' -> 'J'
'T' -> 'V'
'U' -> 'P'
'V' -> 'O'
'W' -> 'I'
'X' -> 'R'
'Y' -> 'F'
'Z' -> 'Q'
_ -> '?'
Aufgabe 1
-
Teste die Funktion
verschluesseltesZeichen
. -
Nutze die Funktion, um eine ganze Zeichenkette zu verschlüsseln.
Tipp: Verwende auch die Funktionen
String.toList
undString.fromList
.
Aufgabe 2
Entwickle analog eine Funktion entschluesseltesZeichen
,
die die Verschlüsselung wieder rückgängig macht.
Entschlüssle damit die Nachricht auf der Einladungskarte:
CASYGNVFLAMCSVGBSNJVSMGPZPJVGKQITSDLPUNAMBSAMSBZGNVSMJVGVV
Für Fortgeschrittene - Ein Schlüsselwort verwenden
Eleganter und flexibler - aber auch komplizierter - ist die folgende
Implementierung der Funktion verschluesseltesZeichen
.
verschluesseltesZeichen : String -> Char -> Char
verschluesseltesZeichen schluesselwort zeichen =
let
posABC =
Char.toCode zeichen - Char.toCode 'A'
neuesZeichenAlsString =
String.slice posABC (posABC + 1) schluesselwort
vielleichtNeuesZeichen =
String.uncons neuesZeichenAlsString
neuesZeichen =
case vielleichtNeuesZeichen of
Just ( z, _ ) ->
z
Nothing ->
'?'
in
neuesZeichen
Aufgabe 3
Teste die Funktion verschluesseltesZeichen
für einelnze Zeichen
und für eine ganze Zeichenkette.
Nutze als Schlüsselwort z.B. "GKXCSLZUAHWDBMTYENJVPOIRFQ".
Beschreibe möglichst genau, wie die Funktion verschluesseltesZeichen
arbeitet.
Aufgabe 4
Entwickle analog eine Implementierung der Funktion entschluesseltesZeichen
.