class Codebreaker::GuessChecker

Constants

MINUSE
NONE
PLUS

Attributes

exact[RW]
inexact[RW]
none[RW]

Public Class Methods

new(code, code_input) click to toggle source
# File lib/codebreaker/guess_checker.rb, line 11
def initialize(code, code_input)
  @code = code.chars
  @code_input = code_input.chars
end

Public Instance Methods

check_input() click to toggle source
# File lib/codebreaker/guess_checker.rb, line 22
def check_input
  raw_result = mismatched
  matched_result = matched(raw_result)
  check_result(matched_result)
end
symbols(inexact = MINUSE, exact = PLUS, none = NONE) click to toggle source
# File lib/codebreaker/guess_checker.rb, line 16
def symbols(inexact = MINUSE, exact = PLUS, none = NONE)
  @inexact = inexact
  @exact = exact
  @none = none
end

Private Instance Methods

check_result(result) click to toggle source
# File lib/codebreaker/guess_checker.rb, line 44
def check_result(result)
  result = result.chars
  result = result << @none until result.size == 4
  result.join
end
matched(result) click to toggle source
# File lib/codebreaker/guess_checker.rb, line 35
def matched(result)
  @code_input.each.with_index do |element, index|
    result.sub!(@inexact, @exact) if element == @code[index]
  end
  return result unless result.empty?

  @none
end
mismatched() click to toggle source
# File lib/codebreaker/guess_checker.rb, line 30
def mismatched
  inexact = (@code & @code_input).map { |element| [@code.count(element), @code_input.count(element)].min }.sum
  @inexact * inexact
end