Accueil > Enseignement > Paradigmes de programmation (ing. 3) > Devoir (première partie)
Devoir (première partie)
samedi 28 novembre 2015, par
Nous repartons d’un code déjà utilisé en master dans l’article Découverte du langage Scala.
Ce code devra être importé dans Eclipse à la main (j’ai renoncé à comprendre comment on exporte un projet sans exporter tout un tas de trucs inutiles). Vous pouvez-procéder de la façon suivante.
– Installer Eclispe (ou utiliser celui des salles TP), puis créer un nouveau projet Scala (menu File). Le nommer Anagrammes.
– Avec un clic secondaire sur le répertoire src, ajouter un nouveau package anagrammes au projet
– puis dans le package (avec un clic secondaire) ajouter une Scala Application dont vous nommerez l’objet Anagrammes.
– Enfin coller le contenu du fichier source ci-dessous Scala à la place du contenu du fichier que vous venez de créer.
– Récupérez également le fichier liste.de.mots.francais.frgut.txt et enregistrez le directement dans le répertoire de votre projet Eclipse, Anagrammes.
– Tester (compiler / exécuter).
Ce petit programme utilise un lexique du français en le réorganisant comme un dictionnaire (Map en Scala) dont les clés sont des multiensembles de lettres et les valeurs des listes de mots utilisant exactement les lettres du multiensemble clé.
Un multiensemble est comme un ensemble, mais dans lequel on compte le nombre de fois qu’un élément est présent. En maths, on peut noter habituellement [a, a, b] le multiensemble qui contient deux copies de a et une de b. On a par exemple [a, a, b] = [a, b, a] ≠ [a, b] mais pour les ensembes {a, a, b} = {a, b, a} = {a, b}
. Un multiensemble se représente efficacement comme un dictionnaire dont les clés sont les éléments et dont les valeurs sont les multiplicités, c’est ce qu’on fait ici pour les multiensembles de lettres.
Étudiez le fonctionnement de ce programme et testez les différentes blocs de code qu’il contient. L’ API Scala officielle peut être utile.
Vous pouvez maintenant ajouter le nécessaire à ce code pour répondre aux questions suivantes. Attention vous répondrez en ajoutant votre code et ses tests à la fin du programme, ne modifiez pas ce qui vous est fourni.
1. Donner un anagramme de « endolori ».
2. Quels sont les mots qui contiennent le caractère ù ?
3. Lipogramme. Extraire un lexique de mots qui ne contiennent pas le caractère e (on accepte par contre les e accentués). Quel est le plus long mot qui ne contient pas de e ?
4. Trouver la liste de tous les mots de français qui contiennent toutes les voyelles a, e, i, o, u, y (on accepte les caractères accentués).
5. Trouver la liste tous les mots qui ne s’écrivent qu’avec des voyelles.
6. Trouver un mot qui contient au moins toutes les lettres du mot « programme » mais qui ne contient pas la sous-chaîne « program ».
Vous me remettrez ce devoir vendredi 4 mardi 8 décembre, à 8h30.
Bonus
En repartant du même programme de départ, écrire un programme qui aide à jouer au Scrabble.
1. Votre programme lira une chaîne de caractères sur l’entrée standard et retournera tous les mots que l’on peut former avec ces caractères.
2. Améliorer ce programme en ne retournant que les meilleurs résultats.
3. Améliorer encore ce résultat en traitant comme au Scrabble les caractères accentués et autres diacritiques, c’est à dire en supprimant la distinction entre e et é, c et ç etc.
4. Enfin, ajouter un décompte des valeurs des lettres (les points associés à chaque lettre) selon les règles du Scrabble français, de façon à retourner les mots qui rapporteront le plus de points (on ne cherchera pas à estimer les points rapportés par la façon de placer le mot).