import sys DIRS = { "U": (0, -1), "D": (0, 1), "L": (-1, 0), "R": (1, 0), "3": (0, -1), "1": (0, 1), "2": (-1, 0), "0": (1, 0), } def solve(lines: list[tuple[int, int]], points: int) -> int: area = 0 for i in range(len(lines)): (x_a, y_a) = lines[i] (x_b, y_b) = lines[(i + 1) % len(lines)] area += (x_b + x_a) * (y_b - y_a) // 2 return area + points // 2 + 1 def main() -> None: (x1, x2, y1, y2) = (0, 0, 0, 0) (lines1, lines2) = ([], []) (points1, points2) = (0, 0) with open(sys.argv[1]) as f: for line in f: (dir, steps, color) = line.split() (dx1, dy1) = DIRS[dir] steps1 = int(steps) lines1.append((x1, y1)) x1 += dx1 * steps1 y1 += dy1 * steps1 points1 += steps1 (dx2, dy2) = DIRS[color[7]] steps2 = int(color[2:7], 16) lines2.append((x2, y2)) x2 += dx2 * steps2 y2 += dy2 * steps2 points2 += steps2 part1 = solve(lines1, points1) part2 = solve(lines2, points2) print(part1, part2) if __name__ == "__main__": main()