advent-of-code/2023/python/day09.py

89 lines
2.0 KiB
Python
Raw Normal View History

2023-12-10 16:09:34 +00:00
import shared
def get_sequence(values):
differences = []
for idx in range(len(values)-1):
x1, x2 = values[idx:idx+2]
differences.append(x2 - x1)
return differences
def print_pretty(history):
for idx, h in enumerate(history):
print((" " * idx) + " ".join(map(str, h)))
def calculate_new_value(row1, row2):
print(row1, row2)
# @shared.profile
def part1(rows):
# gather
history = [[shared.spl(row.split())] for row in rows]
for h in history:
vals = h[0]
while True:
vals = get_sequence(vals)
h.append(vals)
if shared.all_equal(vals) and vals[0] == 0:
break
# do calcs
for h in history:
h[-1].append(0)
for idx in range(1, len(h)):
i = (idx * -1) -1
me = h[i]
above = h[i+1]
#print(above,me)
new_val = me[-1] + above[-1]
h[i].append(new_val)
# totals
newest = [x[0][-1] for x in history]
print(sum(newest))
# @shared.profile
def part2(rows):
# gather
history = [[shared.spl(row.split())] for row in rows]
for h in history:
vals = h[0]
while True:
vals = get_sequence(vals)
h.append(vals)
if shared.all_equal(vals) and vals[0] == 0:
break
# do calcs
for h in history:
h[-1].insert(0, 0)
for idx in range(1, len(h)):
i = (idx * -1) -1
me = h[i]
below = h[i+1]
new_val = me[0] - below[0]
h[i].insert(0, new_val)
# totals
newest = [x[0][0] for x in history]
print(sum(newest))
def main():
rows = [row for row in shared.load_rows(9)]
with shared.elapsed_timer() as elapsed:
part1(rows)
print("🕒", elapsed())
rows = [row for row in shared.load_rows(9, True)]
with shared.elapsed_timer() as elapsed:
part2(rows)
print("🕒", elapsed())
if __name__ == "__main__":
main()