Du arbeitest für ein Unternehmen, das ein Online-Multiplayer-Spiel namens Lexiconia entwickelt.
Um das Spiel zu spielen, bekommt jeder Spieler 13 Buchstaben, die er zu Wörtern umsortieren muss. Verschiedene Buchstaben haben unterschiedliche Punktwerte, denn mit manchen Buchstaben lassen sich leichter Wörter bilden als mit anderen.
Das Spiel ist ursprünglich auf Englisch erschienen und sehr beliebt. Jetzt möchte das Unternehmen auf weitere Sprachen expandieren.
Verschiedene Sprachen müssen unterschiedliche Punktwerte für Buchstaben unterstützen. Wie viele Punkte ein Buchstabe wert ist, hängt davon ab, wie häufig er im Vergleich zu anderen Buchstaben der jeweiligen Sprache verwendet wird.
Der Buchstabe „C“ zum Beispiel ist im Englischen recht häufig und bringt nur 3 Punkte. Im Norwegischen ist er dagegen sehr selten und bringt 10 Punkte.
Damit sich neue Sprachen leichter hinzufügen lassen, muss dein Team ändern, wie Buchstaben und ihre Punktwerte im Spiel gespeichert werden.
Deine Aufgabe ist es, das Datenformat der Buchstaben und ihrer Punktwerte im Spiel zu ändern.
Derzeit werden die Buchstaben nach ihrer Punktzahl in Gruppen gespeichert, in einer Eins-zu-viele-Zuordnung.
Das muss geändert werden, sodass jeder einzelne Buchstabe mit seiner Punktzahl in einer Eins-zu-eins-Zuordnung gespeichert wird.
Im Rahmen dieser Änderung hat das Team außerdem beschlossen, die Buchstaben in Kleinbuchstaben statt in Großbuchstaben zu ändern.
Wenn du sehen möchtest, wie die Daten vorher strukturiert waren und wie sie geändert werden müssen, schau dir die Beispiele in der Testsuite an.
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 zum Beispiel transform :: Map Int Text -> Map Char Int schreiben und Data.Text-Kombinatoren zum Beispiel als T.toLower verwenden.
die Dokumentation für Data.Text nachschlagen.
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.