Carlos wrote:
> Here is a possible (I hope correct) solution. SATIRE combines only with 16
> letters according to my dictionary.

Very simmilar to my solution: (it finds 18 combining letters for SATIRE 
using the ENABLE2K word list)

hash = Hash.new {|h, k| h[k] = 0}
File.foreach(ARGV[0] || 'WORD.LST') do |line|
   line.strip!
   if line.size == 7
     letters = line.downcase.scan(/./).sort.join
     7.times do |i|
       hash[letters[0, i] + letters[(i+1)..-1]] |= 1 << (letters[i] - 97)
     end
   end
end

cutoff = (ARGV[1] || '15').to_i
count = {}
hash.each do |k, v|
   v = (v & 0x5555555) + ((v>>1) & 0x5555555)
   v = (v & 0x3333333) + ((v>>2) & 0x3333333)
   v = (v & 0xf0f0f0f) + ((v>>4) & 0xf0f0f0f)
   v = (v & 0x0ff00ff) + ((v>>8) & 0x0ff00ff)
   v = (v & 0x000ffff) + ((v>>16) & 0x000ffff)
   count[k] = v if v >= cutoff
end

count.keys.sort_by {|k| count[k]}.each do |letters|
   printf "%s: (%d) ", letters, count[letters]
   combi = hash[letters]
   26.times do |i|
     print((i+97).chr) if combi[i] == 1
   end
   puts
end