#[path = "../lib.rs"] mod lib; fn parse_abc(c: Option) -> u64 { return match c { Some('A') => 0, Some('B') => 1, Some('C') => 2, _ => unreachable!(), }; } fn parse_xyz(c: Option) -> u64 { return match c { Some('X') => 0, Some('Y') => 1, Some('Z') => 2, _ => unreachable!(), }; } fn part1() -> u64 { let mut score = 0; for line in lib::iter_input() { let opponent = parse_abc(line.chars().nth(0)); let own = parse_xyz(line.chars().nth(2)); let match_score = (4 + own - opponent) % 3; score += (own + 1) + (match_score * 3); } return score; } fn part2() -> u64 { let mut score = 0; for line in lib::iter_input() { let opponent = parse_abc(line.chars().nth(0)); let match_score = parse_xyz(line.chars().nth(2)); let own = (2 + match_score + opponent) % 3; score += (own + 1) + (match_score * 3); } return score; } fn main() { println!("part1: {}", part1()); println!("part2: {}", part2()); }