Вы можете создать хеш с парами [hash_code(word), word]
один раз и записать результаты в виде JSON, YAML или в базу данных (например, SQLite).Ничего страшного, если для вычисления этого хеша потребуется много времени, потому что вам придется делать это только один раз.В следующий раз вам нужно только прочитать сохраненный хеш, который должен быть быстрым.
Проверка, находится ли слово или хеш-код внутри хеша, должна быть очень быстрой.
ВотНебольшой пример с TODO, оставленными для вас:
require 'json'
require 'digest/md5'
hashcodes = {}
def my_hashcode(word)
Digest::MD5.hexdigest word
end
# This part is slow, that's okay because it can be saved once and for all and doesn't depend on your input
File.open('/usr/share/dict/american-english') do |wordlist|
wordlist.each do |word|
word.chomp!
hashcodes[my_hashcode(word)] = word
end
end
#TODO: Write hashcodes to JSON file
#TODO: Read hashcode from JSON file
# This part depends on your input but is very fast:
some_hashcode = my_hashcode("test")
p hashcodes[some_hashcode]
# => "test"
p hashcodes["S0MEWEIRDH4SH"]
# => nil