66 lines
1.3 KiB
Rust
66 lines
1.3 KiB
Rust
use crate::{solve1, solve2};
|
|
static INPUT: &str = include_str!("../../data/year2022/day02.txt");
|
|
static SAMPLE_INPUT: &str = include_str!("../../data/year2022/day02_test.txt");
|
|
|
|
fn win(input: &str) -> i64 {
|
|
match input {
|
|
"A X" => 3,
|
|
"A Y" => 6,
|
|
"A Z" => 0,
|
|
"B X" => 0,
|
|
"B Y" => 3,
|
|
"B Z" => 6,
|
|
"C X" => 6,
|
|
"C Y" => 0,
|
|
"C Z" => 3,
|
|
_ => unreachable!(),
|
|
}
|
|
}
|
|
|
|
fn play(input: &str) -> char {
|
|
match input {
|
|
"A X" => 'Z',
|
|
"A Y" => 'X',
|
|
"A Z" => 'Y',
|
|
"B X" => 'X',
|
|
"B Y" => 'Y',
|
|
"B Z" => 'Z',
|
|
"C X" => 'Y',
|
|
"C Y" => 'Z',
|
|
"C Z" => 'X',
|
|
_ => unreachable!(),
|
|
}
|
|
}
|
|
|
|
fn score(input: char) -> i64 {
|
|
match input {
|
|
'X' => 1,
|
|
'Y' => 2,
|
|
'Z' => 3,
|
|
_ => unreachable!(),
|
|
}
|
|
}
|
|
|
|
fn solve1(input: &str) -> i64 {
|
|
input
|
|
.lines()
|
|
.map(|line| win(line) + score(line.chars().last().unwrap()))
|
|
.sum()
|
|
}
|
|
|
|
fn solve2(input: &str) -> i64 {
|
|
input
|
|
.lines()
|
|
.map(|line| {
|
|
let mut out = String::with_capacity(3);
|
|
out.push_str(&line[0..2]);
|
|
out.push(play(line));
|
|
out
|
|
})
|
|
.map(|line| win(&line) + score(line.chars().last().unwrap()))
|
|
.sum()
|
|
}
|
|
|
|
solve1!(15, 11475);
|
|
solve2!(12, 16862);
|