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 :
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}")