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