◂ 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
""" Math interpolation version
See Mathologer's video https://www.youtube.com/watch?v=4AuV93LOPcE """
f = open("input.txt", 'r', encoding='utf-8')
lines = [list(map(int, line.split())) for line in f.readlines()]
NB_VALUES_IN_SEQ = len(lines[0])
assert all(len(line) == NB_VALUES_IN_SEQ for line in lines)
def calc_pascal_triangle_coeffs(row_number):
coeffs = [1]
value = 1
for i in range(row_number):
value = value * (row_number - i) // (i+1)
coeffs.append(value)
return coeffs
pascal_triangle_coeffs = calc_pascal_triangle_coeffs(NB_VALUES_IN_SEQ)
def interpolate(seq: list[int]) -> int:
global NB_VALUES_IN_SEQ, pascal_triangle_coeffs
return sum( (-1)**i * coeff * seq[i] for (i, coeff) in enumerate(pascal_triangle_coeffs[1:]) )
print("Part 1:", sum(interpolate(line[::-1]) for line in lines))
print("Part 2:", sum(interpolate(line) for line in lines))