### Objective

Given a series of navigation directions find the final position of a submarine

### Part 1

To solve this we define a navigate function that adjusts the location of the submarine.

``````def navigate(course: Course, loc: Point = Point(0, 0)):
# Follow the course for the submarine and return the horizontal and vertical positions
for direction, n in course:
if direction == 'forward':
loc.x += n
elif direction == 'down':
loc.y += n
elif direction == 'up':
loc.y -= n

return loc

def day2_1(course: Course):
loc = navigate(course)
return loc.x * loc.y``````

### Part 2

For part 2 we use a modified navigate function that also adjusts the aim of the submarine.

``````def navigate_with_aim(course: Course, loc: Point = Point(0, 0, 0)):
# Follow the course for the submarine and return the horizontal and vertical positions
for direction, n in course:
if direction == 'forward':
loc.x += n
loc.y += n * loc.aim
elif direction == 'down':
loc.aim += n
elif direction == 'up':
loc.aim -= n

return loc

def day2_2(course: Course):
loc = navigate_with_aim(course)
return loc.x * loc.y``````