Solve 2021/02

master
Alfred Melch 3 years ago
parent f1cdeded01
commit 7d77a1cfcf

@ -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"

@ -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]

@ -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?_

@ -0,0 +1,6 @@
forward 5
down 5
forward 8
up 3
down 8
forward 2

File diff suppressed because it is too large Load Diff

@ -0,0 +1,65 @@
use std::env;
use std::io::stdin;
use std::io::BufRead;
fn main() {
let args: Vec<String> = 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);
}
Loading…
Cancel
Save