class IntelligentBruteForceSolver
Attributes
code_length[R]
Public Class Methods
new(code_length: 4)
click to toggle source
# File lib/mastermind_ruby/solver/intelligent_brute_force_solver.rb, line 6 def initialize(code_length: 4) @code_length = code_length @basic_codes = generate_start_codes @basic_try = -1 @code_try = -1 @existing_chars = [] end
Public Instance Methods
assessment_received(result)
click to toggle source
# File lib/mastermind_ruby/solver/intelligent_brute_force_solver.rb, line 25 def assessment_received(result) unless result == @code_length.times.map { '-' }.join result.count('B').times { @existing_chars << MastermindRuby::Code::AVAILABLE_CHARACTERS[@basic_try] } end end
generate_codes()
click to toggle source
# File lib/mastermind_ruby/solver/intelligent_brute_force_solver.rb, line 37 def generate_codes @existing_chars.permutation.to_a.uniq end
generate_start_codes()
click to toggle source
# File lib/mastermind_ruby/solver/intelligent_brute_force_solver.rb, line 31 def generate_start_codes MastermindRuby::Code::AVAILABLE_CHARACTERS.map do |char| char * @code_length end end
request_quess(count)
click to toggle source
# File lib/mastermind_ruby/solver/intelligent_brute_force_solver.rb, line 14 def request_quess(count) if @basic_try < 5 @basic_try += 1 MastermindRuby::Code.parse(@basic_codes[@basic_try]) else @code_try += 1 @tryable_codes ||= generate_codes MastermindRuby::Code.new(@tryable_codes[@code_try]) end end