aoc-2021-rust

git clone https://git.sinitax.com/sinitax/aoc-2021-rust
Log | Files | Refs | README | sfeed.txt

commit 2b2025f47c737026b94963e80b37cfb8e9b82e09
parent 70ef20efe6968e4e4ae2dfd81d51bfb5216c1a33
Author: Louis Burda <quent.burda@gmail.com>
Date:   Thu,  2 Dec 2021 23:08:40 +0100

Add day 2 solution

Diffstat:
M.gitignore | 1+
Mdata/helper/config | 1+
Adata/helper/template/Cargo.toml | 7+++++++
Dsrc/01/Cargo.lock | 7-------
Asrc/02/Cargo.toml | 7+++++++
Asrc/02/input | 1000+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/02/part1 | 51+++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/02/part2 | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/02/src/main.rs | 56++++++++++++++++++++++++++++++++++++++++++++++++++++++++
9 files changed, 1175 insertions(+), 7 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -1 +1,2 @@ target +Cargo.lock diff --git a/data/helper/config b/data/helper/config @@ -10,5 +10,6 @@ export SRCDIR="src" export TEMPLATE_DIR="data/helper/template" export TEMPLATE_FILES=" main.rs:main.rs +Config.toml:Config.toml " diff --git a/data/helper/template/Cargo.toml b/data/helper/template/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc" +version = "0.1.0" +edition = "2021" + +[dependencies] + diff --git a/src/01/Cargo.lock b/src/01/Cargo.lock @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "aoc" -version = "0.1.0" diff --git a/src/02/Cargo.toml b/src/02/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc" +version = "0.1.0" +edition = "2021" + +[dependencies] + diff --git a/src/02/input b/src/02/input @@ -0,0 +1,1000 @@ +forward 8 +down 6 +down 8 +forward 7 +down 5 +up 2 +down 3 +down 7 +down 8 +down 8 +down 8 +down 2 +up 1 +down 3 +up 2 +down 4 +down 2 +forward 6 +forward 4 +down 3 +down 2 +forward 2 +forward 1 +forward 4 +forward 5 +forward 8 +down 1 +down 4 +up 5 +up 2 +forward 3 +down 9 +forward 7 +forward 9 +forward 9 +forward 8 +down 1 +down 2 +forward 7 +down 3 +forward 6 +down 4 +forward 7 +down 1 +up 8 +forward 3 +down 1 +forward 7 +up 1 +forward 8 +up 6 +up 2 +down 6 +forward 1 +up 6 +forward 5 +down 9 +up 5 +forward 7 +forward 9 +down 9 +down 3 +forward 7 +forward 8 +forward 3 +forward 9 +forward 7 +down 3 +down 7 +down 4 +forward 2 +down 7 +down 3 +down 5 +up 1 +down 9 +up 4 +forward 1 +up 9 +down 2 +forward 8 +down 8 +down 6 +forward 7 +down 9 +down 3 +forward 8 +forward 3 +down 6 +down 7 +down 4 +forward 3 +down 3 +down 9 +forward 8 +forward 9 +up 5 +forward 1 +down 3 +down 3 +down 3 +down 9 +down 2 +down 9 +forward 5 +up 3 +up 5 +up 7 +down 2 +down 7 +down 9 +down 5 +down 4 +down 8 +forward 1 +up 8 +up 3 +forward 1 +forward 5 +forward 3 +up 7 +down 9 +down 9 +forward 7 +down 1 +forward 1 +forward 8 +forward 6 +down 1 +down 7 +forward 9 +up 4 +forward 8 +up 6 +forward 3 +down 3 +down 9 +forward 5 +up 3 +down 7 +forward 9 +forward 2 +up 1 +forward 7 +up 8 +forward 7 +forward 1 +up 3 +up 7 +down 1 +forward 5 +up 8 +down 2 +up 2 +up 3 +down 5 +forward 6 +up 8 +down 7 +up 8 +up 4 +down 8 +forward 9 +down 8 +down 2 +up 7 +down 5 +forward 1 +up 1 +down 1 +forward 1 +forward 1 +forward 3 +forward 8 +down 4 +down 5 +forward 9 +up 6 +up 7 +down 8 +forward 8 +down 2 +forward 6 +down 3 +forward 9 +forward 5 +up 7 +down 2 +up 6 +up 6 +down 9 +forward 3 +up 1 +up 2 +forward 9 +down 1 +up 3 +forward 4 +forward 9 +down 3 +down 4 +forward 4 +up 6 +up 5 +forward 2 +down 5 +down 1 +forward 9 +down 7 +up 6 +up 5 +forward 4 +forward 9 +down 6 +forward 1 +up 6 +down 1 +forward 4 +up 9 +down 6 +forward 5 +down 2 +forward 8 +forward 9 +down 7 +down 4 +down 1 +forward 1 +down 4 +down 6 +forward 5 +forward 2 +forward 8 +forward 5 +down 6 +up 9 +forward 2 +down 1 +forward 6 +forward 6 +down 5 +forward 5 +down 8 +forward 3 +down 5 +up 1 +forward 4 +down 5 +down 4 +forward 4 +down 3 +down 5 +down 7 +forward 5 +forward 2 +up 2 +up 4 +forward 7 +down 3 +down 1 +down 7 +up 8 +forward 6 +forward 3 +forward 7 +forward 5 +up 5 +down 3 +down 6 +forward 7 +up 9 +up 5 +forward 2 +down 9 +forward 8 +forward 6 +forward 5 +up 5 +down 9 +down 8 +up 2 +up 4 +forward 5 +forward 2 +up 4 +forward 3 +down 7 +forward 8 +forward 1 +forward 9 +forward 6 +up 7 +up 2 +forward 1 +down 5 +forward 9 +down 8 +down 4 +down 7 +up 2 +down 5 +forward 7 +up 3 +forward 6 +down 2 +forward 8 +forward 8 +up 3 +forward 6 +forward 9 +forward 8 +forward 3 +up 9 +forward 9 +down 6 +forward 5 +forward 8 +up 1 +forward 2 +forward 6 +forward 8 +up 6 +down 3 +down 9 +down 6 +up 7 +forward 6 +forward 1 +forward 1 +forward 7 +down 5 +down 9 +down 3 +up 3 +forward 3 +forward 2 +down 5 +up 4 +forward 1 +down 9 +forward 9 +forward 1 +forward 1 +down 9 +down 2 +forward 4 +forward 9 +down 5 +up 5 +down 6 +forward 8 +down 4 +down 1 +up 5 +up 3 +down 2 +down 3 +forward 8 +forward 5 +forward 9 +down 4 +up 9 +down 1 +forward 2 +down 8 +up 2 +down 8 +up 6 +forward 7 +down 1 +up 7 +down 9 +forward 9 +down 9 +forward 7 +forward 4 +down 5 +up 3 +down 3 +forward 8 +down 3 +down 4 +down 9 +forward 4 +up 4 +forward 6 +down 1 +forward 5 +down 2 +forward 6 +down 4 +down 1 +forward 3 +up 3 +up 3 +forward 8 +forward 6 +forward 6 +down 9 +forward 5 +down 9 +forward 6 +forward 3 +up 4 +forward 6 +down 8 +up 3 +down 9 +down 3 +forward 6 +down 4 +down 8 +down 6 +down 5 +forward 1 +down 3 +forward 9 +down 9 +down 3 +forward 9 +down 2 +forward 3 +up 6 +forward 2 +forward 1 +forward 8 +down 2 +down 2 +down 7 +up 7 +forward 3 +up 2 +up 6 +up 6 +down 2 +forward 2 +forward 2 +down 6 +down 2 +up 6 +forward 4 +down 9 +up 3 +down 4 +forward 7 +up 6 +forward 3 +forward 1 +down 1 +down 8 +down 8 +down 1 +forward 2 +down 6 +down 6 +forward 2 +up 6 +down 2 +up 4 +down 1 +up 8 +up 5 +down 4 +forward 2 +forward 2 +down 2 +forward 9 +down 5 +down 9 +forward 6 +down 9 +down 5 +down 7 +down 3 +up 9 +down 6 +up 6 +up 8 +forward 8 +forward 8 +down 3 +up 9 +forward 9 +forward 8 +forward 6 +down 4 +down 6 +up 9 +down 9 +down 5 +up 2 +up 2 +forward 2 +forward 1 +down 5 +down 8 +up 3 +forward 2 +down 1 +down 9 +forward 7 +forward 5 +up 3 +up 6 +down 5 +up 1 +down 2 +up 7 +forward 1 +down 6 +up 6 +up 1 +up 2 +forward 2 +down 4 +up 1 +up 3 +up 9 +up 7 +forward 4 +down 5 +down 9 +down 8 +forward 1 +down 4 +forward 4 +forward 8 +up 4 +down 8 +down 1 +down 9 +down 5 +forward 3 +forward 8 +up 2 +down 6 +up 6 +forward 5 +down 6 +down 8 +forward 6 +down 6 +up 5 +down 2 +up 5 +down 7 +down 9 +forward 3 +down 8 +forward 1 +forward 5 +forward 2 +down 4 +forward 2 +forward 7 +up 7 +up 3 +down 2 +forward 7 +up 6 +forward 6 +forward 1 +down 4 +down 2 +down 6 +down 1 +forward 1 +forward 8 +down 1 +up 2 +down 2 +down 1 +down 6 +forward 7 +forward 6 +forward 5 +down 1 +down 8 +down 1 +up 5 +forward 6 +forward 5 +up 5 +forward 5 +up 8 +down 3 +forward 1 +forward 6 +up 8 +up 9 +down 7 +down 1 +forward 2 +forward 1 +forward 9 +forward 3 +forward 7 +forward 8 +down 6 +up 5 +down 1 +forward 1 +forward 8 +down 6 +forward 7 +forward 8 +down 7 +down 5 +down 7 +up 7 +down 5 +forward 5 +down 4 +down 7 +forward 6 +forward 5 +forward 6 +forward 7 +up 9 +down 2 +down 2 +down 4 +down 8 +up 3 +down 7 +down 5 +forward 6 +down 9 +down 5 +down 9 +down 1 +forward 6 +up 7 +down 2 +down 2 +forward 8 +forward 1 +down 3 +down 4 +forward 3 +forward 4 +down 1 +forward 9 +up 7 +forward 8 +down 9 +forward 7 +forward 6 +forward 2 +down 8 +up 9 +down 2 +forward 8 +up 7 +down 5 +down 9 +down 3 +down 6 +down 4 +up 2 +down 3 +down 1 +up 1 +up 6 +forward 4 +down 1 +forward 1 +up 4 +forward 4 +forward 3 +forward 8 +forward 9 +forward 9 +down 2 +down 5 +up 8 +up 1 +down 9 +forward 5 +down 1 +up 5 +down 4 +up 3 +forward 9 +up 7 +forward 9 +up 1 +forward 4 +forward 8 +up 6 +down 6 +down 8 +down 8 +down 9 +down 2 +up 7 +forward 9 +up 8 +down 9 +up 6 +forward 4 +up 7 +down 6 +up 7 +down 4 +forward 2 +forward 9 +down 6 +down 8 +forward 6 +forward 3 +down 3 +forward 3 +forward 7 +up 2 +down 8 +forward 7 +down 5 +down 1 +down 6 +down 5 +down 2 +up 6 +forward 7 +forward 6 +down 1 +down 5 +forward 7 +forward 3 +down 9 +down 8 +forward 5 +up 7 +forward 1 +up 5 +down 7 +forward 8 +forward 6 +forward 2 +down 1 +down 9 +up 1 +down 2 +down 2 +down 7 +down 4 +forward 1 +down 3 +down 5 +up 8 +forward 7 +up 5 +down 8 +down 6 +down 3 +down 3 +down 9 +down 7 +forward 4 +up 5 +forward 3 +forward 7 +down 3 +up 6 +forward 4 +forward 4 +down 4 +down 2 +up 1 +forward 8 +forward 3 +up 1 +forward 1 +down 9 +down 6 +up 1 +down 4 +down 8 +up 9 +forward 2 +down 3 +forward 8 +down 6 +down 5 +down 4 +up 5 +down 9 +up 3 +forward 4 +down 9 +down 7 +forward 6 +forward 6 +forward 8 +forward 6 +down 9 +down 1 +forward 3 +forward 9 +forward 4 +up 8 +up 5 +up 2 +down 9 +forward 9 +forward 3 +forward 5 +up 8 +down 2 +down 1 +forward 9 +forward 7 +down 7 +forward 1 +down 5 +down 8 +down 4 +down 7 +down 1 +down 4 +down 7 +forward 2 +down 5 +forward 1 +down 4 +down 5 +down 2 +up 5 +forward 9 +down 5 +forward 1 +down 7 +down 4 +down 7 +down 6 +forward 5 +down 3 +down 1 +up 2 +forward 2 +forward 2 +forward 1 +down 1 +forward 3 +forward 5 +forward 4 +down 7 +forward 7 +down 1 +forward 7 +forward 5 +down 8 +forward 6 +forward 6 +forward 6 +forward 7 +up 9 +down 4 +down 1 +down 8 +forward 7 +up 4 +forward 4 +down 6 +up 1 +forward 5 +forward 2 +down 1 +forward 7 +forward 6 +forward 5 +forward 2 +down 5 +down 6 +down 9 +up 4 +forward 6 +forward 2 +down 5 +down 3 +up 4 +down 6 +up 8 +forward 8 +up 9 +forward 6 +forward 6 +up 5 +down 7 +forward 9 +forward 6 +down 9 +down 9 +up 1 +forward 7 +down 6 +up 4 +down 8 +down 3 +forward 9 +forward 5 +forward 9 +down 2 +forward 3 +down 1 +forward 9 +up 4 +up 8 +forward 6 +down 1 +forward 9 +forward 4 +down 5 +forward 2 +up 3 +forward 5 +up 8 +up 7 +down 8 +forward 4 +down 6 +forward 7 +up 2 +down 2 +forward 4 +down 9 +down 8 +forward 2 +forward 2 +down 2 +down 3 +forward 3 +down 1 +forward 8 +down 7 +up 9 +down 4 +down 2 +down 5 +up 7 +down 8 +down 2 +down 4 +down 4 +down 8 +forward 7 +forward 7 +down 8 +up 2 +up 3 +forward 8 +up 1 +down 7 +forward 7 +down 6 +down 8 +up 6 +forward 5 +forward 3 +down 6 +forward 9 +up 4 +up 7 +forward 4 +down 1 +down 8 +down 1 +forward 9 +down 3 +forward 8 +forward 6 +forward 4 +down 9 +forward 3 +up 5 +up 8 +down 9 +down 5 +down 1 +up 8 +forward 8 +up 6 +forward 2 +down 8 +up 4 +up 7 +forward 7 +forward 5 +forward 9 +forward 2 +up 4 +down 9 +forward 7 +down 6 +down 6 +forward 7 +down 5 +up 6 +down 9 +forward 3 diff --git a/src/02/part1 b/src/02/part1 @@ -0,0 +1,51 @@ +--- 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? + + diff --git a/src/02/part2 b/src/02/part2 @@ -0,0 +1,52 @@ +--- 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/02/src/main.rs b/src/02/src/main.rs @@ -0,0 +1,56 @@ +use std::fs; +use std::env; + +fn main() { + let args: Vec<String> = env::args().collect(); + if args[1] == "1" { + part1(); + } else if args[1] == "2" { + part2(); + } else { + eprintln!("No such part\n"); + } +} + +fn part1() { + let content : String = fs::read_to_string("input").expect("no file"); + let lines : Vec<&str> = content.lines().collect(); + + let mut dist : u32 = 0; + let mut depth : u32 = 0; + for l in lines { + let vals : Vec<&str> = l.split(" ").collect(); + let val : u32 = vals[1].parse().expect("weird value"); + if vals[0] == "forward" { + dist += val; + } else if vals[0] == "down" { + depth += val; + } else if vals[0] == "up" { + depth -= val; + } + } + println!("{}", depth * dist); +} + +fn part2() { + let content : String = fs::read_to_string("input").expect("no file"); + let lines : Vec<&str> = content.lines().collect(); + + let mut dist : u32 = 0; + let mut aim : u32 = 0; + let mut depth : u32 = 0; + for l in lines { + let vals : Vec<&str> = l.split(" ").collect(); + let val : u32 = vals[1].parse().expect("weird value"); + if vals[0] == "forward" { + dist += val; + depth += aim * val; + } else if vals[0] == "down" { + aim += val; + } else if vals[0] == "up" { + aim -= val; + } + } + println!("{}", depth * dist); +} +