day 12
This commit is contained in:
96
day12/module.py
Normal file
96
day12/module.py
Normal file
@@ -0,0 +1,96 @@
|
||||
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')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user