Pour l'exo 1 je fais du re.findall, str.replace, re.sub, et un gros eval dès que j'ai root.
Youpi, bourrin :)
Pour le 2, bah non.
On remplace root: truc * much par root: truc - much, et humn: ???? par humn: X
À la fin on a une grosse opération bourrée de parenthèses, avec au fond du fond (X), il faut résoudre ce truc = 0.
Donc on remonte en inversant les opérations, chaque parenthèse est (nombre opération (trucs...)) ou ((trucs...) opération nombre), des gros if tout moches, et à la fin le résultat.
Sans finesse ça va assez vite : une demi seconde.
importredefiteration1(data):reg=re.compile(r"^([a-z]{4}): ([^a-z]+?)$",re.MULTILINE)whileTrue:numbers={a:f"({b})"if'X'inbelsestr(eval(b))fora,binreg.findall(data)}if"root"innumbers:yieldnumbers['root']returndata=reg.sub("",data)forname,valueinnumbers.items():data=data.replace(name,value)yielddatadefiteration2(data,r=0):reg1=re.compile(r"^\((.*) (.) ([\d.]+)\)$")reg2=re.compile(r"^\(([\d.]+) (.) (.*)\)$")whileTrue:# r = a o ba,o,b=(reg1.findall(data)+reg2.findall(data))[0]if'X'ina:data=aifo=='+':r=r-float(b)ifo=='-':r=r+float(b)ifo=='*':r=r/float(b)ifo=='/':r=r*float(b)else:data=bifo=='+':r=r-float(a)ifo=='-':r=float(a)-rifo=='*':r=r/float(a)ifo=='/':r=float(a)/ryielddata,rifdata=="(X)":returndata=sys.stdin.read().strip()# Exercice 1r=0fordiniteration1(data):r=dprint(eval(d))# Exercice 2data2=re.sub(r"root: ([a-z]{4}) . ([a-z]{4})",r"root: 1円 - 2円",re.sub(r"humn: \d+","humn: X",data))fordiniteration1(data2):r=dfordiniteration2(r,0):r=dprint(r[1])
Zéro modélisation, à peine de la réflexion, zéro optimisations sauf l'eval ajouté dans l'iteration1 quand on peut réduire à un nombre, basta.
# Pas de force brute, mais soyons bourrins, oh oui, bourrins !
Posté par Yth (Mastodon) . En réponse au message Avent du Code, jour 21. Évalué à 2.
Pour l'exo 1 je fais du re.findall, str.replace, re.sub, et un gros eval dès que j'ai root.
Youpi, bourrin :)
Pour le 2, bah non.
On remplace
root: truc * muchparroot: truc - much, ethumn: ????parhumn: XÀ la fin on a une grosse opération bourrée de parenthèses, avec au fond du fond
(X), il faut résoudrece truc = 0.Donc on remonte en inversant les opérations, chaque parenthèse est
(nombre opération (trucs...))ou((trucs...) opération nombre), des gros if tout moches, et à la fin le résultat.Sans finesse ça va assez vite : une demi seconde.
Zéro modélisation, à peine de la réflexion, zéro optimisations sauf l'eval ajouté dans l'iteration1 quand on peut réduire à un nombre, basta.