From 7d77a1cfcf7b69e9eb06d4d23e5214d55f2eab4f Mon Sep 17 00:00:00 2001 From: Alfred Melch Date: Thu, 2 Dec 2021 11:09:23 +0100 Subject: [PATCH] Solve 2021/02 --- 2021/day02/Cargo.lock | 7 + 2021/day02/Cargo.toml | 8 + 2021/day02/README.md | 82 +++ 2021/day02/input/example0 | 6 + 2021/day02/input/input | 1000 +++++++++++++++++++++++++++++++++++++ 2021/day02/src/main.rs | 65 +++ 6 files changed, 1168 insertions(+) create mode 100644 2021/day02/Cargo.lock create mode 100644 2021/day02/Cargo.toml create mode 100644 2021/day02/README.md create mode 100644 2021/day02/input/example0 create mode 100644 2021/day02/input/input create mode 100644 2021/day02/src/main.rs diff --git a/2021/day02/Cargo.lock b/2021/day02/Cargo.lock new file mode 100644 index 0000000..52d399b --- /dev/null +++ b/2021/day02/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "day02" +version = "0.1.0" diff --git a/2021/day02/Cargo.toml b/2021/day02/Cargo.toml new file mode 100644 index 0000000..843335d --- /dev/null +++ b/2021/day02/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day02" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/2021/day02/README.md b/2021/day02/README.md new file mode 100644 index 0000000..7356128 --- /dev/null +++ b/2021/day02/README.md @@ -0,0 +1,82 @@ +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: + +[code] + + forward 5 + down 5 + forward 8 + up 3 + down 8 + forward 2 + +[/code] + +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/2021/day02/input/example0 b/2021/day02/input/example0 new file mode 100644 index 0000000..b7172ac --- /dev/null +++ b/2021/day02/input/example0 @@ -0,0 +1,6 @@ +forward 5 +down 5 +forward 8 +up 3 +down 8 +forward 2 diff --git a/2021/day02/input/input b/2021/day02/input/input new file mode 100644 index 0000000..d863ae7 --- /dev/null +++ b/2021/day02/input/input @@ -0,0 +1,1000 @@ +forward 8 +down 9 +forward 2 +down 1 +forward 9 +forward 7 +forward 5 +up 3 +up 3 +down 5 +forward 2 +down 8 +down 3 +forward 6 +down 2 +down 4 +down 7 +down 7 +forward 2 +down 6 +down 8 +down 2 +down 8 +up 9 +down 8 +forward 8 +down 5 +up 4 +forward 4 +forward 4 +forward 3 +down 9 +forward 8 +up 3 +forward 2 +forward 3 +forward 6 +down 7 +down 2 +forward 4 +forward 7 +forward 6 +up 5 +up 1 +forward 4 +down 9 +up 6 +forward 6 +up 9 +forward 1 +down 9 +forward 4 +down 3 +forward 7 +forward 5 +down 1 +up 9 +down 9 +forward 6 +forward 1 +down 5 +down 6 +forward 6 +forward 3 +up 4 +up 9 +down 3 +forward 6 +up 4 +up 6 +forward 4 +down 1 +down 2 +up 9 +forward 8 +down 2 +down 3 +down 4 +up 3 +forward 3 +forward 4 +down 4 +forward 7 +forward 9 +down 7 +forward 6 +forward 2 +up 6 +forward 7 +forward 9 +down 5 +forward 6 +up 9 +forward 6 +forward 2 +forward 6 +up 3 +down 1 +forward 5 +down 3 +forward 7 +down 4 +forward 1 +forward 7 +down 1 +up 2 +down 7 +down 6 +forward 8 +forward 2 +forward 1 +forward 9 +down 3 +forward 3 +down 6 +up 8 +up 3 +forward 1 +forward 3 +forward 7 +down 9 +forward 7 +forward 3 +up 6 +forward 4 +down 9 +forward 2 +down 4 +up 2 +down 1 +up 1 +down 6 +forward 1 +up 6 +up 7 +forward 3 +forward 3 +forward 2 +forward 1 +down 7 +forward 9 +down 5 +down 9 +up 9 +forward 3 +forward 8 +down 3 +forward 9 +forward 4 +down 3 +up 4 +up 8 +up 4 +down 8 +down 6 +down 5 +forward 2 +up 6 +up 1 +up 9 +down 4 +up 8 +forward 6 +down 1 +forward 7 +up 2 +forward 6 +up 2 +down 6 +down 5 +forward 2 +down 2 +down 1 +forward 8 +forward 1 +up 9 +forward 3 +down 6 +forward 2 +forward 8 +down 3 +forward 3 +forward 4 +forward 7 +forward 2 +up 4 +forward 8 +forward 1 +forward 9 +down 3 +down 1 +forward 8 +down 5 +down 3 +forward 5 +down 7 +down 1 +forward 8 +forward 2 +forward 4 +forward 8 +forward 6 +down 1 +forward 5 +forward 9 +forward 9 +up 9 +forward 9 +forward 4 +down 5 +down 2 +down 3 +forward 8 +forward 9 +up 8 +up 1 +up 6 +forward 7 +up 9 +forward 2 +forward 6 +up 6 +forward 3 +up 4 +forward 1 +down 4 +up 6 +down 5 +forward 7 +forward 6 +down 3 +down 4 +forward 3 +down 6 +down 1 +forward 5 +forward 7 +up 8 +forward 4 +up 7 +down 4 +forward 3 +down 7 +forward 7 +forward 4 +forward 1 +forward 8 +up 5 +up 6 +forward 5 +forward 3 +down 6 +forward 8 +forward 2 +forward 7 +down 7 +down 8 +down 3 +up 3 +down 1 +down 1 +forward 6 +forward 9 +forward 4 +forward 9 +forward 6 +down 1 +forward 9 +down 6 +down 8 +up 5 +down 8 +forward 4 +forward 2 +up 6 +down 9 +forward 6 +down 9 +down 6 +down 6 +forward 2 +up 8 +down 7 +down 2 +forward 2 +forward 2 +down 1 +up 8 +down 5 +forward 9 +forward 5 +forward 8 +forward 8 +forward 1 +down 2 +down 7 +up 5 +forward 9 +forward 4 +forward 4 +forward 6 +down 7 +up 5 +forward 5 +up 9 +down 7 +down 4 +down 9 +forward 7 +up 4 +down 1 +down 6 +up 2 +up 6 +down 2 +forward 9 +down 3 +forward 3 +forward 4 +forward 1 +up 2 +forward 6 +down 3 +forward 2 +down 9 +forward 8 +forward 3 +forward 2 +up 5 +forward 3 +forward 1 +down 8 +up 2 +up 4 +up 5 +down 3 +down 6 +down 1 +forward 4 +up 3 +down 1 +down 4 +up 6 +forward 8 +down 5 +down 7 +down 7 +forward 9 +forward 9 +down 2 +up 2 +down 5 +forward 5 +forward 4 +down 7 +forward 4 +down 2 +forward 2 +forward 4 +up 8 +down 8 +up 4 +forward 2 +forward 2 +up 8 +forward 2 +down 3 +down 7 +down 9 +up 6 +up 3 +forward 2 +forward 3 +up 8 +forward 6 +up 8 +up 1 +down 6 +down 8 +up 9 +down 1 +up 8 +forward 9 +forward 4 +forward 9 +forward 8 +forward 1 +down 6 +down 7 +up 5 +down 1 +forward 9 +down 9 +forward 7 +down 5 +forward 7 +down 1 +down 4 +down 4 +forward 6 +forward 1 +up 4 +up 2 +forward 7 +down 6 +down 2 +down 3 +up 7 +up 1 +down 6 +down 6 +down 8 +down 8 +forward 5 +forward 1 +forward 5 +up 8 +forward 8 +up 8 +forward 1 +down 9 +forward 1 +up 7 +up 3 +down 1 +down 9 +up 2 +down 3 +down 2 +forward 9 +up 9 +up 1 +up 5 +forward 8 +down 3 +down 7 +forward 7 +down 8 +down 5 +down 5 +down 4 +down 7 +forward 6 +forward 6 +forward 4 +forward 6 +forward 3 +up 5 +forward 2 +down 7 +forward 1 +down 4 +down 7 +down 7 +forward 4 +down 2 +up 4 +forward 2 +up 2 +up 3 +down 5 +forward 3 +down 2 +forward 5 +down 2 +down 1 +up 4 +up 5 +up 9 +forward 1 +forward 9 +down 9 +up 8 +forward 9 +forward 7 +down 9 +down 2 +down 9 +forward 9 +forward 7 +up 7 +forward 6 +up 6 +forward 5 +forward 6 +down 4 +forward 8 +forward 5 +forward 2 +up 4 +down 4 +forward 1 +down 2 +up 9 +up 7 +up 2 +up 3 +down 9 +forward 4 +up 6 +forward 5 +forward 5 +forward 9 +forward 1 +down 6 +forward 8 +down 5 +up 3 +up 1 +down 2 +up 4 +down 1 +down 9 +forward 8 +down 2 +forward 7 +down 7 +up 5 +down 7 +down 3 +forward 2 +forward 2 +forward 4 +down 9 +down 6 +down 9 +forward 6 +down 6 +down 9 +forward 1 +down 1 +forward 8 +down 4 +up 6 +down 2 +forward 9 +down 3 +up 3 +down 2 +up 2 +up 5 +down 8 +forward 1 +forward 3 +down 8 +up 3 +up 3 +up 3 +forward 2 +up 3 +down 4 +down 1 +down 7 +forward 3 +down 3 +down 8 +down 9 +forward 9 +forward 3 +up 4 +forward 8 +forward 8 +up 7 +up 3 +forward 6 +down 9 +up 1 +forward 2 +down 6 +up 6 +forward 2 +down 6 +down 3 +up 7 +forward 6 +down 6 +down 1 +down 5 +forward 6 +up 2 +down 2 +down 3 +down 1 +up 9 +forward 6 +up 2 +forward 2 +down 6 +up 3 +up 4 +forward 8 +up 8 +up 4 +down 7 +down 4 +up 9 +forward 9 +up 6 +forward 5 +forward 7 +forward 2 +forward 8 +down 7 +down 5 +down 4 +up 3 +forward 7 +down 2 +forward 5 +forward 9 +forward 4 +forward 7 +forward 8 +up 6 +down 1 +forward 3 +forward 9 +forward 1 +down 8 +down 1 +down 3 +down 1 +down 1 +up 3 +down 5 +up 1 +down 8 +down 2 +down 8 +down 3 +forward 2 +forward 8 +forward 4 +down 8 +down 6 +forward 8 +down 7 +forward 8 +forward 2 +forward 6 +forward 6 +forward 4 +up 2 +forward 3 +up 8 +forward 7 +forward 4 +down 8 +down 3 +down 4 +up 8 +forward 5 +forward 3 +up 4 +up 2 +down 6 +forward 4 +up 8 +up 3 +up 8 +down 3 +up 1 +forward 2 +down 4 +down 4 +down 9 +down 5 +forward 9 +up 6 +up 5 +down 8 +down 6 +down 7 +forward 8 +forward 4 +up 4 +forward 1 +down 4 +up 4 +down 9 +up 6 +down 9 +up 3 +forward 4 +down 1 +down 5 +down 5 +up 1 +down 8 +down 9 +down 1 +forward 4 +down 8 +down 6 +down 1 +forward 2 +down 5 +up 1 +up 1 +down 1 +down 3 +down 3 +down 8 +down 6 +down 5 +down 3 +up 3 +forward 5 +down 7 +down 7 +forward 2 +forward 6 +forward 1 +down 8 +forward 2 +up 2 +forward 2 +down 2 +forward 7 +down 7 +down 9 +up 2 +up 2 +down 3 +forward 1 +down 1 +forward 5 +forward 4 +down 4 +forward 6 +forward 2 +forward 7 +forward 2 +forward 8 +down 4 +up 3 +down 3 +up 9 +down 7 +up 8 +down 1 +down 8 +up 9 +down 6 +up 5 +up 8 +down 2 +down 3 +forward 1 +down 5 +down 5 +forward 8 +down 9 +forward 7 +forward 8 +down 1 +down 2 +up 8 +down 2 +up 5 +down 3 +forward 5 +forward 6 +up 4 +up 3 +forward 5 +forward 1 +down 2 +forward 2 +down 9 +up 7 +down 2 +up 8 +forward 2 +forward 2 +up 4 +forward 5 +down 4 +up 6 +up 8 +forward 9 +up 1 +forward 9 +forward 7 +forward 3 +forward 1 +down 1 +forward 5 +forward 2 +forward 6 +forward 6 +forward 3 +forward 7 +up 7 +down 6 +down 2 +up 5 +down 5 +up 2 +forward 7 +forward 2 +down 9 +up 4 +down 5 +down 3 +forward 7 +down 2 +forward 9 +forward 6 +down 3 +down 3 +forward 6 +down 9 +forward 7 +up 5 +up 6 +down 3 +up 4 +forward 4 +up 3 +down 8 +down 9 +down 9 +down 4 +up 1 +up 2 +down 3 +forward 4 +forward 5 +down 1 +up 3 +down 8 +down 7 +forward 2 +up 4 +down 8 +forward 1 +forward 6 +up 8 +down 2 +down 6 +forward 5 +up 8 +forward 7 +down 9 +forward 9 +down 3 +forward 9 +forward 1 +forward 6 +up 7 +forward 1 +down 5 +down 8 +down 3 +forward 5 +forward 6 +down 7 +forward 4 +down 6 +forward 4 +up 4 +down 4 +forward 4 +down 9 +forward 3 +down 6 +forward 3 +down 3 +up 3 +forward 3 +down 4 +down 4 +down 4 +down 5 +forward 5 +down 9 +down 7 +down 1 +forward 5 +forward 3 +forward 8 +down 5 +forward 4 +forward 3 +down 8 +forward 1 +forward 1 +down 6 +forward 4 +down 5 +forward 8 +down 7 +forward 6 +down 7 +up 2 +forward 6 +down 7 +down 3 +down 6 +up 2 +forward 8 +forward 5 +down 6 +forward 5 +up 7 +forward 8 +down 1 +forward 2 +up 7 +down 4 +up 5 +forward 5 +forward 4 +forward 3 +down 1 +forward 8 +up 9 +down 2 +up 4 +forward 7 +up 6 +forward 3 +down 8 +forward 4 +down 2 +down 9 +forward 8 +down 5 +forward 3 +down 9 +up 1 +forward 6 +up 9 +down 7 +forward 5 +forward 3 +down 8 +down 6 +up 3 +down 5 +forward 7 +up 2 +forward 4 +up 1 +down 8 +down 7 +forward 3 +forward 1 +down 3 +down 8 +forward 7 +up 2 +down 7 +up 6 +down 7 +down 1 +down 3 +up 6 +forward 2 +down 5 +forward 1 +forward 7 +forward 2 +down 8 +down 8 +down 7 +forward 7 +forward 5 +forward 1 +forward 7 +forward 3 +down 2 +up 8 +up 4 +up 6 +down 2 +down 1 +down 5 +down 3 +forward 2 +up 1 +forward 8 +up 8 +forward 7 +up 1 +down 7 +forward 7 +forward 5 +forward 3 +up 4 +down 5 +down 5 +forward 3 +forward 9 +down 9 +up 6 +up 7 +down 7 +forward 7 diff --git a/2021/day02/src/main.rs b/2021/day02/src/main.rs new file mode 100644 index 0000000..5d40028 --- /dev/null +++ b/2021/day02/src/main.rs @@ -0,0 +1,65 @@ +use std::env; +use std::io::stdin; +use std::io::BufRead; + +fn main() { + let args: Vec = env::args().collect(); + + if args.len() > 1 && args[1] == "part1" { + part1(); + } else { + part2(); + } +} + +fn part1() { + let mut horizontal = 0; + let mut depth = 0; + + for line in stdin().lock().lines() { + let line_result = line.unwrap(); + let vec: Vec<&str> = line_result.split(' ').collect(); + + let direction = vec[0]; + let amount: i32 = vec[1].parse().unwrap(); + + match direction { + "forward" => horizontal += amount, + "down" => depth += amount, + "up" => depth -= amount, + _ => (), + } + + dbg!(direction, amount); + } + + dbg!(horizontal, depth, horizontal * depth); +} + +fn part2() { + let mut horizontal = 0; + let mut depth = 0; + let mut aim = 0; + + for line in stdin().lock().lines() { + let line_result = line.unwrap(); + let vec: Vec<&str> = line_result.split(' ').collect(); + + let direction = vec[0]; + let amount: i32 = vec[1].parse().unwrap(); + + match direction { + "forward" => { + horizontal += amount; + depth += aim * amount + } + "down" => aim += amount, + "up" => aim -= amount, + _ => (), + } + + dbg!(direction, amount); + } + + dbg!(horizontal, depth, horizontal * depth); +}