2023/day18.py

56 lines
1.2 KiB
Python

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()