[2025][ruby][7.x]
change uvmxlpkrutmrqnnzrrtoozkxmzmptmlz
commit 75d473e3e40cca7ef7eb68edfe0a7f58c77c166f
author Alpha Chen <alpha@kejadlen.dev>
date
parent ypxxstqp
diff --git a/2025/ruby/day_07.rb b/2025/ruby/day_07.rb
new file mode 100644
index 0000000..bb2d2b5
--- /dev/null
+++ b/2025/ruby/day_07.rb
@@ -0,0 +1,43 @@
+beam = nil
+SPLITTERS = Hash.new {|h,k| h[k] = Set.new }
+
+DATA.read.lines(chomp: true).each.with_index do |line, y|
+  line.chars.each.with_index do |value, x|
+    case value
+    when ?S
+      beam = x
+    when ?^
+      SPLITTERS[y] << x
+    when ?.
+      # no-op
+    else
+      fail value
+    end
+  end
+end
+
+# beams = Set[beam]
+# pp (0..splitters.keys.max).inject(0) {|splits, y|
+#   split_beams = beams & splitters[y]
+#   beams -= split_beams
+#   beams |= split_beams.flat_map { [it - 1, it + 1] }
+#   splits + split_beams.size
+# }
+
+timelines = Hash.new {|timelines, (beam, level)|
+  timelines[[beam, level]] = if level > SPLITTERS.keys.max
+                               1
+                             else
+                               if SPLITTERS[level].include?(beam)
+                                 [-1, 1].sum {|d|
+                                   timelines[[beam + d, level + 1]]
+                                 }
+                               else
+                                 timelines[[beam, level + 1]]
+                               end
+                             end
+}
+
+pp timelines[[beam, 0]]
+
+__END__