[2023][ruby][3.*] remove hack
change mvvuoruqkztltnprskunnuvmoxuwwtot
commit 54666ca2c46ae61575a9a5d1276943ba407fbeb7
author Alpha Chen <alpha@kejadlen.dev>
date
parent nunlrytm
diff --git a/2023/ruby/day_03.rb b/2023/ruby/day_03.rb
index 374772c..393a840 100644
--- a/2023/ruby/day_03.rb
+++ b/2023/ruby/day_03.rb
@@ -1,3 +1,8 @@
+Part = Data.define(:number) do
+  def eql?(other)
+    self.object_id == other.object_id
+  end
+end
 CurrentNumber = Data.define(:coords, :acc)
 
 cur_num = nil
@@ -15,7 +20,8 @@ ARGF.readlines(chomp: true).each.with_index do |row, y|
       end
     else
       if cur_num
-        nums.merge!(cur_num.coords.to_h { [_1, cur_num.acc.to_i] })
+        part = Part.new(cur_num.acc.to_i)
+        nums.merge!(cur_num.coords.to_h { [_1, part] })
         cur_num = nil
       end
 
@@ -26,7 +32,8 @@ ARGF.readlines(chomp: true).each.with_index do |row, y|
   end
 
   if cur_num
-    nums.merge!(cur_num.coords.to_h { [_1, cur_num.acc.to_i] })
+    part = Part.new(cur_num.acc.to_i)
+    nums.merge!(cur_num.coords.to_h { [_1, part] })
     cur_num = nil
   end
 end
@@ -39,9 +46,9 @@ p syms
     dy.product(dx)
       .map {|dy,dx| [y+dy,x+dx] }
       .filter_map { nums.fetch(_1, nil) }
-      .uniq # lol, hack
+      .uniq
   }
-  .sum
+  .sum(&:number)
 
 p syms
   .select { _2 == ?* }
@@ -51,7 +58,7 @@ p syms
     parts = dy.product(dx)
       .map {|dy,dx| [y+dy,x+dx] }
       .filter_map { nums.fetch(_1, nil) }
-      .uniq # lol, hack
+      .uniq
 
     if parts.length == 2
       parts
@@ -59,4 +66,4 @@ p syms
       nil
     end
   }
-  .sum { _1.inject(:*) }
+  .sum { _1.map(&:number).inject(:*) }