[2024][ruby][13.x] use matrices
diff --git a/2024/ruby/day_13.rb b/2024/ruby/day_13.rb
index 1784773..f4005e7 100644
--- a/2024/ruby/day_13.rb
+++ b/2024/ruby/day_13.rb
@@ -1,11 +1,4 @@
-require "bundler/inline"
-
-gemfile do
- source "https://rubygems.org"
- gem "z3"
-end
-
-require "z3"
+require "matrix"
input = DATA.read
@@ -13,16 +6,10 @@ machines = input.split("\n\n")
.map {|machine| machine.scan(/\d+/).map(&:to_i).each_slice(2).to_a }
def wins(machine)
- a = Z3.Int("a")
- b = Z3.Int("b")
-
- solver = Z3::Solver.new
- machine.transpose.each do |a_, b_, c|
- solver.assert a*a_ + b*b_ == c
- end
- if solver.satisfiable?
- model = solver.model
- [a, b].map { model[_1].to_i }
+ *ab, c = machine
+ a, b = (Matrix.columns(ab).inverse * Matrix.column_vector(c)).to_a.flatten
+ if [a, b].all? { _1.denominator == 1 }
+ [a, b].map(&:to_i)
else
nil
end