module Boggler::Dictionary
Public Instance Methods
words()
click to toggle source
# File lib/boggler/dictionary.rb, line 5 def words return @words if defined?(@words) content = nil Benchmarking.measure('dictionary') do path = File.expand_path('../../../vendor/dictionary.txt', __FILE__) content = File.read(path) content = content.split("\n") @words = words_to_hash(content) end @words end
words_to_hash(words)
click to toggle source
# File lib/boggler/dictionary.rb, line 20 def words_to_hash(words) hash = {} words.each do |word| word = word.split('') key = word[0..2].join letters = word[3..-1] merge_word hash, key, word_to_hash(letters) end hash end
Private Instance Methods
letters_to_hash(hash = {}, letters = [])
click to toggle source
# File lib/boggler/dictionary.rb, line 63 def letters_to_hash(hash = {}, letters = []) hash ||= {} letters.each_with_index do |letter, i| if letters.length > 1 hash[letter] = letters_to_hash(hash[letter], letters[(i + 1)..-1]) return hash else hash[letter] = {'' => true} return hash end end end
merge_word(hash, key, word_hash)
click to toggle source
# File lib/boggler/dictionary.rb, line 37 def merge_word(hash, key, word_hash) if hash[key] merge_word_hash hash[key], word_hash else hash[key] = word_hash end end
merge_word_hash(hash, word_hash)
click to toggle source
# File lib/boggler/dictionary.rb, line 45 def merge_word_hash(hash, word_hash) hash.merge!(word_hash) do |key, old_value, new_value| if old_value.is_a?(Hash) && new_value.is_a?(Hash) merge_word_hash(old_value, new_value) else old_value || new_value end end end
word_to_hash(letters)
click to toggle source
# File lib/boggler/dictionary.rb, line 55 def word_to_hash(letters) if letters.empty? {'' => true} else letters_to_hash({}, letters) end end