aoc-rust/src/year2022/day02.rs

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);