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:
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 [1m[37mincreases[0m the depth by X units.
+
+ - up X [1m[37mdecreases[0m the depth by X units.
+
+
+Note that since you're on a submarine, down and up affect your [1m[37mdepth[0m, 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 [1m[37m150[0m.)
+
+Calculate the horizontal position and depth you would have after following the planned course.
+[1m[37mWhat do you get if you multiply your final horizontal position by your final depth?[0m
+
+
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,
+[1m[37maim[0m, which also starts at 0. The commands also mean something entirely different than
+you first thought:
+
+
+ - down X [1m[37mincreases[0m your aim by X units.
+
+ - up X [1m[37mdecreases[0m 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 [1m[37mmultiplied by[0m 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 [1m[37m900[0m.)
+
+Using this new interpretation of the commands, calculate the horizontal position and depth you would
+have after following the planned course. [1m[37mWhat do you get if you multiply your final
+horizontal position by your final depth?[0m
+
+
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);
+}
+