diff --git a/src/bin/d2.rs b/src/bin/d2.rs new file mode 100644 index 0000000..3d557e1 --- /dev/null +++ b/src/bin/d2.rs @@ -0,0 +1,47 @@ +const INPUT: &str = include_str!("../input/d2.txt"); + +fn main() -> anyhow::Result<()> { + let score_p1 = INPUT + .as_bytes() + .chunks(4) + .map(|l| play_points(l[0] as char, l[2] as char)) + .sum::(); + println!("{score_p1:?}"); + let score_p2 = INPUT + .as_bytes() + .chunks(4) + .map(|l| result_points(l[0] as char, l[2] as char)) + .sum::(); + println!("{score_p2:?}"); + anyhow::Ok(()) +} + +fn play_points(opponent: char, player: char) -> usize { + match (opponent, player) { + ('A', 'X') => 4, + ('A', 'Y') => 8, + ('A', 'Z') => 3, + ('B', 'X') => 1, + ('B', 'Y') => 5, + ('B', 'Z') => 9, + ('C', 'X') => 7, + ('C', 'Y') => 2, + ('C', 'Z') => 6, + _ => unreachable!(), + } +} + +fn result_points(opponent: char, result: char) -> usize { + match (opponent, result) { + ('A', 'X') => 3, + ('A', 'Y') => 4, + ('A', 'Z') => 8, + ('B', 'X') => 1, + ('B', 'Y') => 5, + ('B', 'Z') => 9, + ('C', 'X') => 2, + ('C', 'Y') => 6, + ('C', 'Z') => 7, + _ => unreachable!(), + } +} diff --git a/src/input/d2.txt b/src/input/d2.txt new file mode 100644 index 0000000..7b6fba3 --- /dev/null +++ b/src/input/d2.txt @@ -0,0 +1,2500 @@ +B Z +C Z +B X +A Y +B X +B X +A X +B Z +C Z +B Y +A Z +C X +B X +C X +B Z +B Z +C Y +B Z +B Z +C Z +B Z +B Y +B X +B Y +C Z +C Y +C Z +A X +C Z +B X +C Z +B Y +B X +A Y +A X +A Y +B Y +B X +B X +A Z +B Z +B Y +C Z +B X +C Y +B Z +B Y +C Y +A X +A Y +C Y +C Z +B Z +B X +C Z +A X +B X +A Y +B Z +C Y +A Y +C Z +C Z +A X +B X +C Z +A Z +A Z +B X +B X +B X +A Y +B X +B X +C Y +B X +C Z +C Y +B Z +A X +B X +B X +A X +C Y +C Y +A X +A X +B Z +B X +C Z +B X +B Z +A Z +B Z +A X +A X +B Z +A X +B X +B X +B X +A Y +A Y +A Y +B X +C Y +B Z +A Y +B X +A Z +C X +A Z +B Y +B Z +C Z +B Z +A Y +B X +B Z +B Z +B Z +C Y +B X +A Y +B Z +B Y +B Z +B X +A X +A X +B Y +B X +C Y +A Y +A Z +B Z +B Z +B Y +B X +B Z +B X +B Z +B Z +B X +B Z +B Z +B Z +B X +A Y +B X +B Z +A X +B Z +B Z +B X +C Y +A Z +B Z +C Z +B X +A Z +B X +A Z +C Y +C Y +A Y +A Y +B Z +A Y +A Y +C Z +A X +B X +B X +C Y +A Z +B Y +C Y +B Z +B Y +B Z +A X +B Z +C Z +B X +B Y +A X +C Z +B Y +B Z +B Z +A Z +B X +A Y +C Y +C Y +B Z +B Z +B X +B Z +B Z +B Y +B Z +B Z +B Z +B X +B X +B Z +B Y +B Z +C Y +A Z +A Y +B X +A X +B Z +B Z +A Z +B Z +B Z +B X +A Y +C Z +C Y +B Z +B Z +C Z +A X +B Z +B Z +B X +A Y +A Z +B Z +C Y +C Z +A Y +B Z +B X +C Z +A X +C Z +B Z +C Z +B X +C Y +B X +B Z +B X +A Y +A Z +B Z +B X +B Z +C Z +C Z +C Y +B X +B Y +B Z +C Z +C Z +B Z +B X +B Z +C Y +A Y +C Y +B X +C Y +B Y +C X +B X +A Y +C Z +B X +B Z +B Y +B X +B X +A Z +B Z +C Z +B X +B X +A X +B X +B X +C X +C Y +A X +B X +B Z +B X +A Y +B X +B Y +B X +B X +B Y +B X +A Z +B X +B Z +B X +C Z +A Z +C X +B Z +A Y +B X +B X +A Z +A Y +B Z +B Z +A Y +C Z +B X +B X +C Z +B Z +B Z +B Z +A Y +A Y +A X +B X +C X +B X +B Z +B X +A X +B X +B Z +B X +A Y +B X +C Y +B X +B Z +B Z +C Z +C Z +C Y +B Z +B X +B Z +A Y +C Y +B X +C Y +C Z +A X +B Z +A X +B X +C Y +A X +A Y +B X +A Y +A Z +C X +B X +B Y +B Z +B X +A Y +B Z +B X +A X +B X +B X +B Y +B Z +B Z +B X +B X +A X +B Z +B Z +B Z +A Y +C Z +A X +A Y +B Z +B X +C Y +A X +B X +B Z +B Y +A Y +B Z +B Z +B X +A Y +A Y +A Y +C Y +B X +B X +B Z +B Z +A Z +A Y +B Z +B X +B X +B X +A X +B X +C Y +B Z +A Y +B X +A Y +A X +C Y +B Z +C Z +B Z +B X +B Z +A Y +B Z +C Z +B Z +B Z +A X +B Z +B Z +B X +B Z +B Z +B Z +C X +B X +B X +A Y +A Y +B X +B X +C Z +B X +B X +C Y +C Y +C Z +B X +B Z +B Z +B Z +A Y +A Y +A X +C Z +A Z +A X +B Z +C Z +A X +B X +B Y +C Z +B Y +B Z +C Y +C Y +C Y +B Z +B Z +B X +B Z +B Y +B X +B Z +A X +B X +A Y +A X +B Z +A Y +C Z +C X +B X +B X +C Y +B Z +A Y +B Z +B X +C X +B Z +A X +A Y +A Y +C Y +C Z +C Z +B X +A X +B X +B X +B Z +C Y +B X +C Z +C Y +B X +B Z +B X +B X +C Z +A Y +B Z +B X +A X +B Z +B Z +B X +B X +C Z +C Z +B Y +C Z +B Z +C Y +B X +B X +C Y +B X +B X +A Z +B X +B X +A Y +B X +B X +B X +B Z +B Z +C Z +A Y +B X +B Z +B X +B Z +B Z +B X +B Y +C Z +A Z +A Y +C Y +B X +A X +B Y +A X +B Y +A Y +C X +B X +A Y +B Z +B Z +B X +B Z +B Z +B X +B X +A Y +B Z +A Y +B Y +B Y +B Y +B X +B Z +B Z +A Y +A X +C Y +B X +B X +A Y +B X +A Y +B Z +B Z +B Y +B Z +C Z +C Z +C Y +B Z +C Y +A X +B X +C Y +C Z +B X +C Y +A Y +B Z +B Z +A X +C Y +B X +A Y +C Z +B Z +B X +A Y +C Z +A X +A Y +C X +C Y +A Y +B Z +B X +A Z +B Z +B Z +B X +C Z +B X +B Z +B X +B X +B Z +B X +A X +A Y +B Y +A Y +A Y +B Z +C Z +B X +B Z +A Y +A Y +A Z +B X +A Y +A Y +B X +A X +B Y +B Z +B Y +A Z +C Y +B Z +A X +A Z +C Z +B X +B Z +B X +C Y +A X +B Z +A Y +B X +B Z +B X +C Y +B Z +B X +A Y +B X +C Y +C X +A X +B Z +B X +A X +A Z +B X +B Y +A Z +B Z +C Y +A Y +C X +B Z +A Y +C Y +C Z +B Y +C Y +A Z +B Z +B Z +A Y +B X +C X +A Y +A Y +A Z +B X +B X +B Y +A X +B X +B Z +B Z +B X +B Y +C Z +C Y +A Y +A Y +C X +C Z +C Y +C Y +A Y +A Y +B Z +C Y +C Y +A Y +A Y +C Z +B Z +A X +B Y +B Z +B Z +B Z +B Z +B X +A Y +A Y +B Z +A Y +C X +A X +C Z +B Z +B Z +A X +C Y +B Z +B X +B X +B X +B Z +C Y +B Z +B X +B X +B Z +C Y +B X +A Z +B X +B Z +A X +C X +A X +B Z +B Z +B Z +B Z +A Y +B Z +B Y +B Z +B Z +B X +B Z +B Z +A Y +A X +B X +A Z +B Z +A Z +B X +B X +B Z +A Y +B Y +A X +B X +B X +A Y +B X +B X +B Z +B Y +B Z +C Z +B X +C Y +B Z +B Z +C Y +B Z +B Z +B Z +B Z +B Z +C Y +A Y +A X +B Z +C Y +B Y +C Z +B Z +B Z +C Z +B Z +B Z +B X +A Y +B Z +B Z +C Y +A Y +B Z +A Y +B Z +C Z +C Y +A Y +A Z +B X +A X +B Z +B Y +A X +A X +A Y +B X +C Y +B X +B Z +A Y +B X +B X +A Y +A Z +C Z +C Y +A Y +B X +B Z +B X +C Z +A Y +B X +A Y +B Z +B X +C Y +A Y +B Z +C Y +B Y +B X +C Y +A Y +B Z +C Y +B X +A X +B Z +B Z +C Y +A Y +B Z +C Y +B X +A X +A Z +C X +B Z +B Z +C Y +B Y +C Z +C Y +A X +A Y +A X +A Y +C Z +C Y +C Z +C Z +C Y +A X +C Z +B X +C X +B X +A Z +B X +C Z +A Y +A X +A Z +C Z +B X +C Y +A Y +C Y +C Z +C Y +C Y +C X +B Z +B X +B Y +A X +B Z +B Y +C Y +C Y +C Z +A Z +A X +A Y +C Z +B Z +B X +B Z +B Z +B X +B Z +C Y +A X +B X +A Z +B X +C Y +B Z +B X +B Z +C Z +C Z +A X +B Z +B X +A Y +B Z +A Y +B Y +C Z +C Y +A X +A Y +C Y +C Z +B X +C Y +B Z +B Z +B Z +C Z +B X +C Y +B Z +C Z +B X +A Y +A X +B Z +B Z +C Y +B X +B Z +C Y +A Y +C Y +A Y +B X +C Z +A X +A Y +C Y +C Z +B Z +B Z +B Z +A Y +A Y +C Z +A Z +B X +A X +B Z +C Z +B X +C Y +B Z +B X +B Z +B Z +B X +C Z +B X +B Z +B X +A X +B X +A X +B Z +B Z +A Y +B X +B Z +B Z +C Z +C Y +B X +B X +B Y +C Z +C Y +A X +B Z +C Y +A Y +B X +B X +A X +A Y +C X +B Z +B Z +A Y +A X +C Y +B Z +B Z +C X +C Y +A Y +B Z +C Y +B Z +B X +B Z +C Y +B X +B Z +B X +B X +B X +B Z +B Z +C Y +B X +B Z +A Z +A Y +A Z +A Y +B X +C Z +A Y +B X +B X +C Z +B Z +A X +B X +C Y +A Y +A X +B Z +A X +A Y +B Z +B X +B Z +C Y +A X +A X +B X +B Y +C X +A X +B X +B X +A Y +C Y +B Z +B Z +C Z +B X +B Z +B X +B Y +B Z +B Z +B X +B Z +A X +B X +A Y +A Z +B Z +B X +A Y +A X +B Z +B X +C Z +A Y +A Y +C Z +B X +A X +C Y +B X +B Z +B X +B Z +B X +C Y +B Z +C Y +C Z +A Z +C Z +A X +C Z +B Y +B X +B Z +C Z +A Y +A Z +A X +B Z +A X +B Z +B X +A Z +C Z +C Y +B Z +C X +A X +A X +B X +A Y +A X +B Z +B Z +B Z +B Z +A X +A X +A Y +B Z +B Y +B Z +A Y +B Y +A X +A Z +B Z +A Y +B X +A X +A X +B Z +A Z +B Y +B Z +C Z +C Y +B X +B Y +A X +A Z +B Z +A Z +B Z +A X +B Z +A Z +B Y +A Z +C Y +B Z +C Z +B Z +B X +B Z +C X +A X +B X +C Z +B X +B Y +A X +B X +B X +A Z +B X +B Z +C Z +B X +B X +B X +A Y +A Z +C Y +A Y +B X +A Z +A Z +B Y +B Y +C Z +C Z +B Z +C Z +B Z +A Y +A X +C Y +B X +B Z +B Z +B Z +B X +B Z +B Z +A X +A Y +B X +B X +B X +C X +C Y +C X +B X +B Z +B Y +C X +A Y +A Y +B Z +C Y +C Z +C Z +C Z +A Y +B Y +B Z +B X +B Z +B Y +A X +C Y +C Z +A Y +B Z +A X +A X +A X +B Z +B X +C Y +B Y +C Z +B Z +B Z +C Y +B Z +C Z +B X +B Y +A Y +C Z +A Y +B Z +B Z +B X +B X +B Z +B Z +B X +B X +C Z +B Y +B Z +B X +C Y +C Z +A Y +C Z +B Z +C Y +B X +C Z +A X +B Z +B X +C X +C Z +B Z +C Z +A X +B Z +C X +B Z +C Z +A Y +B Z +B Z +C Z +B Y +B Z +B X +B X +A X +A Y +A Y +C Y +C Y +C Y +B Z +B Z +A Y +B X +A Z +C Y +C Z +B X +A Y +A Y +C Z +C Z +C Y +A Z +B Z +B Z +B Z +A Y +A Y +C Z +B Z +B X +C Z +B Z +C Y +A Z +B X +B Z +A Z +B X +A X +B X +A X +B X +B Z +B Z +B Z +C Y +C Z +A Y +B X +A X +C Z +C Y +C Z +B Z +B X +A Y +A X +C Z +B X +C Z +C Y +A X +B X +C Z +B X +B Z +C Y +B X +A X +A Y +A X +B Z +B Z +C Z +B X +A Y +B X +B X +A Z +B Y +B Z +B X +B Z +B X +B Y +B X +B X +A Y +A Y +A X +C Y +A Y +B X +C Y +B Z +B Z +A Y +B X +C Y +C Z +C Y +B Z +C Z +C Y +A Y +A Y +B Z +B X +A X +A Y +B X +B Z +B X +C Z +C Z +A Y +B X +B Z +B Y +C X +C Y +B Z +A X +B Z +A Y +A X +A Y +B X +B Z +B Z +B X +B Z +C Z +B Z +A Y +B Z +C Z +B X +B X +B X +B X +B X +B X +B Y +B Z +B X +B Z +A Z +B Z +C Y +A X +B Z +B Z +C Z +B X +A Z +C Y +B Z +B X +A X +A Y +C Y +B Y +A X +B Y +B X +B Z +C Y +B Z +C Y +A Z +B Z +C Y +C Z +A Y +C X +C Y +B Z +B X +B Z +B X +B X +A Y +B Y +B X +B X +C Y +B X +C X +B Y +A Y +C Y +B X +B X +A X +B X +A X +A X +B X +B X +A Z +C Z +C Y +B X +B X +C Z +B X +C Y +C Z +A Y +B Z +C Y +B X +B Y +B X +B X +C X +A X +B X +B Z +B Z +C Y +C Y +B Y +A Y +B Z +B X +B X +A Z +B Z +B X +B X +A Y +B X +B X +B X +A X +B X +B X +B X +B Z +B X +A Z +B Y +B X +B Z +B Z +B Z +A X +B Z +B Z +B X +B Z +C Z +C Y +A Z +C X +C Y +A Y +B X +B Z +C Z +B X +C Z +B Z +A Z +A Y +B Y +B Z +B X +A X +B Z +C Z +C Y +B Z +A X +A Y +A Z +B Z +C Y +A Y +B X +C Z +A Y +B X +B Z +B X +C Y +B X +B X +B X +A Z +B Z +C Z +B Z +C Y +B Z +C Z +B Z +B X +C Y +C Z +A X +C Z +C Y +C Y +B X +A Y +A Z +B X +B Z +B Z +B Z +A X +A Z +B Z +A Z +A Y +C Z +B Y +B Z +B X +B X +C Z +B Z +B Z +B Z +B Z +B X +B X +A X +A X +A Z +B Z +B X +B Z +B Z +C X +A Y +B Y +B X +B X +B Z +B X +B X +B X +C Y +B Z +B X +C Y +B Z +A Y +B Y +B Z +A Y +A X +B X +B X +B Z +A X +B Z +A Y +B Z +B X +A X +A X +A X +A Y +B Z +A Y +A X +B X +B Z +A Y +B Z +B X +B X +A Z +B Z +B Z +B Z +B Z +A X +B Z +B Z +B X +B Z +C Y +B Z +B X +B Z +B X +C Y +B X +B Y +B Z +B X +A X +C Y +B Z +B Z +B X +A Y +B X +B Z +C X +C Y +A Y +B X +B X +A Y +B Z +C Y +B Z +A Y +C Y +B Z +A X +A X +A Y +C Y +C Z +B Z +C Z +B X +A X +B X +A Y +A Y +C Z +C Y +A Z +B Z +A Y +B X +B X +B Z +C Z +B X +B X +B Y +C Y +C Z +A Y +A Z +A X +A Y +A Y +A Z +B Z +B Z +C Z +B Z +B X +C Y +A Y +B X +C Z +A X +B Z +B Y +A Y +B X +B X +A X +C Z +C Z +C Y +C Y +A X +B X +B X +B Y +A Z +C Z +A Y +C Z +C Y +B X +C Y +B Z +A Z +B Y +B X +C Y +B Y +B Z +A Z +A X +B X +C Z +C Z +B Z +B Z +C Z +B X +B X +C Y +A Y +C Y +C Z +B Z +B X +A Y +B Y +B Z +C X +B X +B Z +B Z +B X +B Z +B Z +C Y +A Y +B Z +B X +A Y +A Y +B Z +B Y +C Y +B Z +B Y +B Z +A Y +B X +C Z +A X +B X +C Y +B Z +B Y +B Y +B Z +A X +A X +B Z +B X +A X +B Z +B Z +A Y +B X +A X +B X +B X +A Y +C Z +C Y +B Z +B X +B X +B X +A X +B X +B Z +B Z +B Z +B X +B Z +B Z +A Z +C Y +B X +B X +B X +A X +C Z +A Y +A Y +B Z +B X +C Z +B Y +C Z +B X +A Y +C X +B Z +B X +B X +C Y +B X +B X +B Z +A X +B X +A Z +B X +B X +B Z +B X +B X +B Z +A Y +B X +B Z +B X +B X +C Y +B X +B Z +B Z +B X +B Z +C Z +B Y +A Y +B Z +B X +B X +A X +B Z +B X +B X +B Z +C Z +B Z +B X +C Y +B Z +B Y +B Z +B Z +A Z +B X +B X +B X +B X +C Y +A Y +B X +B Z +B X +B X +C Z +C X +B Z +B Z +B X +B Z +A Y +A Z +C Z +A X +A X +A Y +A Y +A Y +C Z +B Z +A Y +C Z +B X +A Z +C Y +A X +A X +A Y +B Z +A X +B X +B X +C Z +B Z +C Z +B Z +A X +C Y +C Z +A X +A Z +B X +C Y +A X +B X +B Z +B X +A Y +A Z +C Z +B Z +A X +B X +C Y +B X +B X +C Y +B X +A Z +A X +C X +B Z +B Y +C Z +C Z +A Y +A Y +A Y +B X +A Z +B X +A X +C Y +B X +A X +B X +B X +B Z +B Z +B Y +A Y +C Z +C Z +B X +B Z +C Z +B X +C Z +B Z +A Y +A X +B X +C Z +C Y +A Y +B Z +C Y +B X +C X +A X +B Z +C Z +B Z +B X +A Y +B Z +A Y +A Y +A Y +C Y +C Y +C Z +A Y +C Y +C Y +B Z +B X +C Y +C Y +B X +B Z +B X +C Z +C Y +C Y +B X +B X +A Y +B Z +B Z +B X +B X +C Z +A X +B Y +B X +A Z +B Z +B X +B Z +C Y +B Z +C Y +B Z +A Z +C Y +A Z +C Z +B X +B X +C Y +B X +C Y +A Z +B X +B Z +B Z +B X +B Z +B Y +A Y +B Z +B X +B Z +A Y +A Y +C Z +A Y +C X +B Z +A Y +A Y +B X +B Z +A Y +C Z +B Z +B Z +C Y +A X +B Z +C Z +B X +B X +B Z +A Y +B Y +C Z +A Y +B X +C Z +B X +B Z +B Z +B Z +B X +B Z +B X +A Z +B X +B X +B X +B Z +A Z +A Y +B Z +B X +B X +C X +A Y +A X +C Y +A Z +A X +C Y +A Y +C Y +A Z +B X +B Z +B Z +C Y +A Y +B X +B X +A Y +C Z +B Z +B Z +A X +A Y +B Z +A Z +A Y +C Z +B X +B Z +B Z +C Y +A Y +C Z +B Z +A Y +C Y +C Y +B Z +B Z +B Z +A Y +B Y +A Y +B Z +C Z +A Y +B X +C Y +A Z +A X +B X +A Z +B Z +A Z +C Z +B Z +A Y +A X +A X +C Y +A Y +B Z +A Y +B Z +B X +A Y +A X +A Y +A X +C Z +A Y +B X +C Z +B X +B Z +B Z +C Y +B Z +B X +A X +B Y +A Y +B X +C Z +A Y +B Z +B X +A Y +C Z +C Y +B Z +B Z +B Z +A X +B X +A Y +B Z +C Y +A X +A Z +B Y +B X +C Y +B Z +C Y +A Z +B X +A Y +A Y +C Y +A Z +B X +A Z +B X +B X +A X +B X +B Z +B X +B Y +B Z +B Y +B X +A Y +A X +C Z +B Y +C Y +B X +C Y +B X +B Z +B X +B X +B Z +B Z +B Z +C Z +B Z +B Z +A X +A Y +B X +B X +B X +C Z +B X +B Z +C Y +A X +A Z +B X +C Z +A X +A X +B Z +A Y +B Z +A X +C X +C Z +B X +B X +C Y +A X +B X +A X +C Y +C Y +A X +A X +B X +B Y +B Z +A X +B X +B X +B X +B Y +A Z +B Z +C Z +B X +B X +B Z +A Y +C Y +B X +B X +A X +C Y +C X +C Z +B X +B Y +A Z +C Z +A X +C Y +B Z +B X +A X +B X +B X +B Z +C Y +A Y +A X +C Z +B Z +A Y +B X +B X +B X +A Y +B X +C Y +B Y +A X +A X +B Y +B X +B X +B Z +B Z +A X +C Z +C Z +A X +C Y +B X +C Z +B X +B Z +B X +B Z +A Y +C Y +B X +B X +B X +B X +B Y +C Y +B Y +B Y +A Y +B Z +C Y +A X +C Z +B X +B Z +C Y +A Y +B X +C Z +B Z +A Z +A Z +A Z +A Y +C Z +A Z +B X +C Z +B Z +B X +C X +A Z +B Y +A Y +B Y +C Y +B X +A X +A X +A Y +A Y +A X +B Y +B Z +B X +A X +C Y +B X +B Y +A Y +C Y +A Y +B Z +B X +B Z +B Z +B X +B X +B Z +B Z +C Z +C Y +A Z +B X +B X +A Y +C Y +B X +B Z +B X +C Z +A Z +B X +C Z +B X +B X +B X +B Z +C Z +C Z +B X +C Y +B Z +C Z +B Z +C Z +B Y +B X +C Z +A X +B X +B X +C Y +B Z \ No newline at end of file