[2024][ruby][11.2]
change pmktmrnqttmuputvqvopyzszoznoqnmz
commit c1d51173cd89bfe971ee08738876ee1647d0d5d0
author Alpha Chen <alpha@kejadlen.dev>
date
parent nqzkruom
diff --git a/2024/ruby/day_11.rb b/2024/ruby/day_11.rb
index eba46bc..13856ad 100644
--- a/2024/ruby/day_11.rb
+++ b/2024/ruby/day_11.rb
@@ -1,18 +1,20 @@
 stones = DATA.read.scan(/\d+/).map(&:to_i)
 
-25.times {
-  stones = stones.flat_map {|n|
-    if n.zero?
-      [1]
-    elsif (s = n.to_s.size) && s.even?
-      [n.to_s[0...s/2], n.to_s[s/2..]].map(&:to_i)
-    else
-      [n * 2024]
-    end
-  }
+blink = Hash.new {|h, k|
+  n, times = k
+  h[k] = if times.zero?
+           1
+         elsif n.zero?
+           h[[1, times-1]]
+         elsif (s = n.to_s.size) && s.even?
+           a, b = [n.to_s[0...s/2], n.to_s[s/2..]].map(&:to_i)
+           h[[a, times-1]] + h[[b, times-1]]
+         else
+           h[[n*2024, times-1]]
+         end
 }
 
-pp stones.length
+pp stones.sum { blink[[_1, 25]] }
+pp stones.sum { blink[[_1, 75]] }
 
 __END__
-1750884 193 866395 7 1158 31 35216 0