Files
aoc2020/day12/module.py
2020-12-12 06:31:38 +01:00

97 lines
2.1 KiB
Python

from aoc.input import get_input
import copy
import itertools
import time
import collections
import re
from aoc.partselector import part_one, part_two
import functools
def pw(line):
l = line.strip()
return l[0], int(l[1:])
def p1():
inp = get_input(pw)
go = {
'N': (0, -1),
'S': (0, 1),
'W': (-1, 0),
'E': (1, 0),
}
pos = (0, 0)
doffset = 1
for sample in inp:
print(sample)
d, v, = sample
if sample[0] in 'NWSE':
pos = (pos[0] + sample[1]*go[d][0],pos[1] + sample[1]*go[d][1])
if d == 'L':
doffset -= v//90
if d == 'R':
doffset += v//90
if d == 'F':
di = 'NESW'
d = di[doffset%4]
pos = (pos[0] + sample[1]*go[d][0],pos[1] + sample[1]*go[d][1])
print(pos)
print(pos)
print(abs(pos[0]) + abs(pos[1]))
return inp
def p2(inp):
go = {
'N': (0, -1),
'S': (0, 1),
'W': (-1, 0),
'E': (1, 0),
}
pos = (0, 0)
wp = (10, -1)
doffset = 1
for sample in inp:
print(sample)
d, v, = sample
if sample[0] in 'NWSE':
wp = (wp[0] + sample[1]*go[d][0],wp[1] + sample[1]*go[d][1])
if d == 'L':
doffset -= v//90
dd = (v//90)%4
if dd == 2:
wp = (-wp[0], -wp[1])
if dd == 1:
wp = (wp[1], -wp[0])
if dd == 3:
wp = (-wp[1], wp[0])
if d == 'R':
dd = (v//90)%4
if dd == 2:
wp = (-wp[0], -wp[1])
if dd == 3:
wp = (wp[1], -wp[0])
if dd == 1:
wp = (-wp[1], wp[0])
if d == 'F':
pos = (pos[0] + sample[1]*wp[0],pos[1] + sample[1]*wp[1])
print(pos, wp)
print(abs(pos[0]) + abs(pos[1]))
return 0
result1 = None
if part_one():
start = time.time()
result1 = p1()
print(round(1000*(time.time() - start), 2), 'ms')
if part_two():
start = time.time()
p2(result1)
print(round(1000*(time.time() - start), 2), 'ms')