Sha256: 5a9d5e15429ff439c5e5f13fc3ca25b742a7f3e99a8aacd2976cfec114dd0dd9

Contents?: true

Size: 813 Bytes

Versions: 1

Compression:

Stored size: 813 Bytes

Contents

# frozen_string_literal: true

module Codebreaker
  class CodeMatcher
    EXACT = '+'
    NON_EXACT = '-'

    attr_reader :guess, :secret_code

    def match(secret_code, guess)
      @secret_code = secret_code.split('')
      @guess = guess.split('')
      handle_matched_digits.join + handle_matched_digits_with_wrong_position.join
    end

    private

    def handle_matched_digits
      secret_code.map.with_index do |_, index|
        next unless secret_code[index] == guess[index]

        @guess[index], @secret_code[index] = nil
        EXACT
      end
    end

    def handle_matched_digits_with_wrong_position
      guess.compact.map do |number|
        next unless @secret_code.include?(number)

        @secret_code.delete_at(secret_code.index(number))
        NON_EXACT
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
codebreaker_manfly-0.1.2 lib/codebreaker/code_matcher.rb