class Scrabble::Solver
Attributes
all[RW]
nodes[RW]
used[RW]
word[RW]
Public Class Methods
new()
click to toggle source
# File lib/scrabblestuff/solver.rb, line 7 def initialize @word, @nodes = false, {} end
Public Instance Methods
<<(word)
click to toggle source
# File lib/scrabblestuff/solver.rb, line 19 def <<(word) node = word.each_char.inject(self) { |node, char| node.nodes[char] ||= Solver.new } node.word = true end
find(letters)
click to toggle source
# File lib/scrabblestuff/solver.rb, line 24 def find(letters) @all = [] @used = frequency_map(letters) recursive_find self, "" @all end
frequency_map(letters)
click to toggle source
# File lib/scrabblestuff/solver.rb, line 41 def frequency_map(letters) letters.each_char.inject(Hash.new(0)) { |map, char| (map[char] += 1) && map } end
load_dictionary(word_file_name = File.dirname(__FILE__) + '/../../assets/words.txt')
click to toggle source
# File lib/scrabblestuff/solver.rb, line 11 def load_dictionary(word_file_name = File.dirname(__FILE__) + '/../../assets/words.txt') words = File.read(word_file_name).split("\n").map(&:downcase) words.each do |word| self.<< word.chomp end end
recursive_find(root, word)
click to toggle source
# File lib/scrabblestuff/solver.rb, line 31 def recursive_find(root, word) nodes.reject { |c, v| root.used[c] == 0 }.each { |char, node| root.used[char] -= 1 node.recursive_find(root, word + char) root.used[char] += 1 } root.all << word if self.word end