[2022][ruby][13.x] refactored
diff --git a/2022/ruby/day_13.rb b/2022/ruby/day_13.rb
index 21331c4..a261504 100644
--- a/2022/ruby/day_13.rb
+++ b/2022/ruby/day_13.rb
@@ -8,8 +8,8 @@ def compare(left, right)
left.zip(right).each do |left, right|
case compare(left, right)
when -1 then return -1
- when 0 # no-op
- when 1 then return 1
+ when 0 # keep going
+ when 1 then return 1
end
end
(left.size == right.size) ? 0 : -1
@@ -19,17 +19,19 @@ def compare(left, right)
end
# part one
-# pairs = ARGF.read.split("\n\n")
-# pairs = pairs.map {|pair| pair.lines(chomp: true).map { eval(_1) }}
+pairs = ARGF.read.split("\n\n")
+pairs = pairs.map {|pair| pair.lines(chomp: true).map { eval(_1) }}
-# p pairs.map.with_index {|(left,right),i|
-# [compare(left, right), i+1]
-# }.select {|cmp,_| cmp == -1 }.sum(&:last)
+p pairs.map.with_index
+ .select {|(l,r),_| compare(l, r) == -1 }
+ .sum { _1.last + 1 }
# part two
-pairs = ARGF.read.lines(chomp: true).reject(&:empty?).map { eval(_1) }
-pairs << [[2]] << [[6]]
+pairs = pairs.flatten(1)
+
+dividers = [[[2]], [[6]]]
+pairs.concat(dividers)
pairs = pairs.sort { compare(_1, _2) }
-a = pairs.index([[2]])
-b = pairs.index([[6]])
-p (a+1)*(b+1)
+p dividers
+ .map { pairs.index(_1) + 1 }
+ .inject(:*)