From c5846c52e903e2fb3ea2370da9e021e1a4021b4f Mon Sep 17 00:00:00 2001 From: Alpha Chen Date: Mon, 12 Dec 2022 21:24:06 -0800 Subject: [PATCH] [2022][ruby][13.x] refactored --- 2022/ruby/day_13.rb | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) 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(:*)