N44ILCJBVFKOSACQKOPJUXR24X3YYABNIC44UP7KKTECV5G2INPAC
[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]
aoc = { git = "https://github.com/irevoire/aoc" }
parse-display = "0.6.0"
A Z
C Z
C Z
A Z
C Y
C Z
A Z
B Z
A Z
A Z
C Z
A X
C Y
C Z
C Y
C Z
A Z
C Z
A Z
A Z
C Z
C Z
C Z
A Y
C Z
C Z
C Y
A Z
C X
A Z
A Z
C Z
B Y
C Z
C Y
C X
C Z
C Z
B Y
A Z
C Z
C Y
B Y
C Z
A Y
B Y
C Z
C Z
A Z
A Z
A X
A Z
B Z
A Z
A X
A Y
C Z
C Z
A Z
C Y
A Z
C Z
B Y
C Z
C Y
B Z
A Z
C Z
A Z
B Z
A X
C Z
A Z
C Y
C Y
C Z
A Z
C Z
C Y
C Z
C Z
C Z
C Z
C Y
A Z
C Z
C Y
A Z
A Z
A Z
C Z
A X
A Z
A Z
A Z
C Z
C Y
C Y
A Z
A Z
C Y
A Z
C Z
A Z
C Y
B Y
C Z
A Z
A Z
C Z
A Z
C Y
A Z
A Z
C Y
A Z
C Z
A Z
A Z
A Z
C Y
A Z
B Z
C Y
C Z
B Y
A Z
A Z
C Z
C Z
B X
B Y
A Z
A Z
A Z
C Z
C Y
B Z
C Z
C Z
C Z
A Y
A Z
A Z
C Y
C Z
A Z
C Z
A Z
A Z
C Z
C Z
C Z
C Y
C Y
C Y
C Z
A Z
C Z
A Z
A Z
C Z
A Z
C Z
A Z
A Z
B Z
A Z
A Z
C Z
C Z
C Z
C Z
C Z
C Y
B X
A X
A Y
A X
C Z
A X
B X
A X
B Z
A Z
C Z
C Z
C Z
C Z
B Z
C Z
A Z
A Z
A Z
A Z
C Z
A Z
A Z
C Z
A Z
C Y
C Z
C Z
B Y
C Z
A X
A Z
A Z
C Y
C Z
C Z
A Z
C Z
A Z
C Z
A Z
C Y
A Z
B Y
C Z
C Z
A Z
C Z
C Y
C Z
A Z
A Z
C Z
C Z
A Z
A Z
C Z
C Y
C Z
C Z
C Z
C Y
C Z
A Z
C Z
A Z
A Z
A Z
B Z
A Z
C Y
A Y
A Z
C Z
A Z
A Z
C Z
A Z
C Z
C Z
C Z
A Z
B Z
C Y
C Z
C Z
B X
C Z
C Y
A Z
A Y
C Z
C Y
B Y
A Z
C Z
A Z
B Y
C Z
C Z
C Z
B Z
B Z
C Z
C Z
C Z
C Z
A Z
A X
B Y
C Z
C Z
A Z
C Y
A Z
C Z
A Z
C Y
C Z
A Z
C Y
C Y
C Z
A Z
C Z
C Z
C Z
A X
A Z
C Z
C Z
C Z
A Z
C Z
C Z
C Y
C Y
C Y
C Z
C Y
C Z
A Z
A Z
C Z
C Z
C Y
A Y
C Z
C Z
B Z
A Z
A Z
A Y
A Z
B Y
A Z
C Y
A Z
C Y
A Z
A Z
A X
B Z
C Y
A Z
C Z
A Y
C Z
C Y
B Y
A Z
B Z
B Z
C Z
A X
B Y
C Z
A Y
C Z
A Z
C Z
B Z
C Y
C Z
A Z
C Z
C Y
A Z
A X
A Z
A Y
C Z
A Z
C Y
A Z
C Z
C Y
C Z
B X
C Z
C Z
C Z
C Z
C Z
C Z
C Y
C Y
C Z
B Z
B Z
C Z
B Z
A Z
C Z
C Y
C Z
C Z
A Z
C Z
B Y
C Z
A Z
C Z
A Z
C Z
A Z
C Y
A Z
C Z
C Z
C Z
C Z
C Z
C Y
C Y
A Z
A Z
C Z
A Z
A Z
B Y
A Z
A Z
C Z
C Y
A Z
C Z
A Z
A Z
C Z
C Z
C Z
A Z
C Y
C Z
C Z
C Y
C Y
C Y
A Z
C Z
A Z
C Z
B Y
A X
C Z
C Z
C Z
C Z
B Z
A Z
C Z
A Z
B Z
B X
C Z
B X
C Z
C Z
A Z
B X
C Z
A Z
A Z
B Y
C Z
C Z
B X
C Y
A Z
A Z
B Z
A Z
C Z
A Z
B Y
A Z
C Z
B Y
C Y
C Z
C X
C Z
C Z
A X
C Z
A Y
C Z
A X
A Z
C Z
C Z
C Z
B Y
C Y
A Z
C Z
A Z
C Z
C Z
C Z
C Y
C Z
C Z
B Y
A Z
C Z
C Z
C Z
A Z
C Z
A Z
B Z
C Z
A Z
C Z
A Z
C Y
C Z
C Z
C Z
C Z
A Z
A Z
B Z
A Z
B Z
C Z
C Z
C Y
C Z
A Z
A Z
C Z
A Z
B Y
A Z
C Z
C Z
A Z
A Z
A Y
A Z
C Z
A Z
C Y
C Z
C Z
C Z
A Z
C Z
C Z
B X
A Z
A Z
C Y
B Z
C Z
A Z
A Z
A Y
C Z
C Z
C Z
A Z
C Z
C Z
C Z
B Y
A Z
B Z
C Y
B Y
A Z
A Z
A Z
C Z
C Y
A Z
A Z
C Z
C Z
A Z
B Z
C Z
A Z
A Z
C Z
A Z
A Z
A X
B Z
C Z
C Z
C Z
C Z
C Y
A Z
C Z
C Y
C Z
B Y
A Z
A Z
C Z
C Z
A Z
C Y
C Z
A Z
A Z
C Z
C Z
C Y
B Y
C Z
A Z
A Z
C Z
C Z
C Y
C Z
A Z
C Z
A Z
C Z
A Z
C Y
C Z
C Z
C Y
A Z
B Y
C Z
A Z
C Z
C Z
B Z
B Z
A Z
C Z
C Y
C Z
C Z
A Z
B Y
B Z
C Z
A Z
C Z
C Y
C Z
C Z
C Y
C Z
A Y
A Z
A Z
A Z
B Y
C Z
C Z
C Z
C Y
C Z
A Z
C Y
B Y
C Z
A Z
A Z
C Z
C Z
A Z
A X
B Z
A Z
C Z
A Z
C Z
C Y
A Z
A Z
C Z
C Z
B Z
B Y
A X
A Z
A Z
A Z
A Z
C Z
C Z
C Z
C Z
C Y
A Z
A Z
C Y
C X
A Z
A Z
A Z
A Z
C Z
C Z
C Z
C Z
C Z
A X
C Z
A Z
B Y
B Y
A Z
A Z
C Z
C Y
C Z
A Z
A Z
A X
A Z
C Z
A Z
A Y
A Z
C Z
B Y
B Y
C Z
B Y
A Z
B Y
C Z
B Z
B Y
C Y
C Z
C Y
C Z
A Z
C Y
C Z
C Z
C Z
A Z
C Z
C Y
C Z
B Z
C Z
A Z
B Y
B Z
C Z
B Y
C Z
A Z
C Z
C Z
A Z
C Y
C Z
B Y
A Z
B X
C Y
C X
C Y
A Z
B Z
A Z
A Y
B Y
C Z
A Z
C Z
C Y
C Z
A Z
B Y
A Z
A Z
B Y
C Y
A Y
C Y
C Z
C Z
A Z
C Z
C Z
A Y
C Z
A Z
C Z
C Z
B Y
B Y
C Z
B Z
A Z
A Z
A Z
C Z
C Y
C Z
B Y
C Y
A Z
A Z
C Z
B Y
C Y
B Y
C Z
A Z
B Y
A Z
A Z
A X
C Z
C Z
C Y
A Z
C Y
C Y
C Z
A Z
A X
C Z
A Z
A Z
A Z
C Z
C Y
A Z
A X
C Z
C Z
C Y
C Y
A Z
C Z
B Z
B X
A Z
C Z
B Y
C Y
A Z
A Z
C Y
C Z
C Y
C Y
B Y
C Z
C Z
A Z
B Y
C Z
C Z
A Z
A Z
B Y
C Z
C Y
A X
A Z
C Y
A Z
C Z
C Z
A Z
C Y
A Z
C Z
C Z
C Z
C Z
A Z
C Z
C Y
B Z
C Z
A Z
C Z
C Z
B Y
C Z
A Z
A Z
A Z
C Y
C Z
A Z
A Z
C Z
A Z
A Z
C Z
A Z
C X
A Z
A Z
C Z
A Y
B Z
A Z
C Y
A Z
C Y
B Z
C Z
B X
C Z
A Z
A Z
C Z
B Y
C Z
C Z
B Z
A Z
B Y
C Z
C Z
C Z
A Z
C Z
B Z
A Z
C Z
A Z
B Z
A X
C Y
A X
C Z
C Y
C Z
C Z
B Y
B Y
C Z
B X
C Z
A Z
A Z
B X
A Z
C Z
C Z
C Z
B Y
C Z
C Y
A Z
B Z
C Y
C Z
C Z
A Z
C Z
A Y
C Z
C Z
C Z
A Z
C Z
C Z
C Y
C Z
B Y
B X
A Z
A Z
C Z
C Y
C Y
C Y
B Y
A X
C Z
B Y
A Z
A Z
C Z
B Y
B Y
C Z
A Z
C Z
C Z
C Z
C Z
B Y
C Z
B Y
B Y
A Z
C Z
B Y
A Z
A X
C Z
C Z
C Z
C Z
C Z
C Z
C Z
B Y
A Z
B Z
A Z
C Z
A Z
C Z
A Z
C Z
A Z
A Z
C Y
A Z
A Z
C Z
C Z
C Z
C Z
B Z
C Z
A X
A Y
B Y
B Z
A Z
C Y
A Z
B X
A Z
C Z
B Z
B Y
C Z
C Z
C Y
C Z
A Z
A Z
A Z
A Z
A Z
A Z
A Z
A X
A Z
A Z
C Z
C Z
C Z
A Z
B Z
C Z
C Z
A X
C Y
A Z
C Z
C Y
A Z
A Z
C Z
C Z
A Z
C Z
C X
C Y
A Z
A Z
C Z
B Y
C Z
A Z
A Z
A Z
B Z
A Y
B Y
C Z
C Z
C Y
C Y
B Y
A Z
A Z
B Y
C Z
C Z
A Z
A Y
A X
A X
C Z
A Z
A X
A Y
A Z
C Y
A Z
C Y
A Z
C Y
B Z
B Y
A Z
C Z
A Z
C Z
C Y
A Z
C Z
A Z
B Y
A Z
C Z
C Z
C Z
A Y
C Z
C Z
C Z
A Z
C Y
A Y
C X
C Z
A Z
A Z
A Z
A Z
A Z
B Y
B Y
C Z
C Z
C Y
A Z
C Z
C Y
C Z
C Y
A Z
A Z
C Z
A Z
C Z
C Y
A Z
C Y
A Z
C Z
C Y
B Y
C Y
C Y
A Z
A Z
C Y
C Z
C Y
B Z
A Z
C Z
C Z
B Y
C Y
A Z
A Z
C Z
A Z
B Z
C Z
A Z
C Z
C Z
A Z
A Y
B Y
C Y
C Z
A Z
C Z
A Z
C Z
A Z
C Y
C Y
C Z
A Z
A Z
B Y
C Z
A Z
C Z
A Z
A Z
C Z
C Z
C Z
C Y
B Y
C Z
A Z
B Z
A Z
A X
C Z
A Z
A Z
C Z
B Y
A Z
A X
C Y
C Z
C Z
C Z
C Z
B Y
C Z
B Z
A Z
A Z
A Z
A Z
B Z
B X
C Z
A Z
C Y
A X
C Z
C Y
C Z
C Z
B X
C Z
C Y
A Z
C Z
A Z
C Z
B Z
A Z
C Z
B Y
C Z
C Z
C Z
C Z
C Z
C Z
A Z
C Z
A Z
A Z
B Y
A Z
C Y
B Y
B X
C Z
C Y
C Z
C Z
C Y
C Y
B Y
C Y
C Z
A Z
A Z
A X
C Z
C Z
B Y
C Z
C Z
A Z
C Z
B X
C Z
C Z
C Y
C Z
C Z
C Z
A X
C Z
A Z
A Z
C Y
B Z
A Y
C Z
C Y
B Y
C Z
C Z
C Z
C Z
A Z
C Z
C Z
A Z
C Z
C Y
C Z
C Z
A Y
C Z
C Y
A Z
C Z
C Y
C Z
C Y
C Y
B X
A Z
C Z
C Y
C Y
A Z
A X
C Z
A Z
C X
B Y
A X
B Z
C Z
B Y
A Z
C Z
A Z
C Z
A X
C Z
C Z
C Z
C Y
A Z
C Y
C Z
C Z
A Z
A Z
A Z
C Z
A Z
C Y
C Z
A Z
A Z
C Z
A Z
C Z
C Z
C Z
C Z
B Y
A Z
C Z
A Z
C Y
C Z
A Z
C Y
C Z
A Z
C Y
C Y
A Z
A Z
A Z
C Z
C Z
B Y
A X
A X
A Z
C Z
C Y
C Y
C Y
C Z
A Z
B Y
A Z
A Z
C Z
C Y
C Z
C Y
C Z
A Z
C Z
C Z
C Z
C Y
A Z
C Z
B X
C Z
C Z
C Z
C Z
A Z
C Z
C Z
C Z
C Y
C Z
A Z
C Z
B Y
A Z
C Y
A Y
C Z
C Z
B Z
C Z
C Z
B Y
C Z
A Z
C Y
C Z
B Y
C Z
A Z
C Z
C Z
C Z
A Z
B Y
C Y
A Z
C X
C Z
C Y
C Z
A Z
A Z
C Y
C Z
A Z
B Y
A X
C Y
B Y
A Z
B Y
A X
B Z
A Z
A Z
A Z
A Z
C Z
C Z
A Z
A Z
A X
C Z
A Z
A Z
A X
B Y
C Z
C Z
C Z
B Z
C Z
A Z
C Z
C Z
A Z
A Z
C Y
C Z
C Z
A Z
A Z
C Y
C Y
C Z
A Z
B X
A Z
A Z
C Z
C Z
C Z
B Y
A Z
C Z
A X
B Z
B Z
C Z
C Z
C Y
A X
A Z
B Y
C Z
B Y
C Z
B Y
C Z
C Y
C Z
A Z
C Y
C Y
A Z
C X
B Z
C Z
C Z
A Z
C Y
A Z
A Z
B Z
A Z
C Z
C Z
C Z
C Z
A Y
C Y
A Z
C Z
C Z
C Y
A Z
B Y
A Z
B Z
A Z
A Z
B X
B Z
A Z
C Z
C Z
C Z
C Z
C Z
A Z
C X
C Z
C X
C Z
B Z
C Y
A X
A Z
A Z
C Z
C Y
C Z
C Z
A Z
C Z
A Z
A Z
A X
C Z
A Z
A Z
A Z
A Z
A Z
A Z
B Y
A Z
C Z
B X
B Z
C Z
A Z
A Z
B Z
C Y
A X
C Z
B Y
B Y
C Y
A Z
A Z
A X
C Z
C Z
A Z
C Y
B Y
A Z
B X
A Z
A X
A X
A X
A Z
A Z
C Z
A Z
A Z
A X
B X
B Z
B X
A Z
B Y
A Z
C Z
A Z
A Z
C Z
A Y
C Z
B Z
C Y
C Y
A Z
C Z
C Z
A Z
B Y
C Z
A Z
A X
B Z
A Y
B Z
C Y
C Y
C Z
A Z
C Z
C Z
A Y
C Z
A Z
B Y
C Z
B X
A Z
C Z
C Y
B Y
A Z
B Y
B Z
A Z
A Z
B Y
C Z
A Z
C X
C Z
C Z
B Z
B Z
C Z
A Z
A Z
C Z
A Z
C Z
C Z
A Y
C Z
A X
A Z
A Z
A Z
A Z
A Y
A X
C Z
C Z
C Z
C Z
A Z
B Z
C Z
B Z
B Y
C Z
C Z
C Z
A Z
C Z
B Y
C Y
A X
A Z
A X
C Z
B X
C Z
A Z
B Y
C X
A Z
C Z
C Z
A Z
C Z
A Z
A Z
A Z
A Z
A Y
A Y
A Z
A Z
A Z
A Z
C Z
C Z
C Z
A Z
A Z
C Z
A Y
C Z
B Z
C X
C Z
C Y
A Y
B Y
C Z
C Z
A Z
C Z
A X
B Y
C Y
C Z
C Z
A Z
A Y
A Z
A Z
C Z
A Z
C Z
C Z
C X
A Z
C Z
A Z
A Z
C Y
B Y
C Z
A X
A Z
C Z
A Z
C X
A Z
C Z
C Y
A Z
A Z
C Z
C Z
C Z
A Z
A Z
C Z
A Z
A X
C X
C Z
C Z
A Z
A Z
A Y
C Z
C Z
B X
C Z
C Y
C Z
C Z
A Z
C Z
A Z
C Y
C Y
C Z
A Z
C Z
B Y
C Y
A Z
B Z
A Z
B Z
A Z
A Z
C Z
C Z
C Z
A Z
C Z
A Z
B Z
C Z
C Z
C Z
A Z
C Z
C Z
C Z
C Z
C Z
C Z
C Z
B Y
A Z
B Y
C Y
C X
C Z
C Z
C Z
C Z
C Y
A Z
C Y
A Z
C Y
C Z
C Y
C Z
C Y
A Z
A Z
C Z
C Z
B Z
C Y
C Z
C Z
C Z
B Z
B Z
B Z
A Z
A Z
A Z
C Z
B Z
A Z
A Z
C Y
A Y
C Y
C Z
C Y
C Z
C Z
C Y
A Z
C Z
B Y
C Y
B Y
A Z
C Z
A Z
A X
A Z
C Z
A Z
A Z
A Z
C X
C Z
A Z
C Z
C Z
C Z
C Z
C Z
C Z
A Z
C Z
C Y
A Y
B Y
B X
B Z
C Z
C Z
A Z
B Y
C Z
A Z
B Z
C Z
A Z
C Y
C Y
B Y
C Z
C Y
C Z
C Y
A Z
C Z
C Z
A Z
A Z
A Z
C Z
A Z
A X
A Z
A Z
C Z
C Y
C Z
C Z
C Z
A Y
B Y
A Z
A Z
A Z
A X
B Z
A Z
C Y
B Y
A Z
A Y
B Z
A Z
B Y
C Z
B Y
A Z
B Y
C Z
C Z
A Z
A Z
A Z
C Y
B Y
B X
A Z
C Z
A X
B Z
A X
A Y
C Z
B X
B Y
A Z
A Z
B X
C Z
C Y
C Y
C Y
C X
C Z
C Z
C Z
A Z
B Y
C Z
A Z
A Z
A Z
A Z
C Y
C Z
C Z
A Z
C Z
B Z
B Y
A Z
A Z
C Z
A X
A Y
B Y
A Z
A Z
B Z
A Z
C Z
A Y
A Z
C Z
C Z
A Z
A Z
C Z
B Y
A Z
A X
C Y
A Z
C Z
C Z
C Z
C Z
A Z
C Y
C Z
A Z
A Z
C Y
A X
C Z
B Y
A Z
B Z
C Z
B Z
A Z
C Y
C Z
B Y
C Y
C Z
A Z
C Z
C Z
A Y
A Z
B Z
A X
C Y
A Z
A Z
C Z
B Y
C Z
A Z
C Z
A Z
B Y
A Z
C Z
A Z
B Y
A Z
C Z
C Z
C Z
A Z
A Z
C Z
A Z
A Z
C Y
A Y
B Y
B Z
C Z
C Y
A Z
C Y
C Z
B Y
C Y
C Z
B Z
C Z
C Y
C Z
C Y
C Z
C Y
B X
C Z
C Y
A Z
A X
A Z
C Z
A Z
B Y
C Z
A Z
A Z
B Y
C Y
A Z
A Z
C Z
C Z
C Y
A Z
C Y
B Y
A Y
C Z
A Z
A Z
C Z
C Z
C Z
C Z
A Z
A Z
C Y
A Z
C Z
C Z
C Z
C Z
A Z
A Y
C Y
A Z
C Y
A Z
A Z
A Z
C Z
A Z
C Z
A Z
C Z
C Z
A Z
C Z
C Z
C Y
B Z
C Z
C Y
A Z
B X
C Y
C Y
C Z
A Z
B Y
A Z
A X
B Y
A Z
A Z
B Y
B Z
A Z
A Z
C Z
A X
C Z
C Z
B Z
C Z
C Y
B Y
A Z
B Z
C Z
C Z
C Z
A Y
A X
C Y
A Z
B Z
A Z
B Z
C Z
A Y
C Z
C Y
A Z
C Y
C Z
C Y
B Y
B Y
C Z
A X
C Z
A Z
A Z
C Y
C Y
C Z
A Z
B Z
C Z
C Z
C Z
A Y
A Z
C Z
C Z
C Z
C Z
C Z
B Y
C Z
C Z
A Z
B Y
A Z
C Z
C Z
C Z
B Z
A Z
C Y
A Z
C Z
B Z
C Z
B Y
C Y
A X
C Z
A Z
C Y
C Z
C Z
C Y
A Z
C Z
B Z
A Z
C Z
A Z
A X
C Z
A Z
C Z
B X
C Z
C Z
C Z
C Z
A Z
A X
C Z
C Z
A Z
C Z
A Z
C Z
B Y
A Z
C Z
A Z
C Y
C Z
C Z
A Z
C Z
A Z
A Z
A Z
B Z
C Y
B X
C Y
C Z
C Z
A X
A Z
C Z
B Y
C Z
C Y
C Z
A Z
C Z
B Y
C Z
C Y
B Z
A Z
C Z
B Z
A Z
B Z
A Z
C Z
C Z
B Y
C Y
C Y
A Z
C Z
A Z
A Y
B Y
C X
A X
C Z
C Y
B Y
C Z
A Z
A Z
C Y
C Z
C Z
A Z
B Y
B Z
A Z
A Z
A Z
B Z
C Z
C Z
C Y
A X
C Z
A Z
C Z
B Z
B Y
C X
C Z
A X
A X
C Y
B Y
C Z
C Z
A Z
A Z
A Z
A Z
C Y
C Z
A Z
A Z
C Z
C Z
C Z
C Z
C Z
A Y
A Z
C Y
C Z
B Y
A Z
C Y
A Z
A Z
B Z
C X
B Y
C Z
A Z
C Y
C Z
B Y
A Z
C Y
C Z
B Y
C Y
C Z
A Z
A X
C Z
C Y
B Z
A Z
A Z
B Y
C Z
A Z
C Z
C Z
B Y
A Z
C Z
C Z
B Y
B Y
A Z
C Z
C Z
C Z
C Z
A Z
C Z
B Z
B Y
C Z
B Y
A Z
A Z
C Y
A Z
A X
B Z
C Y
C Z
C Z
C Z
C Y
C Z
C Z
C Y
A X
B X
B X
C Z
C Y
A Z
B Y
C Y
C Z
C Z
A Z
C Y
A Z
B Z
C Z
C Y
C Y
C Z
A Z
C Z
A Z
B Z
B Z
C Y
A Z
C Z
A Z
A Z
C Z
C Z
C Z
C Z
C Z
C Z
A Z
A Z
A Z
B Y
B Z
B Y
C Y
A Z
C Z
C Y
A Z
C Z
A Z
A X
B Z
A Z
C Z
C Z
C Z
A Z
C Y
B Y
C Y
A Z
C Y
B Z
B Y
B Y
C Z
C Z
A Z
A Y
B X
C Z
use std::ops::Add;
use aoc::{answer, parser};
use parse_display::FromStr;
#[derive(FromStr, PartialEq, Debug, Copy, Clone)]
enum Move {
#[from_str(regex = "A|X")]
Rock,
#[from_str(regex = "B|Y")]
Paper,
#[from_str(regex = "C|Z")]
Scissor,
}
impl Add for Move {
type Output = usize;
fn add(self, rhs: Self) -> Self::Output {
let score = self as usize + 1;
let outcome = match (self, rhs) {
// draw
(Move::Rock, Move::Rock)
| (Move::Paper, Move::Paper)
| (Move::Scissor, Move::Scissor) => 3,
// win
(Move::Rock, Move::Scissor)
| (Move::Paper, Move::Rock)
| (Move::Scissor, Move::Paper) => 6,
// loss
(Move::Paper, Move::Scissor)
| (Move::Scissor, Move::Rock)
| (Move::Rock, Move::Paper) => 0,
};
outcome + score
}
}
#[derive(FromStr, PartialEq, Debug, Clone, Copy)]
#[display("{prediction} {strategy}")]
struct Match {
prediction: Move,
strategy: Move,
}
impl Match {
pub fn score(self) -> usize {
self.strategy + self.prediction
}
}
fn main() {
let score = parser::lines::<Match>().map(Match::score).sum::<usize>();
answer!(
"If everything goes exactly according to strategy the final score should be {}",
score
);
}
use std::ops::Add;
use aoc::{answer, parser};
use parse_display::FromStr;
#[derive(FromStr, PartialEq, Debug, Copy, Clone)]
enum Move {
#[from_str(regex = "A")]
Rock,
#[from_str(regex = "B")]
Paper,
#[from_str(regex = "C")]
Scissor,
}
#[derive(FromStr, PartialEq, Debug, Copy, Clone)]
enum Strategy {
#[from_str(regex = "X")]
Lose,
#[from_str(regex = "Y")]
Draw,
#[from_str(regex = "Z")]
Win,
}
impl Add for Move {
type Output = usize;
fn add(self, rhs: Self) -> Self::Output {
let score = self as usize + 1;
let outcome = match (self, rhs) {
// draw
(Move::Rock, Move::Rock)
| (Move::Paper, Move::Paper)
| (Move::Scissor, Move::Scissor) => 3,
// win
(Move::Rock, Move::Scissor)
| (Move::Paper, Move::Rock)
| (Move::Scissor, Move::Paper) => 6,
// loss
(Move::Paper, Move::Scissor)
| (Move::Scissor, Move::Rock)
| (Move::Rock, Move::Paper) => 0,
};
outcome + score
}
}
impl Add<Strategy> for Move {
type Output = Move;
fn add(self, rhs: Strategy) -> Self::Output {
match (self, rhs) {
(Move::Rock, Strategy::Draw)
| (Move::Paper, Strategy::Lose)
| (Move::Scissor, Strategy::Win) => Move::Rock,
(Move::Paper, Strategy::Draw)
| (Move::Scissor, Strategy::Lose)
| (Move::Rock, Strategy::Win) => Move::Paper,
(Move::Scissor, Strategy::Draw)
| (Move::Rock, Strategy::Lose)
| (Move::Paper, Strategy::Win) => Move::Scissor,
}
}
}
#[derive(FromStr, PartialEq, Debug, Clone, Copy)]
#[display("{prediction} {strategy}")]
struct Match {
prediction: Move,
strategy: Strategy,
}
impl Match {
pub fn score(self) -> usize {
self.prediction + self.strategy + self.prediction
}
}
fn main() {
let score = parser::lines::<Match>().map(Match::score).sum::<usize>();
answer!(
"If everything goes exactly according to strategy the final score should be {}",
score
);
}