• # En express aujourd'hui

    Posté par (Mastodon) . En réponse au message Advent of Code, jour 15. Évalué à 2.

    from sys import stdin
    from collections import OrderedDict
    def HASH(step):
     r = 0
     for x in step:
     r = ((r + ord(x)) * 17) % 256
     return r
    sequence = stdin.read()).strip().split(",")
    ex1 = sum(HASH(step) for step in sequence)
    boxes = [OrderedDict() for _ in range(256)]
    for step in sequence:
     if step[-1] == "-":
     label = step[:-1]
     boxes[HASH(label)].pop(label, 0)
     else:
     label = step[:-2]
     boxes[HASH(label)][label] = int(step[-1])
    ex2 = sum(
     (i + 1) * (j + 1) * lens
     for i, box in enumerate(boxes)
     for j, lens in enumerate(box.values())
    )

    Si le problème était vraiment très grand, on pourrait mettre un cache sur la fonction HASH, puisqu'on va pas mal tourner avec les mêmes HASH.
    Là, bof, ça fait peut-être passer de 0,04+-0,005 à 0,03+-0,005 secondes, autant dire que le CPU a refroidi pendant le traitement.

    • Yth, à la rigueur, si j'avais eu ce problème demain, vu que je vais devoir coder sur mon téléphone, en marchant, j'aurais pas été déçu, mais là...