diff --git a/day_02/info.md b/day_02/info.md new file mode 100644 index 0000000..eb5ac5b --- /dev/null +++ b/day_02/info.md @@ -0,0 +1,76 @@ +https://adventofcode.com/2021/day/2 + +--- + +## --- 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? + +## --- 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? \ No newline at end of file diff --git a/day_02/python/part_1.py b/day_02/python/part_1.py new file mode 100644 index 0000000..bcdb988 --- /dev/null +++ b/day_02/python/part_1.py @@ -0,0 +1,22 @@ +depth = 0 +distance = 0 + +with open("../input", "r") as file: + instructions = file.read().split("\n") + +# Follow each instruction +for instruction in instructions: + + # Parse the instruction into usable data + direction, magnitude = instruction.split(" ") + magnitude = int(magnitude) + + # Modify the submarine coordinates as needed + if direction == "forward": distance += magnitude + elif direction == "up": depth -= magnitude + else: depth += magnitude + +print(f"""Distance: {distance}m +Depth: {depth}m + +Puzzle Answer: {distance * depth}""") \ No newline at end of file diff --git a/day_02/python/part_2.py b/day_02/python/part_2.py new file mode 100644 index 0000000..ac9b07d --- /dev/null +++ b/day_02/python/part_2.py @@ -0,0 +1,28 @@ +depth = 0 +distance = 0 +aim = 0 + +with open("../input", "r") as file: + instructions = file.read().split("\n") + +# Follow each instruction +for instruction in instructions: + + # Parse the instruction into usable data + direction, magnitude = instruction.split(" ") + magnitude = int(magnitude) + + # Modify the submarine coordinates as needed + if direction == "forward": + distance += magnitude + depth += aim * magnitude + elif direction == "up": + aim -= magnitude + else: + aim += magnitude + +print(f"""Distance: {distance}m +Depth: {depth}m +Aim: {aim} + +Puzzle Answer: {distance * depth}""") \ No newline at end of file