37 lines
878 B
Rust
37 lines
878 B
Rust
use std::{
|
|
fs::File,
|
|
io::{BufRead, BufReader},
|
|
};
|
|
|
|
fn main() -> () {
|
|
let path = "input.txt";
|
|
|
|
let input = File::open(path).unwrap();
|
|
let buf = BufReader::new(input);
|
|
|
|
let score: i32 = buf
|
|
.lines()
|
|
.map(|line| {
|
|
let line = line.unwrap();
|
|
let opponent: i32 = match &line[0..1] {
|
|
"A" => 0,
|
|
"B" => 1,
|
|
"C" => 2,
|
|
_ => panic!("Invalid input"),
|
|
};
|
|
match &line[2..3] {
|
|
"X" => 0 + pick_score(opponent, -1),
|
|
"Y" => 3 + pick_score(opponent, 0),
|
|
"Z" => 6 + pick_score(opponent, 1),
|
|
_ => panic!("Invalid input"),
|
|
}
|
|
})
|
|
.sum();
|
|
|
|
println!("{}", score);
|
|
}
|
|
|
|
fn pick_score(opponent: i32, outcome: i32) -> i32 {
|
|
(opponent + outcome + 3) % 3 + 1
|
|
}
|