From: Martin DeMello Date: 2007-01-11T20:23:37+09:00 Subject: Re: [QUIZ] Word Blender (#108) This just solves the find-all-subwords problem: target = ARGV[0] dict = ARGV[1] || 'sowpods' reduced = target.split(//).sort.uniq.join primes = [2, 3, 5, 7, 11, 13] factors = [] reduced.split(//).each_with_index {|e, i| factors[e[0]] = primes[i] } target_num = 1 target.each_byte {|i| target_num *= factors[i]} IO.foreach(dict) {|word| word.chomp! next unless (word =~ /^[#{reduced}]+$/) && (word.length < 7) && (word.length > 2) p = 1 word.each_byte {|i| p *= factors[i]} puts word if target_num % p == 0 }