diff --git a/2018/ruby/day_03.rb b/2018/ruby/day_03.rb index af017ba..5f89a5e 100644 --- a/2018/ruby/day_03.rb +++ b/2018/ruby/day_03.rb @@ -1,13 +1,27 @@ -p ARGF.read.lines.each.with_object(Hash.new(0)) {|line, fabric| - line =~ /(\d+),(\d+): (\d+)x(\d+)$/ - x = $1.to_i - y = $2.to_i - width = $3.to_i - height = $4.to_i +claims, fabric = ARGF + .read + .lines + .map(&:chomp) + .reject(&:empty?) + .each + .with_object([[], Hash.new {|h,k| h[k] = []}]) { |line, (claims, fabric)| + line =~ /^#(\d+) @ (\d+),(\d+): (\d+)x(\d+)$/ + claim = $1.to_i + x = $2.to_i + y = $3.to_i + width = $4.to_i + height = $5.to_i - width.times {|dx| - height.times {|dy| - fabric[[y + dy, x + dx]] += 1 + claims << claim + width.times {|dx| + height.times {|dy| + fabric[[y+dy, x+dx]] << claim + } } +} + +p claims.reject {|claim| + fabric.any? {|_,v| + v.length > 1 && v.include?(claim) } -}.count {|_,v| v > 1 } +}