Class: Mastermind::Processor

Inherits:
Object
  • Object
show all
Defined in:
lib/mastermind/processor.rb

Class Method Summary collapse

Class Method Details

.colors(num_colors) ⇒ Object



14
15
16
# File 'lib/mastermind/processor.rb', line 14

def self.colors(num_colors)
  Mastermind::COLORS.first(num_colors)
end

.num_correct_colors(guess, code) ⇒ Object



33
34
35
36
37
38
39
40
41
42
# File 'lib/mastermind/processor.rb', line 33

def self.num_correct_colors(guess, code)
  non_posd_guess = guess.chars.select.with_index { |letter, i| letter != code[i] }
  non_posd_code = code.select.with_index { |letter, i| letter != guess.chars[i] }
  colors = []
  non_posd_guess.map do |letter|
    idx = non_posd_code.find_index { |char| letter == char }
    colors << non_posd_code.delete_at(idx) if idx
  end
  colors.length
end

.num_correct_pos(guess, code) ⇒ Object



44
45
46
# File 'lib/mastermind/processor.rb', line 44

def self.num_correct_pos(guess, code)
  guess.chars.zip(code).count { |comp| comp[0] == comp[1] }
end

.secret(length, num_colors) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/mastermind/processor.rb', line 6

def self.secret(length, num_colors)
  secret = []
  length.times do
    secret << colors(num_colors).sample
  end
  secret
end

.valid_colors?(guess, valid_colors) ⇒ Boolean

Returns:

  • (Boolean)


26
27
28
29
30
31
# File 'lib/mastermind/processor.rb', line 26

def self.valid_colors?(guess, valid_colors)
  validity = guess.split("").map do |char|
    valid_colors.any? { |color| color == char }
  end
  !validity.any? { |char| char == false }
end

.valid_length?(guess, code) ⇒ Boolean

Returns:

  • (Boolean)


22
23
24
# File 'lib/mastermind/processor.rb', line 22

def self.valid_length?(guess, code)
  guess.length == code.length
end

.validate(guess, code, valid_colors) ⇒ Object



18
19
20
# File 'lib/mastermind/processor.rb', line 18

def self.validate(guess, code, valid_colors)
  valid_length?(guess, code) && valid_colors?(guess, valid_colors)
end