• # Python, un peu poussif

    Posté par . En réponse au message Advent of Code, jour 15. Évalué à 1.

    Ce problème aurait dû être simple. Mais sinon ce ne serait pas un problème.

    J'ai mis bien du temps à comprendre que je ne pouvais construire une liste vide de 256 listes vides juste avec [[],]*256 car alors toutes les listes sont liées, et la modification d'une seule entraine la modification de toutes les autres. Sigh. Moi qui espérais pouvoir rattraper mon léger retard, c'est mal parti, et ce n'est pas ce week-end que ça va s'arranger.

    Un code néanmoins simple, et je l'espère facile à comprendre :

    #!/bin/python3
    def asciiHash(word):
     r = 0
     for l in word:
     r = ((r + ord(l)) * 17) % 256
     return r
    def getPower(box):
     r = 0
     for i,b in enumerate(box):
     for index,lens in enumerate(b):
     r += lens[1]*(index+1)*(i+1)
     return r
    def getEmptyList(nb):
     return [[] for _ in range(nb)]
    def focusingPower(sequence):
     box = getEmptyList(256)
     for s in sequence:
     if s[-1] == "-":
     for index, lens in enumerate(box[asciiHash(s[:-1])]):
     if lens[0] == s[:-1]:
     box[asciiHash(s[:-1])].remove(lens)
     break
     else:
     c = False
     for index, lens in enumerate(box[asciiHash(s.split("=")[0])]):
     if lens[0] == s.split("=")[0]:
     box[asciiHash(s.split("=")[0])][index] = (s.split("=")[0], int(s.split("=")[1]))
     c = True
     break
     if not c:
     box[asciiHash(s.split("=")[0])].append((s.split("=")[0], int(s.split("=")[1])))
     return getPower(box)
    def solve1(puzzle,testing=False):
     s=0
     s = sum([asciiHash(_) for _ in puzzle[0].split(",")])
     if testing:
     print(s)
     return s
    def solve2(puzzle,testing=False):
     s = 0
     s = focusingPower(puzzle[0].split(","))
     if testing:
     print(s)
     return s

    L'informatique n'est pas une science exacte, on n'est jamais à l'abri d'un succès