Tes parents t'ont lancé un défi, à toi et à ta fratrie : un match de basket en deux contre deux. Confiants de l'emporter, ils te laissent marquer les premiers points, avant de reprendre la partie en main. Comme tu as besoin d'un petit coup de pouce, tu te mets à parler en Pig Latin, une langue inventée par les enfants, difficile à comprendre pour ceux qui ne le sont plus. Voilà de quoi prendre l'avantage sur tes parents !
Ta tâche est de traduire du texte de l'anglais vers le Pig Latin. La traduction est définie par quatre règles, qui examinent le schéma de voyelles et de consonnes au début d'un mot. Ces règles examinent l'utilisation des voyelles et des consonnes dans chaque mot :
a, e, i, o et u
Si un mot commence par une voyelle, ou commence par "xr" ou "yt", ajoute un son "ay" à la fin du mot.
Par exemple :
"apple" -> "appleay" (commence par une voyelle)"xray" -> "xrayay" (commence par "xr")"yttria" -> "yttriaay" (commence par "yt")Si un mot commence par une ou plusieurs consonnes, déplace d'abord ces consonnes à la fin du mot, puis ajoute un son "ay" à la fin du mot.
Par exemple :
"pig" -> "igp" -> "igpay" (commence par une seule consonne)"chair" -> "airch" -> "airchay" (commence par plusieurs consonnes)"thrush" -> "ushthr" -> "ushthray" (commence par plusieurs consonnes)Si un mot commence par zéro ou plusieurs consonnes suivies de "qu", déplace d'abord ces consonnes (s'il y en a) et la partie "qu" à la fin du mot, puis ajoute un son "ay" à la fin du mot.
Par exemple :
"quick" -> "ickqu" -> "ickquay" (commence par "qu", aucune consonne précédente)"square" -> "aresqu" -> "aresquay" (commence par une consonne suivie de "qu)Si un mot commence par une ou plusieurs consonnes suivies de "y", déplace d'abord les consonnes qui précèdent le "y" à la fin du mot, puis ajoute un son "ay" à la fin du mot.
Quelques exemples :
"my" -> "ym" -> "ymay" (commence par une seule consonne suivie de "y")"rhythm" -> "ythmrh" -> "ythmrhay" (commence par plusieurs consonnes suivies de "y")Les tests unitaires fournissent des exemples de mots. Essaie de regrouper les consonnes indépendamment des combinaisons de consonnes particulières qui apparaissent dans les tests unitaires.
Cet exercice manipule des données textuelles. Pour des raisons historiques, le type String de Haskell est synonyme de [Char], un tableau de caractères. Pour manipuler les données textuelles plus efficacement, on peut utiliser le type Text.
Comme extension facultative à cet exercice, tu peux
En savoir plus sur les types de chaînes de caractères en Haskell.
Ajouter - text à la liste des dépendances dans package.yaml.
Importer Data.Text de la façon suivante :
import qualified Data.Text as T
import Data.Text (Text)
Tu peux maintenant écrire par exemple translate :: Text -> Text et faire appel aux combinateurs de Data.Text comme par exemple T.isSuffixOf.
Consulter la documentation de Data.Text,
Cette partie est entièrement facultative.
Inscris-toi sur Exercism pour apprendre et maîtriser Haskell avec 107 exercices, et un vrai mentorat humain, le tout gratuitement.
On s'intéresse au filtrage par motif et aux expressions régulières, ainsi qu'à une jolie solution en Prolog, et on se demande : as-tu résolu l'exercice ou as-tu juste fait passer les tests ?