s n h m r u
i

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

  1. Teste die Funktion verschluesseltesZeichen.
  2. Nutze die Funktion, um eine ganze Zeichenkette zu verschlüsseln. Tipp: Verwende auch die Funktionen String.toList und String.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.

Suche

v
8.2.2.10.3.1.4
inf-schule.de/deklarativ/fp_elm/elm_programme/rekursion/verschluesselung/lernstrecke/verschluesselung
inf-schule.de/8.2.2.10.3.1.4
inf-schule.de/@/page/h7cs0pjk77PNAcym

Rückmeldung geben