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