Teilproblem
Zeichen verschlüsseln
Wir betrachten zuerst das Teilproblen, einen einzelnen Buchstaben mit der Tabelle zu verschlüsseln.
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
Ziel ist es, eine Funktion verschluesseltesZeichen
für dieses Teilproblem zu entwickeln.
Signatur:
verschluesseltesZeichen: String -> String
Beispiele:
verschluesseltesZeichen "P" -> "Y"
verschluesseltesZeichen "P" -> "Y"
verschluesseltesZeichen "." -> "?"
verschluesseltesZeichen " " -> "?"
Eine Fallunterscheidung verwenden
Die einfachste Möglichkeit zur Implementierung dieser Funktion besteht darin, alle Fälle aufzulisten:
module MonoalphabetischeVerschluesselung exposing (..)
{-- Version 1 --}
verschluesseltesZeichen: String -> String
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
.
Aufgabe 2
Entwickle analog eine Funktion entschluesseltesZeichen
, die die Verschlüsselung wieder rückgängig macht.
Ein Schlüsselwort verwenden
Eleganter und flexibler - aber auch komplizierter - ist die folgende Implementierung der Funktion verschluesseltesZeichen
.
module MonoalphabetischeVerschluesselung exposing (..)
{-- Version 2 --}
-- Verschlüsselungstabelle
schluesselwort: String
schluesselwort = "GKXCSLZUAHWDBMTYENJVPOIRFQ"
abc: String
abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-- Hilfsfunktionen
erstesZeichen: String -> String
erstesZeichen text =
String.left 1 text
ohneErstesZeichen: String -> String
ohneErstesZeichen text =
String.dropLeft 1 text
zeichenAnPos: Int -> String -> String
zeichenAnPos n text =
String.slice (n-1) n text
position: String -> String -> Int
position zeichen text =
if text == "" then
1
else
if zeichen == (erstesZeichen text) then
1
else
1 + (position zeichen (ohneErstesZeichen text))
positionABC: String -> Int
positionABC zeichen =
let
n = position zeichen abc
in
if n <= 26 then n else 0
-- Funktion für die Verschlüsselung eines Zeichens
verschluesseltesZeichen: String -> String
verschluesseltesZeichen zeichen =
zeichenAnPos (positionABC zeichen) schluesselwort
Aufgabe 3
Analysiere und teste die Funktionsdefinitionen. Beschreibe möglichst genau, was die einzelnen Funktionen leisten und wie das in den Funktionsdefinitionen implementiert wird.
Aufgabe 4
Entwickle analog eine Implementierung der Funktion entschluesseltesZeichen
.