Warning: Undefined variable $highlight in
/home/jeanmichel.richer/public_html/rendu_code.php on line
43
"""
Résolution du cryptarithme KILO + KILO = TONNE
"""
def tous_differents_v1(d):
return len(set(d.values())) == len(d)
def tous_differents_v2(d):
"""
Vérifie que les valeurs du dictionnaire d sont toutes différentes
"""
for k1, v1 in d.items():
for k2, v2 in d.items():
# si les variables sont différentes et que les valeurs sont les mêmes
if k1 != k2 and v1 == v2:
# retourner False
return False
# retourner True si toutes les valeurs sont différentes
return True
def formule_valide(d):
"""
Vérifie si la formule KILO + KILO = TONNE est valide
"""
K = d['K']
I = d['I']
L = d['L']
O = d['O']
N = d['N']
E = d['E']
T = d['T']
kilo = K*1000 + I*100 + L*10 + O
tonne = T*10000 + O*1000 + N*100 + N*10 + E
return 2 * kilo == tonne
def recherche_solutions(d,lettres):
"""
Recherche toutes les solutions pour le cryptarithme KILO + KILO = TONNE
d est un dictionnaire qui contient les valeurs des variables
lettres est une liste (ou un ensemble) de variables
"""
if len(lettres) == 0:
# si on a assigné une valeur à toutes les variables
if tous_differents_v1(d) and formule_valide(d):
# si les valeurs sont toutes différentes et que la formule est valide
# on a trouvé une solution
print(d)
else:
# sinon on continue la recherche
# on choisit une variable
k = lettres.pop()
# on essaie toutes les valeurs possibles pour cette
# variable
for i in range(10):
# on assigne la valeur i à la variable k
d[k] = i
# on continue la recherche
recherche_solutions(d, lettres)
# on remet la variable dans la liste
lettres.append(k)
def main():
"""
Fonction principale
"""
# chaine de caractères à partir de laquelle on extrait les variables
chn = "KILO+KILO=TONNE"
# ensemble des variables
ens = { car for car in chn if car.isalpha() }
# dictionnaire qui contiendra les valeurs des variables
dico = { k: 0 for k in ens }
# lancer la recherche des solutions
recherche_solutions(dico, list(ens))
if __name__ == "__main__":
main()