Update day 5 solution
This commit is contained in:
@@ -1,48 +1,45 @@
|
|||||||
#!/usr/bin/phon3
|
#!/usr/bin/phon3
|
||||||
|
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
|
|
||||||
def parse_line(line):
|
def parse_line(line):
|
||||||
p1, _, p2 = line.split()
|
p1, _, p2 = line.split()
|
||||||
x1,y1 = p1.split(',')
|
x1, y1 = p1.split(',')
|
||||||
x2,y2 = p2.split(',')
|
x2, y2 = p2.split(',')
|
||||||
return int(x1), int(y1), int(x2), int(y2)
|
return int(x1), int(y1), int(x2), int(y2)
|
||||||
|
|
||||||
|
|
||||||
def part_1(input):
|
def part_1(input):
|
||||||
result = 0
|
result = 0
|
||||||
field = [[0 for x in range(1000)] for y in range(1000)]
|
field = defaultdict(int)
|
||||||
for line in input:
|
for line in input:
|
||||||
line = line.strip()
|
line = line.strip()
|
||||||
x1,y1,x2,y2 = parse_line(line)
|
x1, y1, x2, y2 = parse_line(line)
|
||||||
if x1 == x2 or y1 == y2:
|
if x1 == x2 or y1 == y2:
|
||||||
for x in range(min(x1,x2), max(x1,x2) + 1):
|
for x in range(min(x1, x2), max(x1, x2) + 1):
|
||||||
for y in range(min(y1,y2), max(y1,y2) + 1):
|
for y in range(min(y1, y2), max(y1, y2) + 1):
|
||||||
field[x][y] += 1
|
field[(x, y)] += 1
|
||||||
for x in range(1000):
|
result = len([k for k in field if field[k] > 1])
|
||||||
for y in range(1000):
|
|
||||||
if field[x][y] >= 2:
|
|
||||||
result += 1
|
|
||||||
print("Part 1 result:", result)
|
print("Part 1 result:", result)
|
||||||
|
|
||||||
|
|
||||||
def part_2(input):
|
def part_2(input):
|
||||||
result = 0
|
result = 0
|
||||||
field = [[0 for x in range(1000)] for y in range(1000)]
|
field = defaultdict(int)
|
||||||
for line in input:
|
for line in input:
|
||||||
line = line.strip()
|
line = line.strip()
|
||||||
x1,y1,x2,y2 = parse_line(line)
|
x1, y1, x2, y2 = parse_line(line)
|
||||||
if x1 == x2 or y1 == y2:
|
if x1 == x2 or y1 == y2:
|
||||||
for x in range(min(x1,x2), max(x1,x2) + 1):
|
for x in range(min(x1, x2), max(x1, x2) + 1):
|
||||||
for y in range(min(y1,y2), max(y1,y2) + 1):
|
for y in range(min(y1, y2), max(y1, y2) + 1):
|
||||||
field[x][y] += 1
|
field[(x, y)] += 1
|
||||||
elif abs(x1 - x2) == abs(y1 - y2):
|
elif abs(x1 - x2) == abs(y1 - y2):
|
||||||
dx = 1 if x1 < x2 else -1
|
dx = 1 if x1 < x2 else -1
|
||||||
dy = 1 if y1 < y2 else -1
|
dy = 1 if y1 < y2 else -1
|
||||||
for n in range(abs(x1 - x2) + 1):
|
for n in range(abs(x1 - x2) + 1):
|
||||||
field[x1 + (dx * n)][y1 + (dy * n)] += 1
|
field[(x1 + (dx * n), y1 + (dy * n))] += 1
|
||||||
for x in range(1000):
|
result = len([k for k in field if field[k] > 1])
|
||||||
for y in range(1000):
|
|
||||||
if field[x][y] >= 2:
|
|
||||||
result += 1
|
|
||||||
print("Part 2 result:", result)
|
print("Part 2 result:", result)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user