Sha256: 99392e6baa5c2c2b0352421d368075898e4f61b406113688e2957c0c83a1d754

Contents?: true

Size: 1.25 KB

Versions: 1

Compression:

Stored size: 1.25 KB

Contents

# frozen_string_literal: true

require_relative "../string"

module Wordle
  class GuessAnalyzer
    def initialize(target_word, guess)
      @target_word = target_word
      @guess = guess
    end

    def match?
      @guess.downcase.strip == @target_word
    end

    def colors
      raw_colors.each_with_index.map do |color, i|
        guess_letters[i].send(color)
      end.join("")
    end

    def squares
      color_map = {
        green: "🟩",
        yellow: "🟨",
        gray: "⬛️"
      }

      raw_colors.each_with_index.map do |color, i|
        color_map[color]
      end.join("")
    end

    private

    def guess_letters
      @_guess_letters = @guess.chars
    end

    def raw_colors
      @_raw_colors ||= begin
        target_letters = @target_word.chars
        colors = []

        guess_letters.each_with_index do |letter, i|
          if letter == target_letters[i]
            colors[i] = :green
            target_letters[i] = nil
          end
        end

        guess_letters.each_with_index do |letter, i|
          if colors[i].nil?
            colors[i] = if target_letters.include?(letter)
              :yellow
            else
              :gray
            end
          end
        end

        colors
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
wordle-0.5.0 lib/wordle/guess_analyzer.rb