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)