25 lines
733 B
Ruby
25 lines
733 B
Ruby
|
module Strategy
|
||
|
class Template
|
||
|
attr :dictionary, :word_size
|
||
|
|
||
|
def initialize(dictionary:, word_size: 5)
|
||
|
@dictionary = dictionary
|
||
|
@word_size = word_size
|
||
|
end
|
||
|
|
||
|
def guess(good_letters:, bad_letters:, guesses:, template:, **args)
|
||
|
dictionary.words
|
||
|
.select { |word| word.length == word_size }
|
||
|
.reject { |word| bad_letters.any? { |letter| word.chars.include?(letter) } }
|
||
|
.select { |word| (good_letters - word.chars).length == 0 }
|
||
|
.reject { |word| guesses.include?(word) }
|
||
|
.select do |word|
|
||
|
template.each_with_index.all? do |letter, index|
|
||
|
letter == "*" || letter == word.chars[index]
|
||
|
end
|
||
|
end
|
||
|
.sample
|
||
|
end
|
||
|
end
|
||
|
end
|