#! /usr/bin/python3importargparseadd=int.__add__sub=int.__sub__mul=int.__mul__div=lambdaa,b:a//bsignes={add:'+',sub:'-',mul:×ばつ',div:'/'}classOperation:def__init__(self,a,b,op):self.a=aself.b=bself.op=opself._int=Nonedef__int__(self):ifself._intisNone:self._int=self.op(int(self.a),int(self.b))returnself._intdef__str__(self):return'(%s%s%s)'%(self.a,signes[self.op],self.b)# Génère toutes les opérations faisables avec deux entiers ou opérationsdefoperations(a,b):yieldOperation(a,b,add)yieldOperation(a,b,mul)yieldOperation(a,b,sub)ifint(b)!=0andint(a)%int(b)==0:yieldOperation(a,b,div)# Génère tous les calculs faisables avec des entiers ou opérationsdefcalculs(*termes):l=len(termes)ifl==1:# Un seul terme, rien à faire à part le renvoyer tel quel !yieldtermes[0]else:# Au moins deux termes: on en prend un...foriinrange(l):a=termes[i]# ... puis un autreforjinrange(l):ifi==j:# Pas le même !continueb=termes[j]# On parcours les opérations possibles entre euxforabinoperations(a,b):# On considère le résultat de cette opération comme un nouveu terme# remplaçant les deux choisis.yield fromcalculs(ab,*[termes[k]forkinrange(l)ifk!=iandk!=j])deftrouve(nombres,target):forcalculincalculs(*nombres):ifint(calcul)==target:yieldcalculdefmain(args=None):parser=argparse.ArgumentParser(description="Trouve un ou des moyens d'obtenir 24 avec les nombres donnés")parser.add_argument("--all",action='store_true',help="affiche tous les calculs donnant ce résultat, plutôt que seulement le premier trouvé")parser.add_argument("--target",type=int,default=24,help="cherche un résultat autre que 24")parser.add_argument("numbers",nargs='+',help="nombres à utiliser")args=parser.parse_args(args)calculs=trouve(args.numbers,args.target)forcalculincalculs:print('%s = %d'%(calcul,int(calcul)))ifnotargs.all:breakif__name__=='__main__':main()
Le site du jeu m'a proposé les nombres suivants : 1 4 5 6, ce qui m'amène à douter un peu de la garantie que « 100 % des parties ont une ou plusieurs solutions ».
# Python 3
Posté par 🚲 Tanguy Ortolo (site web personnel) . En réponse au journal résoudre "trouve 24". Évalué à 4.
En Python 3 :
Le site du jeu m'a proposé les nombres suivants : 1 4 5 6, ce qui m'amène à douter un peu de la garantie que « 100 % des parties ont une ou plusieurs solutions ».