This commit is contained in:
missing 2022-12-03 13:37:09 -06:00
parent 9ddfd522af
commit 332d1bcecd
2 changed files with 99 additions and 0 deletions

98
src/days/day2.rs Normal file
View file

@ -0,0 +1,98 @@
use aoc_runner_derive::{aoc, aoc_generator};
#[derive(Clone, Copy)]
enum Rps {
Rock,
Paper,
Scissors,
}
#[derive(Clone, Copy)]
enum Xyz {
X,
Y,
Z,
}
impl Xyz {
fn to_rps(self) -> Rps {
match self {
Xyz::X => Rps::Rock,
Xyz::Y => Rps::Paper,
Xyz::Z => Rps::Scissors,
}
}
fn part_two_stuff(self, opp: Rps) -> u32 {
match (self, opp) {
// need to lose
(Xyz::X, Rps::Rock) => Rps::Scissors,
(Xyz::X, Rps::Paper) => Rps::Rock,
(Xyz::X, Rps::Scissors) => Rps::Paper,
// need to draw
(Xyz::Y, _) => opp,
// need to win
(Xyz::Z, Rps::Rock) => Rps::Paper,
(Xyz::Z, Rps::Paper) => Rps::Scissors,
(Xyz::Z, Rps::Scissors) => Rps::Rock,
}
.score_against(opp)
}
}
impl Rps {
fn score_against(self, opp: Rps) -> u32 {
// 1 for Rock, 2 for Paper, 3 for Scissors
// 0 for loss, 3 for tie, 6 for win
#[allow(clippy::identity_op)]
match (self, opp) {
(Rps::Rock, Rps::Rock) => 1 + 3,
(Rps::Rock, Rps::Paper) => 1 + 0,
(Rps::Rock, Rps::Scissors) => 1 + 6,
(Rps::Paper, Rps::Rock) => 2 + 6,
(Rps::Paper, Rps::Paper) => 2 + 3,
(Rps::Paper, Rps::Scissors) => 2 + 0,
(Rps::Scissors, Rps::Rock) => 3 + 0,
(Rps::Scissors, Rps::Paper) => 3 + 6,
(Rps::Scissors, Rps::Scissors) => 3 + 3,
}
}
}
#[aoc_generator(day2)]
fn day1_generator(s: &str) -> Vec<(Rps, Xyz)> {
s.lines()
.map(|l| {
(
match l.chars().next().unwrap() {
'A' => Rps::Rock,
'B' => Rps::Paper,
'C' => Rps::Scissors,
_ => panic!(),
},
match l.chars().nth(2).unwrap() {
'X' => Xyz::X,
'Y' => Xyz::Y,
'Z' => Xyz::Z,
_ => panic!(),
},
)
})
.collect()
}
#[aoc(day2, part1)]
fn day1_part1(input: &[(Rps, Xyz)]) -> u32 {
input
.iter()
.map(|&(opp, me)| me.to_rps().score_against(opp))
.sum()
}
#[aoc(day2, part2)]
fn day1_part2(input: &[(Rps, Xyz)]) -> u32 {
input
.iter()
.map(|&(opp, target_xyz)| target_xyz.part_two_stuff(opp))
.sum()
}

View file

@ -2,6 +2,7 @@ use aoc_runner_derive::aoc_lib;
mod days {
mod day1;
mod day2;
}
aoc_lib! { year = 2022 }