Advent of code

 9 décembre 2023 

  Mirage Maintenance : Interpoler des séquences par dérivée discrète
9 10 20 47 106
   
1 -2 10 50 131
   
19 29 47 83 149
   
        
  1. code.py
  2. codeDevantDerriere.py
  3. codeMath.py
""" Premier code écrit, qui fait le travail à la fois en début de 
    suite pour la partie 2 et en fin de suite pour la partie 1 """

f = open("input.txt", 'r', encoding='utf-8')
lines = [line[:-1] for line in f.readlines()]

def derivee_discrete(suite: list[int]) -> list[int] :
    return [ suite[i] - suite[i-1]  for i in range(1, len(suite)) ]

def is_suite_constante(suite: list[int]) -> bool:
    return all(v == suite[0] for v in suite)

def completer_suite(suite: list[int], v_soustraire_debut: int, v_ajouter_fin: int) -> None:
    suite.insert(0, suite[0]  - v_soustraire_debut)
    suite.append(   suite[-1] + v_ajouter_fin)

def interpoler(suite: list[int]) -> list[int]:
    suites = [suite]
    while not is_suite_constante(suites[-1]) :    # une suite constante suffit, pas besoin d'aller jusqu'à 0, 0, 0,…  
        suites.append( derivee_discrete(suites[-1]) )

    while len(suites) > 1:
        last_line = suites.pop()
        completer_suite(suites[-1], last_line[0], last_line[-1])
    return suites[0]

    
lines = [list(map(int, line.split())) for line in lines]
suites_interpolees = [interpoler(line) for line in lines]

print("Réponse partie 1:", sum(v[-1] for v in suites_interpolees))
print("Réponse partie 2:", sum(v[0]  for v in suites_interpolees))