Solution to problem 2 in python
This commit is contained in:
parent
76dd834e4e
commit
913284fded
116
src/Year_2021/P2.py
Normal file
116
src/Year_2021/P2.py
Normal file
@ -0,0 +1,116 @@
|
||||
# --- Day 2: Dive! ---
|
||||
|
||||
# Now, you need to figure out how to pilot this thing.
|
||||
|
||||
# It seems like the submarine can take a series of commands like forward 1,
|
||||
# down 2, or up 3:
|
||||
|
||||
# forward X increases the horizontal position by X units.
|
||||
# down X increases the depth by X units.
|
||||
# up X decreases the depth by X units.
|
||||
|
||||
# Note that since you're on a submarine, down and up affect your depth, and so
|
||||
# they have the opposite result of what you might expect.
|
||||
|
||||
# The submarine seems to already have a planned course (your puzzle input).
|
||||
# You should probably figure out where it's going. For example:
|
||||
|
||||
# forward 5
|
||||
# down 5
|
||||
# forward 8
|
||||
# up 3
|
||||
# down 8
|
||||
# forward 2
|
||||
|
||||
# Your horizontal position and depth both start at 0. The steps above would
|
||||
# then modify them as follows:
|
||||
|
||||
# forward 5 adds 5 to your horizontal position, a total of 5.
|
||||
# down 5 adds 5 to your depth, resulting in a value of 5.
|
||||
# forward 8 adds 8 to your horizontal position, a total of 13.
|
||||
# up 3 decreases your depth by 3, resulting in a value of 2.
|
||||
# down 8 adds 8 to your depth, resulting in a value of 10.
|
||||
# forward 2 adds 2 to your horizontal position, a total of 15.
|
||||
|
||||
# After following these instructions, you would have a horizontal position of
|
||||
# 15 and a depth of 10. (Multiplying these together produces 150.)
|
||||
|
||||
# Calculate the horizontal position and depth you would have after following
|
||||
# the planned course. What do you get if you multiply your final horizontal
|
||||
# position by your final depth?
|
||||
|
||||
with open("files/P2.txt", "r") as f:
|
||||
instructions = [line for line in f.read().strip().split("\n")]
|
||||
|
||||
|
||||
def part_1() -> None:
|
||||
position, depth = 0, 0
|
||||
for instruction in instructions:
|
||||
pos, amount = instruction.split(" ")
|
||||
if pos == "forward":
|
||||
position += int(amount)
|
||||
if pos == "down":
|
||||
depth += int(amount)
|
||||
if pos == "up":
|
||||
depth -= int(amount)
|
||||
|
||||
print(f"Planned course for part 1 is {position * depth}")
|
||||
|
||||
|
||||
# --- Part Two ---
|
||||
|
||||
# Based on your calculations, the planned course doesn't seem to make any
|
||||
# sense. You find the submarine manual and discover that the process is
|
||||
# actually slightly more complicated.
|
||||
|
||||
# In addition to horizontal position and depth, you'll also need to track a
|
||||
# third value, aim, which also starts at 0. The commands also mean something
|
||||
# entirely different than you first thought:
|
||||
|
||||
# down X increases your aim by X units.
|
||||
# up X decreases your aim by X units.
|
||||
# forward X does two things:
|
||||
# It increases your horizontal position by X units.
|
||||
# It increases your depth by your aim multiplied by X.
|
||||
|
||||
# Again note that since you're on a submarine, down and up do the opposite of
|
||||
# what you might expect: "down" means aiming in the positive direction.
|
||||
|
||||
# Now, the above example does something different:
|
||||
|
||||
# forward 5 adds 5 to your horizontal position, a total of 5. Because your
|
||||
# aim is 0, your depth does not change.
|
||||
# down 5 adds 5 to your aim, resulting in a value of 5.
|
||||
# forward 8 adds 8 to your horizontal position, a total of 13. Because your
|
||||
# aim is 5, your depth increases by 8*5=40.
|
||||
# up 3 decreases your aim by 3, resulting in a value of 2.
|
||||
# down 8 adds 8 to your aim, resulting in a value of 10.
|
||||
# forward 2 adds 2 to your horizontal position, a total of 15. Because your
|
||||
# aim is 10, your depth increases by 2*10=20 to a total of 60.
|
||||
|
||||
# After following these new instructions, you would have a horizontal position
|
||||
# of 15 and a depth of 60. (Multiplying these produces 900.)
|
||||
|
||||
# Using this new interpretation of the commands, calculate the horizontal
|
||||
# position and depth you would have after following the planned course. What do
|
||||
# you get if you multiply your final horizontal position by your final depth?
|
||||
|
||||
|
||||
def part_2() -> None:
|
||||
position, depth, aim = 0, 0, 0
|
||||
for instruction in instructions:
|
||||
pos, amount = instruction.split(" ")
|
||||
if pos == "forward":
|
||||
position += int(amount)
|
||||
depth += aim * int(amount)
|
||||
if pos == "down":
|
||||
aim += int(amount)
|
||||
if pos == "up":
|
||||
aim -= int(amount)
|
||||
|
||||
print(f"Planned course for part 2 is {position * depth}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
part_1()
|
||||
part_2()
|
1000
src/Year_2021/files/P2.txt
Normal file
1000
src/Year_2021/files/P2.txt
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user