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