use std::env::args; use std::fs::File; use std::io::BufRead; use std::io::BufReader; fn get_data() -> (u64, u64) { let path = args().nth(1).unwrap(); let file = File::open(path).unwrap(); let mut state = 0; let mut player1 = 0; let mut player2 = 0; for line in BufReader::new(file).lines() { match state { 0 => { player1 = line.unwrap()[28..].parse::().unwrap(); state = 1; }, 1 => { player2 = line.unwrap()[28..].parse::().unwrap(); state = 2; }, _ => unreachable!(), } } return (player1, player2); } fn main() { let (mut player1, mut player2) = get_data(); let mut die: u64 = 0; let mut score1: u64 = 0; let mut score2: u64 = 0; loop { let d1 = 3 * (die % 100) + 6; player1 = (player1 + d1 - 1) % 10 + 1; score1 += player1; die += 3; if score1 >= 1000 { println!("{}", score2 * die); break; } let d2 = 3 * (die % 100) + 6; player2 = (player2 + d2 - 1) % 10 + 1; score2 += player2; die += 3; if score2 >= 1000 { println!("{}", score1 * die); break; } } }