J'ai un code équivalent, avec un peu plus de modélisation, mais sinon, c'est algorithmiquement identique :
importsysimportjsonfromfunctoolsimporttotal_ordering@total_orderingclasspacket:def__init__(self,data):self.data=datadefcompare(self,a,b):iftype(a)==type(b)==int:ifa==b:returnNonereturna<biftype(a)==int:a=[a]iftype(b)==int:b=[b]fori,jinzip(a,b):c=self.compare(i,j)ifcisnotNone:returncelse:returnself.compare(len(a),len(b))returnNonedef__lt__(self,other):returnself.compare(self.data,other.data)isTruedef__eq__(self,other):returnself.compare(self.data,other.data)isNonedefinput():x=Noneforlineinsys.stdin:ifline=="\n":x=NoneelifxisnotNone:yieldx,packet(json.loads(line))else:x=packet(json.loads(line))score=0all_packets=[]forid,(a,b)inenumerate(input()):all_packets+=[a,b]ifa<=b:score+=id+1print(f"Pairs in the right order : {score}")decoder=[packet([[2]]),packet([[6]])]s=sorted(all_packets+decoder)print(f"Decoder Key = {(s.index(decoder[0])+1) * (s.index(decoder[1])+1)}")
Je n'ai pas songé à split("\n\n"), ça fait que j'ai une première partie qui bosse en flux, mais comme pour la seconde il faut trier, on est obligé d'avoir toutes les données chargées, change rien.
Et ma fonction de comparaison est très centrée sur l'exercice : a < b c'est True, a > b c'est False et a == b c'est None, ergo on poursuit. C'est plus propre de faire -1/0/1.
[^] # Re: python, en trichant
Posté par Yth (Mastodon) . En réponse au message Avent du Code, jour 13. Évalué à 2.
J'ai un code équivalent, avec un peu plus de modélisation, mais sinon, c'est algorithmiquement identique :
Je n'ai pas songé à split("\n\n"), ça fait que j'ai une première partie qui bosse en flux, mais comme pour la seconde il faut trier, on est obligé d'avoir toutes les données chargées, change rien.
Et ma fonction de comparaison est très centrée sur l'exercice : a < b c'est True, a > b c'est False et a == b c'est None, ergo on poursuit. C'est plus propre de faire -1/0/1.