diff --git a/rust/.gitignore b/rust/.gitignore new file mode 100644 index 0000000..5e92c04 --- /dev/null +++ b/rust/.gitignore @@ -0,0 +1,2 @@ +part1 +part2 diff --git a/rust/2/README.md b/rust/2/README.md new file mode 100644 index 0000000..032728d --- /dev/null +++ b/rust/2/README.md @@ -0,0 +1,5 @@ +Actually organised my solutions and stopped committing the binary. + +Spent way too long coming up with a "clever" solution to calculate RPS victory. Part 2 was quite a bit easier with just one line of mod3 arithmetic. + +I'm committing all my scratch buffers of sketching out how a solution should work because why not diff --git a/rust/2/input.txt b/rust/2/input.txt new file mode 100644 index 0000000..c4b1829 --- /dev/null +++ b/rust/2/input.txt @@ -0,0 +1,2500 @@ +C X +C Y +C X +B X +B Z +A Z +C Y +C Z +B Z +C X +B Y +C Y +C Y +A Y +C Y +C Y +C Z +C X +B Z +C Y +A Y +A Y +C Z +B Y +A Y +C Z +C Y +A Y +A Y +B Y +C Y +C Z +C Y +B X +B Z +C Y +B Z +A X +C Z +A Y +B Y +C Y +C Y +B Z +B Y +A Z +C X +C X +C Y +C X +B Z +A Y +B X +B Z +C Z +C X +C X +B Z +A Y +B Y +C Y +C Y +A Y +C X +A Y +B Z +C Y +C Y +B Y +C Y +A Z +A Z +B X +A Y +C Y +A Y +C Y +C Y +C X +C Y +B Z +C Y +C Z +C X +B X +C Y +C Y +C X +C Z +A Y +C X +B Z +C X +A Y +B Y +C Y +A Y +A Y +A Y +B Y +C Y +A Y +A Y +C Z +C Y +B Y +C X +C Y +B Z +B Z +C X +C Y +C X +C Y +C Y +A Y +C Y +C X +C Y +C Y +B Y +B Z +A Y +B Y +A Y +A Y +C Y +B X +C Y +C X +A Y +C X +C X +C Y +C Y +B Z +C X +A Y +B Z +C Z +C X +A Y +B Z +C Y +B Y +A Y +A Y +C Y +B Y +C Y +C X +C Y +A Y +C Y +A Y +B Y +C X +C Y +C Y +B Z +B Z +A Y +C Y +C Y +C Y +C Y +A Y +C X +C Z +C X +A Y +A Y +A Y +C Y +B Z +B Z +C Y +C Y +B X +C Y +C Y +B Z +B X +B Y +C Y +C Y +C X +B Y +B Z +B Z +C Y +C Y +C X +C X +A Y +C Y +C Y +B X +B Z +B X +B Z +B Y +C X +B X +B Y +B Z +B Z +B X +B Z +B Y +C X +C Y +C X +C X +B Z +C Y +C Y +C Y +B Z +C Y +C X +C Y +C Y +A Z +C Y +A Y +C Y +A Z +A X +C Y +C Y +C Y +C Z +B Z +B Z +C Y +B Z +B Z +C X +C Y +A Y +A Y +C Y +A Y +C Y +C Y +B Y +A Y +C Y +B Z +A Y +B Z +C X +C Y +A Y +B Z +A Y +C X +C Y +B Y +C Y +A Z +B Z +B X +C Y +A Y +A Z +C X +A Y +B Z +A Y +B Y +C Y +C Y +B Z +B Z +C X +B Z +C X +C Z +C Y +C X +A Y +C X +A Y +A Y +B Z +B Z +B Z +A Y +A Y +C Y +A Y +B Z +C X +C Y +C Y +C Y +B Y +A Y +C Z +C Y +A Y +A Y +B Z +C Y +C Y +C Y +B Z +C Y +C Y +A Y +A Y +C Y +C X +B Z +B Z +C X +C X +C Z +A Y +C Y +A Y +A Y +C X +A Z +B Y +A Y +C X +A Y +C X +C X +A Y +A Y +C X +B Y +B Z +C Y +C Z +C Y +C Y +B Z +C Y +A Y +A X +B Y +C Y +A Y +C Y +C Y +C Y +A Y +C Y +A Y +C Y +B Z +A Y +C X +C Y +A Y +C Y +A Y +A Y +A Y +B Z +C Y +B Z +A Y +C Y +A Y +C Y +C X +B Z +A Y +C X +B Z +B Y +C Y +C Z +C Y +B Y +B Y +A Y +A Y +C X +B Y +A Y +C Y +B X +C X +A Y +C Y +A Y +C Y +B Z +A Z +B Z +B Z +A Z +C Y +C Y +C X +B Y +C Y +A Y +C Y +C Y +B Y +B Z +C Y +C X +A Y +C X +C X +C Y +B Y +C Y +B Z +C Y +A Y +A Y +C Y +C X +C X +C X +C Y +C X +C Y +C Y +A Y +C Y +C X +C Y +C X +C X +C X +A Y +B Y +C Y +C Y +C Y +C Y +C Y +A Y +A X +B Z +C X +C Y +C Y +B Z +A Y +A Y +B X +B Z +C Y +C Y +B Z +A Y +A Y +A Y +C Y +C Y +A Y +A Y +C Y +C Y +C X +C X +C X +B Z +C Z +C X +A Z +C Y +C X +A Y +B Y +B Z +C X +C Y +C Y +C Z +C Y +C X +A Z +C Y +A X +B Y +C Y +C Y +C Y +C X +B Y +B Y +C X +B X +A Y +C Y +C Y +C Y +B X +C Y +A Y +C Y +C Y +B Z +C X +B X +C Z +C Y +A Y +B Y +B Z +C Z +C X +C X +A Y +A Y +B Z +A Y +C X +B Y +C Y +A Y +B X +A Y +A Y +C Z +C Y +C Z +B Z +A X +C Y +B Y +C Y +B Z +B Y +C Y +A Y +B Z +B Z +C X +B Z +C Y +B Z +B Z +C Y +C Y +B Z +C Z +C Y +B Z +C Y +B X +A Y +B Z +A Y +C Y +A Y +C Y +C Y +B Y +B Z +B Z +C Y +A Y +B Z +C X +C Y +C Y +A Y +C Y +C Y +C X +A Y +C Y +C Y +A Y +C X +A Y +A Y +A Y +C Y +C Y +A Y +B Z +A Y +B Y +A Y +A Y +C Y +C Y +C Z +A Y +C Y +B Z +A Y +C Y +C Z +C Y +C Y +B Z +C Y +C Y +B Z +B Y +C Y +A Y +C X +C Y +C Z +C Z +C X +C X +C X +C Z +C Y +B Z +A Y +B Z +B Z +A Y +C Y +C Y +C Y +B X +C Y +A Y +A Z +B Y +B Y +A Y +B Z +A Y +B Y +C Z +C Y +C Y +C Y +B Z +B Z +B Z +C Y +C Y +A Y +C X +C X +A Y +C Y +C Y +C Y +C Y +C X +C Y +C Y +C Y +C X +A Z +B Y +C Y +A Y +A Y +B Z +A Z +C Y +C Y +C Y +C X +B X +B Y +C Y +A Y +A Z +B X +C Y +C Y +B Z +A Y +A Y +B Z +B Z +C Y +C Y +C X +B Y +B Z +C Y +B Y +C Y +A Y +C X +C X +B Z +A Y +C Y +B Z +C X +C Y +B Y +B Z +A Z +B Y +B Y +C X +C Y +A Z +C X +C X +A Y +A Y +C X +A Y +B Y +B Z +A Y +B Z +B X +C Y +C Y +C X +B Z +A Y +B Y +A Y +C Y +C Z +B Z +C Y +A Y +C Y +C Z +A Z +B Z +B X +C Y +C Y +B Y +C X +B Y +B Z +B Z +B X +B Y +C X +C Y +C X +C Y +A Y +A Y +C Y +A Y +C Y +C X +C Y +A Y +B Z +C X +C Y +B Z +C Y +C Y +B Y +B Z +A X +C Y +B Y +B Y +B Z +C Y +B Z +A Y +C Y +B Y +C Y +A Y +C Y +B Z +C Y +A Y +A Y +C Y +A Y +C Y +A Y +A Y +B Z +C X +C Y +B Z +C Y +A X +A Z +C Y +C X +C X +C Y +C Y +B Z +A Z +A Y +C Y +B Z +A Y +A Y +C Y +B Z +A Y +C X +A Y +A Y +C X +B Z +B X +A X +A Y +B Y +A X +B X +C X +C Y +A Y +C Y +A Y +A Y +C X +B Y +C X +B Y +C Y +C Y +A Y +B Z +A Z +B Y +C X +C Y +C Y +B Z +C Z +A Y +A Y +A Z +C Y +A Y +B Z +C Y +C Y +B Y +A Y +A Y +C Y +C X +C X +B Y +B Z +C Y +B Y +B Z +C Y +A Y +B Z +A Y +A Y +A Z +C X +B Z +C Y +B Z +A Y +C X +C Y +C Y +B X +B Z +A Y +A Y +A Y +A Y +A Y +C Y +A Y +A Y +C X +C Y +C Z +B Z +A Z +C Z +A Y +B Z +B Y +A Y +C Y +B Z +A Y +C Y +C Y +A Y +C Y +B Z +B Y +B Z +C Y +C Y +C Y +A Z +C X +B X +B Z +C Z +C Y +C Y +C Y +C X +A Y +C Y +A Y +A Y +B Z +A Y +C Y +C Y +A Y +C Y +A Z +B X +A Y +C Y +A Y +A Z +A Y +A Y +B Z +B Y +B Z +C Y +B Z +C X +A Y +C Y +A Y +A Y +A Y +B Z +B Z +C Y +B Z +B Y +C X +A Y +C Y +A Y +B Z +C X +B Y +C Y +B Z +C Y +A Y +C Y +C Y +B Y +B Z +C Y +B Z +B Y +C Y +C X +A Z +C Z +C Y +C Y +A Y +A Y +C X +C Y +C Y +C Y +C X +B Z +C X +C Y +A Y +A Y +B Z +A Y +A Y +C Y +A Y +B Z +C X +C Y +C Y +C Y +C Y +C X +B Z +A Y +B Y +C Y +C X +B Z +C Y +A Y +A Y +B Z +C Y +A Y +C Z +C X +B Z +C Y +A Z +B Z +A Y +A Y +C Y +B Z +B Z +A Y +C Y +B Y +C Y +A Y +A Y +B Y +B X +B Z +C Y +A Y +C Y +A Y +A Y +B Z +B Y +A Y +A Y +A Y +C Y +B Y +C Y +A Y +C X +C Y +C Y +B Z +B Z +C Y +C Y +A Y +B X +C X +A Y +C Y +C Y +C Y +A Y +C X +B Z +A Y +C Z +B Y +B Y +C Z +A Y +C Z +C Y +C X +B Y +A Y +C X +C X +C Y +C X +C X +B Z +C Y +B Y +A Y +B Y +A Y +B Z +C X +C Y +C X +C Z +C X +B Z +C X +C Y +C Y +C Y +B Z +A Y +C Y +C Y +C Y +B Z +A Y +C X +C Y +C Y +C Y +C X +A Z +C Y +C Y +C X +B X +B Z +A Y +B Z +C Y +B Y +B Z +A Y +B Z +C Y +A Y +A X +C X +C X +C Y +A Y +B X +C Y +B X +B Z +C X +A Y +B X +C X +A Y +C Y +C Y +C Y +A Z +C Y +A Y +B Z +B Z +A Z +C Y +A Y +B Z +C Z +C X +C X +C X +A Y +A X +C Y +A Y +B Y +C Y +C X +C Y +C Y +A Y +B Z +C Y +B Z +A Y +C X +C Y +B Z +C Y +C Y +B Y +A Y +A Y +A Z +C Y +B Z +B Y +B Z +B Y +A Y +C Y +C Y +C X +C Y +C Y +B Z +C Y +C Y +C X +B Y +B Z +C Y +C Y +A Y +C Z +C Y +B Z +A Y +A X +A Y +C X +C Y +C Y +B Z +A Y +B X +C Z +C Z +C X +C Y +B Z +C Z +B Z +C Y +A Y +C Y +A Y +B X +C X +C Y +B Z +C Y +B Y +B X +B X +B Z +C Y +C Y +B Y +B Z +C Y +A Y +B Z +C Y +B Z +C Y +B Z +C Y +A Y +A Y +C Y +C Y +B Y +B Z +C Y +B Z +C X +B Z +C Y +B X +C X +B Z +A Y +C X +B Z +C Y +A Y +B Z +A X +B Z +B Z +B Z +C Y +C Y +C Y +C Y +A Y +A Y +B Z +B X +C X +C Y +B Y +A Y +A Y +B Z +C Y +A Y +A Y +C Y +C X +C Y +C X +C Y +C Y +C Y +B Z +C Y +C X +B Y +C Y +C Y +C Y +A Z +C X +C Y +A Y +C Y +B Z +B Y +C Y +A Y +A Y +C Y +C Y +C X +A Y +C Y +A Z +A Y +B Z +A Y +C X +C Y +C Y +B X +B Z +C X +B X +C Z +C X +B Z +B Z +C Y +C X +B Z +B Z +B Z +C Y +C Y +A Y +C Y +B Y +B X +C Y +C Y +C Y +B X +C X +B X +C Y +A Y +C Y +C X +C Y +C Y +B X +B Z +A Z +B Z +A Y +B Z +C X +B Z +C Y +C Y +C Z +A Y +C Y +C Y +A Z +B Y +C Y +A X +A Y +B Y +C Y +B Z +C Y +C X +C Y +B Z +A Y +C X +C Y +C X +C Y +C Y +C Z +A Y +C Y +B Z +A Y +C Z +C Y +A Y +C Y +C Y +C Y +C Y +A Y +C Y +C Y +C Y +C Y +B Z +C X +A Y +A Y +C Y +B Y +C Y +C Y +A Z +C Y +B Y +C Y +B Z +C X +A Y +C Y +C Y +B Z +C Y +A Y +A Y +C Y +B Z +C Y +A Y +B Z +C Y +C Y +B Z +C X +B Z +B Z +C Y +C Y +A Y +C X +A Y +C Y +B Z +A Y +B Z +A Y +C X +C Y +B Z +B Y +B Z +A Y +B Z +C Y +B Z +C Y +B Y +A Y +B Z +B X +B Z +C Y +B Z +B Z +B Z +A Y +A Y +C Y +B Z +B Z +C X +B Z +C Z +A Y +B Z +B Z +C Y +B Z +B Z +C X +C Z +A Z +C Y +C Y +B X +C Z +C Y +A Y +B Z +C X +B Z +C Y +C Y +B Z +B Z +B Z +C X +C Y +C X +C X +A Y +B Z +B Y +C Y +C Y +B Z +C Y +C Y +C Y +C Y +C Y +B X +A Y +A Y +B Y +C Y +B Y +C Y +B Y +B Z +C Y +C Y +C X +B Y +A Y +B X +B Z +C X +A X +C Y +A Y +A Y +C X +B Y +A Y +B Z +C X +B Z +C Z +C X +C Y +C X +C Y +C Y +C Y +B Y +C Z +C X +B Z +C Y +C X +C X +B Y +C Y +C Y +C Z +B Z +C Y +C Y +B Y +C Z +C X +B Z +C Y +C X +C Y +B Z +C Y +C Y +A Y +B Y +C X +C Y +C Y +C Y +B Y +B Y +C Z +B Z +C Y +B Z +A Z +C X +B X +C X +A Y +C Y +A Z +C X +C Y +A Y +A Y +B Y +A Y +C Y +B Y +C X +C X +C X +C X +C Y +C Y +A Y +B Z +C Y +A Z +C Y +A Y +B Z +B Z +C Y +A Z +C Y +C Y +C Y +B Z +C Y +C Y +A X +A Y +A Z +C Y +A Y +B X +A Y +B Z +B Y +B Z +B Y +C X +C X +A Y +B Z +B Y +C X +B X +B Y +A Y +C Y +C Y +C Y +B Z +C Y +A Y +B Z +C X +B Z +B Z +B X +B Y +C Y +C Y +C X +B Z +C Y +C Y +C Y +A Y +C Y +B Z +B Y +C Y +C X +C X +B X +B Z +A Z +C X +A Y +B Y +C Y +A Y +B Y +C Y +C Y +C Z +C Y +C X +A Y +C Y +C Y +B Z +C Y +C Y +C Y +C Y +A Y +B Z +B Z +C Y +C Y +C Y +C Y +C Y +B Z +C Y +C Y +C X +A Y +A Y +C Y +C X +A Y +B Z +A Y +C X +C Y +C Z +C Y +A Z +A Y +A Y +B Y +C Y +C Y +B Y +C Y +A Y +C X +B Z +C X +A Y +B Z +C X +A Y +C X +C X +A Z +A Y +B Y +A Y +B Y +A Z +C Y +C Y +C Y +B Z +C Y +A Y +B Z +B Y +C Y +B Y +C Z +A Y +B Y +C Y +B Y +A Y +B Z +C Y +C X +C Y +A Y +A Z +C Y +B Z +C Y +B Y +A Y +C X +A Z +C Z +C X +A Y +C X +C X +C Y +C Z +A Y +A Y +C Y +A Y +C Y +B Z +C X +A X +C X +C Y +C Y +C Y +C Y +B Z +B Z +B Z +C X +C Y +B Y +C Y +B Y +C Z +A X +B Y +C X +B Y +C X +B Y +C Y +B Z +C X +A Y +B Z +C X +A X +C Y +B Z +B Z +C X +B Z +B Z +C X +C Y +C Z +B Z +C Y +C Y +C Y +B X +A Y +B Y +B Z +B Z +C X +A Z +C Y +C Y +A Y +A X +A Y +C Y +B Y +C Y +A Y +C X +C Y +C Y +C Y +C Y +C Y +C Y +C Y +C Y +C Y +C Y +B Z +B Z +A Y +B Y +C Y +C Y +C X +B Z +A Y +C Y +B Z +C Y +A Y +C X +B X +C Z +A Y +C X +B Y +C X +B Z +A Y +C Y +C Y +C Y +B Z +B Z +A Z +C Z +A Y +B Z +C X +C Y +A Y +C Y +C Y +C X +B Z +C Z +C Y +B Z +A X +B Y +A Z +B X +C X +A Y +C Y +B Z +B Z +C Y +A Y +B Z +B Z +A Y +A Y +B Z +B Z +A X +B Z +C Y +C Z +C Y +C Y +B Z +C Y +A Z +A X +C X +B Y +B Z +C X +B Z +A X +A Y +A Y +B X +B Y +B Z +C X +C X +C X +C Y +C Y +B X +C Y +C Y +A Y +C X +A Y +B Z +A Y +C Y +B X +C X +C Y +A Y +C X +C Y +C Y +B Z +A Y +A Y +A Z +C Y +B Z +A Z +B X +A Z +C Y +B X +A Y +C Y +C Z +A Z +C X +A Y +B X +C Y +C Y +C X +C Z +A Y +A Y +C Y +B Z +C Y +C X +B X +A Y +B Y +B Z +B Z +C Y +C Y +A Y +B Z +B Z +C Y +C Z +C Y +C Y +C X +C X +A Y +B Z +A Y +B Z +B Z +C X +B X +C X +C Y +B X +B Z +C X +C X +C X +B Z +B Y +B Z +C Y +C Y +B Z +B Y +B Z +C Y +B Y +A Y +A Y +B Y +A Y +B Z +A Y +C X +A Y +C Z +B Y +C Y +C X +C X +C Y +C X +C Y +A Y +B Z +C X +C Y +C Y +C Y +C Y +C Y +B Y +A Y +B Z +C Y +A Z +C Y +B Z +C X +C Z +A Y +B Z +C X +C Y +B Z +C Y +A Y +C Y +C X +C X +C Y +A Y +B Y +A X +C Y +C Y +A Y +C Y +A X +C Y +B Y +C X +B Z +B Z +B Y +C Y +C Z +C X +B Z +B Z +B Y +C Z +A Y +C Y +C Y +B Y +C X +A Y +C Y +C Y +A Z +A Y +B Y +C Y +C Y +C X +B X +C Y +A Y +B Z +B Y +A Y +B Y +C Y +C X +C Y +C Y +C X +A Y +B Z +C X +C Z +B X +C Y +C X +C Y +C X +C Y +B Z +A Y +A Y +B Z +C Y +C Y +B Z +C Y +C X +B Z +C Y +B Z +C X +C Y +C X +A Y +C Y +A X +C Y +C X +A Y +C Y +A Y +C Y +A Y +C X +A Y +A Y +A Y +B Y +B Z +C Y +B Z +A Y +C Y +C X +B X +C Y +B Z +B X +B X +B Y +C Y +C X +C Y +C X +B Y +B Z +A Y +B Y +C Y +C Z +A Y +C Y +B Y +A Y +C X +C Y +A Y +C Y +A Z +C Z +C Y +B Z +C Y +C Y +B Y +A Y +C Z +A X +C Y +B Z +C Z +B X +C Y +C X +C X +B Z +B Z +B X +B Y +C Y +B Z +B Z +B Z +A Y +B Z +C Y +C Y +A Y +A X +C Z +A Y +C Z +C Y +C X +C Y +C X +B Z +C Y +A X +B Z +B Y +C Y +B Y +C Y +C Y +A Y +B Z +B Y +C Y +C X +C Y +C Y +B Z +A Y +B X +C Y +C Y +C Y +A Y +C Y +C Y +C X +C Z +C X +B Y +A Y +C Z +B Z +B Z +A Y +C Y +C X +B X +C X +B Z +A Y +C Y +C Y +B Z +A Y +B Y +C X +B Y +B Z +B Z +B Z +B X +B Y +B Z +C X +A Z +A Y +C Y +A Y +C Y +C Y +B Z +B Z +C X +B X +C Y +A Z +C Y +C X +C Y +B Y +C X +B Z +C Y +C X +B Z +A Y +A Y +C Y +A Y +A Z +C Y +A Z +A Y +C Y +C X +B X +C Y +C Y +C X +A Y +C X +C Y +B Z +B X +C Y +A Y +B X +C Y +B Y +C X +A Y +B Z +C Y +C Y +B Z +A Y +A Z +C Y +C Y +C X +A Y +B Z +B Z +B Y +B Z +A Y +C Y +A Y +B Y +A Y +C X +C Y +A Z +A Z +B Y +A Y +C Y +A X +C Y +C Y +B Z +C Y +C X +C Y +A Y +C Y +C Y +C Y +C Y +A X +C Y +B Y +C Y +A Y +C Y +C X +C X +C Z +B Z +A Y +B X +C Y +C Y +C Y +A Y +B Z +B Z +C Y +A Y +B Z +A Y +C X +C X +A Y +C Z +C Y +B Z +B Z +A Y +A Y +C Y +A Y +C Y +A Y +B Z +C X +C Y +C Y +A Y +C Y +A Y +A Z +B Y +C Y +C X +A Y +C X +A X +C Y +C Y +B Y +C Y +B Z +A Y +C X +B Z +A Y +C X +B Z +A Y +C Y +B Z +A Y +B Z +C X +C Y +C X +C Y +B Z +C Y +B Y +C Z +B Z +C Y +C Y +A X +C X +A Y +C Y +B Z +A Y +A Z +B Z +C Y +C Y +A Y +A Y +A Y +C X +C Y +A Z +C Y +C Z +A Y +A Y +C Y +C X +C X +C Z +C Y +C Z +B Z +A Y +B Z +B Z +C X +A Y +B Y +A Y +A Z +A Y +C Y +C Y +C Z +A Y +C Y +B Y +C X +C X +B X +C Y +A Y +C Z +A Y +B Z +B Y +C Y +A Y +A Y +C Y +C Y +C Y +C Y +C Y +C Y +C Y +A Y +B Y +A Y +B Y +B Y +C X +C X +C Y +A Y +C Y +C Y +C Z +C Y +C Y +B Y +C Y +B Y +A Y +C Y +B Z +C X +C Y +A Z +A Z diff --git a/rust/2/part1.rs b/rust/2/part1.rs new file mode 100644 index 0000000..94598ae --- /dev/null +++ b/rust/2/part1.rs @@ -0,0 +1,55 @@ +use std::{ + fs::File, + io::{BufRead, BufReader}, +}; + +fn main() -> () { + let path = "input.txt"; + + let input = File::open(path).unwrap(); + let buf = BufReader::new(input); + + let score: i32 = buf + .lines() + .map(|line| { + let line = line.unwrap(); + let opponent: i32 = match &line[0..1] { + "A" => 0, + "B" => 1, + "C" => 2, + _ => panic!("Invalid input"), + }; + let you: i32 = match &line[2..3] { + "X" => 0, + "Y" => 1, + "Z" => 2, + _ => panic!("Invalid input"), + }; + pick_score(you) + win_score(opponent, you) + }) + .sum(); + + println!("{}", score); +} + +/// Transforms the "wrapping" cases of RPS into the trivial "middle" case where A wins if A > B +fn normalise_mod3(opponent: i32, you: i32) -> (i32, i32) { + let i = match opponent { + 0 => 1, + 2 => 2, + _ => 0, + }; + ((opponent + i) % 3, (you + i) % 3) +} + +/// Get score component for losing (0 points), drawing (3 points) or winning (6 points) the round +fn win_score(opponent: i32, you: i32) -> i32 { + let (opponent, you) = normalise_mod3(opponent, you); + let is_won = you - opponent.signum() + 1; // 0 on loss, 1 on draw, 2 on win} + 3 * is_won +} + +/// Get score component for your pick (trivial) +fn pick_score(you: i32) -> i32 { + you + 1 +} diff --git a/rust/2/part2.rs b/rust/2/part2.rs new file mode 100644 index 0000000..55029ee --- /dev/null +++ b/rust/2/part2.rs @@ -0,0 +1,36 @@ +use std::{ + fs::File, + io::{BufRead, BufReader}, +}; + +fn main() -> () { + let path = "input.txt"; + + let input = File::open(path).unwrap(); + let buf = BufReader::new(input); + + let score: i32 = buf + .lines() + .map(|line| { + let line = line.unwrap(); + let opponent: i32 = match &line[0..1] { + "A" => 0, + "B" => 1, + "C" => 2, + _ => panic!("Invalid input"), + }; + match &line[2..3] { + "X" => 0 + pick_score(opponent, -1), + "Y" => 3 + pick_score(opponent, 0), + "Z" => 6 + pick_score(opponent, 1), + _ => panic!("Invalid input"), + } + }) + .sum(); + + println!("{}", score); +} + +fn pick_score(opponent: i32, outcome: i32) -> i32 { + (opponent + outcome + 3) % 3 + 1 +} diff --git a/rust/2/sampleinput.txt b/rust/2/sampleinput.txt new file mode 100644 index 0000000..726cbe3 --- /dev/null +++ b/rust/2/sampleinput.txt @@ -0,0 +1,11 @@ +A X draw = 1 + 3 = 4. Also my parsing just takes the 1st and 3rd characters of +the lines so I can type anything else after that and it'll work as an input +file kek +A Y win = 2 + 6 = 8 +A Z loss = 3 + 0 = 3 <- not 9 +B X loss = 1 + 0 = 1 +B Y draw = 2 + 3 = 5 +B Z win = 3 + 6 = 9 +C X win = 1 + 6 = 7 <- not 1 +C Y loss = 2 + 0 = 2 +C Z draw = 3 + 3 = 6 diff --git a/rust/2/thoughts.txt b/rust/2/thoughts.txt new file mode 100644 index 0000000..c826a15 --- /dev/null +++ b/rust/2/thoughts.txt @@ -0,0 +1,55 @@ +A X draw +A Y win +A Z loss + +B X loss +B Y draw +B Z win + +C X win +C Y loss +C Z draw + +######### + +1 1 draw +1 2 win +1 3 loss <-- !! + +2 1 loss +2 2 draw +2 3 win + +3 1 win <-- !! +3 2 loss +3 3 draw + +######## + +1 1 draw +1 2 win +1 0 loss <-- !! + +1 0 loss +1 1 draw +1 2 win + +1 0 win <-- !! +1 1 loss +1 2 draw + +################# +part2 +################ + +0 X lose: 2 => 3pts == 0 + 3 - 1 mod 3 = 2 +0 Y draw: 0 => 1pts == 0 + 3 - 0 mod 3 = 0 +0 Z win: 1 => 2pts == 0 + 3 + 1 mod 3 = 1 + +1 X lose: 0 => == 1 + 3 - 1 mod 3 = 0 +1 Y draw: 1 == 1 + 3 + 0 mod 3 = 1 +1 Z win: 2 == 1 + 3 + 1 mod 3 = 2 + +2 X lose: 1 == 2 + 3 - 1 mod 3 = 1 +2 Y draw: 2 == 2 + 3 + 0 mod 3 = 2 +2 Z win: 0 == 2 + 3 + 1 mod 3 = 0