From 92515ff2183c9f5bcd2b079ca8639c3fc915d357 Mon Sep 17 00:00:00 2001 From: Nick Chambers Date: Sun, 25 Jul 2021 20:33:06 -0500 Subject: [PATCH] ruby/words.rb: find all words an array of letters can make --- ruby/words.rb | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 ruby/words.rb diff --git a/ruby/words.rb b/ruby/words.rb new file mode 100644 index 0000000..248aef0 --- /dev/null +++ b/ruby/words.rb @@ -0,0 +1,32 @@ +#!/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