Class: Wordle::Model::FiveLetterWord

Inherits:
Object
  • Object
show all
Defined in:
app/wordle/model/five_letter_word.rb

Constant Summary collapse

WORLD_ANSWERS_ALPHABETICAL_FILE =
File.join(APP_ROOT, 'config', 'wordle-answers-alphabetical.txt')
WORLD_ALLOWED_GUESSES_FILE =
File.join(APP_ROOT, 'config', 'wordle-allowed-guesses.txt')
WORLD_ANSWERS_ALPHABETICAL =
File.read(WORLD_ANSWERS_ALPHABETICAL_FILE).lines(chomp: true).sort
WORLD_ALLOWED_GUESSES =
(WORLD_ANSWERS_ALPHABETICAL + File.read(WORLD_ALLOWED_GUESSES_FILE).lines(chomp: true)).sort
COLORS =
[:green, :yellow, :gray]
STATUSES =
[:in_progress, :win, :loss]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeFiveLetterWord

Returns a new instance of FiveLetterWord.



19
20
21
# File 'app/wordle/model/five_letter_word.rb', line 19

def initialize
  refresh
end

Instance Attribute Details

#answerObject

Returns the value of attribute answer.



17
18
19
# File 'app/wordle/model/five_letter_word.rb', line 17

def answer
  @answer
end

#colored_alphabetsObject

Returns the value of attribute colored_alphabets.



17
18
19
# File 'app/wordle/model/five_letter_word.rb', line 17

def colored_alphabets
  @colored_alphabets
end

#guess_resultsObject

Returns the value of attribute guess_results.



17
18
19
# File 'app/wordle/model/five_letter_word.rb', line 17

def guess_results
  @guess_results
end

#guessesObject

Returns the value of attribute guesses.



17
18
19
# File 'app/wordle/model/five_letter_word.rb', line 17

def guesses
  @guesses
end

#statusObject

Returns the value of attribute status.



17
18
19
# File 'app/wordle/model/five_letter_word.rb', line 17

def status
  @status
end

Class Method Details

.random_wordObject



5
6
7
# File 'app/wordle/model/five_letter_word.rb', line 5

def random_word
  WORLD_ANSWERS_ALPHABETICAL.sample
end

Instance Method Details

#guess(word_guess) ⇒ Object



31
32
33
34
35
36
37
38
39
40
# File 'app/wordle/model/five_letter_word.rb', line 31

def guess(word_guess)
  word_guess = word_guess.downcase
  return [] if status == :win || status == :loss
  guesses << word_guess
  guess_results << guess_result_for(word_guess)
  update_colored_alphabets(word_guess, guess_results.last)
  self.status = :win if guesses.last == answer
  self.status = :loss if guesses.last != answer && guesses.count == 6
  guess_results.last
end

#refreshObject



23
24
25
26
27
28
29
# File 'app/wordle/model/five_letter_word.rb', line 23

def refresh
  self.guesses = []
  self.guess_results = []
  self.status = :in_progress
  self.answer = self.class.random_word
  self.colored_alphabets = (97..122).map {|n| n.chr}.reduce({}) {|hash, letter| hash.merge(letter => nil) }
end