| 12345678910111213141516171819202122232425262728 |
- #!/usr/bin/env python3
- import sys
- from collections import defaultdict
- from itertools import repeat
- def parse(line):
- (x1, y1), (x2, y2) = (part.split(',') for part in line.split(' -> '))
- return int(x1), int(y1), int(x2), int(y2)
- def coords(a, b, c, d, diagonal):
- if a == b:
- yield from repeat(a, abs(d - c) + 1)
- elif diagonal or c == d:
- delta = -1 if a > b else 1
- yield from range(a, b + delta, delta)
- def overlaps(lines, diagonal):
- grid = defaultdict(int)
- for x1, y1, x2, y2 in lines:
- allx = coords(x1, x2, y1, y2, diagonal)
- ally = coords(y1, y2, x1, x2, diagonal)
- for x, y in zip(allx, ally):
- grid[(x, y)] += 1
- return sum(n > 1 for n in grid.values())
- lines = list(map(parse, sys.stdin))
- print(overlaps(lines, False))
- print(overlaps(lines, True))
|