Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@joshbduncan
Created December 9, 2020 22:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save joshbduncan/04c5ebdbf27369d2a4d126879194b7b4 to your computer and use it in GitHub Desktop.
Save joshbduncan/04c5ebdbf27369d2a4d126879194b7b4 to your computer and use it in GitHub Desktop.
# read in aoc input
data = open("day9.in").read().strip().split('\n')
# setup vars to track
pre = 25
pos = 25
# solve for part 1
while True:
p1 = int(data[pos])
# grab all valid values to check through
options = [int(x) for x in data[pos - pre: pos]]
for i in options:
# check to see if the needed amount is in the options
if p1 - i != i and p1 - i in options:
pos += 1
break
else:
break
print(f'Part 1: {p1}')
# solve for part 1
seen = set()
# set beginning and end values for range to sum
for beg in range(len(data) - 1):
for end in range(beg + 1, len(data)):
# grab range and convert ints for ease of summing
subset = list(map(int, data[beg:end + 1]))
# to speed things up keeping track of seen totals and skipping invalid ranges
if sum(subset) in seen or max(subset) > p1 or sum(subset) > p1:
break
else:
seen.add(sum(subset))
# if range equals part 1 quit looking
if sum(subset) == p1:
p2 = subset
break
print(f'Part 2: {min(p2) + max(p2)}')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment