Files
advent-of-code/2019/day-3/python/main.py
2019-12-03 00:17:54 -06:00

69 lines
1.7 KiB
Python

import os
import sys
PATH = os.path.join(sys.path[0], '..', 'input')
DATA = [line for line in open(PATH, 'r').readlines()]
class Flag(object):
def __init__(self, o=False, t=False):
self.first = o
self.second = t
self.fstep = -1
self.sstep = -1
def mark(self, f, step):
if f == 0 and self.fstep == -1:
self.fstep = step
elif f == 1 and self.sstep == -1:
self.sstep = step
@property
def intersect(self):
return self.first and self.second
synth = lambda pos : f'{pos[0]},{pos[1]}'
grid = {}
offsets = {
'L' : (-1, 0),
'R' : (1, 0),
'U' : (0, 1),
'D' : (0, -1)
}
for f, line in enumerate(DATA):
curpos = [0, 0]
step = 0
for command in line.split(','):
offset = offsets[command[0]]
magnitude = int(command[1:])
for y in range(1, magnitude + 1):
step += 1
curpos[0] += offset[0]
curpos[1] += offset[1]
key = synth(curpos)
if key in grid.keys():
if f == 0:
grid[key].first = True
elif f == 1:
grid[key].second = True
grid[key].mark(f, step)
else:
grid[key] = Flag(o=True) if f == 0 else Flag(t=True)
grid[key].mark(f, step)
# Part 1
manhattan = lambda d : sum(abs(int(n)) for n in d.split(','))
select = list(filter(lambda item : grid[item].intersect, grid.keys()))
select = list(map(manhattan, select))
print(min(select))
# Part 2
combo = lambda x : grid[x].fstep + grid[x].sstep
found = list(filter(lambda item : grid[item].intersect, grid.keys()))
found = list(map(combo, found))
print(min(found))