qi29.py

Created by schraf

Created on July 09, 2024

1.39 KB

Enoncé / Explications

Les différentes parties du programme

Définir les mots et leurs séries de chiffres correspondants : Nous avons une liste de mots associés à une série de chiffres.

Série à décoder : La série de chiffres pour laquelle nous devons trouver le mot.

Fonction possibles : Recherche des lettres possibles par chiffre : Pour chaque chiffre unique, nous trouvons les lettres possibles en intersectant les lettres des mots contenant ce chiffre.

Nettoyage des correspondances : Nous réduisons les correspondances en éliminant les lettres déjà assignées.

Décodage de la série : Nous utilisons les correspondances résolues pour décoder la série de chiffres.


# Definir mots et leurs series de chiffres 
mots = {
 'NUIT': [7, 5, 4, 3],
 'COUDE': [8, 7, 6, 2, 1],
 'TOUS': [9, 7, 5, 2],
 'NOCE': [8, 6, 3, 2],
 'DICTE': [8, 6, 5, 4, 1],
 'NOUES': [9, 7, 6, 3, 2]
}

# Serie a decoder
serie = [9, 6, 1, 7, 8, 5, 4, 2, 3]

def possibles(mots):
 # Obtenir tous les chiffres uniques de la liste
 chiffres = set(sum(list(mots.values()), []))
 corr = {}
 
 print("Recherche des lettres possibles par chiffre")
 # Pour chaque chiffre unique, trouver les lettres possibles
 for ch in chiffres:
  lettres = set()
  for mot, nums in mots.items():
   if ch in nums:
    if not lettres:
     lettres = set(mot)
    else:
     lettres = lettres.intersection(set(mot))
  corr[ch] = lettres
  print(ch, lettres)
 
 print("Nettoyage des correspondances")
 encore = True
 # Nettoyage des correspondances
 while encore:
  encore = False
  for ch, lettres in corr.items():
   if len(lettres) == 1:
    unique_lettre = next(iter(lettres))
    for autre_ch, autres_lettres in corr.items():
     if unique_lettre in autres_lettres and ch != autre_ch:
      corr[autre_ch].remove(unique_lettre)
      encore = True
 
 # Afficher les correspondances finales
 for ch, lettres in corr.items():
  print(ch, lettres)
 
 print("Decodage de la serie")
 # Decoder la serie
 mot_decode = ''.join(next(iter(corr[ch])) for ch in serie)
 print("Mot :", mot_decode)

# Appeler la fonction
possibles(mots)