diff --git a/2022/day02/Cargo.lock b/2022/day02/Cargo.lock new file mode 100644 index 0000000..52d399b --- /dev/null +++ b/2022/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/2022/day02/Cargo.toml b/2022/day02/Cargo.toml new file mode 100644 index 0000000..843335d --- /dev/null +++ b/2022/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/2022/day02/input.txt b/2022/day02/input.txt new file mode 100644 index 0000000..1485a1d --- /dev/null +++ b/2022/day02/input.txt @@ -0,0 +1,2500 @@ +A X +C X +C X +C X +B Y +C X +C X +A Z +C X +A Z +A Z +C X +C X +C X +B X +C Y +C X +C Y +C X +A Z +C X +C X +C X +C Y +C Y +C Y +A Z +C X +A Y +B Z +B Y +C X +C X +A X +C X +C Z +C Y +C Y +C Y +C Y +B X +C Y +A Z +C Y +B X +A X +A X +C X +C Y +B X +C Y +C X +C X +C Y +A X +C Y +A Z +A Z +C Y +C X +A Y +C Y +A X +C X +C Z +A X +A X +C Y +C Y +C X +C Y +B X +C X +C Y +C Z +A X +C X +C Y +C X +C X +C X +C X +C Y +B Z +C X +A Y +B X +C X +C Y +C Y +C X +C Y +C X +C Y +B X +A X +B X +C Y +A X +C X +A X +C X +C X +C Y +C X +C X +C X +C Y +C X +C X +C X +C Y +A X +C X +A Z +B X +A Z +C X +C X +A Z +C X +A Z +A X +C Y +B X +C Y +B Y +A Z +C Y +A X +C X +A X +C Z +C Y +C X +A X +C Y +C Y +A Y +A X +C Z +C X +B Z +A X +C X +C X +A Y +A Y +A X +C Y +B X +C Y +C Y +C X +C Y +C Y +C X +C X +C X +C Y +C Y +C Y +C Z +A X +C X +C X +C X +C Z +C X +B X +C X +C X +C X +B Y +B X +C X +C Y +C Y +C Z +C Y +C X +C Y +C Y +C X +C X +A X +C Y +C X +C Y +C Y +B Y +C Y +C Y +B X +B X +B X +C Z +C X +A X +C X +A X +C Y +C Z +B X +B X +C X +B X +C Y +C X +A Z +C Y +A X +B Y +C X +C Y +A X +C X +C Y +C Y +C Y +C Y +C Y +A Z +A Z +C X +C X +C Y +C X +C Z +A X +C Y +C Y +B X +C Y +C X +C X +C X +B X +B X +C X +C Y +A Y +C Y +C Y +C Y +B X +B X +C X +C X +A Y +C X +C X +C Y +B X +C X +C X +C X +A X +B Y +C Z +C Z +B X +C X +C X +C X +C Y +C Y +C Y +C Y +A Y +B X +C X +C Z +C X +C Y +C X +C Y +C Y +C Y +C X +C X +A X +A X +C Y +A X +A X +C X +C Y +B Z +C Z +C X +C X +C X +C Y +B X +C Y +C Y +C Y +C X +C Y +C Y +C X +C X +C X +C Z +C X +C Y +C Y +C Z +A X +C X +B X +C Z +C Y +B X +C Y +C Z +B Z +A X +C X +B X +A Y +C Y +C X +C Y +C Y +C Y +C Y +C X +C Y +A Y +C Y +C Y +C Y +C Z +C X +C Y +B Z +C Y +C X +C X +A X +C X +C Y +C X +B Y +C Y +C Z +C Z +A X +C X +A X +C Y +B X +C Y +C Y +C X +C Y +C X +A Y +C Y +C Y +B X +C X +C Y +C X +C Z +C Y +C Y +C Y +B Y +A X +C Y +C Z +C X +C Z +A Z +C X +C Y +C X +A X +C X +A Y +B Y +A X +A X +A X +C Z +C Z +C X +C Y +B X +A X +A X +C Y +C X +C Z +A Z +B Y +B Z +B Y +A X +B Y +C X +C X +C Z +C X +C X +C Y +B X +C X +C Z +B X +C Y +C X +C X +A X +C X +B Y +C Y +B Z +C Y +B Y +C Y +B Y +C Y +B X +C X +C Z +C X +C Y +C Y +C X +A X +C Y +C X +C X +C Z +C X +C Y +C X +C Y +B Y +C Y +C X +C Y +C X +C X +C X +C X +B X +C Z +C X +C X +B X +B X +A X +A Z +C X +C Y +C X +C X +C X +C Y +C Y +C X +C X +C X +A X +C X +C X +C X +C X +A Y +C Y +C X +A Z +C X +C Y +C Y +C X +A X +C X +C X +C Y +C X +C X +C Y +C Y +B Y +C Y +C X +A Y +C X +C X +C Y +B Y +C X +C Y +A X +B X +C X +B Y +C Y +C Z +C Z +A X +C X +C X +C Y +B X +C Y +C Y +C Y +A Z +C X +C Y +C X +A Z +C Y +B Y +A X +C Y +B X +C Y +B Y +C X +C X +C X +C Y +C X +B X +C X +C X +A X +C Y +A X +C X +A Z +C Y +C X +C Y +C X +C Y +B Y +C Z +C Y +C Z +A X +C X +C X +C Z +C Y +C X +B Y +A X +C Y +A X +B Y +A X +A X +B Y +C X +C X +C X +C Y +C X +B X +C Y +C Y +C X +B X +B Y +B Y +C Y +B Y +A Z +B Z +A Y +C X +C X +C X +B X +C X +C X +C X +C Y +A X +C Y +C Y +C Z +B X +B Y +C X +C Y +A X +C Z +C Y +C Z +C Y +A Z +C Z +C Y +B Y +C Y +B X +C X +C Y +C Y +A Z +A Y +C Y +C Y +A Y +C Y +C X +C Y +C X +C Y +C Y +B Y +C X +B X +C Y +A Y +C Y +A X +C X +C Y +C Y +B X +A X +B Y +C Y +B Z +A X +C X +B Y +C Y +C X +C Y +C X +C Y +C Y +C Y +B X +C Y +C X +C Z +C Z +C Y +C Y +A Y +A Y +C Y +C X +C Z +B Y +C Y +C X +A X +B X +C X +C X +A Y +C Y +C Y +B Y +C X +B Y +C X +B X +C Y +C Z +B X +A X +A Y +A Z +C Z +A X +A X +C Y +C Y +C Y +A Z +C Y +A X +C X +A Y +C Y +A X +C X +C X +C Y +A X +C Y +C Y +A Z +C X +C Y +C X +B Y +C Z +B X +C Y +A X +C Y +A X +B X +A X +C X +C X +C X +A Y +A X +A Z +A Z +A Z +C X +C X +C X +C X +C Y +A X +C Y +C X +B Y +A Z +B Y +C Y +C Y +C Z +C X +A X +C Y +B Y +C X +C X +A X +A X +C Y +C X +C Z +C X +A X +C X +C X +B X +C Y +B X +C Z +C X +A X +A X +A Z +A X +A Z +C Y +B Y +B Z +A X +A X +C Y +C Z +C Y +C X +B Y +A X +A X +C X +B Y +B Y +C Y +C Y +B X +C X +C Y +C Z +A X +C Y +C Y +C X +C X +C Y +A Z +C X +C X +C Y +A Y +C Y +C Z +A Y +C X +C Y +B X +B X +C Y +C X +C Y +B Y +B Y +C Y +C Y +A Z +A X +C X +C X +C Z +C Z +C X +C Z +C Y +A Y +A X +C X +A X +C Y +B Y +A X +C Z +A Y +C Y +C Y +C Y +C X +C X +C X +C X +C Y +C X +C X +C Y +C Y +C X +B X +B X +C Y +C Y +C X +B X +A X +C X +C Z +A X +C X +C X +C Y +A Z +B Y +C X +C X +B X +C X +A X +C Z +C Y +A X +C Z +C Y +A X +C X +C Y +B X +C X +B X +C X +C X +C Y +B Z +A X +C X +A X +C Y +C Y +A X +A X +A Z +C X +C X +C Y +C X +B Y +C Y +C Y +A X +C X +C X +C X +C Y +A Y +C Y +C X +A Z +B Z +C X +C X +C Y +C X +B Y +C X +A X +C Y +C Y +A Z +C Y +B Z +C X +A X +C X +C Z +C X +C X +C Y +C Y +A X +C X +C Z +C Y +C X +C Y +C X +C Z +C X +C Y +C X +C X +C X +A Z +C Y +C X +C Y +B Z +B X +C X +A X +C Y +C Y +C X +C Y +C Z +A Y +C Y +B X +A X +A X +B X +A Y +C Y +B X +C Y +C Y +C X +C Y +B X +C Y +C X +C X +C X +C X +C Y +C Z +C X +C Y +C Z +B X +C Y +C Y +C X +C X +A X +C Y +C Y +B Y +B Y +B X +A X +C X +C Y +A X +C Y +C Y +C Y +A X +B X +C Z +A Z +C Y +C Y +C Z +C Y +C X +C Z +C X +A X +C X +B Y +A Y +C X +C Z +A X +A X +C Y +C X +C X +C Y +A Y +C Y +C X +A X +C X +C Y +C Z +C Z +C X +B Z +A X +C Y +C Z +C X +C Y +C Y +C X +C Y +C X +A Y +B X +A X +A X +C X +C X +C Y +C Y +C Y +B X +C Y +C Y +C Y +C Z +A Z +B Y +C X +C X +B X +B Y +C X +C Y +A Z +C Y +C X +C Y +C Y +A X +C X +C Y +A Y +C Y +C X +C X +A Z +C Y +C X +B X +A Y +C Y +C X +C X +C X +B X +A X +C X +C X +C X +C X +B Y +A X +C Y +C Z +C X +C X +C X +C Y +C X +C Y +B X +C X +C X +C X +C X +C Y +C Y +C X +A X +C X +A Z +C X +B Y +A Z +C Y +C Y +C Z +C Y +B Z +A Z +A X +A Z +C X +A X +C Z +C Z +C Y +C X +C Y +C Y +C Y +C X +C X +C X +C X +A Y +C Y +C X +C X +C Z +C Y +C Y +B Y +A X +C X +C Y +C X +C Y +B Y +C X +C X +B Y +A X +B X +C Y +C X +C X +C X +C X +C Y +C X +C Y +C Y +A Z +B X +C X +C X +C X +B X +C Y +C X +C Z +B X +C Y +C Y +C Y +C X +B X +C X +C Y +B Y +C X +C X +B Y +A X +C X +C X +A Z +C Z +A X +A Z +C Y +C Y +A Y +A X +C X +C X +C Z +C X +C Y +C Y +C Z +C X +C X +A Y +C Y +A Y +B X +C Y +C Y +C X +C X +C Y +A Y +C X +B Y +C X +C Y +C X +C X +A Z +C Y +B Z +C Y +B X +C Y +C Y +A X +C Y +C X +C X +C Y +C X +C Y +C X +C Z +C X +B X +C Y +A X +B X +C Y +B X +C Y +A Z +C Y +C Y +C Y +C Y +B X +C X +C X +C X +C Y +C Y +C Y +C Y +C X +B Y +C Y +C X +B Y +B X +C X +B X +C Z +C Z +C X +C Y +B X +A X +C Y +A X +C X +C X +C X +C X +C X +A Z +C Y +A Z +B X +C Y +C Z +B X +A Y +C X +C X +A Y +C Y +C Y +A Z +A Z +C Y +A X +C Z +C X +A Z +C X +C Z +A Z +C X +C X +C X +C Y +C Y +C Y +C Z +C Y +C Y +C Z +C X +C X +A Y +B Y +B X +C X +B X +C Z +B X +C Y +C Y +C Y +C X +B X +A Y +B Y +B Y +C X +C X +C Y +C Y +C Y +C Z +C X +C X +A X +B Y +C Y +C Y +C X +C X +C Y +C Z +C Z +C Y +C X +B X +A X +C X +C Z +C X +B X +A X +C X +C Y +A Z +C X +C Y +C Y +A X +C Z +C X +A X +C X +B X +C Y +C Y +C Y +C Y +A X +C Y +C Z +B X +C Z +C Y +B Y +B Y +A X +C Y +C X +C Z +C Y +C X +C X +C Y +C Y +A Y +C X +C Y +C X +C X +C Y +C Y +C X +B X +A Y +C Y +C X +C Y +C Z +C Y +C X +C X +C X +A X +C Y +A X +A X +C X +B Y +B X +B Z +C Y +C Y +C Z +B X +C Y +C Y +C X +C X +A X +C X +B X +C X +A X +B X +A X +C X +A X +C Y +A X +C Y +C Y +C Y +B X +B Y +C X +B X +C Y +C X +C Y +C Z +C X +B X +C X +C Y +C X +C Y +C X +A Y +C Y +A Z +A X +C Y +C Y +C Y +C Y +B Y +C X +C Y +C Y +C Y +C X +B X +C Y +A Z +A Y +B Y +C X +B Y +C X +B X +C X +C X +B Z +B Y +A X +A X +C Y +C X +C Y +A X +A X +C X +C Y +C X +C X +C Z +C X +C X +B X +A Y +C Y +A X +A X +B Z +C Y +B Y +A X +C X +C X +C X +A Z +C Y +B X +C X +C Y +C X +C Y +C X +B X +A Y +A X +C X +C Y +B X +C Z +C X +C X +C Y +C X +C Y +A Y +C Y +C Y +A X +C X +C Y +C Y +C Y +C Y +A Z +C Y +A X +C Y +C Y +B X +A Y +C Y +C Y +C Y +C X +C X +A X +A X +C X +A Y +B X +C X +C Y +C Y +C Y +C X +C Y +B X +A Z +C Y +C Z +A X +C X +C Y +C X +C Y +C Y +C Y +B X +C Y +C Y +C X +C Y +C Y +C Y +A Y +A Z +A Z +C Z +C Y +C X +B X +C X +A X +B X +A X +A X +A X +B X +B Y +B X +C Z +B Y +C Y +B Y +C X +C Z +B X +A X +C X +B X +B X +C X +A X +C Y +C X +C Y +C X +A X +C X +C X +B X +C Y +B X +A X +A X +A Z +B Y +A X +C Y +C Z +C X +C Y +B Y +A X +B X +A X +C Y +C X +B X +C Y +A Z +C Y +C Y +C X +A Z +A Y +C Y +C X +A X +C X +A X +C X +C Y +C X +C X +C X +C Y +C X +B X +C X +C X +C X +C Y +A Z +C Y +C X +C X +C Y +B X +C X +C X +C Y +C X +C X +C X +A X +B X +C X +C Z +C Y +C Z +C Y +C Y +C X +C X +A Z +A X +C X +A X +C Y +C Y +B X +C Y +C X +C X +A X +C Z +A Y +A Y +C Y +C X +C X +C X +C Y +B Y +C Y +C Y +C X +C X +A Y +B X +C Y +A Y +A X +B X +C Y +A X +C X +A X +C X +C X +C X +C X +A Y +C Y +C Y +A Z +C X +C X +A X +C Y +C Y +C Y +B X +C Z +C Z +A X +A X +A X +C X +C Y +C Y +C X +C X +C Z +A X +A Z +C Z +B X +C X +C Y +C Y +C Y +C Y +C X +B Y +C Y +C X +C Y +C Y +A X +C Y +C X +A X +C X +C X +C X +C Y +C Y +C Y +A X +C X +A X +A Z +B Y +A X +C Z +C X +B X +C X +A Y +A Z +B Y +A X +C X +B Y +B X +C X +B X +A X +B Y +A X +C Y +C X +C X +C Z +A X +C Y +A Z +C Y +A Y +C Y +C Y +C Y +C Z +C Y +C X +C X +C X +C X +A Y +C Y +C Y +C X +A Z +C X +B X +C Y +C X +C Y +A Z +C Y +C Z +C Z +A Z +C Y +A X +A X +C X +C X +C Y +A Z +C Y +B X +C Z +C Y +A Z +C X +B Z +B X +C Z +A X +B Y +C Y +C Y +C Y +B X +C Y +B Y +A X +A Z +B Y +B Z +A Y +C X +C Y +C Y +A Y +B X +C Z +C X +C X +A Z +C X +C Y +C Y +C Y +B X +C X +B Z +A X +C Y +C X +C Z +B X +B Z +C Y +C Z +C Y +A X +C X +C X +A X +B X +C Y +C Y +C Y +C X +C Z +A Y +C X +C Y +C X +B Y +C Y +A Y +C X +A Z +C X +C X +C X +C X +A X +A X +A Y +C Y +C Y +C X +C X +C X +C X +C Y +B X +B X +B X +A X +C X +C Y +C X +B X +A X +C Y +B Y +C X +C X +C X +C X +C X +C X +C X +C X +C X +C Y +C Y +C X +C X +C Y +C Y +B Y +C Z +C Y +A X +B X +A X +C Z +C Y +C X +B X +A Y +C Y +C X +A X +B X +C X +C Y +C Y +C Y +A Z +A Z +C X +C X +B Z +C Y +C Y +C Y +C Y +C X +C X +B Z +C X +C X +A Y +A X +B Y +C Y +C Y +A X +A X +A Z +A Z +C X +B X +C Z +B Y +C Y +C Y +C Y +C Y +C Y +A X +B X +C Y +B X +C Y +C Z +C Z +B X +C X +B X +C Y +C X +A Z +B X +C Z +C X +C Y +C X +C X +C Y +C Y +A Y +A Z +A X +B Y +C Z +B X +B Y +C X +A Y +C X +C Y +C X +C X +C Y +C Y +C Y +A X +C Y +B X +C Y +C Y +C Z +B X +C X +C Y +C Z +A X +C Y +C Z +C Y +C X +C Z +C X +C X +C X +C Y +C Y +C X +C X +A X +A Z +C Y +C Y +A Y +C X +A X +C Y +A Z +B Z +C Y +A X +C Y +C X +B Y +B Y +A Z +A X +C X +C Y +C Z +C X +A Z +C Y +C Y +B Y +B X +C Y +C Z +C Y +A Z +C Y +C Y +A X +C Y +C Y +C X +C X +B X +C Y +C Y +B Y +C X +C X +C Y +C X +C X +C Y +B X +C Y +C Z +C X +A X +C X +C X +C Z +B Z +C Y +A Y +C Y +C Y +C X +A X +C X +B X +C X +C X +C Y +C X +B Y +B X +C X +C Y +C Y +C X +C Y +C X +C Y +C X +C Y +C X +C Z +A X +A X +C Y +C X +C X +A Y +C Y +C X +B X +C X +C X +C X +C Y +A Y +B Z +C Y +C Z +C X +A X +C X +C Z +C Y +C Y +C Y +C X +C X +C Z +C Y +B Z +C X +C Y +C X +C X +C Y +C Y +C Z +C X +C Z +C Z +C Y +A X +C Y +A Y +B X +C Z +C Y +C Y +C Z +C Y +C Y +C X +C Y +B X +C Y +C X +C X +B Y +A X +C Y +C X +C Z +C X +C Y +C Z +A X +C X +A Y +B X +C X +C X +A Z +C X +C Y +B Y +C X +C Y +C Y +C X +B X +A Y +C Y +C Z +C Y +C X +C X +C X +B X +B Y +C X +A X +C X +A X +C X +B Y +B X +C X +C Z +C Y +C X +B X +C Y +C Y +C X +A Z +C Y +C X +C Y +C Y +C Y +C Y +B Y +C Y +C X +A X +C Y +C Y +C X +B Y +B Z +C Y +C Z +B X +C X +A X +B Y +C X +C Y +C Y +C Y +A X +C Z +A X +C Y +C Y +C Y +C X +C X +C Y +A Z +C Y +C Z +C Y +C Y +C Y +C Y +C X +C Y +B Y +C Y +C Y +B X +B X +C Y +C Y +B Z +C X +B Y +C X +A X +A X +C X +C X +B X +C X +B Z +C Y +C Y +B Y +C Y +C X +C X +A Z +C X +A X +C Y +C X +C X +B X +C Y +A Z +C Y +C Y +B X +A Y +A X +A X +C Y +C Y +A Z +C X +B X +C X +B X +A Z +C X +C X +B Z +C X +C X +C X +C Y +A Z +C Y +C Z +C Y +B Y +A X +C X +C Y +A X +A Y +C X +C Y +C Y +C X +A Y +C Y +C X +C X +C X +C Y +C X +A Y +C X +B Y +B X +C X +C Y +B X +C X +C X +C X +C X +C Y +B Z +C Y +C Z +C X +A X +C Y +B Y +C Y +C X +C Y +C Z +B X +C X +C Y +C X +C X +C X +C X +A Z +C Y +B X +C X +C Y +C Y +C Y +C Y +C X +A X +C X +B X +C Y +A X +B Y +A X +C Z +A X +C Y +C X +C Y +C X +A X +C Y +C X +C Y +C Y +B X +C Z +A Y +C X +C X +C Y +C X +C Y +C Z +C Y +C X +C Y +A X +B X +B Y +C Y +C X +C Y +C X +B Y +B X +C X +C Z +B X +C Y +C X +C Y +A X +C Y +C Y +C X +C Y +C Y +C Y +A Y +C Z +C Y +B Y +C Y +C Z +C Z +C X +C Y +A X +C Y +C X +B Y +C X +C Z +C Z +C Y +C X +C X +C X +A X +C Y +C Y +C X +A X +A X +A X +B X +A Y +A X +C X +C X +A X +B Y +C Y +C X +A Z +A X +C Y +B Y +C X +C X +A Y +C X +C X +C Z +C Y +C Z +C Y +C X +B X +B X +B Y +C X +C Y +A X +A Y +A X +C X +B Y +A X +A X +B Y +C X +C X +B X +C X +A Z +C X +B X +A X +C Y +C X +B X +A Y +A X +C Y +C X +C X +B X +C Z +A X +B X +C X diff --git a/2022/day02/src/main.rs b/2022/day02/src/main.rs new file mode 100644 index 0000000..b1204f2 --- /dev/null +++ b/2022/day02/src/main.rs @@ -0,0 +1,58 @@ +use std::io; +use std::io::prelude::*; +use std::fs::File; + +fn read_lines(filename: &str) -> io::Result>> { + let file = File::open(filename)?; + Ok(io::BufReader::new(file).lines()) +} + +fn print_step(step: i8, value: u64) { + println!("Step {} solution: {}", step, value); +} + +fn main() -> Result<(), io::Error> { + let mut score1: u64 = 0; + let mut score2: u64 = 0; + + for line in read_lines("input.txt")? { + let text = line?; + let opp = parse_move(text.chars().nth(0).unwrap()); + + score1 += step1(opp, text.chars().nth(2).unwrap()); + score2 += step2(opp, text.chars().nth(2).unwrap()); + } + + print_step(1, score1); + print_step(2, score2); + Ok(()) +} + +fn step1(opp: i8, text: char) -> u64 { + let me = parse_move(text); + return match me - opp { + 1 | -2 => me + 6, + 0 => me + 3, + -1 | 2 => me, + _ => panic!("Received impossible result in a match."), + } as u64; +} + +fn step2(opp: i8, text: char) -> u64 { + return match text { + 'X' => ((opp + 4) % 3) + 1, + 'Y' => opp + 3, + 'Z' => (opp % 3) + 7, + _ => panic!("Received impossible strategy code."), + } as u64; +} + +// Parses the second command in the input incorrectly. +fn parse_move(x: char) -> i8 { + return match x { + 'A' | 'X' => 1, + 'B' | 'Y' => 2, + 'C' | 'Z' => 3, + _ => 0, + }; +}