4 - Le mot le plus long

Le but de cet exercice est de trouver le mot le plus long qu’il est possible de faire à partir d’un ensemble de lettres.

Énoncé:

Le but de cet exercice est de trouver la meilleure solution possible au jeu du mot le plus long. Pour cela, on va s’aider d’un dictionnaire enrichi de mots clés pour connaître les mots disponibles.

Ce fichier de dictionnaire est téléchargeable directement ou mieux en faisant une commande wget ou scp.

> scp votre_login@ssh.enseirb-matmeca.fr:~mfaverge/IF104/dico.utf8 votre_repertoire_de_travail

ou depuis votre répertoire de travail:

> wget https://cours-mf.gitlabpages.inria.fr/if104/exercices/dico/dico.utf8

Première étape: Extraire les mots valides

Le premier objectif consiste à extraire du dictionnaire une liste de mot valides pour le jeu suivant les règles suivantes:

  • Les mots composés sont exclus
  • Les abréviations sont exclues
  • Les mots autorisés sont:
    • les noms (au singulier)
    • les verbes uniquement à l’infinitif et au participe passé (sans féminin, ni pluriel)
    • les autres mots: adjectifs, adverbes, pronoms, interjections (sans féminin, ni pluriel)

Pour extraire cette liste, il suffit de remarquer que chaque ligne du dictionnaire contient 3 colonnes:

  1. Le mot du dictionnaire
  2. L’infinitif du verbe, ou la forme au singulièr du nom/adjectif/…
  3. Une liste de mot-clés qui caractérisent le mot

Si on regarde plus attentivement, on constate qu’elle est formée comme suit:

Type[:Forme][...]

Avec Type l’un des mots-clés suivant:

Abr, Adj, Adv, Con, Conj, Det, Int, Nom, Ono, Pre, Pro, QPro, Ver

Et la forme est une liste de mots-clés séparés par des + parmi lesquels on retrouve:

3Fem, 3Mas, Fem, Mas, 
CPre, IFut, IImp, IPSim, IPre, ImPre, Imp, Inf, PC, PPas, PPre, SImp, SPre,
P1, P2, P3, 
PL, SG, 
InvGen, InvPL, PProRefl, Prox
Card, DemPro, 

A l’aide des commandes bash avancées: grep, cut, awk, sort, ..., générer la liste des mots valides pour le jeu du mot le plus long.

Deuxième étape - Trouver un mot avec les lettres passées en arguments

Une fois que nous avons réussi à extraire la liste des mots valides dans un second fichier. Nous allons essayer de faire un scipt shell mot_le_plus_long.sh qui prend en argument une chaîne de caractères avec les lettres données et retourne le, ou les, mot(s) qui respectent les contarintes données dans la premières partie et qui contiennent tout ou un sous-ensemble des lettres passées en paramètre.

> ./mot_le_plus_long.sh tuz
zut
> ./mot_le_plus_long.sh xxxx
Pas de solutions

On réfléchira à réduire la taille du dictionnaire une seconde fois à l’aide de commandes shell si possible.

Si vous n’arrivez pas à une solution, vous pouvez suivre les étapes ci-dessous qui en proposent une. Le script final est fourni à la fin. A chaque étape, pour voir la solution, il vous suffira de cliquer sur “La solution ?".

Etape 1
Etape 2
Etape 3
Etape 4