[2023][ruby][3.*] remove hack
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(:*) }