Tu enseignes l'anglais langue étrangère à des lycéens.
Tu as décidé de baser tout ton programme sur des séries télévisées. Tu dois analyser quels mots sont utilisés et à quelle fréquence ils sont répétés.
Cela te permettra de choisir les séries les plus simples pour commencer et d'augmenter progressivement la difficulté au fil du temps.
Ta tâche consiste à compter combien de fois chaque mot apparaît dans les sous-titres d'une pièce de théâtre.
Les sous-titres de ces pièces n'utilisent que des caractères ASCII.
Les personnages s'expriment souvent dans un anglais familier, avec des contractions comme they're ou it's. Même si ces contractions proviennent de deux mots (par exemple we are), la contraction (we're) est considérée comme un seul mot.
Les mots peuvent être séparés par n'importe quelle forme de ponctuation (par exemple « : », « ! » ou « ? ») ou d'espace (par exemple « \t », « \n » ou « »). La seule ponctuation qui ne sépare pas les mots est l'apostrophe dans les contractions.
Les nombres sont considérés comme des mots. Si le sous-titre dit It costs 100 dollars., alors 100 sera un mot à part entière.
Les mots ne sont pas sensibles à la casse. Par exemple, le mot you apparaît trois fois dans la phrase suivante :
You come back, you hear me? DO YOU HEAR ME?
L'ordre des décomptes de mots dans le résultat n'a pas d'importance.
Voici un exemple qui reprend plusieurs des éléments abordés ci-dessus :
"That's the password: 'PASSWORD 123'!", cried the Special Agent.\nSo I fled.
La correspondance pour ce sous-titre serait :
123: 1
agent: 1
cried: 1
fled: 1
i: 1
password: 2
so: 1
special: 1
that's: 1
the: 2
Pour venir à bout de cet exercice, tu dois implémenter la fonction wordCount, qui prend un texte et renvoie le nombre de fois que chaque mot apparaît.
Si c'est la première fois que tu résous cet exercice, il est recommandé de t'en tenir à la signature fournie :
wordCount :: String -> [(String, Int)]
Plus tard, ce serait peut-être une bonne idée de revenir sur ce problème et de jouer avec d'autres types de données et bibliothèques :
Text, du paquet text.Map, du paquet containers.MultiSet, du paquet multiset
La suite de tests a été délibérément conçue pour accepter presque n'importe quelle signature de type qui a du sens, alors n'hésite pas à chercher celle qui te paraît la meilleure.
Inscris-toi sur Exercism pour apprendre et maîtriser Haskell avec 107 exercices, et un vrai mentorat humain, le tout gratuitement.