class Mastermind::Processor

Public Class Methods

colors(num_colors) click to toggle source
# File lib/mastermind/processor.rb, line 14
def self.colors(num_colors)
  Mastermind::COLORS.first(num_colors)
end
num_correct_colors(guess, code) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# File lib/mastermind/processor.rb, line 22
def self.valid_length?(guess, code)
  guess.length == code.length
end
validate(guess, code, valid_colors) click to toggle source
# File lib/mastermind/processor.rb, line 18
def self.validate(guess, code, valid_colors)
  valid_length?(guess, code) && valid_colors?(guess, valid_colors)
end