from collections import defaultdict
input = """\
0,9 -> 5,9
8,0 -> 0,8
9,4 -> 3,4
2,2 -> 2,1
7,0 -> 7,4
6,4 -> 2,0
0,9 -> 2,9
3,4 -> 1,4
0,0 -> 8,8
5,5 -> 8,2"""
# with open("2021/day05/data.txt") as fh:
# input = fh.read()
counter = defaultdict(int)
for line in input.splitlines():
p1, p2 = line.split(" -> ")
x1, y1 = map(int, p1.split(","))
x2, y2 = map(int, p2.split(","))
if x1 == x2:
# vertical
for yy in range(min(y1, y2), max(y1, y2) + 1):
counter[(x1, yy)] += 1
elif y1 == y2:
# horizontal
for xx in range(min(x1, x2), max(x1, x2) + 1):
counter[(xx, y1)] += 1
else:
# diagonal
slope = (y2 - y1) / (x2 - x1)
if slope == -1:
stepper = zip(
range(min(x1, x2), max(x1, x2) + 1),
range(max(y1, y2), min(y1, y2) - 1, -1),
)
else:
stepper = zip(
range(min(x1, x2), max(x1, x2) + 1),
range(min(y1, y2), max(y1, y2) + 1),
)
for xx, yy in stepper:
counter[(xx, yy)] += 1
intersect_pts = 0
for item in counter.values():
if item >= 2:
intersect_pts += 1
print(intersect_pts)
return_value = intersect_pts