module RubyWordlePlay
Constants
- LPAD
- NUM_ATTEMPTS
- NUM_LETTERS
- PROMPT
Public Class Methods
ask_for_attempt(str)
click to toggle source
# File lib/ruby-wordle/script-play.rb, line 67 def self.ask_for_attempt(str) puts print " #{str} ".bold.bg_cyan + " " attempt = Readline.readline(LPAD + PROMPT, true).strip.downcase if attempt == "quit" || attempt == "q" exit elsif attempt == "help" || attempt == "h" || attempt == "?" get_help attempt = ask_for_attempt(str) end unless /\A[a-z]{5}\z/ =~ attempt puts puts LPAD + "Sorry,".red + " the input format is not right" puts attempt = ask_for_attempt(str) end unless check_dict(attempt) puts puts LPAD + "Sorry,".red + " it's not listed in the dictionary" puts attempt = ask_for_attempt(str) end attempt end
check_dict(attempt)
click to toggle source
# File lib/ruby-wordle/script-play.rb, line 20 def self.check_dict(attempt) @word_list_original.include?(attempt) end
draw_decorated_border()
click to toggle source
# File lib/ruby-wordle/script-play.rb, line 94 def self.draw_decorated_border puts puts (' '.bg_green * 5 + ' '.bg_gray * 3 + ' '.bg_brown * 5 + ' '.bg_gray * 3) * 4 puts end
evaluate(attempt)
click to toggle source
# File lib/ruby-wordle/script-play.rb, line 24 def self.evaluate(attempt) puts @letters_known = attempt.split(//) correct = [] wrong = [] @word.split(//).each_with_index do |l, i| if attempt[i] == l correct << i else wrong << i @letters_known[i] = '.' end end attempt.split(//).each_with_index do |l, i| if correct.include?(i) print " #{@word[i]} ".upcase.bg_green else elsewhere = wrong.map{|i|@word[i]}.index(l) if elsewhere print " #{l} ".upcase.bg_brown @not_used_here[i + 1] << l unless @not_used_here[i + 1].include? l else print " ".bg_gray @not_used << attempt[i] if /[a-z]/ =~ attempt[i] @not_used.uniq! @not_used.sort! end end end puts correct.size == NUM_LETTERS end
get_help()
click to toggle source
# File lib/ruby-wordle/script-play.rb, line 57 def self.get_help letters_used = [] @not_used_here.each do |k, v| v.each do |r| letters_used << [k - 1, r] end end RubyWordleSolver.solve_wordle(@letters_known.join, letters_used, @not_used, :basic, @word) end
play_wordle()
click to toggle source
# File lib/ruby-wordle/script-play.rb, line 100 def play_wordle draw_decorated_border; puts "Input a word of 5 letters and press \"↵\"".cyan.bold puts "Type \"?↵\" for help, \"quit↵\" to exit".gray NUM_ATTEMPTS.times do |i| attempt = ask_for_attempt("#{i + 1}/#{NUM_ATTEMPTS}") result = evaluate(attempt) puts if result puts "C O R R E C T !".upcase.bg_magenta exit elsif i + 1 == NUM_ATTEMPTS puts " ANSWER: #{@word} ".upcase.bg_red exit else puts @not_used.uniq.map{|l| " #{l.upcase} "}.join.bg_black if !@not_used.empty? puts end end draw_decorated_border end
Private Instance Methods
play_wordle()
click to toggle source
# File lib/ruby-wordle/script-play.rb, line 100 def play_wordle draw_decorated_border; puts "Input a word of 5 letters and press \"↵\"".cyan.bold puts "Type \"?↵\" for help, \"quit↵\" to exit".gray NUM_ATTEMPTS.times do |i| attempt = ask_for_attempt("#{i + 1}/#{NUM_ATTEMPTS}") result = evaluate(attempt) puts if result puts "C O R R E C T !".upcase.bg_magenta exit elsif i + 1 == NUM_ATTEMPTS puts " ANSWER: #{@word} ".upcase.bg_red exit else puts @not_used.uniq.map{|l| " #{l.upcase} "}.join.bg_black if !@not_used.empty? puts end end draw_decorated_border end