import re
def parse(l):
group = re.compile(r"(?P
\w)(?P\d+)").findall(l)
return group[0]
def move_ship(direction, amount, east, north, facing):
array = ['N', 'E', 'S', 'W']
amount = int(amount)
if direction == 'F':
direction = facing
if direction == 'N':
north += amount
if direction == 'S':
north -= amount
if direction == 'E':
east += amount
if direction == 'W':
east -= amount
if direction == 'L':
pos = array.index(facing)
pos2 = amount // 90
facing = array[pos - pos2]
if direction == 'R':
pos = array.index(facing)
pos2 = amount // 90
facing = array[(pos + pos2) % 4]
return east, north, facing
def move_ship_waypoint(direction, amount, ship, waypoint):
amount = int(amount)
if direction == 'F':
ship += waypoint*amount
if direction == 'N':
waypoint += amount * (0+1j)
if direction == 'S':
waypoint += amount * (0-1j)
if direction == 'E':
waypoint += amount * (1+0j)
if direction == 'W':
waypoint += amount * (-1+0j)
if direction == 'L':
waypoint = waypoint * 1j**(amount // 90)
if direction == 'R':
waypoint = waypoint * (-1j)**(amount // 90)
return ship, waypoint
with open(r"C:\Users\Maya\Desktop\Uni\WS_2021\AoC\input12") as f:
lines = f.readlines()
# make dictionary with the values
directions = []
for line in lines:
directions.append(parse(line))
# current position [east / west, north / south, facing]
current = [0, 0, 'E']
for dire in directions:
current = move_ship(*dire, *current)
print(abs(current[0]) + abs(current[1]))
ship_position = 0+0j
waypoint_position = 10+1j
for dire in directions:
ship_position, waypoint_position = move_ship_waypoint(*dire, ship_position, waypoint_position)
print(abs(ship_position.real) + abs(ship_position.imag))