diff --git a/2021/day5.py b/2021/day5.py new file mode 100644 index 0000000..f3bb9bf --- /dev/null +++ b/2021/day5.py @@ -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()