Advent of Code Day 2 in Rust
https://gitlab.com/MisterBiggs/aoc_2022-rust/-/blob/master/src/day2.rs
```rust
use itertools::Itertools;
use std::fs;
pub fn run() {
println!("Day 2:");
let input = fs::read_to_string("./inputs/day2.txt").expect("Could not read file");
println!("\tPart 1: {}", part1(&input));
println!("\tPart 2: {}", part2(&input));
}
#[derive(PartialEq, Clone, Copy)]
enum Hand {
Rock = 1,
Paper,
Scissors,
}
#[derive(Clone, Copy)]
enum Outcome {
Lost = 0,
Draw = 3,
Win = 6,
}
fn part1(input: &str) -> usize {
input
.trim()
.split('\n')
.map(|round_str| {
let round = round_str.split_once(' ').unwrap();
let opponent = match round.0 {
"A" => Hand::Rock,
"B" => Hand::Paper,
"C" => Hand::Scissors,
_ => panic!(),
};
let me = match round.1 {
"X" => Hand::Rock,
"Y" => Hand::Paper,
"Z" => Hand::Scissors,
_ => panic!(),
};
let outcome = match (opponent, me) {
(l, r) if l == r => Outcome::Draw,
(Hand::Rock, Hand::Paper) => Outcome::Win,
(Hand::Paper, Hand::Scissors) => Outcome::Win,
(Hand::Scissors, Hand::Rock) => Outcome::Win,
_ => Outcome::Lost,
};
outcome as usize + me as usize
})
.sum()
}
fn part2(input: &str) -> usize {
input
.trim()
.split('\n')
.map(|round_str| {
let round = round_str.split_once(' ').unwrap();
let opponent = match round.0 {
"A" => Hand::Rock,
"B" => Hand::Paper,
"C" => Hand::Scissors,
_ => panic!(),
};
let outcome = match round.1 {
"X" => Outcome::Lost,
"Y" => Outcome::Draw,
"Z" => Outcome::Win,
_ => panic!(),
};
let me = match (outcome, opponent) {
(Outcome::Draw, _) => opponent,
(Outcome::Win, Hand::Rock) => Hand::Paper,
(Outcome::Win, Hand::Paper) => Hand::Scissors,
(Outcome::Win, Hand::Scissors) => Hand::Rock,
(Outcome::Lost, Hand::Rock) => Hand::Scissors,
(Outcome::Lost, Hand::Paper) => Hand::Rock,
(Outcome::Lost, Hand::Scissors) => Hand::Paper,
};
outcome as usize + me as usize
})
.sum()
}
```