Day 15
This commit is contained in:
35
day15/part2.py
Normal file
35
day15/part2.py
Normal file
@@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env python3
|
||||
import re
|
||||
|
||||
lines = (x.strip() for x in open("input.txt"))
|
||||
lines = [tuple(map(int, re.search(r"(-?\d+).+?(-?\d+).+?(-?\d+).+?(-?\d+)", line).groups())) for line in lines]
|
||||
|
||||
for target in range(0, 4000000): #3186981
|
||||
if target % 40000 == 0:
|
||||
print(target/4000000)
|
||||
intervals = []
|
||||
known_targets = set()
|
||||
|
||||
for line in lines:
|
||||
x, y, a, b = line
|
||||
dist = abs(x-a) + abs(y-b)
|
||||
width = dist-abs(y-target)
|
||||
if width >= 0:
|
||||
intervals.append((x-width, x+width))
|
||||
if b == target:
|
||||
known_targets.add(a)
|
||||
if y == target:
|
||||
known_targets.add(x)
|
||||
|
||||
|
||||
intervals.sort(key=lambda x: x[0])
|
||||
merged = [intervals[0]]
|
||||
for i in intervals[1:]:
|
||||
if merged[-1][1] >= i[0]:
|
||||
merged[-1] = (merged[-1][0], max(merged[-1][1], i[1]))
|
||||
else:
|
||||
merged.append(i)
|
||||
|
||||
if len(merged) > 1:
|
||||
print(target, merged, (merged[0][1]+1)*4000000+target)
|
||||
break
|
||||
Reference in New Issue
Block a user