(pour l'enseigner l'an prochain, par exemple)

dimanche 19 mai 2013

le blog déménage

La suite du blog est ici désormais.

mercredi 8 mai 2013

SEND+MORE=MONEY

petit exercice au stage de python au CIRM (*):

trouver à l'aide d'un programme python comment remplacer chaque lettre par un chiffre différent pour que l'addition suivante soit juste:

   SEND
+  MORE
-------
= MONEY

bien sûr, S et M ne sont pas remplacés par 0

Une solution en python:


def verif(s,e,n,d,m,o,r,y):
    if s != 0 and m != 0 and (d+n*10+e*100+s*1000)+(e+r*10+o*100+m*1000) == y+e*10+n*100+o*1000+m*10000:
        return True
    else: return False
   
sol = []

def choix_ordonne(l1,p,l):
    global sol
    if p==0:
        if verif(*l1): 
            sol += [l1]
            print(l1)
    elif l==[]: pass
    else: 
        for x in l:
            l2 = [y for y in l if y != x]
            choix_ordonne(l1+[x], p-1,l2)
        
verif(1,2,3,4,5,6,7,8)

choix_ordonne([],8,[0,1,2,3,4,5,6,7,8,9])

print(str(len(sol))+' solution'+ ('' if len(sol)<2 else 's')+':')
for s in sol:
    print(s)

PS: la fonction choix_ordonne(l1,p,l) énumère tous les choix possibles de p éléments pris dans la liste l, et teste s'ils vérifient la fonction verif lorsqu'ils sont ajoutés à la fin de la liste l1. Ceux qui la vérifient sont ajoutés à la liste globale sol.

(*) j'ai appris plein de choses sur python pendant ces 3 jours, merci en particulier à Marc, Judicaël, Benjamin et Luc!