L'échelle des mots
Exercice · informatique (tronc commun des prépas scientifiques), chapitre 13 — Parcours de graphes
Énoncé
Relier un mot de départ à un mot cible (ex: rame à cage) en changeant une unique lettre à chaque étape, tous les intermédiaires devant figurer dans un dictionnaire donné.
Corrigé
On modélise le problème par un graphe implicite où les sommets sont les mots et une arête relie deux mots s'ils diffèrent d'une seule lettre. La recherche du chemin le plus court s'effectue avec un BFS.
def different_d_une_lettre(u: str, v: str) -> bool:
return len(u) == len(v) and sum(1 for a, b in zip(u, v) if a != b) == 1
def echelle_mots(lexique: list, source: str, cible: str):
G = {m: [v for v in lexique if different_d_une_lettre(m, v)] for m in lexique}
dist, pere = {source: 0}, {}
file = deque([source])
while file:
s = file.popleft()
if s == cible:
break
for v in G[s]:
if v not in dist:
dist[v] = dist[s] + 1
pere[v] = s
file.append(v)
if cible not in dist:
return None
# Reconstruction
c = [cible]
while c[-1] != source:
c.append(pere[c[-1]])
c.reverse()
return cLes autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.