32 lines
580 B
Ruby
32 lines
580 B
Ruby
#!/usr/bin/env ruby
|
|
|
|
WORDS = File.open("/usr/share/dict/words", &:read).lines.map do |word|
|
|
word.strip.downcase
|
|
end.freeze
|
|
|
|
def word?(word)
|
|
WORDS.include? word.downcase
|
|
end
|
|
|
|
def permute(letters, prefix: "", &cb)
|
|
1.upto letters.size do
|
|
cur_prefix = prefix + letters.first
|
|
test_set = letters[1..]
|
|
|
|
if letters.size > 2
|
|
permute test_set, prefix: cur_prefix, &cb
|
|
else
|
|
word = cur_prefix + test_set.join
|
|
|
|
if word? word
|
|
yield word
|
|
end
|
|
end
|
|
|
|
letters = letters.rotate
|
|
end
|
|
end
|
|
|
|
permute %w[u h s e t l] do |word|
|
|
puts word
|
|
end
|