const SCORE_WIN: u32 = 6; const SCORE_DRAW: u32 = 3; const SCORE_ROCK: u32 = 1; const SCORE_PAPER: u32 = 2; const SCORE_SCISSORS: u32 = 3; fn main() { let buf = std::fs::read_to_string("two.txt").unwrap(); let mut total = 0u32; for s in buf.split("\n") { if s.is_empty() { continue; } let chars = s.chars().collect::>(); let opponent = chars[0]; let result = chars[2]; let choice = match result { 'X' => will_lose(opponent), 'Y' => will_draw(opponent), 'Z' => will_win(opponent), _ => continue, }; total += match result { 'Y' => SCORE_DRAW, 'Z' => SCORE_WIN, _ => 0, }; total += match choice { 'A' => SCORE_ROCK, 'B' => SCORE_PAPER, 'C' => SCORE_SCISSORS, _ => 0, }; } println!("{}", total); } fn will_win(opponent: char) -> char { match opponent { 'A' => 'B', 'B' => 'C', 'C' => 'A', _ => 'X', } } fn will_draw(opponent: char) -> char { opponent } fn will_lose(opponent: char) -> char { match opponent { 'A' => 'C', 'B' => 'A', 'C' => 'B', _ => 'X', } }