A bit quicker and more readable without recursion
authorGreg Burri <greg.burri@gmail.com>
Wed, 11 Dec 2024 18:36:25 +0000 (19:36 +0100)
committerGreg Burri <greg.burri@gmail.com>
Wed, 11 Dec 2024 18:36:25 +0000 (19:36 +0100)
src/day11.rs

index be2f8f8..5567a16 100644 (file)
@@ -16,10 +16,8 @@ fn add_or_set(map: &mut Stones, k: u64, n: u64) {
     map.entry(k).and_modify(|v| *v += n).or_insert(n);
 }
 
-pub fn blink(stones: Stones, i: u32) -> Stones {
-    if i == 0 {
-        stones
-    } else {
+pub fn blink(mut stones: Stones, i: u32) -> Stones {
+    for _ in 0..i {
         let mut next_stones = Stones::default();
         for (stone, n) in stones {
             if stone == 0 {
@@ -37,9 +35,9 @@ pub fn blink(stones: Stones, i: u32) -> Stones {
                 }
             }
         }
-
-        blink(next_stones, i - 1)
+        stones = next_stones;
     }
+    stones
 }
 
 #[cfg(test)]