[2018][ruby][3.1]
change ulpmpzymzkmrnknnoqpvnqoprwnxxyus
commit 369daf82959f8e54a80b7313edefe487582502b2
author Alpha Chen <alpha.chen@gmail.com>
date
parent nozxsklo
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 }
+}