Advent of code

 11 décembre 2024 

  Plutonian Pebbles : Transformer successivement une suite de nombres, qui croît en longueur de façon exponentielle.
5 127 680267  0 5851995
On part de 8 nombres, et à chaque étape, chaque nombre a un peu plus d'une chance sur deux de se dédoubler.

code_part1_naif.py : Naïf, car met déjà 40 fois plus de temps que code.py pour la première partie, et terminerait sans doute la partie 2 après la fin de l'univers.
Une jolie partie cependant : l'utilisation de divmod, ainsi que le remplacement d'une valeur du tableau par deux autres en une seule ligne.
        nb_digits = len(str(v))
if nb_digits % 2 == 0:
values[i:i+1] = divmod(v, 10**(nb_digits//2))


code_optim.py, une petite optimisation de code.py : Léger gain de temps si on ne wrappe pas les valeurs uniques dans un tuple.
  1. code.py
  2. code_part1_naif.py
  3. code_optim.py
  4. diff_optim.diffy
with open("input.txt", 'r', encoding='utf-8') as f:
    values = [int(token) for token in f.read().split()]


def change(values: list[int]) -> list[int]:
    i = 0
    while i < len(values):  # pas un for, car on insère des éléments durant le parcours du tableau
        v = values[i]

        if v == 0:
            values[i] = 1
            i += 1
            continue

        nb_digits = len(str(v))
        if nb_digits % 2 == 0:
            values[i:i+1] = divmod(v, 10**(nb_digits//2))   # divmod returns (v//d, v%d)
            i += 2
            continue

        else:
            values[i] *= 2024
            i += 1

    return values
        


for i in range(25):
    values = change(values)
print("Réponse partie 1:", len(values))