Une opération avec 8 cartes avec Python

L’objectif

On dispose de 8 cartes symbolisant les chiffres de 1 à 8.

En utilisant toutes les cartes une seule fois, on cherche des multiplications du type :

*** x * = ****

Une des possibilités est :

453 x 6 = 2 718

Pour information, il en existe deux !

La solution

# -*- coding:Utf-8 -*-
#!/usr/bin/python

"""
En utilisant une seule fois les chiffres de 1 à 8, on veut retrouver une autre opération du type :
453 x 6 = 2718
"""

# Les cartes
L=[1,2,3,4,5,6,7,8]


for i in L :
    M=L.copy()
    M.remove(i) # M est la copie de L sans i
    for j in M :
        N=M.copy()
        N.remove(j) # N est la copie de M sans j
        for k in N :
            P=N.copy()
            P.remove(k) # P est la copie de N sans k
            for l in P :
                R=P.copy()
                R.remove(l) # R est la copie de P sans l
                res=(i*100+j*10+k)*l # le résultat
                m=res//1000 # le chiffre des milliers
                res=res-m*1000
                c=res//100 # le chiffre des centaines
                res=res-c*100
                d=res//10 # le chiffre des dizaines
                u=res-d*10 # le chiffre des unités
                T=[m,c,d,u] # la liste des 4 nombres obtenues
                R.sort()  # On trie R 
                T.sort() # On trie T
                if (R==T):
                    print(i*100+j*10+k)
                    print(l)
                    print((i*100+j*10+k)*l)
                    print("----------")