use std::io; fn rotate(dial: i32, change: i32, all_zeros: &mut i32) -> i32 { /* let mut ret = dial + change; if ret == 0 { *all_zeros += 1; } while ret < 0 { ret += 100; if dial > 0 { *all_zeros += 1; } } while ret > 99 { ret -= 100; if dial > 0 { *all_zeros += 1; } } return ret; */ let mut ret = dial; let mut change = change; loop { if change < 0 { ret -= 1; change += 1; if ret == -1 { ret = 99; } } else { ret += 1; change -= 1; if ret == 100 { ret = 0; } } if ret == 0 { *all_zeros += 1; } if change == 0 { break; } } ret } fn main() { let mut dial = 50; let mut zeros = 0; let mut all_zeros = 0; loop { let mut buffer = String::new(); let bytes = io::stdin().read_line(&mut buffer).unwrap(); if bytes == 0 { break; } let (dir, value_str) = buffer.trim_end().split_at(1); let left = match dir { "L" => true, "R" => false, _ => panic!(), }; let mut value = value_str.parse::().unwrap(); if left { value = -value; } if value != 0 { dial = rotate(dial, value, &mut all_zeros); } if dial == 0 { zeros += 1; } } println!("Zeros {}", zeros); println!("All zeros {}", all_zeros); }