From cc843cba6b6195cb4bba8a9937c8654ff74b60d9 Mon Sep 17 00:00:00 2001 From: Andrew Coleman Date: Fri, 2 Dec 2022 08:56:29 -0500 Subject: [PATCH] day 2 solution --- 2022/day2.txt | 2500 +++++++++++++++++++++++++++++++++++++++++ 2022/src/days/day2.rs | 101 ++ 2022/src/days/mod.rs | 1 + 2022/src/main.rs | 3 + 2022/tests/day2.txt | 3 + 5 files changed, 2608 insertions(+) create mode 100644 2022/day2.txt create mode 100644 2022/src/days/day2.rs create mode 100644 2022/tests/day2.txt diff --git a/2022/day2.txt b/2022/day2.txt new file mode 100644 index 0000000..4e8e187 --- /dev/null +++ b/2022/day2.txt @@ -0,0 +1,2500 @@ +A Z +B X +A Y +B X +C Y +C X +B Z +C Z +A Y +C Z +B Z +B X +B X +C X +C X +B X +B Z +C X +B Y +B Z +B X +C Z +A Z +B X +A Y +B Y +C Y +B X +B Y +B Z +B Y +B Z +A Y +C Y +B X +A Z +B X +C Y +C Y +C Y +A Y +B X +B Y +C Y +B Z +C Y +A Z +B Y +A X +B X +C X +B Y +B Y +B Y +B Y +C X +A Y +A Y +C Z +C Y +B Y +B Y +B X +A Y +C Z +B Y +B Z +B Y +A Y +C X +B Y +B X +C Z +C Z +B X +A Y +C X +B Z +C Z +C Y +C X +B Z +B X +A Z +B X +C Z +C Y +C Y +B Y +B Z +B Y +A Y +A Y +C Y +C Y +C Z +C X +B X +B Z +B X +C Z +A Y +A X +B Y +A Z +B Y +B X +C Z +C Z +B Y +B Z +B Y +B Z +C X +C X +A Y +C Y +C Z +B Z +C Y +B Z +C X +B Y +B X +C X +A Z +B Y +C Y +C X +C Y +C Z +B Z +B X +C X +A Y +B X +B Z +C X +C Z +B Y +B Y +C X +B Z +A Y +B Y +C Y +C X +C Z +C Y +A Z +C Y +C X +C Y +B X +C X +B Y +C X +B X +B X +B Y +B X +A Z +B Y +B Y +C X +C Y +B X +B X +C Y +A Y +A Z +C X +B X +A Z +A Z +A Y +C X +C Z +C X +B X +C X +C X +B Y +B X +B X +B X +B Y +A Y +C X +C Y +B X +C X +A Y +B Z +C Z +B X +C Y +B Y +C Y +B Z +C X +C Y +C Y +B Y +C X +C X +B Z +B Y +B X +C Z +B Y +B X +B Z +B Z +C Y +B Z +A X +C X +B Z +B Z +B Z +B Y +C Z +C X +C X +C Y +B Z +B Y +B X +A Y +B Y +A Y +C X +C Z +C X +B Z +B Z +C X +C Y +A Y +B Y +C X +C Z +C X +C X +C Z +C Z +C X +B Y +C X +A Y +C Y +C Z +B X +B Y +B Z +A Y +B X +B Z +B Z +B Y +B X +C Y +A Y +B Z +C X +B Z +B Z +B Y +B Z +B X +C Y +C X +C X +B Z +B Y +C Z +B Y +B X +C Z +C Z +B X +A Z +B Z +A Z +C Y +C X +B Y +C Y +C X +C Y +C X +A Z +C Y +B Z +B X +C X +C Z +C X +C Z +B Z +B Y +B Z +B Y +C X +B Z +B Z +B Y +B Z +C Z +B Y +B Z +C Z +C Z +C X +B X +C Y +B X +C Y +B X +B X +C Y +A Z +B X +B X +C Z +C X +C X +C X +C Z +C Z +C Y +C X +A Y +B Z +C Z +C Y +C X +B Y +B Y +A Z +B X +B Y +B Y +C Z +C Z +B X +C X +A Z +B X +C Z +B Z +C X +A Z +B X +C X +C X +A Y +B Z +B Z +B X +C Y +C Z +C X +A Z +B Y +C Y +C Y +C Y +C X +B Y +B X +B X +C X +B Z +C X +B Z +B Z +B X +C X +A Y +B Y +C Z +C X +B Y +B Y +C Z +B X +C X +C Z +B Z +A Y +B X +B Z +B Y +C X +C Z +A Y +A Y +B X +B X +B Z +B Z +C Y +C X +B Y +B X +B X +B Y +B Y +C X +B X +B X +A Y +B Y +B Z +B Z +C Y +B Z +C Z +C X +C X +C Y +C X +C Z +C Z +B X +C X +B X +C Y +C Y +B Z +B Y +C X +B Z +C X +B Z +A Y +C X +B X +B Y +C X +C Y +B X +B Z +B X +C Y +B Z +B Y +B Z +C X +C X +C X +C Y +B X +B X +B X +C X +B X +B X +B Y +B Z +B Y +C X +B Y +B X +B X +A Y +C Y +B Z +A X +C Z +C Z +B Z +A Y +C Y +B Y +B Y +C Z +C Y +C X +A Y +C Y +B Y +C X +A Z +C Z +A Y +C Z +C Z +A Z +B Y +C Z +C Z +B Z +A Y +C X +C Y +B X +B Z +B X +C X +B X +C Z +B X +B X +B Y +C X +B Z +C X +A Z +C X +B Z +C X +C Z +B X +C X +B Y +B X +B Y +B Y +C X +B Y +C Z +C X +B Y +A Y +C Y +B Z +A Z +A Z +C X +C Y +C Y +B Y +B Y +C Z +C X +A X +B X +C Y +B Z +B X +B Y +A Z +A Z +A Z +C Z +C X +B Y +B Z +C X +B X +B X +B Z +A X +C X +A Y +C X +B X +C Y +C X +B Y +B Y +B Y +C X +C Y +C Y +B Z +B X +C Z +A Y +B Y +C Y +C X +C X +C Y +A Z +C Z +C Y +C Y +C Y +C Y +B Z +B Z +C X +B Y +C Y +B X +C X +C X +C Y +C Y +C Y +C X +B X +B Y +A Y +A Y +B X +B X +C Y +B Z +C X +A Y +A Y +C Z +B Z +C Z +C Z +A Z +B Z +A Y +B Z +B X +C X +A Y +B X +B Z +B X +C X +C Z +B Z +A X +B Z +B Y +B Z +B X +C Z +B X +B Y +B Y +B X +B Z +C X +A Y +B Z +B Y +C Y +A Y +C Z +B Z +C X +B Y +C Y +A Y +C Y +A Y +C X +B X +B Y +A Y +B X +B X +A Y +B X +B Y +B X +B X +C X +B Z +B Z +B Y +A X +C X +B X +C X +B Y +C X +C Y +C Y +C X +A Y +A Y +B Y +C X +B Y +C Y +B Y +C Z +C X +C X +C X +B Y +C Y +C Z +B Y +C X +B X +B Y +A Y +C X +B Y +B Z +A X +B Z +B Y +C Y +C X +B X +C X +C Y +B X +C Y +B Y +C X +B X +A Y +C Y +C X +A Y +B Y +C Y +C X +B Y +B Z +B X +B X +C Y +C Y +C X +B X +C Y +B Z +C Z +B Z +B Z +B Y +A Z +A Z +C Z +C Z +A X +A Y +B Z +C Y +A Y +B Y +C Z +B Z +C X +C Z +B Z +B Z +B Y +A Y +B Y +C X +C X +A Z +B X +C X +C Z +C Y +B X +B X +C Z +C X +C Y +C X +B Y +B Y +C X +C Y +C Z +B Z +C Z +B X +B Z +C Y +A X +A X +B Y +B X +B Z +C X +C X +A Y +C X +C X +C Z +C Y +C X +B X +C X +B X +B X +A Y +A Y +C X +B X +B Y +C X +C X +C Z +C Y +A X +C X +B Z +B X +C Y +B Y +A Z +C Y +C Z +B X +B Y +C Z +C Y +C Z +C Y +C X +C Z +B Z +A Z +B X +C X +B Z +B Z +A Y +C X +B X +C X +B X +C X +B Z +A Y +C X +B X +C Y +C Y +C X +C Y +B Z +C Z +C X +B Z +C Z +C Z +C Z +B Z +C Z +B Y +B Y +C Z +A Z +A X +B Z +C X +B X +C Y +A Y +C X +C X +A Y +C X +C Y +B Y +C Z +B X +A Y +C X +C X +B X +B X +A Z +B Y +B Z +B X +B X +B Z +B X +B X +B Z +A Z +C Z +B X +B X +C Y +B Z +B Z +B X +B Y +B Z +C Y +B Z +C Z +C X +C Y +A Y +C Y +C X +B Y +C Y +C Z +B Y +C X +B Z +B Z +A Y +B Y +B Y +B X +C Y +C X +B X +C X +A Y +C X +C Y +B X +C X +C Y +C Y +B Z +C Z +B Y +B Z +A X +C Y +A Y +C X +B X +B X +B Y +C Y +C Y +C X +A Y +A Z +B X +A X +C Z +C X +B Z +C Y +B X +A Y +C Y +C Y +B X +A Z +A Y +B Z +B Y +B Z +B Y +C X +A X +A Y +B X +B Z +B X +C X +B Y +B X +B Y +B X +C Z +C X +A Y +C Y +B X +B Y +A Z +B Z +C X +C X +C X +A Y +C X +C Y +B Y +B Z +B Y +B X +A Y +C Y +C Y +C Y +C X +A Y +B Z +C Z +C Y +B X +C X +C X +B X +B Z +B Z +B Y +A Z +B X +A Y +B Y +C X +B Y +A Y +B X +C Y +C X +A Y +C Z +C X +B Z +C Y +B X +C X +A X +C Y +B X +B Y +B Y +C X +B Y +C Y +C X +B Y +A Y +C Z +C Y +B Z +C Z +B Y +C X +B Z +A Y +C Z +B X +B Z +C Y +B Z +C X +C X +A Z +B Z +A Y +B X +C X +C X +B Y +A Z +C Z +C X +B Z +C X +B Z +C Y +C X +C Z +C Z +C Y +C Y +C X +C X +C Y +B X +C X +B Z +C Z +C Y +C X +C Y +B Y +B Y +B Z +B X +C Y +C Y +C X +C Z +C Y +C Y +C X +A Y +B X +B Z +C Z +C Y +B X +C X +A Y +C Z +B Y +C Y +C X +C Y +C Y +B X +C Y +C Y +B Y +C X +A Z +B X +B X +B X +B X +B Z +C Y +B X +A Z +B Z +A Y +C X +B X +B Z +C Z +C X +B Z +B X +A Z +A Y +B Y +A Z +B X +C Y +B Y +C Y +C X +B Y +B Y +C Y +A Z +B X +B Z +B Y +B Y +B X +B Y +B Z +C Z +B Y +C X +A Y +C X +B Y +B X +A Y +C Y +C Y +B X +B Y +B Z +C Y +C Y +C Z +C Z +A Y +C X +B Z +C X +B Y +C Y +B Z +C X +C X +A Y +C Y +A Y +C X +C X +C Z +A Y +A X +B X +C Y +B Z +C X +B Y +C X +C Y +C X +B X +B Y +B Z +C Y +B Y +A Z +C Y +B X +C X +A Z +C Y +B X +B X +C Y +C Y +B X +C Y +C Z +C X +B X +C Y +B Z +B Z +A Y +C X +C X +C Y +B X +A X +A Y +A Y +C X +B Y +C X +C Z +B Y +C Y +B X +C Y +B Z +B Y +A Z +B X +B Z +B Y +B X +C X +B Y +C X +C Y +B Y +A Y +C X +C Z +B Y +C Y +C X +C X +C X +B X +C X +C Y +B Y +C X +C Y +C X +A Y +B Z +B X +C X +A Y +B Z +A Y +B Z +B Z +B Z +A Y +B X +C Y +C X +B Y +A Y +C X +C X +A Y +C X +C Z +B X +C Y +C X +B Z +B Y +A Y +C X +C X +B Y +B Z +B X +B Y +C X +B X +C Y +B X +A X +B Z +B Y +B Y +C X +B X +C X +C X +C X +C X +B X +B Z +B X +B Z +B X +C X +B X +C Z +B Y +B Z +B Y +C X +B X +B Z +A Y +B Z +C Y +B X +B Y +C Z +C X +B X +A Y +A Y +B X +A Y +C Y +C X +A X +C Y +C Y +C X +C X +C Z +C Y +B X +A Y +C X +B Y +B Z +B Z +C Y +B Y +B Y +B Y +C Y +B Y +B Z +B Z +B Z +A X +B X +C Y +C Y +C Y +C Z +B Z +B X +C Z +C Y +A Y +A Y +C Y +B Z +C Y +C Z +A Z +C Y +A Y +C Z +C X +B Z +B Y +B Y +A X +C X +B Z +B X +B Z +C Z +B X +A Y +B Z +C X +C Y +B Y +C X +B Z +B Z +B Z +C X +B Z +B Y +B Y +B Y +C Y +A Y +B X +A Y +C Z +C X +C X +C X +C X +C Y +B Y +B X +C X +C X +B Z +A Z +C X +C Z +B X +B Z +C Y +B X +B X +B Y +C Y +B Z +A Z +B X +C Y +B Z +B X +C Y +B Z +B X +C Z +C X +C Z +B Z +A Y +B Y +A Z +C Z +B Z +B Z +B Z +C Z +C X +A Y +C Z +B Z +B X +B X +B Y +A Y +B Y +C X +B Y +C Z +C Y +B Z +C X +A Z +B Z +C Y +C Z +B X +C Z +A Y +A Y +A Y +C Z +C Z +B Y +C X +C Z +C X +C Y +B Z +C Z +B Y +C Y +A Y +B X +B X +B X +B X +C Y +C Y +C X +B Z +B X +A Y +B X +B X +C Y +C Y +C Y +C Y +B Z +B Y +C X +B Y +B X +C X +C X +B X +C X +C X +B X +B Y +B X +B X +B Y +B X +C Y +B Y +C Y +C Z +C X +B Z +B Z +B Y +C Z +C Z +C Y +B X +B Y +B Z +B Z +A Z +C X +C Y +B X +B X +C X +B Z +C X +B Y +C X +C Y +B Y +B Y +A Z +B Y +B X +C Y +B Z +A Z +B Y +C Y +C X +B X +B X +B Z +C Z +C Z +C X +B Z +B X +A Y +C X +A Y +A Y +B Y +C Y +B X +C Z +B Z +B X +C X +A X +C Z +B Z +B X +C Y +C X +B X +C Z +C Y +B Z +C Y +B Y +C X +B Z +A Y +C X +C Y +A Y +B Y +B Y +C X +B X +B Y +B Y +B Y +A Y +A Y +C Z +C Y +B X +A Y +C X +C X +C Y +C X +A Y +B Y +C Y +B X +C Y +C X +C X +C X +A Y +A Y +B Y +B X +B Y +B X +C X +C Y +B Z +B Y +C Y +C Z +A Z +B X +B Z +C Z +A Y +C Y +B X +C X +B X +B Z +C Y +B X +B Y +B X +B Z +C Y +C Z +A Y +C Y +A Z +B Y +A Y +A Y +C X +A X +A X +C Y +C Z +C Y +B X +C X +B Z +B Y +C X +C X +A Y +C X +C Y +C X +C X +C X +C X +C Z +B X +A Y +C Y +B Z +B Z +C Z +B Y +B X +B Y +C X +C Y +B Y +B X +B Y +C X +B Z +B X +C Z +C Z +B Z +C Y +A X +C Z +C X +C X +A Y +B X +C X +B Z +C X +B Y +C Z +B X +B Y +C Y +B Z +B Z +C X +C X +B Z +C Z +B Y +B Y +B Z +B X +C Y +C Y +B X +B X +B X +B Y +B Z +B Y +C X +C Y +C Z +B X +B Y +C X +B X +A Z +A Z +C Z +C Z +C X +C Y +C X +B Y +C X +C X +B Z +B Z +B Y +C Y +B Y +B Y +B X +B X +C Y +A Z +C Y +B X +B Z +B Y +A Y +C Z +B Z +C Y +C Z +C Y +C Z +B Z +B Z +C X +C X +B X +B Y +B X +A Z +B X +B Z +B X +B Y +C Y +B Y +C Z +C X +A Y +A Y +C Y +B Y +C Y +B X +B Y +C Z +A Z +B X +B Y +B Y +B Y +B X +C X +C Y +C X +B X +B X +B X +B Y +B X +B Z +B Y +C Y +A Z +C Z +B Y +C Y +B Z +B Y +B Y +C X +B X +C Z +C X +B X +A Y +B Z +C Y +C Y +B Y +B Y +A Y +A Z +B X +B Z +B Z +B Z +B Z +A Y +B Z +B X +C X +C Y +B Y +C Y +B X +C X +A Y +C Z +B X +B X +B Y +A X +B X +C Y +B Z +A X +C Y +C Z +C Z +B X +C X +A X +C X +A Z +B X +B Y +C Z +B Z +B X +C X +B X +C Z +C X +B Z +A Z +A Y +C X +C Y +B X +C X +A Y +C X +B X +B Z +C Y +B X +C Y +C X +B X +C X +C Z +A Z +C Y +C Y +C X +C Z +A Y +C X +C X +C X +C X +B Y +B Z +C X +C Y +C X +B X +A Y +C Y +A Y +A Z +B X +C Y +C X +C Y +C X +B X +B Y +B X +C X +B Z +B Z +B Y +B X +B X +B Y +B Y +A Y +C Y +B Z +B X +C Y +C Y +C X +A X +B Z +C Y +B X +C Y +B Y +C X +C Y +C Z +A Y +C X +A Z +C X +B Y +C X +B X +B Z +B Z +B Y +B Z +B Z +B X +C X +B X +B Y +B X +B Z +C Y +B X +C X +C Y +C X +B Y +B X +C X +B X +C X +B Y +C Z +C X +B Z +A Y +B X +A Y +B Y +B X +C Y +B X +B Z +C Z +B Y +C X +A Y +B Y +C X +C X +B Y +C Y +B Z +C X +B Z +B X +C Y +C X +C Z +B X +C Z +B X +B X +C Y +B Y +C Y +B Y +C X +A Y +B X +C X +C Z +C X +A Y +B Z +A Y +B Z +B X +B Z +B Y +A Y +C X +B Y +C Z +A Y +B X +C X +C Z +C X +C X +B X +C X +C Z +B Z +C Z +B X +C Z +B Z +B Y +B X +B X +B X +C Z +C Y +A Y +B Z +B X +B X +C Z +A Y +B X +C Y +B Z +C X +B Y +C Y +B X +B X +B X +B Y +B Y +C X +C Z +B Z +C X +B Y +B Z +B Z +B Y +B Y +C X +B Y +B Y +B Z +A Y +C Y +C X +B X +C Y +C X +C X +B X +B Z +C X +A Y +B Y +C Z +C Y +B X +B X +B Z +C Z +C X +A Y +C Z +C X +C X +B Z +B X +C Y +B Y +B Y +C Z +B Z +A Z +C X +A Y +C Y +B X +C X +B X +A Y +C X +C Z +C Y +A Z +C X +B Z +B Y +A Y +C X +B X +C Z +C Y +C Y +B Z +C X +C Y +B Z +B Y +C X +C Z +B Z +A Z +C Z +B X +C X +C X +C Y +C X +B Z +C X +C Y +C X +B Z +B Z +A Z +B Z +B X +B X +C Y +C Z +B Z +C Y +C Z +B X +A Y +B X +C X +B Y +C X +B Y +B X +C X +B Z +C Y +C X +B X +B X +B X +B Y +B Y +B Y +A X +B X +C Y +C Z +B Z +C X +A Y +C X +C Y +B Y +C Y +C X +B Z +B Y +B Y +B Z +C Y +C Y +A X +C Z +B X +B Z +B Y +C X +C Y +B Y +C Z +B Z +C X +B Z +C X +B Y +B Z +C X +C X +B Y +B Y +B Y +C X +B Y +B Z +B Y +A Z +B Z +A X +C Y +A Y +C Y +B Z +B X +A Y +C X +B X +A Y +B Y +C X +B Y +C X +B X +B Z +A Y +B Z +B X +C Z +C X +B Z +C X +A Y +C Y +C Y +A Y +B Y +C X +C Y +C X +B X +C Y +B Z +B X +B Y +B X +C X +B X +C Y +C Y +B Y +B Z +C Z +B X +C Y +C X +A X +A Y +B Z +B Y +A Y +C X +C X +C Y +B X +C Z +C Z +B Y +B X +C X +A Y +B X +B X +C Z +C X +C Z +B X +B X +B Y +B Y +C Y +C X +A Z +C Z +B Y +C X +B Z +C X +B X +C X +B Z +C Z +B Y +B X +B Y +C Y +B Y +C Z +A Z +B X +C Z +B Y +C Z +C X +A X +B Z +B Z +C Y +C X +B Y +C Y +C Z +B X +B Z +C X +C Z +B Z +C Z +B X +C X +B Y +B Z +C Y +B Y +B X +B Y +B Z +B Z +A Z +B Y +C Y +A X +B X +C Y +A Y +C Y +B X +C X +B Z +C Y +C X +C Z +B Y +B X +C Z +A Y +C Y +C X +B X +B Z +B Z +B X +C Y +C Z +C Z +B Z +B X +C X +A Y +B X +B Z +C Y +C X +B X +C X +C X +B Y +A Y +A X +C Z +C Y +C Z +C Z +C Z +C X +A Z +C Y +B X +A X +B X +B X +A Y +B X +C X +B X +B X +B X +C Y +C X +A Y +B X +C X +C Y +A Y +C X +C Y +C Z +C X +C Z +C Z +B Y +B Y +C Y +A Y +C Y +B X +B Z +B Z +C Z +C X +B X +B Z +C X +B Z +B Z +C X +B Z +B Z +B X +B Y +C Z +B Y +B Z +A Y +C X +C X +B Z +C Y +C X +A X +B Z +C Y +C Z +B Z +B Z +C Y +A Y +C Z +C X +C X +C X +B Z +C X +B Y +C X +C X +B Z +C X +A Y +C Z +C X +A Z +B Y +A Y +B X +B X +C Y +B Y +B X +A Z +B Z +C Y +C X +B Y +B Y +B Y +B Z +C Y +C Y +A Y +C Y +C Z +B X +C X +B Y +C Y +A Z +C Y +C X +B Z +C Z +B Z +C X +C X +C X +B X +C Y +C Z +B X +C X +A Y +C Y +B Y +B Z +C Y +C X +C X +B X +C X +C Z +C Y +A Y +C X +B Y +B Z +C X +C Z +B Z +C Z +B Z +B X +B X +C X +C Z +B Y +B X +C Z +A Y +B X +B Y +C X +B X diff --git a/2022/src/days/day2.rs b/2022/src/days/day2.rs new file mode 100644 index 0000000..6729ca1 --- /dev/null +++ b/2022/src/days/day2.rs @@ -0,0 +1,101 @@ +use anyhow::{anyhow, Result}; +use std::fs; + +enum Pieces { + Rock, + Paper, + Scissors, +} + +enum EndStates { + Lose, + Draw, + Win, +} + +pub fn run() -> Result<()> { + let file_contents = fs::read_to_string("day2.txt")?; + let lines = file_contents.lines(); + let mut part_one_scores: Vec = Vec::with_capacity(1000); + let mut part_two_scores: Vec = Vec::with_capacity(1000); + + for line in lines { + let opponent = match &line[0..1] { + "A" => Pieces::Rock, + "B" => Pieces::Paper, + "C" => Pieces::Scissors, + _ => return Err(anyhow!("Invalid piece")), + }; + + let player_one = match &line[2..3] { + "X" => Pieces::Rock, + "Y" => Pieces::Paper, + "Z" => Pieces::Scissors, + _ => return Err(anyhow!("Invalid player piece")), + }; + + let game_result = match opponent { + Pieces::Rock => match player_one { + Pieces::Rock => EndStates::Draw, + Pieces::Paper => EndStates::Win, + Pieces::Scissors => EndStates::Lose, + }, + Pieces::Paper => match player_one { + Pieces::Rock => EndStates::Lose, + Pieces::Paper => EndStates::Draw, + Pieces::Scissors => EndStates::Win, + }, + Pieces::Scissors => match player_one { + Pieces::Rock => EndStates::Win, + Pieces::Paper => EndStates::Lose, + Pieces::Scissors => EndStates::Draw, + }, + }; + + let player_score = match player_one { + Pieces::Rock => 1, + Pieces::Paper => 2, + Pieces::Scissors => 3, + }; + part_one_scores.push(player_score); + let game_score = match game_result { + EndStates::Lose => 0, + EndStates::Draw => 3, + EndStates::Win => 6, + }; + part_one_scores.push(game_score); + + let part_two_goal = match &line[2..3] { + "X" => EndStates::Lose, + "Y" => EndStates::Draw, + "Z" => EndStates::Win, + _ => return Err(anyhow!("Invalid part two goal char")), + }; + + let part_two_score = match part_two_goal { + EndStates::Lose => match opponent { + Pieces::Rock => 3 + 0, + Pieces::Paper => 1 + 0, + Pieces::Scissors => 2 + 0, + }, + EndStates::Draw => match opponent { + Pieces::Rock => 1 + 3, + Pieces::Paper => 2 + 3, + Pieces::Scissors => 3 + 3, + }, + EndStates::Win => match opponent { + Pieces::Rock => 2 + 6, + Pieces::Paper => 3 + 6, + Pieces::Scissors => 1 + 6, + }, + }; + part_two_scores.push(part_two_score); + } + + let part_one_sum: u32 = part_one_scores.into_iter().sum(); + let part_two_sum: u32 = part_two_scores.into_iter().sum(); + println!("part one {}", part_one_sum); + println!("part two {}", part_two_sum); + + Ok(()) +} diff --git a/2022/src/days/mod.rs b/2022/src/days/mod.rs index 8b2a328..4f29302 100644 --- a/2022/src/days/mod.rs +++ b/2022/src/days/mod.rs @@ -1 +1,2 @@ pub mod day1; +pub mod day2; diff --git a/2022/src/main.rs b/2022/src/main.rs index d87a4e7..28f7db6 100644 --- a/2022/src/main.rs +++ b/2022/src/main.rs @@ -12,6 +12,9 @@ fn run_day(number: i32) -> Result<()> { 1 => { days::day1::run()?; } + 2 => { + days::day2::run()?; + } _ => return Err(anyhow!("Invalid day provided")), } Ok(()) diff --git a/2022/tests/day2.txt b/2022/tests/day2.txt new file mode 100644 index 0000000..db60e36 --- /dev/null +++ b/2022/tests/day2.txt @@ -0,0 +1,3 @@ +A Y +B X +C Z