Solve 2016 day 20.

This commit is contained in:
2024-05-18 10:12:27 -04:00
parent 97e9fac07b
commit a49eb9e8cb
2 changed files with 50 additions and 1 deletions

48
2016/d20.py Normal file
View File

@@ -0,0 +1,48 @@
def part_1(data):
ranges = []
for line in data.splitlines():
l, h = list(map(int, line.split("-")))
ranges.append((l, h))
ranges.sort()
merged = list(ranges[0])
for i in range(1, len(ranges)):
current = ranges[i]
if current[0] <= merged[1] + 1:
merged[1] = max(current[1], merged[1])
else:
print(merged[1] + 1)
return
def part_2(data):
ranges = []
for line in data.splitlines():
l, h = list(map(int, line.strip().split("-")))
ranges.append((l, h))
ranges.sort()
blocked_merged = [list(ranges[0])]
for block in ranges:
merged = blocked_merged[-1]
if block[0] <= merged[1] + 1:
merged[1] = max(block[1], merged[1])
else:
blocked_merged.append(list(block))
total = 2**32
for lo, hi in blocked_merged:
total -= (hi - lo + 1)
print(total)
def main():
data = open(0).read().strip()
part_1(data)
part_2(data)
if __name__ == "__main__":
main()