From 813cecc174ae895e42ada64ef42989626b504d2b Mon Sep 17 00:00:00 2001 From: Akumatic Date: Thu, 2 Dec 2021 14:30:01 +0100 Subject: [PATCH] 2021 Day 02 --- 2021/02/README.md | 66 +++ 2021/02/code.py | 37 ++ 2021/02/input.txt | 1000 ++++++++++++++++++++++++++++++++++++++++++ 2021/02/solution.txt | 2 + 2021/02/test_code.py | 14 + 2021/README.md | 2 +- 6 files changed, 1120 insertions(+), 1 deletion(-) create mode 100644 2021/02/README.md create mode 100644 2021/02/code.py create mode 100644 2021/02/input.txt create mode 100644 2021/02/solution.txt create mode 100644 2021/02/test_code.py diff --git a/2021/02/README.md b/2021/02/README.md new file mode 100644 index 0000000..ca949f8 --- /dev/null +++ b/2021/02/README.md @@ -0,0 +1,66 @@ +# 2021 Day 02: Dive! +Copyright (c) Eric Wastl +#### [Direct Link](https://adventofcode.com/2021/day/02) + +## Part 1 + +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 2 + +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/2021/02/code.py b/2021/02/code.py new file mode 100644 index 0000000..54ce02b --- /dev/null +++ b/2021/02/code.py @@ -0,0 +1,37 @@ +# SPDX-License-Identifier: MIT +# Copyright (c) 2021 Akumatic +# +# https://adventofcode.com/2021/day/02 + +def read_file() -> list: + with open(f"{__file__.rstrip('code.py')}input.txt", "r") as f: + return [(s[0], int(s[1])) for s in (line.split() for line in f.read().strip().split("\n"))] + +def part1(commands: list) -> int: + position, depth = 0, 0 + for com in commands: + if com[0] == "forward": + position += com[1] + elif com[0] == "down": + depth += com[1] + else: #com[1] == "up" + depth -= com[1] + return position * depth + + +def part2(commands: list) -> int: + position, depth, aim = 0, 0, 0 + for com in commands: + if com[0] == "forward": + position += com[1] + depth += aim * com[1] + elif com[0] == "down": + aim += com[1] + else: #com[1] == "up" + aim -= com[1] + return position * depth + +if __name__ == "__main__": + vals = read_file() + print(f"Part 1: {part1(vals)}") + print(f"Part 2: {part2(vals)}") \ No newline at end of file diff --git a/2021/02/input.txt b/2021/02/input.txt new file mode 100644 index 0000000..6533ce2 --- /dev/null +++ b/2021/02/input.txt @@ -0,0 +1,1000 @@ +forward 4 +down 8 +down 3 +down 1 +forward 8 +up 6 +down 4 +forward 2 +down 4 +down 6 +down 7 +forward 1 +down 4 +down 6 +forward 7 +down 2 +up 8 +up 3 +forward 1 +forward 2 +down 3 +down 8 +forward 6 +forward 5 +down 4 +down 1 +up 5 +down 5 +down 2 +up 6 +forward 4 +forward 3 +down 8 +down 9 +up 2 +forward 1 +forward 2 +down 1 +forward 3 +down 7 +up 6 +down 1 +down 7 +down 5 +forward 8 +down 5 +down 1 +down 7 +up 9 +forward 6 +up 8 +down 3 +down 9 +down 3 +forward 2 +forward 1 +forward 4 +down 7 +up 8 +down 1 +up 1 +forward 4 +down 7 +forward 5 +forward 2 +forward 1 +up 8 +down 2 +up 6 +down 7 +down 4 +up 6 +forward 2 +forward 8 +down 8 +down 2 +forward 2 +forward 9 +down 1 +forward 5 +down 4 +forward 4 +down 2 +down 1 +forward 7 +down 1 +down 5 +down 5 +up 5 +forward 7 +forward 6 +forward 3 +forward 9 +forward 3 +forward 5 +down 8 +down 9 +forward 7 +up 5 +up 7 +down 5 +up 9 +forward 9 +up 8 +up 2 +forward 5 +down 2 +forward 2 +down 4 +up 4 +down 2 +up 3 +up 8 +down 3 +down 4 +down 7 +forward 3 +forward 9 +down 1 +down 2 +down 5 +down 1 +forward 2 +forward 2 +up 8 +down 4 +forward 7 +up 6 +down 9 +down 6 +up 1 +down 2 +forward 6 +down 4 +up 1 +forward 3 +down 4 +down 1 +up 8 +forward 3 +down 5 +up 2 +down 8 +down 4 +up 2 +down 2 +forward 6 +up 4 +up 2 +down 2 +forward 7 +down 5 +forward 2 +forward 8 +up 3 +forward 5 +up 6 +down 4 +down 1 +down 8 +down 2 +forward 8 +up 2 +down 5 +up 8 +down 1 +down 1 +down 5 +up 4 +down 1 +down 3 +down 8 +forward 6 +down 9 +forward 6 +up 2 +forward 1 +forward 9 +down 9 +down 3 +down 9 +down 6 +down 4 +down 8 +forward 1 +down 1 +forward 2 +up 2 +forward 8 +down 1 +up 6 +down 4 +down 3 +forward 8 +up 7 +down 6 +down 1 +down 2 +forward 1 +up 5 +up 7 +down 6 +down 4 +down 5 +forward 9 +down 7 +down 9 +down 5 +forward 9 +forward 7 +forward 9 +forward 8 +up 4 +forward 5 +down 7 +forward 8 +up 1 +forward 3 +forward 2 +forward 2 +down 7 +forward 9 +down 7 +down 9 +forward 6 +forward 8 +up 5 +up 8 +up 7 +up 6 +forward 7 +down 6 +down 5 +down 3 +forward 7 +down 7 +forward 6 +down 4 +down 2 +down 9 +down 2 +up 8 +down 8 +down 3 +down 4 +forward 3 +up 6 +down 9 +forward 1 +down 3 +forward 9 +down 6 +forward 9 +forward 8 +forward 5 +up 2 +forward 5 +up 7 +down 6 +forward 6 +down 8 +forward 2 +down 7 +down 8 +up 1 +forward 3 +forward 5 +down 3 +forward 8 +up 7 +forward 9 +forward 6 +forward 1 +forward 7 +down 5 +forward 3 +down 5 +down 6 +down 7 +down 3 +down 8 +up 5 +forward 2 +forward 5 +up 7 +up 4 +forward 1 +forward 1 +down 1 +down 7 +forward 4 +up 8 +forward 5 +down 9 +up 7 +forward 8 +down 4 +forward 4 +forward 6 +down 8 +forward 7 +down 1 +forward 9 +down 9 +up 1 +down 6 +forward 6 +down 7 +down 4 +forward 6 +forward 3 +down 5 +up 5 +up 7 +up 5 +down 6 +forward 7 +up 3 +down 2 +forward 6 +down 8 +down 7 +up 9 +forward 3 +forward 1 +down 8 +forward 6 +forward 4 +up 9 +forward 3 +down 1 +forward 4 +forward 9 +forward 2 +forward 8 +forward 1 +forward 2 +forward 7 +down 6 +forward 6 +up 2 +forward 5 +up 8 +down 9 +up 8 +down 5 +down 1 +down 6 +up 4 +down 4 +down 5 +up 6 +down 8 +down 8 +forward 9 +forward 8 +forward 2 +down 2 +up 3 +forward 2 +down 8 +down 8 +forward 3 +forward 5 +down 9 +down 2 +forward 6 +forward 7 +down 7 +forward 4 +forward 2 +down 1 +down 6 +up 5 +down 2 +forward 3 +forward 9 +down 9 +down 3 +forward 3 +forward 6 +down 2 +forward 5 +forward 7 +down 6 +forward 4 +down 6 +forward 6 +forward 3 +forward 3 +forward 8 +down 4 +up 4 +down 6 +down 4 +down 9 +forward 7 +forward 4 +forward 7 +down 3 +forward 1 +down 7 +down 3 +forward 1 +down 7 +down 5 +forward 6 +up 7 +down 7 +forward 5 +forward 5 +up 9 +down 7 +forward 1 +forward 2 +down 4 +down 8 +down 7 +forward 4 +forward 4 +forward 3 +down 8 +down 7 +down 8 +forward 2 +down 2 +forward 2 +forward 4 +up 6 +down 4 +up 3 +forward 7 +down 9 +down 3 +forward 3 +down 2 +down 2 +up 5 +down 4 +forward 3 +forward 3 +up 7 +forward 8 +forward 6 +down 3 +forward 2 +down 6 +up 1 +down 7 +down 7 +forward 8 +up 1 +up 8 +up 4 +up 1 +forward 4 +forward 9 +down 9 +down 5 +down 3 +forward 8 +down 3 +forward 4 +down 6 +down 9 +down 3 +forward 6 +up 1 +up 4 +forward 9 +down 3 +up 1 +forward 4 +up 1 +forward 8 +down 9 +up 1 +forward 3 +down 7 +down 7 +down 3 +forward 7 +forward 5 +down 8 +up 8 +down 6 +down 4 +forward 9 +down 9 +up 5 +forward 6 +down 8 +up 8 +down 2 +forward 1 +down 8 +down 2 +forward 7 +forward 2 +down 2 +forward 5 +up 2 +down 6 +down 1 +down 6 +down 3 +up 4 +forward 4 +forward 8 +down 3 +forward 9 +forward 6 +down 2 +up 2 +down 2 +up 4 +down 8 +forward 5 +down 4 +forward 3 +down 4 +forward 6 +down 8 +down 2 +up 7 +down 3 +down 6 +up 1 +forward 8 +up 5 +down 1 +forward 3 +down 2 +down 5 +up 5 +up 2 +down 2 +down 2 +down 4 +forward 3 +up 7 +forward 8 +forward 4 +down 3 +forward 8 +down 4 +down 9 +down 7 +up 3 +up 4 +down 4 +forward 3 +down 3 +up 5 +down 1 +forward 4 +forward 9 +forward 3 +forward 3 +up 6 +down 3 +forward 3 +up 7 +down 3 +up 7 +up 2 +up 2 +down 9 +forward 4 +forward 7 +forward 7 +down 7 +forward 2 +forward 1 +down 9 +forward 2 +down 2 +down 4 +up 3 +forward 8 +up 3 +down 7 +forward 9 +down 7 +forward 2 +down 1 +up 9 +forward 7 +forward 9 +up 4 +forward 3 +forward 1 +down 5 +down 6 +forward 9 +down 9 +forward 2 +forward 8 +forward 4 +forward 9 +down 5 +down 9 +down 3 +down 7 +up 2 +up 7 +forward 6 +down 3 +down 2 +up 1 +forward 4 +down 1 +up 4 +up 8 +down 9 +down 5 +down 7 +forward 4 +down 1 +forward 8 +down 5 +forward 7 +down 3 +up 2 +forward 4 +down 1 +forward 4 +up 5 +forward 9 +down 1 +forward 7 +up 3 +up 9 +forward 4 +up 5 +down 6 +forward 2 +down 1 +forward 1 +down 9 +forward 5 +down 2 +up 3 +down 5 +up 4 +down 5 +down 8 +down 8 +down 3 +forward 9 +forward 2 +down 3 +down 3 +down 6 +down 8 +forward 9 +down 4 +down 1 +forward 4 +down 9 +forward 1 +down 9 +up 6 +up 7 +up 8 +forward 5 +down 3 +up 5 +up 1 +down 8 +forward 1 +forward 7 +up 9 +down 7 +forward 4 +down 5 +forward 2 +down 6 +up 8 +down 1 +down 6 +down 9 +down 8 +forward 8 +down 4 +up 2 +down 2 +forward 9 +up 6 +down 3 +forward 5 +forward 9 +up 2 +up 5 +down 5 +forward 2 +forward 3 +forward 2 +up 2 +down 2 +forward 9 +up 4 +down 4 +up 1 +down 1 +down 6 +down 6 +forward 2 +up 6 +up 9 +forward 7 +forward 4 +down 6 +down 5 +down 5 +down 9 +forward 7 +down 1 +up 5 +forward 4 +up 8 +up 8 +down 4 +down 7 +forward 1 +forward 8 +down 3 +up 3 +up 3 +up 4 +down 1 +down 8 +up 6 +up 8 +forward 2 +down 2 +down 3 +forward 4 +forward 3 +forward 6 +down 1 +up 6 +forward 2 +forward 6 +forward 2 +forward 5 +down 1 +up 4 +forward 7 +down 6 +forward 8 +up 9 +down 5 +up 3 +forward 8 +forward 1 +forward 9 +up 9 +forward 4 +forward 5 +down 1 +up 9 +down 5 +down 7 +forward 8 +down 1 +forward 3 +forward 2 +down 9 +down 1 +forward 5 +up 6 +down 7 +forward 4 +down 6 +forward 1 +forward 8 +up 4 +forward 5 +down 8 +forward 6 +up 2 +forward 3 +forward 5 +up 6 +up 8 +up 4 +forward 6 +down 2 +down 6 +down 5 +up 2 +down 3 +down 7 +up 6 +forward 2 +forward 3 +up 6 +forward 3 +up 8 +forward 6 +down 8 +down 7 +down 1 +down 6 +up 8 +up 9 +down 4 +forward 2 +forward 7 +down 8 +up 6 +up 8 +up 8 +down 4 +forward 9 +down 5 +forward 5 +forward 3 +down 1 +forward 1 +up 9 +down 1 +down 6 +up 6 +forward 7 +forward 1 +down 5 +down 2 +forward 5 +down 3 +down 4 +forward 6 +up 6 +down 9 +up 3 +forward 1 +up 3 +down 5 +up 4 +down 4 +forward 9 +up 5 +down 1 +forward 4 +down 8 +up 1 +forward 9 +forward 8 +up 4 +up 3 +up 5 +forward 5 +up 7 +forward 5 +forward 4 +forward 6 +forward 9 +down 6 +down 3 +up 5 +forward 2 +up 9 +down 4 +down 2 +forward 5 +up 6 +forward 1 +up 5 +up 3 +down 4 +forward 3 +forward 6 +up 4 +up 6 +down 3 +down 2 +up 3 +down 9 +up 7 +forward 6 +up 4 +forward 7 +down 4 +up 6 +down 6 +forward 9 +forward 4 +up 2 +forward 7 +up 5 +forward 2 +forward 2 +down 4 +down 4 +forward 3 +down 4 +up 3 +forward 9 +down 5 +forward 6 +forward 9 +forward 9 +up 6 +down 9 +forward 8 +up 7 +up 5 +down 6 +forward 6 +forward 1 +down 6 +forward 5 +down 2 +down 1 +forward 6 +down 6 +down 9 +down 5 +forward 1 +down 7 +down 7 +down 4 +forward 7 +up 5 +up 1 +up 2 +up 5 +down 3 +forward 9 +forward 2 +forward 8 +up 4 +forward 7 +forward 6 +forward 9 +down 2 +down 6 +forward 4 +down 9 +down 9 +up 3 +forward 2 +forward 1 +down 5 +up 9 +down 6 +forward 6 +down 8 +forward 3 +forward 5 +forward 3 +forward 2 +down 7 +down 2 +up 8 +forward 9 +down 8 +up 7 +down 4 +up 3 +forward 6 +down 3 +up 3 +down 6 +down 3 +up 2 +down 4 +down 4 +up 2 +down 6 +down 5 +down 9 +down 1 +down 7 +up 9 +down 4 +up 6 +down 6 +forward 9 +forward 2 +down 8 +down 3 +forward 4 +forward 4 +forward 5 +down 2 +down 8 +down 1 +up 4 +forward 9 +up 7 +forward 5 +down 5 +up 9 +down 2 +down 2 +forward 4 +forward 4 +forward 8 diff --git a/2021/02/solution.txt b/2021/02/solution.txt new file mode 100644 index 0000000..064a8f2 --- /dev/null +++ b/2021/02/solution.txt @@ -0,0 +1,2 @@ +Part 1: 1648020 +Part 2: 1759818555 \ No newline at end of file diff --git a/2021/02/test_code.py b/2021/02/test_code.py new file mode 100644 index 0000000..7da2c9e --- /dev/null +++ b/2021/02/test_code.py @@ -0,0 +1,14 @@ +# SPDX-License-Identifier: MIT +# Copyright (c) 2021 Akumatic + +from code import part1, part2 + +def test(): + vals = [("forward", 5), ("down", 5), ("forward", 8), ("up", 3), ("down", 8), ("forward", 2)] + assert part1(vals) == 150 + print("Passed Part 1") + assert part2(vals) == 900 + print("Passed Part 2") + +if __name__ == "__main__": + test() diff --git a/2021/README.md b/2021/README.md index 58702bd..c0f11a3 100644 --- a/2021/README.md +++ b/2021/README.md @@ -16,7 +16,7 @@ Collect stars by solving puzzles. Two puzzles will be made available on each day | Day | Part 1 | Part 2 | My Solution | Official Website | | --- | --- | --- |---| --- | | 01 | :white_check_mark: | :white_check_mark: | [Solution](01/code.py) | [Day 01](https://adventofcode.com/2021/day/1) | -| 02 | | | | | +| 02 | :white_check_mark: | :white_check_mark: | [Solution](02/code.py) | [Day 02](https://adventofcode.com/2021/day/2) | | 03 | | | | | | 04 | | | | | | 05 | | | | |