◂ 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 …
⋮
- code.py
- codeDevantDerriere.py
- codeMath.py
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)
# Encore plus simple pour vérifier si suite de 0: return not any(suite)
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()
suites[-1].append(suites[-1][-1] + last_line[-1])
return suites[0]
lines = [list(map(int, line.split())) for line in lines]
print("Réponse partie 1:", sum(interpoler(line)[-1] for line in lines))
# Pas besoin de faire le travail à l'identique en début de suite: on continue à le faire à la fin sur les suites retournées !
print("Réponse partie 2:", sum(interpoler(line[::-1])[-1] for line in lines))