from util import get_input from collections import namedtuple from more_itertools import flatten input = get_input("5.input") Point = namedtuple("Point", ['x', 'y']) input = [[Point(int(pair.split(",")[0]), int(pair.split(",")[1])) for pair in line.split(" -> ")] for line in input] maxx = max([p.x for p in flatten(input)]) maxy = max([p.y for p in flatten(input)]) board = [[0 for _ in range(maxy + 1)] for _ in range(maxx + 1)] def sign(n): return 0 if n == 0 else (1 if n > 0 else -1) for line in input: dx = sign(line[1].x - line[0].x) dy = sign(line[1].y - line[0].y) x = line[0].x y = line[0].y while x != line[1].x or y != line[1].y: board[x][y] += 1 x += dx y += dy board[x][y] += 1 print(sum([1 for num in flatten(board) if num > 1]))