Class: IntelligentBruteForceSolver

Inherits:
Object
  • Object
show all
Defined in:
lib/mastermind_ruby/solver/intelligent_brute_force_solver.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(code_length: 4) ⇒ IntelligentBruteForceSolver

Returns a new instance of IntelligentBruteForceSolver.



6
7
8
9
10
11
12
# 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

Instance Attribute Details

#code_lengthObject (readonly)

Returns the value of attribute code_length.



4
5
6
# File 'lib/mastermind_ruby/solver/intelligent_brute_force_solver.rb', line 4

def code_length
  @code_length
end

Instance Method Details

#assessment_received(result) ⇒ Object



25
26
27
28
29
# 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_codesObject



37
38
39
# File 'lib/mastermind_ruby/solver/intelligent_brute_force_solver.rb', line 37

def generate_codes
  @existing_chars.permutation.to_a.uniq
end

#generate_start_codesObject



31
32
33
34
35
# 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) ⇒ Object



14
15
16
17
18
19
20
21
22
23
# 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