@dataclass(frozen=False)classNumber:v:intp:intn:intdef__call__(self):returnself.v,self.p,self.n@propertydefnext(self):returnself.problem[self.n]@propertydefprevious(self):returnself.problem[self.p]@cached_propertydefmoves(self):returnself.value%(len(self.problem)-1)@cached_propertydefvalue(self):returnself.v*self.decryptionkey# Input handlingdefnumbers(data):lastid=len(data)-1yieldNumber(data[0],lastid,1)foriinrange(1,lastid):yieldNumber(data[i],i-1,i+1)yieldNumber(data[-1],lastid-1,0)defresult(problem):number=[xforxinproblemifx.v==0][0]for_inrange(1000):number=number.nextn1000=number.valuefor_inrange(1000):number=number.nextn2000=number.valuefor_inrange(1000):number=number.nextn3000=number.valuer=n1000+n2000+n3000returnrdefdecrypt(problem):fori,numberinenumerate(problem):ifnumber.v==0:continue# removes number from listnumber.previous.n=number.nnumber.next.p=number.psearch=numberfor_inrange(number.moves):search=search.next# search is now the new previousnumber.n=search.nnumber.p=search.next.p# Inserting numbernumber.next.p=inumber.previous.n=idata=[int(x)forxinsys.stdin.read().strip().splitlines()]# Problème n°1problem=list(numbers(data))Number.problem=problemNumber.decryptionkey=1decrypt(problem)print(f"First answer = {result(problem)}")# Problème n°2problem=list(numbers(data))Number.problem=problemNumber.decryptionkey=811589153for_inrange(10):decrypt(problem)print(f"Final answer = {result(problem)}")
[^] # Re: Un bug que j'ai résolu sans jamais le trouver.
Posté par Yth (Mastodon) . En réponse au message Avent du Code, jour 20. Évalué à 4.