Malaclatin

Malaclatin

Közepes

Bevezetés

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!

Utasítások

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:

  • magánhangzók: az a, e, i, o és u betűk
  • mássalhangzók: az angol ábécé többi 21 betűje

1. szabály

Ha 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)

2. szabály

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)

3. szabály

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)

4. szabály

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)

Tippek

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.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Haskell Exercism

Készen állsz elkezdeni a(z) Malaclatin feladatot?

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.

Mélyelemzés: Malaclatin!

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?