Files
advent-of-code-2021/day-05/day-05.py

52 lines
1.4 KiB
Python

#!/usr/bin/phyton3
from pathlib import Path
from collections import defaultdict
def parse_line(line):
p1, _, p2 = line.split()
x1, y1 = p1.split(',')
x2, y2 = p2.split(',')
return int(x1), int(y1), int(x2), int(y2)
def part_1(input):
result = 0
field = defaultdict(int)
for line in input:
line = line.strip()
x1, y1, x2, y2 = parse_line(line)
if x1 == x2 or y1 == y2:
for x in range(min(x1, x2), max(x1, x2) + 1):
for y in range(min(y1, y2), max(y1, y2) + 1):
field[(x, y)] += 1
result = len([k for k in field if field[k] > 1])
print("Part 1 result:", result)
def part_2(input):
result = 0
field = defaultdict(int)
for line in input:
line = line.strip()
x1, y1, x2, y2 = parse_line(line)
if x1 == x2 or y1 == y2:
for x in range(min(x1, x2), max(x1, x2) + 1):
for y in range(min(y1, y2), max(y1, y2) + 1):
field[(x, y)] += 1
elif abs(x1 - x2) == abs(y1 - y2):
dx = 1 if x1 < x2 else -1
dy = 1 if y1 < y2 else -1
for n in range(abs(x1 - x2) + 1):
field[(x1 + (dx * n), y1 + (dy * n))] += 1
result = len([k for k in field if field[k] > 1])
print("Part 2 result:", result)
input = list()
p = Path(__file__).with_name('input.txt')
with open(p) as f:
input = f.readlines()
part_1(input)
part_2(input)