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 }
+}