A szüleid kihívtak téged és a testvéredet egy két a kettő elleni kosárlabdajátékra. Bízva abban, hogy nyerni fognak, hagyták, hogy megszerezd az első pár pontot, de aztán átvették a játék irányítását. Mivel egy kis lendületre van szükséged, elkezdesz Pig Latin nyelven beszélni, ami egy kitalált gyereknyelv, és amit nehezen értenek meg azok, akik nem gyerekek. Ez megadja neked az előnyt, hogy felülkerekedj a szüleiden!
A feladatod, hogy a szöveget angolról Pig Latinra fordítsd. A fordítást négy szabály határozza meg, amelyek egy szó elején a magánhangzók és a mássalhangzók mintázatát vizsgálják. Ezek a szabályok minden szónál a magánhangzók és a mássalhangzók használatát nézik:
a, e, i, o és u betűkHa egy szó magánhangzóval kezdődik, vagy "xr" vagy "yt" betűkkel kezdődik, a szó végére egy "ay" hangot teszünk.
Például:
"apple" -> "appleay" (magánhangzóval kezdődik)"xray" -> "xrayay" ("xr" betűkkel kezdődik)"yttria" -> "yttriaay" ("yt" betűkkel kezdődik)Ha egy szó egy vagy több mássalhangzóval kezdődik, először ezeket a mássalhangzókat a szó végére tesszük, majd a szó végére egy "ay" hangot teszünk.
Például:
"pig" -> "igp" -> "igpay" (egyetlen mássalhangzóval kezdődik)"chair" -> "airch" -> "airchay" (több mássalhangzóval kezdődik)"thrush" -> "ushthr" -> "ushthray" (több mássalhangzóval kezdődik)Ha egy szó nulla vagy több mássalhangzóval kezdődik, amelyeket "qu" követ, először ezeket a mássalhangzókat (ha vannak) és a "qu" részt a szó végére tesszük, majd a szó végére egy "ay" hangot teszünk.
Például:
"quick" -> "ickqu" -> "ickquay" ("qu" betűkkel kezdődik, előtte nincs mássalhangzó)"square" -> "aresqu" -> "aresquay" (egy mássalhangzóval kezdődik, amelyet "qu" követ)Ha egy szó egy vagy több mássalhangzóval kezdődik, amelyeket "y" követ, először a "y" előtti mássalhangzókat a szó végére tesszük, majd a szó végére egy "ay" hangot teszünk.
Néhány példa:
"my" -> "ym" -> "ymay" (egyetlen mássalhangzóval kezdődik, amelyet "y" követ)"rhythm" -> "ythmrh" -> "ythmrhay" (több mássalhangzóval kezdődik, amelyet "y" követ)Az egységtesztek példákat tartalmaznak szavakra. Próbáld a mássalhangzókat az egységtesztekben szereplő konkrét mássalhangzó-kombinációktól függetlenül csoportosítani.
Ez a feladat szöveges adatokkal dolgozik. Történelmi okokból a Haskell String típusa megegyezik a [Char] típussal, ami karakterek listája. A szöveges adatok hatékonyabb kezelésére a Text típus használható.
A feladat opcionális kiegészítéseként a következőket teheted:
Olvass a stringtípusokról Haskellben.
Add hozzá a - text elemet a függőségek listájához a package.yaml fájlban.
Importáld a Data.Text modult a következő módon:
import qualified Data.Text as T
import Data.Text (Text)
Most már írhatsz például translate :: Text -> Text típusú függvényt, és hivatkozhatsz a Data.Text kombinátoraira például T.isSuffixOf formában.
Nézd meg a Data.Text dokumentációját,
Ez a rész teljesen opcionális.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Haskell nyelvet 107 feladat segítségével, valódi emberi mentorálással, mindez ingyen.
Megnézzük a mintailesztést és a reguláris kifejezéseket, valamint egy szép Prolog-megoldást, és feltesszük a kérdést: megoldottad a feladatot, vagy csak átmentél a teszteken?