From 46833e668a71d3f7b43aeea8eee8e611a1691971 Mon Sep 17 00:00:00 2001 From: Tristan Date: Thu, 2 Dec 2021 09:19:03 +0100 Subject: [PATCH] Add day 2 --- .gitignore | 1 + aoc21 | 2 + data/day2/data.txt | 1000 +++++++++++++++++++++++++++++++++++++++++ data/day2/example.txt | 6 + data/day2/puzzle.md | 67 +++ src/Day2.php | 87 ++++ tests/Day2Test.php | 24 + 7 files changed, 1187 insertions(+) create mode 100644 data/day2/data.txt create mode 100644 data/day2/example.txt create mode 100644 data/day2/puzzle.md create mode 100644 src/Day2.php create mode 100644 tests/Day2Test.php diff --git a/.gitignore b/.gitignore index 41cc5e3..a1bf9a9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /vendor/ /.idea/ /.php-cs-fixer.cache +.DS_Store diff --git a/aoc21 b/aoc21 index cc130a4..d6dce5c 100755 --- a/aoc21 +++ b/aoc21 @@ -3,6 +3,7 @@ require __DIR__.'/vendor/autoload.php'; use AdventOfCode21\Day1; +use AdventOfCode21\Day2; use AdventOfCode21\Puzzle; use Symfony\Component\Console\Application; @@ -10,5 +11,6 @@ $application = new Application(); $application->add(new Puzzle()); $application->add(new Day1()); +$application->add(new Day2()); $application->run(); diff --git a/data/day2/data.txt b/data/day2/data.txt new file mode 100644 index 0000000..d8ca007 --- /dev/null +++ b/data/day2/data.txt @@ -0,0 +1,1000 @@ +forward 8 +forward 1 +down 9 +down 8 +down 5 +forward 4 +up 9 +forward 7 +forward 2 +down 6 +forward 7 +forward 5 +forward 8 +down 7 +up 8 +forward 1 +forward 6 +down 8 +up 3 +forward 3 +down 3 +down 7 +forward 5 +down 1 +down 9 +forward 4 +up 7 +forward 9 +forward 1 +down 6 +down 5 +down 4 +forward 9 +forward 1 +forward 4 +up 3 +up 6 +forward 1 +forward 9 +forward 4 +down 1 +down 9 +forward 7 +forward 8 +down 8 +down 8 +down 4 +down 5 +up 3 +forward 4 +down 1 +forward 2 +forward 1 +forward 8 +up 2 +forward 5 +forward 4 +forward 5 +forward 8 +down 4 +down 5 +down 8 +down 7 +down 6 +forward 4 +up 8 +forward 6 +down 2 +down 7 +up 7 +down 2 +down 6 +forward 5 +forward 2 +forward 8 +down 5 +down 6 +down 6 +up 7 +down 7 +forward 8 +down 7 +down 7 +down 2 +down 2 +forward 3 +up 5 +down 3 +up 3 +down 4 +up 9 +down 1 +up 1 +forward 3 +up 3 +forward 9 +up 6 +down 3 +down 6 +forward 4 +forward 5 +forward 8 +down 6 +down 9 +down 4 +down 5 +forward 7 +down 3 +forward 8 +forward 3 +up 9 +forward 5 +forward 8 +forward 1 +down 4 +up 2 +forward 1 +down 1 +forward 5 +down 8 +down 2 +forward 3 +forward 2 +forward 1 +down 7 +forward 1 +down 4 +forward 7 +forward 5 +down 8 +down 2 +up 4 +up 8 +forward 6 +up 2 +down 8 +up 9 +forward 3 +up 5 +down 3 +down 5 +up 6 +forward 3 +up 9 +down 4 +forward 8 +up 3 +forward 6 +forward 7 +forward 8 +forward 6 +down 9 +forward 4 +up 8 +forward 3 +forward 3 +forward 6 +down 3 +forward 5 +down 4 +down 4 +up 4 +down 8 +down 4 +down 1 +down 7 +down 7 +up 9 +down 7 +forward 2 +down 1 +down 8 +forward 8 +forward 4 +forward 6 +forward 8 +forward 6 +forward 8 +forward 7 +forward 6 +up 7 +down 6 +down 9 +down 2 +down 8 +down 4 +up 6 +up 8 +forward 3 +down 7 +down 3 +forward 3 +forward 3 +down 4 +down 1 +up 3 +forward 3 +down 5 +up 6 +down 6 +forward 1 +down 3 +down 6 +down 9 +down 3 +forward 8 +down 1 +forward 7 +forward 1 +forward 3 +up 3 +down 8 +forward 4 +down 4 +down 4 +down 8 +down 5 +down 8 +forward 6 +forward 7 +down 9 +forward 2 +up 9 +down 5 +forward 2 +down 5 +down 8 +forward 1 +forward 6 +forward 2 +forward 6 +down 7 +up 7 +down 7 +forward 7 +up 8 +forward 9 +down 5 +up 6 +up 6 +forward 3 +down 5 +forward 1 +down 4 +down 4 +down 1 +up 6 +down 8 +down 9 +down 2 +up 2 +up 7 +forward 5 +down 5 +up 2 +forward 2 +up 1 +forward 2 +up 4 +up 7 +forward 2 +down 4 +down 1 +forward 4 +up 6 +forward 1 +up 7 +down 8 +down 5 +down 1 +up 7 +down 5 +forward 4 +forward 2 +down 2 +down 6 +forward 1 +forward 2 +up 6 +down 1 +forward 2 +down 5 +down 9 +down 6 +up 8 +forward 3 +down 6 +up 3 +down 8 +down 8 +forward 2 +forward 1 +forward 7 +forward 8 +forward 2 +forward 5 +down 6 +down 3 +forward 5 +up 8 +forward 6 +up 9 +forward 7 +up 3 +down 7 +down 3 +up 8 +down 5 +forward 3 +down 1 +forward 1 +forward 2 +down 7 +down 6 +down 9 +forward 3 +down 7 +down 7 +down 5 +forward 4 +down 4 +forward 5 +forward 1 +forward 4 +down 8 +up 4 +down 6 +down 8 +up 1 +forward 7 +up 3 +forward 6 +forward 8 +forward 9 +forward 2 +up 6 +forward 7 +forward 3 +up 3 +up 6 +down 8 +up 4 +forward 9 +down 9 +up 3 +up 3 +down 4 +up 3 +down 2 +down 4 +up 9 +down 1 +forward 6 +forward 3 +down 3 +forward 4 +forward 3 +forward 8 +forward 1 +down 1 +up 4 +up 9 +down 8 +forward 3 +forward 2 +down 4 +down 1 +forward 8 +down 8 +up 8 +up 7 +down 4 +forward 6 +up 5 +down 1 +down 3 +down 9 +forward 3 +forward 9 +down 1 +down 6 +forward 8 +up 1 +down 9 +down 3 +forward 5 +forward 9 +forward 8 +up 7 +down 2 +down 5 +forward 6 +down 9 +down 4 +down 7 +down 4 +forward 7 +down 8 +up 8 +forward 2 +up 3 +down 4 +forward 2 +forward 4 +up 4 +forward 4 +forward 9 +down 9 +up 1 +forward 1 +down 8 +up 7 +up 9 +down 8 +down 7 +forward 9 +forward 1 +up 3 +forward 8 +forward 6 +forward 5 +up 2 +forward 8 +up 7 +down 8 +down 2 +up 9 +down 7 +forward 5 +forward 4 +down 9 +forward 4 +forward 5 +up 1 +down 8 +down 8 +down 4 +forward 3 +down 1 +up 7 +down 8 +forward 4 +down 5 +forward 1 +down 9 +forward 9 +up 7 +up 1 +down 3 +forward 3 +down 8 +forward 9 +down 3 +up 7 +forward 1 +up 8 +up 2 +up 1 +forward 8 +down 3 +forward 5 +up 3 +forward 6 +forward 9 +forward 2 +forward 6 +down 5 +forward 2 +down 7 +up 6 +forward 8 +forward 6 +down 3 +forward 8 +down 1 +forward 2 +down 9 +up 5 +down 6 +up 4 +forward 6 +forward 5 +forward 2 +forward 9 +forward 8 +up 4 +forward 4 +forward 9 +forward 4 +forward 7 +up 6 +down 5 +forward 8 +down 8 +up 3 +down 4 +up 8 +up 5 +forward 3 +down 8 +down 9 +down 1 +forward 7 +down 8 +up 4 +down 8 +up 4 +down 5 +forward 1 +forward 3 +down 6 +down 5 +forward 4 +up 2 +down 7 +down 3 +up 9 +forward 5 +forward 3 +forward 2 +up 2 +down 9 +up 1 +down 2 +forward 3 +forward 8 +forward 5 +down 2 +down 2 +up 3 +down 8 +forward 4 +forward 6 +forward 5 +up 9 +down 7 +up 7 +up 2 +down 2 +up 4 +forward 2 +forward 2 +down 7 +forward 5 +down 2 +up 7 +forward 6 +forward 5 +down 1 +forward 8 +forward 3 +forward 2 +up 3 +down 1 +forward 6 +forward 5 +forward 9 +down 5 +up 3 +down 1 +down 5 +forward 1 +down 1 +down 1 +forward 6 +up 8 +forward 9 +up 5 +up 5 +forward 9 +forward 3 +forward 4 +down 8 +forward 9 +forward 9 +up 2 +down 6 +down 2 +forward 1 +down 7 +up 4 +forward 3 +down 6 +forward 5 +down 6 +up 5 +forward 6 +up 6 +forward 7 +forward 5 +forward 1 +down 9 +forward 7 +forward 4 +forward 1 +forward 6 +up 7 +forward 6 +down 3 +forward 4 +down 1 +down 9 +down 8 +forward 7 +down 7 +up 5 +forward 1 +forward 4 +forward 8 +forward 6 +forward 2 +forward 4 +forward 2 +forward 6 +forward 5 +down 4 +down 3 +forward 6 +forward 3 +up 6 +down 3 +down 2 +forward 1 +down 9 +up 1 +forward 8 +forward 1 +forward 1 +forward 4 +down 5 +forward 7 +forward 5 +up 5 +up 7 +forward 7 +forward 5 +down 3 +down 2 +down 7 +forward 7 +forward 4 +down 9 +forward 2 +down 6 +forward 3 +up 6 +down 8 +down 7 +down 6 +down 7 +up 5 +up 9 +down 4 +up 6 +forward 1 +forward 2 +forward 4 +up 5 +down 2 +down 3 +forward 9 +down 9 +down 3 +forward 5 +forward 3 +down 1 +up 7 +forward 7 +forward 5 +down 8 +up 6 +down 7 +forward 5 +up 7 +up 6 +forward 2 +forward 6 +down 1 +up 8 +down 9 +down 1 +forward 9 +up 9 +down 2 +forward 6 +up 3 +down 1 +up 9 +down 6 +up 2 +up 6 +forward 9 +forward 8 +up 7 +forward 6 +up 3 +up 4 +down 6 +forward 1 +forward 9 +down 9 +down 6 +forward 1 +forward 2 +up 3 +down 4 +down 9 +down 3 +down 2 +forward 7 +down 9 +forward 9 +forward 5 +down 9 +forward 1 +forward 6 +down 6 +up 8 +up 8 +up 3 +forward 7 +forward 7 +forward 8 +down 5 +forward 3 +down 4 +down 6 +forward 1 +down 1 +forward 7 +forward 2 +down 7 +down 1 +up 6 +forward 3 +down 6 +forward 2 +down 6 +forward 8 +down 4 +up 8 +forward 9 +up 5 +forward 3 +down 6 +forward 4 +forward 4 +down 8 +up 5 +up 9 +down 8 +forward 1 +down 6 +down 3 +forward 1 +down 4 +up 6 +down 6 +down 6 +down 5 +forward 5 +forward 6 +down 1 +down 9 +down 4 +up 7 +down 2 +forward 5 +down 8 +down 8 +down 6 +down 1 +up 8 +down 1 +down 4 +forward 6 +down 3 +down 6 +up 4 +down 6 +up 7 +down 3 +forward 2 +up 3 +forward 7 +up 7 +up 4 +forward 5 +down 9 +down 2 +down 9 +up 6 +forward 9 +forward 3 +down 1 +forward 7 +forward 2 +down 5 +forward 3 +forward 7 +forward 4 +forward 7 +forward 6 +forward 3 +down 6 +forward 3 +down 1 +up 6 +up 9 +down 1 +forward 1 +down 1 +up 7 +forward 8 +forward 4 +up 4 +forward 7 +down 3 +up 8 +up 1 +down 6 +forward 8 +forward 7 +up 7 +down 4 +down 4 +down 8 +up 3 +forward 5 +down 4 +forward 9 +forward 6 +forward 6 +forward 7 +down 6 +down 3 +forward 2 +up 8 +forward 1 +down 9 +up 7 +down 3 +down 3 +up 5 +up 4 +up 8 +forward 2 +down 5 +forward 7 +up 8 +up 6 +forward 5 +down 5 +forward 2 +down 6 +forward 7 +down 6 +forward 5 +forward 3 +forward 9 +down 7 +forward 7 +forward 7 +forward 7 +forward 1 +forward 2 +forward 2 +down 6 +down 8 +forward 3 +down 9 +down 5 +up 5 +forward 3 +forward 9 +down 7 +down 9 +down 9 +down 9 +forward 6 +down 1 +forward 6 +forward 8 +forward 8 +down 4 +forward 8 +down 9 +forward 6 +down 2 +down 1 +down 5 +forward 5 +forward 8 +forward 7 +forward 7 +forward 8 +down 5 +forward 3 +up 5 +forward 5 +down 9 +up 8 +down 2 +forward 8 +forward 5 +up 5 +forward 4 +down 3 +forward 4 +up 3 +forward 1 +forward 8 +forward 3 +down 2 +up 8 +forward 2 +down 8 +forward 3 +up 2 +up 1 +down 9 +down 8 +forward 1 +forward 1 +down 8 +forward 9 +up 2 +forward 4 +forward 2 +up 2 +down 8 +down 1 +forward 1 +forward 3 +forward 6 +up 6 +down 2 +up 1 +down 3 +forward 3 +up 5 +down 9 +down 7 +forward 8 +up 5 +up 4 +forward 8 +forward 5 +down 8 +up 8 +forward 7 +up 8 +down 6 +down 2 +down 3 +forward 9 +down 4 +down 2 +down 1 +up 2 +up 4 +forward 3 +forward 1 +forward 9 +forward 1 +down 7 +up 7 +forward 5 +down 3 +forward 3 +down 4 +down 1 +up 5 +down 8 +down 2 +forward 4 +up 9 +down 3 +down 3 +down 2 +forward 7 +down 2 +forward 6 +up 8 +forward 5 +forward 5 +up 9 +forward 8 +forward 9 +down 5 +forward 5 +down 3 +forward 5 +down 1 +forward 6 +forward 6 +forward 1 +forward 2 +up 5 +forward 9 diff --git a/data/day2/example.txt b/data/day2/example.txt new file mode 100644 index 0000000..b7172ac --- /dev/null +++ b/data/day2/example.txt @@ -0,0 +1,6 @@ +forward 5 +down 5 +forward 8 +up 3 +down 8 +forward 2 diff --git a/data/day2/puzzle.md b/data/day2/puzzle.md new file mode 100644 index 0000000..1f326e5 --- /dev/null +++ b/data/day2/puzzle.md @@ -0,0 +1,67 @@ +# Day 2: Dive! + +[https://adventofcode.com/2021/day/2](https://adventofcode.com/2021/day/2) + +## Description + +### Part One + +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?_ diff --git a/src/Day2.php b/src/Day2.php new file mode 100644 index 0000000..50c778a --- /dev/null +++ b/src/Day2.php @@ -0,0 +1,87 @@ +