56 lines
1.2 KiB
Python
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()
|