• [^] # Re: Un bug que j'ai résolu sans jamais le trouver.

    Posté par (Mastodon) . En réponse au message Avent du Code, jour 20. Évalué à 4.

    @dataclass(frozen=False)
    class Number:
     v: int
     p: int
     n: int
     def __call__(self):
     return self.v, self.p, self.n
     @property
     def next(self):
     return self.problem[self.n]
     @property
     def previous(self):
     return self.problem[self.p]
     @cached_property
     def moves(self):
     return self.value % (len(self.problem) - 1)
     @cached_property
     def value(self):
     return self.v * self.decryptionkey
    # Input handling
    def numbers(data):
     lastid = len(data) - 1
     yield Number(data[0], lastid, 1)
     for i in range(1, lastid):
     yield Number(data[i], i - 1, i + 1)
     yield Number(data[-1], lastid - 1, 0)
    def result(problem):
     number = [x for x in problem if x.v == 0][0]
     for _ in range(1000):
     number = number.next
     n1000 = number.value
     for _ in range(1000):
     number = number.next
     n2000 = number.value
     for _ in range(1000):
     number = number.next
     n3000 = number.value
     r = n1000 + n2000 + n3000
     return r
    def decrypt(problem):
     for i, number in enumerate(problem):
     if number.v == 0:
     continue
     # removes number from list
     number.previous.n = number.n
     number.next.p = number.p
     search = number
     for _ in range(number.moves):
     search = search.next
     # search is now the new previous
     number.n = search.n
     number.p = search.next.p
     # Inserting number
     number.next.p = i
     number.previous.n = i
    data = [int(x) for x in sys.stdin.read().strip().splitlines()]
    # Problème n°1
    problem = list(numbers(data))
    Number.problem = problem
    Number.decryptionkey = 1
    decrypt(problem)
    print(f"First answer = {result(problem)}")
    # Problème n°2
    problem = list(numbers(data))
    Number.problem = problem
    Number.decryptionkey = 811589153
    for _ in range(10):
     decrypt(problem)
    print(f"Final answer = {result(problem)}")