Solve 2016 day 20.
This commit is contained in:
48
2016/d20.py
Normal file
48
2016/d20.py
Normal 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()
|
||||||
|
|
||||||
|
|
||||||
@@ -52,7 +52,8 @@ written in Python.
|
|||||||
- Day 17: 45:00 didn't follow instructions... focus!
|
- Day 17: 45:00 didn't follow instructions... focus!
|
||||||
- Day 18: 9:43
|
- Day 18: 9:43
|
||||||
- Day 19: 90:00 that wasn't easy for me
|
- Day 19: 90:00 that wasn't easy for me
|
||||||
- Day 20:
|
- Day 20: 67:00
|
||||||
|
- Day 21:
|
||||||
|
|
||||||
|
|
||||||
# 2017
|
# 2017
|
||||||
|
|||||||
Reference in New Issue
Block a user