[2020][ruby][9.x] refactor
change knpvkyxvlpluwppxrllkxvrstysqwnoy
commit e871861135eb6e6871cea97acf3cc5314c0acee9
author Alpha Chen <alpha@kejadlen.dev>
date
parent klstqsko
diff --git a/2020/ruby/day_09.rb b/2020/ruby/day_09.rb
index 11be750..646f879 100644
--- a/2020/ruby/day_09.rb
+++ b/2020/ruby/day_09.rb
@@ -2,19 +2,17 @@ N = 25
 
 data = ARGF.read.scan(/\d+/).map(&:to_i)
 
-i = (N..).find {|i|
-  !data[i-N,N].combination(2).map(&:sum).include?(data[i])
-}
-invalid = data[i]
+invalid = data.each_cons(N+1).filter_map {|range|
+  n = range.pop
+  range.combination(2).map(&:sum).include?(n) ? nil : n
+}.first
 
-(0..).each do |start|
-  (2..data.size-start-1).each do |len|
-    sum = data[start, len].sum
-    if sum == invalid
-      p data[start, len].minmax.sum
-      exit
-    elsif sum > invalid
-      next
-    end
-  end
-end
+weakness = (0..).lazy.flat_map {|start|
+  (2..data.size-start-1).map {|len|
+    data[start, len]
+  }
+}.filter_map {|range|
+  range.sum == invalid && range.minmax.sum
+}.first
+
+p weakness