Day 5
This commit is contained in:
parent
6602b060ea
commit
65593392b2
43
2021/day5.py
Normal file
43
2021/day5.py
Normal file
|
@ -0,0 +1,43 @@
|
|||
import sys
|
||||
from collections import defaultdict
|
||||
|
||||
|
||||
def main():
|
||||
lines = [line.rstrip() for line in sys.stdin]
|
||||
coords = [
|
||||
tuple(map(
|
||||
lambda s: tuple(map(int, s.split(","))),
|
||||
line.split(" -> ")
|
||||
))
|
||||
for line in lines
|
||||
]
|
||||
|
||||
# Part 1
|
||||
data = defaultdict(int)
|
||||
for (x1, y1), (x2, y2) in coords:
|
||||
if x1 == x2:
|
||||
ymin, ymax = min(y1, y2), max(y1, y2)
|
||||
for y in range(ymin, ymax + 1):
|
||||
data[(x1, y)] += 1
|
||||
elif y1 == y2:
|
||||
xmin, xmax = min(x1, x2), max(x1, x2)
|
||||
for x in range(xmin, xmax + 1):
|
||||
data[(x, y1)] += 1
|
||||
print(sum(v > 1 for v in data.values()))
|
||||
|
||||
# Part 2 - reuse previous data and just consider diagonals
|
||||
for (x1, y1), (x2, y2) in coords:
|
||||
if x1 != x2 and y1 != y2:
|
||||
xofs = 1 if x1 < x2 else -1
|
||||
yofs = 1 if y1 < y2 else -1
|
||||
while True:
|
||||
data[(x1, y1)] += 1
|
||||
if x1 == x2:
|
||||
break
|
||||
x1 += xofs
|
||||
y1 += yofs
|
||||
print(sum(v > 1 for v in data.values()))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in a new issue