Sha256: 7d8fdb46c15db0113c52772ea0fae65e92eb90ded36d5dffd65017eafba55889

Contents?: true

Size: 1.02 KB

Versions: 4

Compression:

Stored size: 1.02 KB

Contents

# frozen_string_literal: true

require_relative 'config'

module CodebreakerVk
  class GameProcess
    attr_reader :matches

    def initialize(secret_code, user_code)
      @secret_code    = secret_code.clone
      @user_code      = user_code

      @exact_matches  = 0
      @number_matches = 0

      @matches        = obtain_matches
    end

    private

    def obtain_matches
      calculate_matches unless @secret_code.empty?

      EXACT_MATCH_SIGN * @exact_matches << NUMBER_MATCH_SIGN * @number_matches
    end

    def calculate_matches
      @secret_code.zip(@user_code).each do |secret_code_number, user_code_number|
        next unless @secret_code.include? user_code_number

        next add_match(user_code_number, exact: true) if secret_code_number == user_code_number

        add_match(user_code_number)
      end
    end

    def add_match(matched_code_number, exact: false)
      exact ? @exact_matches += 1 : @number_matches += 1

      @secret_code.delete_at(@secret_code.index(matched_code_number))
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
codebreaker_vk-0.2.3 lib/codebreaker_vk/game_process.rb
codebreaker_vk-0.2.2 lib/codebreaker_vk/game_process.rb
codebreaker_vk-0.2.1 lib/codebreaker_vk/game_process.rb
codebreaker_vk-0.2.0 lib/codebreaker_vk/game_process.rb