class Solver_24
Constants
- OPERATION_SET
Attributes
all_expressions[RW]
solutions[RW]
Public Class Methods
new()
click to toggle source
# File lib/solver_24.rb, line 8 def initialize @all_expressions = [] @solutions = [] end
Public Instance Methods
add_all_possible_order_of_ops(expressions)
click to toggle source
# File lib/solver_24.rb, line 35 def add_all_possible_order_of_ops(expressions) all_expressions.tap do |expos| expos << add_order_of_operations(expressions) end end
add_order_of_operations(expressions)
click to toggle source
# File lib/solver_24.rb, line 41 def add_order_of_operations(expressions) [].tap do |temp_storage| expressions.each do |exp| temp_storage << exp.dup.insert(0, "(").insert(4, ")") temp_storage << exp.dup.insert(0, "(").insert(6, ")") temp_storage << exp.dup.insert(2, "(").insert(8, ")") temp_storage << exp.dup.insert(4, "(").insert(8, ")") temp_storage << exp.dup.insert(0, "(").insert(4, ")").insert(6, "(").insert(10, ")") end end end
find_solutions()
click to toggle source
# File lib/solver_24.rb, line 53 def find_solutions solutions.tap do |solutions| all_expressions.each do |wrapper| wrapper.each do |exp| value = eval(exp.join) solutions << exp.join(" ") if value == 24 end end end end
get_sets_of_numbers(a)
click to toggle source
# File lib/solver_24.rb, line 19 def get_sets_of_numbers(a) a.permutation(4).to_a.tap do |numbers| numbers.each { |set| set.map!(&:to_f)} end end
make_possible_solutions(nums)
click to toggle source
# File lib/solver_24.rb, line 25 def make_possible_solutions(nums) expressions = [] nums.each do |num| OPERATION_SET.each {|op| expressions << num.zip(op).flatten.compact} end add_all_possible_order_of_ops(expressions) end
solve(a)
click to toggle source
# File lib/solver_24.rb, line 13 def solve(a) make_possible_solutions(get_sets_of_numbers(a)) find_solutions solutions end