Deine Eltern haben dich und deine Geschwister zu einem Basketballspiel zwei gegen zwei herausgefordert. Sie sind sich sicher, dass sie gewinnen, und lassen dich die ersten paar Punkte machen. Dann übernehmen sie aber das Spiel. Weil du einen kleinen Schub brauchst, fängst du an, Pig Latin zu sprechen. Das ist eine erfundene Kindersprache, die für Nicht-Kinder schwer zu verstehen ist. So gewinnst du die Oberhand und besiegst deine Eltern!
Deine Aufgabe ist es, Text aus dem Englischen ins Pig Latin zu übersetzen. Die Übersetzung folgt vier Regeln, die sich das Muster aus Vokalen und Konsonanten am Wortanfang ansehen. Diese Regeln betrachten, wie jedes Wort Vokale und Konsonanten verwendet:
a, e, i, o und u
Wenn ein Wort mit einem Vokal beginnt oder mit "xr" oder "yt" anfängt, hänge einen "ay"-Laut an das Wortende an.
Zum Beispiel:
"apple" -> "appleay" (beginnt mit einem Vokal)"xray" -> "xrayay" (beginnt mit "xr")"yttria" -> "yttriaay" (beginnt mit "yt")Wenn ein Wort mit einem oder mehreren Konsonanten beginnt, verschiebe zuerst diese Konsonanten an das Ende des Wortes und hänge dann einen "ay"-Laut an das Wortende an.
Zum Beispiel:
"pig" -> "igp" -> "igpay" (beginnt mit einem einzelnen Konsonanten)"chair" -> "airch" -> "airchay" (beginnt mit mehreren Konsonanten)"thrush" -> "ushthr" -> "ushthray" (beginnt mit mehreren Konsonanten)Wenn ein Wort mit null oder mehr Konsonanten beginnt, auf die "qu" folgt, verschiebe zuerst diese Konsonanten (falls vorhanden) und den Teil "qu" an das Ende des Wortes und hänge dann einen "ay"-Laut an das Wortende an.
Zum Beispiel:
"quick" -> "ickqu" -> "ickquay" (beginnt mit "qu", keine vorausgehenden Konsonanten)"square" -> "aresqu" -> "aresquay" (beginnt mit einem Konsonanten, auf den "qu" folgt)Wenn ein Wort mit einem oder mehreren Konsonanten beginnt, auf die "y" folgt, verschiebe zuerst die Konsonanten vor dem "y" an das Ende des Wortes und hänge dann einen "ay"-Laut an das Wortende an.
Ein paar Beispiele:
"my" -> "ym" -> "ymay" (beginnt mit einem einzelnen Konsonanten, auf den "y" folgt)"rhythm" -> "ythmrh" -> "ythmrhay" (beginnt mit mehreren Konsonanten, auf die "y" folgt)Die Unit-Tests enthalten Wortbeispiele. Versuche, Konsonanten unabhängig von den konkreten Konsonantenkombinationen in den Unit-Tests zu gruppieren.
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
etwas über String-Typen in Haskell lesen.
- 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)
Jetzt kannst du z. B. translate :: Text -> Text schreiben und auf Kombinatoren aus Data.Text wie z. B. T.isSuffixOf verweisen.
Schlag die Dokumentation für Data.Text nach,
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.
Wir schauen uns Pattern Matching und reguläre Ausdrücke an sowie eine schöne Prolog-Lösung, und wir fragen: Hast du die Übung gelöst oder nur die Tests zum Laufen gebracht?