Sha256: fbb2ba38f6a10cbe3798beeb95693c63fd8c5bbc6312286ceaec61c1e7a21173

Contents?: true

Size: 984 Bytes

Versions: 6

Compression:

Stored size: 984 Bytes

Contents

class CodeFormatter
  attr_reader :result
  def self.call(*args)
    new(*args).call
  end

  def initialize(maker_code = [], user_code = [])
    @maker_code = maker_code
    @user_code = user_code
    @result = []
  end

  def call
    format_plus.format_minus
    @result
  end

  def format_plus
    @user_code.zip(@maker_code).each_with_index do |numbers, index|
      next unless numbers.first == numbers.last

      @result << '+'
      clear_number(@maker_code, index)
      clear_number(@user_code, index)
    end
    code_compact
    self
  end

  def format_minus
    @user_code.each do |number|
      next unless @maker_code.include?(number)

      @result << '-'
      clear_number(@maker_code, @maker_code.index(number))
      clear_number(@user_code, @user_code.index(number))
    end
    code_compact
    self
  end

  private

  def code_compact
    @user_code.compact!
    @maker_code.compact!
  end

  def clear_number(array, index)
    array[index] = nil
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
codebreaker-engine-0.1.7 lib/codebreaker/code_formatter.rb
codebreaker-engine-0.1.6 lib/codebreaker/code_formatter.rb
codebreaker-engine-0.1.5 lib/codebreaker/code_formatter.rb
codebreaker-engine-0.1.4 lib/codebreaker/code_formatter.rb
codebreaker-engine-0.1.3 lib/codebreaker/code_formatter.rb
codebreaker-engine-0.1.2 lib/codebreaker/code_formatter.rb