From 84270874850fe79455eba63dc3812335bfd29657 Mon Sep 17 00:00:00 2001 From: Louis Vallat Date: Mon, 5 Dec 2022 00:05:02 +0100 Subject: [PATCH] feat: day2 Signed-off-by: Louis Vallat --- .gitlab-ci.yml | 4 + day2/Cargo.toml | 8 + day2/input | 2500 ++++++++++++++++++++++++++++++++++++++++++++++ day2/src/main.rs | 76 ++ 4 files changed, 2588 insertions(+) create mode 100644 day2/Cargo.toml create mode 100644 day2/input create mode 100644 day2/src/main.rs diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1a2295c..ecdf2bf 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,3 +9,7 @@ day-1: script: - cd day1; cargo run --release ./input +day-2: + stage: build + script: + - cd day2; cargo run --release ./input diff --git a/day2/Cargo.toml b/day2/Cargo.toml new file mode 100644 index 0000000..8aa34bb --- /dev/null +++ b/day2/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day2" +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/day2/input b/day2/input new file mode 100644 index 0000000..c43c174 --- /dev/null +++ b/day2/input @@ -0,0 +1,2500 @@ +B Z +A Z +B Z +C Z +C Z +B X +A X +C X +A Z +C Y +C X +C Y +C Y +A X +A Z +A Z +A X +B Z +B X +A Z +A X +C Y +A X +B Z +B Z +A X +C Z +A Z +A X +B Z +A Z +A Y +C Y +A Z +C Z +A Z +C Y +C Z +C Z +A Z +A X +A X +B X +A Z +B Z +A X +A Z +A Z +A X +A X +C Y +A Z +B X +C Y +A X +B Y +A Z +A X +A Z +A X +C Z +A Z +A Y +A X +C Y +A X +B X +A X +A Z +C Y +A Z +A X +C X +C Z +C Z +A Z +A X +A Z +C X +C Z +B Z +A Z +C Y +C Z +B X +A X +A Z +A X +A X +C Y +A Z +C Z +B X +A X +A X +A Z +A Y +A X +C X +A Z +B X +C Y +A X +A X +A X +C X +B Z +B Z +A Z +A X +A Z +C Z +C X +C Y +B X +C Z +A Z +C X +A Z +A X +A X +A X +A X +A Z +B X +A X +B X +C Z +A Z +A Z +A X +A X +A X +B X +A Z +A X +A Z +A X +B Z +A Z +A X +B Z +A Z +A Z +C Y +B Z +A Z +B Z +A Z +A X +C X +A X +C Y +C X +A X +A X +C Y +A Z +A X +B Z +A Z +A Z +B X +B Z +A X +A Z +A X +A X +A Z +A X +A Z +A Z +C X +A Z +A X +C Y +A Z +A Z +A X +A X +A X +A X +B Z +B X +A Z +A X +A Z +C Y +B Y +C Y +B X +A Z +A Z +A Z +C Y +A Z +A X +B Z +C X +A X +C Z +C X +C Y +A Z +A X +A Z +C Z +A Z +A Z +A Y +C Z +A X +A X +B Z +A Z +C Z +A Z +A X +A Z +A Z +A Z +A Z +A Z +A Z +A Z +A Z +C X +A X +A X +A X +B Y +B X +A X +A Z +A Z +A X +A Z +A X +A X +A Z +B X +A Z +C Z +A Z +C Z +A Z +A Z +C Z +A X +C Z +A X +C X +A Z +A Z +B Z +A Y +B Z +A X +B Z +A Z +A X +A Z +A Z +A X +A Z +B Z +C X +A Z +A X +B Z +C Y +B Z +C X +A Z +A Z +C X +B X +C Z +A Z +A X +A Z +C X +A Z +C Z +C Z +B Z +B Z +A Z +C X +A X +B Y +A Y +A Z +C X +B X +A Z +A Z +B Y +A Z +A Z +C Z +A Z +A X +A Z +B X +C Z +B X +A Z +B Z +C Y +A X +A X +A Z +A Z +A Z +C Y +A X +A Z +A Z +A X +B Z +A Z +C X +C Z +A Z +A X +B Z +A X +C Y +A X +A Z +A Y +C Z +A Y +A Z +C X +C Y +A Z +C Y +A Z +A X +C Y +A Z +A X +A X +B Z +A X +C X +A X +C X +A X +A Z +A X +A Z +A Z +A X +C X +C Z +A Z +C Z +C X +A Z +C Y +A X +A Z +A Z +C Y +A X +B X +C Y +B Z +C Y +A X +A X +C Z +A X +A Z +A X +A X +C X +A X +A Z +B X +C Z +A Y +B Y +A Z +A Z +A Z +A Z +B Y +A Y +A Z +B Z +A Z +A X +C Z +B Y +C Y +A X +A Z +C Z +B Z +A Z +A Z +A Y +C Z +A Z +A Z +C Z +C Z +C Z +A X +B Y +C X +A X +A Z +A Z +B Z +A Y +A X +A Z +B X +A X +A X +A Z +A Y +A Z +A X +B X +A Z +C X +A Z +A X +C X +B X +B Y +B X +A Z +A Z +A Z +A X +B X +A X +B Z +A Y +B Z +C Z +A X +C Z +C X +A Z +C Y +C Y +A Z +A X +A X +A X +B X +A Z +A Y +C Y +B X +A X +A X +A X +C Y +A Z +A Y +A X +C Z +A Z +A Z +A Z +C Z +A X +A Z +C Z +B X +C Y +A Z +B Z +B Z +C Z +C Z +A X +A Z +A Z +B X +B X +A Z +A Z +A Y +C Z +A Z +A X +C Z +A Z +C Z +C Z +A Z +A Z +B Z +A X +B Y +A Z +A X +C Z +A X +B X +A Z +C Y +A Z +C X +C Y +A X +C X +C X +A Z +C Z +C Y +A Z +A Z +A X +A X +C Z +A Y +A Z +A X +B Z +A X +A Z +A Z +A X +B Z +A X +A Z +C X +A Z +A Z +C X +A Z +A X +A Z +A X +B Z +A Z +A Z +C Y +C Y +C Z +C Z +C Y +A X +A X +A X +A Z +A Z +C Y +A Z +C Z +A Z +C Z +B Z +B X +A Y +C Y +A X +A Z +A X +A X +A Z +C Z +C Y +C Y +A Y +A X +A Z +A X +C Z +A X +A Z +A Z +C Y +A X +A Z +A Z +A X +B Y +A Z +A Z +A Z +A Z +C Y +A Z +A X +A X +A Z +A Z +C Y +A Z +A Z +B Z +A Z +A X +A X +A Y +C Z +C Z +A Z +B Z +A Z +A Z +A X +A X +C Z +A Z +A X +A X +A Z +A Z +B Y +A Y +C Y +A X +A Z +C Z +C Y +A Z +C Y +A X +A X +A X +A Z +C Y +C Y +A Z +B X +C Y +A Z +A X +A Z +A Y +C Y +C Z +B Z +A Z +C Y +A X +C Z +A X +C Y +C Z +A Z +C Y +C Y +A Y +B X +A Z +C Z +B Z +B Y +A Z +C Y +A X +A Z +A Z +C Y +A Z +C Z +A Z +A Z +A X +A Z +A Z +C Z +A X +A Z +C Z +C Y +A X +A X +C Z +C Y +A Z +C Y +A Z +A X +A X +A Z +A Z +A X +A Z +C Y +C Z +A Z +B X +C Z +A Z +A Z +A X +B X +A Z +A Y +A X +C Z +B X +A Z +C Y +C Z +C Z +C Z +A Z +A Z +A X +A Z +C Z +C Y +A X +A Z +A Z +A Y +A X +A Z +A Z +C X +B Z +A X +A Z +A X +C Z +A X +C X +A X +C Y +C Y +A X +A X +A Z +B Z +A Z +A Y +B Z +A X +C X +A X +C X +A X +C X +A Z +A X +A X +A X +C Y +A X +A X +C X +C Z +A X +B Y +A X +B Z +A Z +A X +C Z +A Z +A X +A Z +A X +C X +C Z +A X +C Z +C Y +C Y +A X +A X +A X +C Z +C Z +A Z +C Z +A Z +B Z +A Y +B Z +A X +A Z +A Z +A Z +C Z +A Z +A X +A X +B Z +A Z +C Y +C Z +B Z +C Y +C Z +A X +A X +C X +B X +C Z +A Z +A Z +C Z +A X +A Z +A Z +B X +B Z +A Z +A Z +B Z +A Z +A Z +B Z +B Z +C Z +A Z +C Z +A Z +A Z +C Z +A Z +A Z +B Z +A Z +A X +A X +A X +A Z +C Z +A X +A Z +A X +A Z +B Z +B Z +C Z +A Z +A Y +C X +A X +A Z +A X +A X +C X +C Z +B Y +A X +A X +C Y +C Y +A X +A Z +A Z +B Z +B Z +A Z +C Z +A Z +C Z +C X +A Z +A X +A Y +A X +A Z +C Z +A X +A Z +A Z +A Z +A X +C X +B Z +A Z +A Y +C X +A Z +A Z +A Z +A X +A Y +A X +C Y +A Z +C Y +A Z +A Z +C X +A Z +A Y +C Z +A X +A X +A Z +A Y +A Z +A X +C Z +A Z +A Z +B Z +A Z +A Z +C X +B Z +C Y +A X +A Y +B X +A Z +C Z +C X +C Z +A X +A X +A Z +A Z +A X +A Z +B Z +B Z +A Z +B Y +B Z +A X +A X +C Z +A Z +C Y +B Z +C Z +C Z +A Z +A X +B Z +A X +A X +A Z +A Z +A X +B Z +A Z +C Z +A Z +A Z +B X +C Z +B Z +C Y +A Z +A X +A X +B X +A X +B Z +C Y +C Y +B Z +C Y +C Y +A X +A Z +A Z +C Y +B Z +A X +A Z +A X +B X +A X +C Y +A X +A X +B Z +A X +B X +A Z +C Y +B Z +A X +A Z +A X +A X +B X +A X +A X +A X +A Z +A Z +C Y +A Z +B Z +C Z +C Y +C Z +A X +A Z +A X +C Z +C Z +C Z +C Y +A X +B X +B X +C X +C Z +C X +C Z +B Z +A Y +A X +C X +B X +A X +A X +A Z +A X +A Z +A X +A X +A Z +A Z +C Z +A X +C Y +C Y +C Z +A Z +A X +A Z +A X +A Z +A Y +A Z +A X +A X +A Z +A X +A Y +A Y +C X +A Y +C Y +C X +A Z +C Z +C Y +C Z +A Z +C X +A X +C Z +A Z +C Y +B Z +A Z +A Z +A Z +C Y +A X +A X +A Z +A Z +A Z +B Z +C Z +A X +C Y +A X +A Z +A X +C X +C Z +A Z +C Y +A Y +A Y +A Z +A X +A Z +A Y +A X +C Z +A Z +A Z +A X +A X +B Z +B Y +B Y +C X +A Z +A Z +C Z +A X +A Z +C Y +B X +C Y +A Z +A Z +A X +A Z +A X +A X +C Z +A Z +A Z +A X +A X +C Y +A X +A X +C Y +A Y +C X +A X +C Y +A Y +A Z +B Y +A X +C Z +B X +A X +C Z +A Z +B Z +A Z +A Z +C X +A Z +B Z +C X +A Z +C Y +A Z +C Z +A Z +C X +A X +A Z +A Y +B X +A X +B X +A Z +A Z +C Y +A Z +C Z +A Z +A Z +A Z +C X +A Z +B X +A X +A Z +C Z +A Z +A X +C Y +A Z +C Y +A Z +A Z +C Z +A X +A Z +A Z +B X +A Z +A X +C Z +B Y +A Z +A X +C Z +A X +A Z +A Z +A Z +C Z +A Z +A Z +C X +A X +A X +C X +A X +A X +B Z +A Z +A X +B X +A X +A Z +C Y +A Z +B X +C Y +A X +C Z +A Z +B Z +A X +A Z +A Z +C Z +A X +C Z +A X +C X +A Y +A X +A Z +C X +A X +A X +A X +A X +A Z +A X +B Z +C Z +C Y +B Z +B Z +B X +A Z +A X +B Z +A Z +A X +C Z +A Z +C Y +B Z +C Y +A X +C X +A X +A Z +C Y +A Z +A X +A Y +C Y +C Y +A Z +A Z +C Y +A Z +A Z +A X +C Y +B Y +A X +A X +A X +C Y +B X +A Z +A Y +A Z +A Z +A X +C Z +A Z +A Z +C X +A Z +B Z +B X +A X +C Z +A X +C Y +A Z +C Z +C Y +C X +C Y +A Z +A X +A Z +A Z +A Z +B Z +A Z +C Z +A Z +C Z +B Z +C Z +C Z +A Z +A Z +B X +A Z +A X +A Z +A X +A Y +A Z +B Z +C X +A Z +A Z +B X +A X +C X +C Z +A X +A Z +A X +C Y +C Z +A Z +C Y +A X +A Z +A Z +B Z +C Y +A Z +A Z +C Z +A X +C X +A Z +A Z +A Y +C Z +C Z +A Z +A X +B Z +A X +A X +A X +A X +A Z +A Z +A X +A X +C Z +C Y +C Y +C Y +A Z +C X +B Z +C Y +C Z +A X +A X +A Z +C Z +C Z +A Y +C Y +B X +C Y +A X +A X +A Y +A X +A Z +A Z +A X +A Z +A Z +A Z +A X +A Z +B Z +A X +A X +A X +C Z +C X +A Z +C Y +C Z +A X +A Z +A Z +A X +A Z +A X +B Z +A Z +A Z +A Z +C Y +C Z +B Z +A Z +B Z +A X +A X +A X +C Y +A Z +A Z +A Z +C X +A X +A X +A Z +A Z +A Z +A Z +B Z +A X +A Z +A X +C Z +A Z +A Z +A Z +B Z +A Y +A Z +C Z +B Z +C Y +A Z +A X +C Y +A X +A X +A Z +A Z +A X +B Z +B X +C Z +C Z +A Y +A Z +A X +A Z +A Z +A Z +A Z +A Z +B Z +A Z +B X +A Z +A Z +C Z +B Z +A Z +C X +B Z +C X +B Z +A Z +A Z +A Z +A Z +A X +B Z +A X +B Z +C Y +A Z +A Z +C X +A X +A Z +A Y +A Z +C Y +C X +C Z +A X +A Z +C Z +A Z +A X +A Z +B Z +A X +A Z +B Z +C Y +A Z +C Y +A Z +C Y +B X +C Y +A Z +B Z +A X +B Z +B Z +C X +A Z +C Z +A Z +C Z +A Z +C Z +B Z +C Y +C Z +A Z +C Y +A Z +C X +B Y +B Y +C X +C Y +A Z +C Z +A Z +C X +A Z +A Z +C Y +A Z +A Z +C X +A Y +A X +A X +B Z +A Z +C Z +A Z +B Z +C Y +C Z +A Z +C Y +B X +C Z +A X +C X +C Y +C Y +C Y +A Z +A Z +B Y +C Y +A Z +A X +A Z +A X +A Z +C X +C Z +A X +C Z +B X +A X +C Z +A Z +C X +A Y +A Z +A X +A Z +C Z +B Z +B Z +A Z +C Y +A Z +C Z +C Y +C Z +A Z +A Z +B X +C X +C Z +A X +A Z +A Y +C Y +A X +A Z +C Y +A Z +B X +A Z +A Z +A Z +A Z +C X +A X +A Z +A Y +A X +B Y +A X +A X +A X +A X +B Z +A X +C Y +C X +A X +A Z +A X +A Z +A Z +A Z +A Z +A X +A Z +C X +C Z +C Z +A X +B Y +A X +C Y +A X +C Z +A X +A Z +A Z +A Z +A Z +C X +A X +C Y +A Z +A Z +C Y +A Z +A X +A Z +A X +A Z +B Y +C Y +B Y +C Y +A Y +A Z +C X +B X +A X +A Y +C Z +A X +B Z +A X +A X +A Y +A X +A Z +A Z +C Z +C X +A Z +C Y +A Z +A Z +C X +A Y +A Z +A X +A Z +A Z +C X +A Z +A Z +A Z +C Y +A X +A X +A X +C Z +A Z +C Y +A X +A X +C Y +C X +C Y +A Y +C X +A Z +A Z +A Y +C X +A Z +A Z +A Z +C Y +C X +A Z +B Z +A Z +A X +C Y +A X +C Y +C Y +A X +C Y +A X +C Y +B Z +A Z +A X +A Z +A X +A X +A Z +A X +A X +C Z +A Z +B Y +C X +B X +B X +A Z +A Y +B Y +A Z +A X +A X +C Y +C X +B Z +A Z +C Y +C X +C Y +A Y +A Z +C X +A X +A X +A Z +A Z +B Z +C X +A Z +B Z +A X +B Y +C X +A X +A Y +C X +A X +C Y +A Z +A Z +A X +A X +C Z +C Z +B Z +A X +B Z +B Y +A Z +A Z +C Y +A Z +B Y +A Z +A X +C Z +C Z +A X +A X +A X +A Z +A Z +C Y +A X +A X +A Z +A X +C X +A Z +A X +B Z +B X +A X +A X +A Z +B Z +A X +A Z +C Y +C Y +B Z +C Z +A X +B X +B X +A Z +A X +A Z +C Y +A X +A X +B Y +C Y +A X +A X +C Y +A Z +A Z +C Z +A Z +B Z +A Y +A Z +C Y +B Y +A X +C X +A X +C Z +A Z +A X +A Z +A Z +A X +B Z +C Z +A Z +A X +C X +A X +C Y +B Z +B X +C Z +C X +A X +A X +A Z +A X +C Y +B Z +A Z +C Z +A Z +A Z +A X +B X +A X +A Z +A X +A X +A Z +A Z +A Y +A Z +C Z +B Z +A X +A X +A X +A Z +B Z +A Z +A Z +C Z +C Y +C Y +A Z +A X +A Z +C Z +A X +A X +A Z +A Z +C X +B Y +A X +B Z +B Z +A Z +A Z +C Z +C Z +A X +A X +A Z +C Z +A Z +C Z +B X +A X +A Z +A Z +C Z +A X +A Z +B Y +B X +A X +C Y +C X +C Y +B X +A X +C Y +A Z +B Y +A Y +A X +C Y +A Z +A Z +A Z +A Z +A Z +C Z +A Z +A Z +A Z +C X +B X +C Z +A X +B X +A X +C Y +A X +C X +A X +A Z +A Z +B X +A X +A Z +A X +C Z +A Z +A Z +A X +C Z +A Z +C X +A Z +A Z +A Z +A Z +B Z +A X +A X +C Y +A Z +A Z +B Z +A X +A Z +A Y +A Z +C X +B Z +A Z +A X +B Y +A Z +A X +C X +C X +A X +A Z +A X +A Z +B Z +B Y +A Y +A Z +C Y +B Z +A Z +C X +C Y +C Z +C X +A X +A Z +A X +A X +A Z +A X +A X +A X +A Z +C Z +C Y +A Z +A X +C X +B Z +C Z +C Y +C Y +A Z +A X +A Z +A Z +A Z +A X +A Z +A Z +A X +C Z +A X +A X +A Z +C X +B Y +A X +C Z +A X +C X +A Z +A X +A Y +C Z +A X +A Z +C X +B X +A Z +A Z +A X +A X +A Z +C Y +C Z +A X +A Z +C Z +C X +A X +A Z +A X +A X +B X +C Z +B Z +A Z +A X +A X +B Y +A Z +A X +A X +A Z +A Z +A Z +A X +C Y +A Z +C Y +A Z +A Z +A X +C Z +A Z +B X +A X +C Z +A X +A Y +B X +C X +A X +A X +A Z +A X +A X +A X +C Y +A Y +A Z +B Z +B Z +B Z +A Z +A Z +A Z +A X +B X +C Y +A X +A Z +C Z +B Y +A X +A Z +A Z +A X +A X +B Z +A X +C Y +A Z +A X +A X +A Z +A Z +A Z +A Z +A Z +A X +A Z +A X +A X +C Z +A X +C Z +A Z +C Y +A X +A Z +C Z +A Z +A Z +A X +A X +A Z +A X +A Z +B Z +A X +A X +C X +A Z +A X +A Z +C Y +C Y +C Y +C Y +C Z +A Z +B X +C Z +A X +A Z +C Y +A X +A Z +B X +A Z +C X +C Z +C X +C X +A Z +A Z +B X +A Z +A Z +A Z +B Z +A Z +C Z +A X +A X +A Z +A X +A Z +C Z +C Z +A Z +C Z +C X +A Z +A X +B Z +A X +B Y +C X +A X +A Y +A Z +A Z +A X +A X +A Z +A X +A Z +A X +A Z +A X +A Y +A X +C Z +A Z +A Z +A X +A X +A Z +A X +C Y +C Z +A Z +A Y +A Z +A X +A Z +C X +B X +A Z +C Z +B Y +A Z +A Z +C Y +A X +A Z +A Z +C Z +C Y +A Z +B Y +A X +C Y +A X +A X +A Z +C Z +A Z +A Z +A X +C Z +A X +C Y +C Y +A X +B X +C X +A Y +A X +A Z +B X +A X +B Z +A Z +A X +C X +A X +B X +A X +A Z +A X +C Y +A Z +C Z +C Y +A X +B X +C Y +C X +A X +A Z +A X +A Z +A X +A X +A Z +A Z +A X +A Z +A Y +A X +A X +A Y +A Z +A Z +C Z +A X +A Z +A X +A X +B X +A X +B Y +C Y +A Z +B Z +A Z +B Y +A Z +C Y +A Z +A X +A X +A Z +C X +C Z +B X +A X +A Z +A X +A Z +A Z +B X +A Z +A X +C Z +B Y +C Y +C X +A X +A Z +A X +C Y +A Z +C Z +A X +A X +A X +A Z +A Z +A Z +B X +C X +A Y +B Z +A X +A Z +A Z +C X +C Y +A X +A Z +C Y +A X +A Z +A X +A Z +A X +A X +B Z +A X +C X +A X +A X +A X +A Z +A Z +A X +A Z +C Y +C Z +B Z +B X +A Z +A X +C X +C Y +A X +B Z +B Z +A Z +B Z +C Y +A X +A X +A X +C Y +A Z +A X +A Z +A Z +A Z +A X +A Z +A X +A Z +C Y +A X +C X +C Y +C Y +C X +A X +C Y +A Z +C Y +B Z +B Z +C Z +A X +B X +C X +A Z +A Y +A Z +B Z +A Z +B Z +A X +A X +A Z +A Z +A Y +A Z +A X +A Y +A Z +A Z +A Z +A Z +B X +A Z +A Z +A Z +A Z +C Y +B Y +C X +A Z +B Z +B X +A X +C Z +A Z +C Z +A Z +A X +A X +A X +A X +A X +A Z +C Y +A X +C X +A Y +C X +C X +A X +A Z +A X +C Z +A X +C Y +B Z +C Y +C Z +B X +A Z +C Y +A Z +C Y +A X +A X +A X +A Z +A Z +A Z +A Z +C Z +C Y +A X +C Y +B Y +A X +A X +A Z +C Y +C Z +A X +A X +A Z +A Z +A X +A X +A Z \ No newline at end of file diff --git a/day2/src/main.rs b/day2/src/main.rs new file mode 100644 index 0000000..ac56bf4 --- /dev/null +++ b/day2/src/main.rs @@ -0,0 +1,76 @@ +use std::{fs, env, char}; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +enum Moves { + Rock = 1, + Paper = 2, + Scissors = 3 +} + +impl Moves { + fn get_move_from_letter(c: char) -> Moves { + match c { + 'A' | 'X' => Self::Rock, + 'B' | 'Y' => Self::Paper, + 'C' | 'Z' => Self::Scissors, + _ => panic!("Move '{}' is not implemented!", c) + } + } + + fn get_move_from_line(s: &str) -> (Moves, Moves) { + let c = s.chars().collect::>(); + return (Self::get_move_from_letter(c[0]), Self::get_move_from_letter(c[2])); + } + + fn get_winning_move(&self) -> Moves { + match self { + Self::Rock => Self::Scissors, + Self::Paper => Self::Rock, + Self::Scissors => Self::Paper + } + } + + fn get_losing_move(&self) -> Moves { + match self { + Self::Scissors => Self::Rock, + Self::Rock => Self::Paper, + Self::Paper => Self::Scissors + } + } +} + +fn read_input(path: &str) -> String { + return fs::read_to_string(path).expect("Cannot read file."); +} + +fn parse_input(s: &str) -> Vec<(Moves, Moves)> { + return s.lines().into_iter().fold(vec![], |mut acc, x| { + acc.push(Moves::get_move_from_line(x)); + return acc; + }); +} + +fn get_score_for_round(round: &(Moves, Moves)) -> i32 { + return round.1 as i32 + + if round.0 == round.1 { 3 } + else if round.1.get_winning_move() == round.0 { 6 } + else { 0 }; +} + +fn get_expected_score_for_round(round: &(Moves, Moves)) -> i32 { + return get_score_for_round(&(round.0, + if round.1 == Moves::Paper { round.0 } + else if round.1 == Moves::Rock { round.0.get_winning_move() } + else { round.0.get_losing_move() } + )); +} + +fn main() { + let args: Vec = env::args().collect(); + for arg in args.iter().skip(1) { + println!("[{}]", &arg); + let vec_in = parse_input(&read_input(&arg)); + println!("\t[Part 1] => Answer is '{}'.", vec_in.iter().fold(0, |acc, x| acc + get_score_for_round(&x))); + println!("\t[Part 2] => Answer is '{}'.", vec_in.iter().fold(0, |acc, x| acc + get_expected_score_for_round(&x))); + } +}