summaryrefslogtreecommitdiff
path: root/day01/src
diff options
context:
space:
mode:
Diffstat (limited to 'day01/src')
-rw-r--r--day01/src/main.rs80
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);
+}