Add day 5 solution
This commit is contained in:
62
day-05/day-05.py
Normal file
62
day-05/day-05.py
Normal file
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/phon3
|
||||
|
||||
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 = [[0 for x in range(1000)] for y in range(1000)]
|
||||
for line in input:
|
||||
line = line.strip()
|
||||
x1,y1,x2,y2 = parse_line(line)
|
||||
if y1 == y2:
|
||||
for x in range(min(x1,x2), max(x1,x2) + 1):
|
||||
field[x][y1] += 1
|
||||
elif x1 == x2:
|
||||
for y in range(min(y1,y2), max(y1,y2) + 1):
|
||||
field[x1][y] += 1
|
||||
for x in range(1000):
|
||||
for y in range(1000):
|
||||
if field[x][y] >= 2:
|
||||
result += 1
|
||||
print("Part 1 result:", result)
|
||||
|
||||
|
||||
def part_2(input):
|
||||
result = 0
|
||||
field = [[0 for x in range(1000)] for y in range(1000)]
|
||||
for line in input:
|
||||
line = line.strip()
|
||||
x1,y1,x2,y2 = parse_line(line)
|
||||
if abs(x1 - x2) == abs(y1 - y2):
|
||||
dx = 1
|
||||
if x1 > x2:
|
||||
dx = -1
|
||||
dy = 1
|
||||
if y1 > y2:
|
||||
dy = -1
|
||||
for n in range(abs(x1 - x2) + 1):
|
||||
field[x1 + (dx * n)][y1 + (dy * n)] += 1
|
||||
elif y1 == y2:
|
||||
for x in range(min(x1,x2), max(x1,x2) + 1):
|
||||
field[x][y1] += 1
|
||||
elif x1 == x2:
|
||||
for y in range(min(y1,y2), max(y1,y2) + 1):
|
||||
field[x1][y] += 1
|
||||
for x in range(1000):
|
||||
for y in range(1000):
|
||||
if field[x][y] >= 2:
|
||||
result += 1
|
||||
print("Part 2 result:", result)
|
||||
|
||||
|
||||
input = list()
|
||||
with open('input.txt') as fp:
|
||||
input = fp.readlines()
|
||||
|
||||
part_1(input)
|
||||
part_2(input)
|
||||
Reference in New Issue
Block a user