Day 1 (part 2 linear runtime)

This commit is contained in:
Sebastian Seedorf
2020-12-02 11:31:27 +01:00
parent 408ceff148
commit a6645ee697
3 changed files with 32 additions and 13 deletions

View File

@@ -1,14 +1,33 @@
import math
from itertools import combinations
items = [int(x.strip()) for x in open("input.txt")]
items = (int(x.strip()) for x in open("input.txt"))
values = {(2020, 3)}
tree = dict()
COUNT = 3
for vals in combinations(items, COUNT):
if sum(vals) == 2020:
print("Found [{}]: Sum={}, Product={}".format(
", ".join(map(str, vals)),
sum(vals),
math.prod(vals)
))
def tree_up(idx, step=1, offset = 0):
print(idx, step)
next = tree[(idx, step)] if (idx, step) in tree else None
appendix = [] if next is None else tree_up(next+idx, step=step+1, offset=idx)
return [idx - offset] + appendix
for item in items:
tmp_values = set(values)
for elem in values:
new = (elem[0] - item, elem[1]-1)
if new == (0, 0):
vals = tree_up(item)
print("Found [{}]: Sum={}, Product={}".format(
", ".join(map(str, vals)),
sum(vals),
math.prod(vals)
))
exit(0)
elif new[0] < 0 or new[1] < 0:
# target value too low or to many sums
continue
else:
tree[new] = item
tmp_values.add(new)
values = tmp_values