diff options
Diffstat (limited to 'day01/src')
| -rw-r--r-- | day01/src/main.rs | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/day01/src/main.rs b/day01/src/main.rs new file mode 100644 index 0000000..f391c2e --- /dev/null +++ b/day01/src/main.rs @@ -0,0 +1,80 @@ +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::<i32>().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); +} |
