Amusons-nous avec des mots du dictionnaire

Exercice 1

Écrire un programme qui cherche tous les mots de 5 lettres pouvant être formés à partir de mots de 9 lettres en prenant 1 lettre sur 2, en commençant par la première lettre. Exemples :

Une lettre sur deux

Vous pouvez utiliser ces 2 dictionnaires (mots de 9 et 5 lettres) : https://uabox.univ-angers.fr/s/b3GotFzpTYkL4MT

Corrigé en python

with open('dictionary_9.txt', 'r') as f:
    dictionary_9 = [line.strip() for line in f]

with open('dictionary_5.txt', 'r') as f:
    dictionary_5 = set(line.strip() for line in f)

compte = 0                      # Nb de mots trouvés

for word9 in dictionary_9:
  word5 = word9[::2]            # une lettre sur deux
  if word5 in dictionary_5:     # Si le mot existe
    print(word9, word5)         # on l'affiche
    compte += 1                 # et le compteur augmente de +1
print(f"Total = {compte}")  

Résultat :

ABLATIONS ALTOS
ABLUTIONS ALTOS
ABREGEAIS ARGAS
ABROGEAIS ARGAS
ABSTIENNE ASINE
ACCONIERS ACNES
...
VIELLEUSE VELUE
VIELLIONS VELOS
VIENDRAIS VEDAS
VOILETTES VIETS
Total = 913

corrigé en javascript

Cliquez sur ce lien puis bouton droit – Inspecter – Console. Copiez-collez le code suivant :

 dictionary_9.reduce((a, m) => {
     var mot5 = m.slice(0,2)+m[4]+m.slice(-2);
     return dictionary_5.includes(mot5) ? [...a, [m, mot5]] : a 
  }, [])

Exercice 2

Identifiez tous les mots de 10 lettres qui peuvent être composés de 2 mots de 5 lettres en respectant l’ordre des lettres. Exemple : RACHIDIENS s’écrit à partir de CHIEN et RADIS

Comme il y a beaucoup de solutions, on peut créer une fonction qui admet en paramètre un mot de 5 lettres et qui renvoie tous les mots de 10 lettres contenant ce mot ainsi que l’autre mot de 5 lettres pour compléter. Exemples :

>>> trouve("CHIEN")
BANCHAIENT CHIEN BANAT
CHARMAIENT CHIEN ARMAT
CHERRAIENT CHIEN ERRAT
CHIADERENT CHIEN ADRET
CHIENDENTS CHIEN DENTS
CHTHONIENS CHIEN THONS
CHTONIENNE CHIEN TONNE
CRASHAIENT CHIEN RASAT
DOUCHAIENT CHIEN DOUAT
LOUCHAIENT CHIEN LOUAT
MATCHAIENT CHIEN MATAT
RACHIDIENS CHIEN RADIS
TOUCHAIENT CHIEN TOUAT
TRICHAIENT CHIEN TRIAT

Corrigé en python

with open('dictionary_10.txt', 'r') as f:
    dictionary_10 = [line.strip() for line in f]

with open('dictionary_5.txt', 'r') as f:
    dictionary_5 = set(line.strip() for line in f)

def is_included(word1, word2):
    positions = []
    index = 0
    for letter in word2:
        index = word1.find(letter, index)
        if index == -1: return False
        positions.append(index)
        index += 1      
    return positions

def trouve(word5):
 for word10 in dictionary_10:
  positions = is_included(word10, word5)  
  if positions:
    reste = ''.join(word10[i] for i in range(10) if i not in positions)
    if reste in dictionary_5:
       print(word10, word5, reste)

exercice 3

Ci-dessous un jeu très simple trouvé dans le journal TV Télé Z. Dans notre cas nous allons travailler avec des mots de 9 et 5 lettres.

But : créer un programme qui, à partir d’une liste de mots de 5 lettres, va rechercher autant de mots de 9 lettres les contenant.

>>> jeu(["AIDER","CAPTER","GAINE","LOGER","FILES"])
PYRAMIDER AIDER PYR-M----
CAPTERAIT CAPTER ------AIT
GRAINIERS GAINE -R---I-RS
PLONGEOIR LOGER P--N--OI-
FILONIENS FILES ---ONI-N-

corrigé en python

from random import choice

with open('dictionary_9.txt', 'r') as f:
    dictionary_9 = [line.strip() for line in f]

with open('dictionary_5.txt', 'r') as f:
    dictionary_5 = set(line.strip() for line in f)

def is_included(word1, word2):
    positions = []
    index = 0
    for letter in word2:
        index = word1.find(letter, index)
        if index == -1: return False
        positions.append(index)
        index += 1      
    return positions

def trouve(word5):
 res = []         # On cherche toutes les solutions
 for word9 in dictionary_9:
  positions = is_included(word9, word5)  
  if positions: res.append((word9, positions))
 if len(res) > 0: return choice(res)      # on renvoie une solution au hasard
 return False

def jeu(arr):
 for mot in arr:
  r = trouve(mot)
  if r:     # Si un mot de 9 lettres a été trouvé
   cache = ''.join(r[0][i] if i not in r[1] else '-' for i in range(9))
   print(r[0], mot, cache)
  else: print(f"Rien trouvé pour {mot}")