99 lines
2.5 KiB
Python
99 lines
2.5 KiB
Python
import re
|
|
|
|
|
|
def part1():
|
|
file = open("input.txt")
|
|
lines = [i.strip() for i in file.readlines()]
|
|
|
|
direction = 0
|
|
x = 0
|
|
y = 0
|
|
for line in lines:
|
|
val = re.split("([A-Z]){1}([0-9]+)", line)
|
|
action = val[1]
|
|
value = int(val[2])
|
|
|
|
if action == "N":
|
|
y += value
|
|
elif action == "S":
|
|
y -= value
|
|
elif action == "E":
|
|
x += value
|
|
elif action == "W":
|
|
x -= value
|
|
elif action == "L":
|
|
direction = (direction - value) % 360
|
|
elif action == "R":
|
|
direction = (direction + value) % 360
|
|
elif action == "F":
|
|
if direction == 0:
|
|
x += value
|
|
elif direction == 90:
|
|
y -= value
|
|
elif direction == 180:
|
|
x -= value
|
|
elif direction == 270:
|
|
y += value
|
|
|
|
# print(f'{x} - {y}')
|
|
|
|
print(f"Part 1: {(abs(x) + abs(y))}")
|
|
|
|
|
|
def part2():
|
|
file = open("input.txt")
|
|
lines = [i.strip() for i in file.readlines()]
|
|
|
|
ship = {'x': 0, 'y': 0}
|
|
waypoint = {'x': 10, 'y': 1}
|
|
|
|
for line in lines:
|
|
val = re.split("([A-Z]){1}([0-9]+)", line)
|
|
action = val[1]
|
|
value = int(val[2])
|
|
|
|
if action == "N":
|
|
waypoint['y'] += value
|
|
elif action == "S":
|
|
waypoint['y'] -= value
|
|
elif action == "E":
|
|
waypoint['x'] += value
|
|
elif action == "W":
|
|
waypoint['x'] -= value
|
|
elif action == "L":
|
|
x = waypoint['x']
|
|
y = waypoint['y']
|
|
if value == 90:
|
|
waypoint['x'] = y * -1
|
|
waypoint['y'] = x
|
|
elif value == 180:
|
|
waypoint['x'] = -x
|
|
waypoint['y'] = -y
|
|
elif value == 270:
|
|
waypoint['y'] = x * -1
|
|
waypoint['x'] = y
|
|
|
|
elif action == "R":
|
|
x = waypoint['x']
|
|
y = waypoint['y']
|
|
if value == 90:
|
|
waypoint['x'] = y
|
|
waypoint['y'] = x * -1
|
|
elif value == 180:
|
|
waypoint['x'] = -x
|
|
waypoint['y'] = -y
|
|
elif value == 270:
|
|
waypoint['y'] = x
|
|
waypoint['x'] = y * -1
|
|
|
|
elif action == "F":
|
|
ship['x'] += waypoint['x'] * value
|
|
ship['y'] += waypoint['y'] * value
|
|
|
|
print(f"Part 2: {(abs(ship['x']) + abs(ship['y']))}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
part1()
|
|
part2()
|