--0-1461783126-11841901056326
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit

Sorry it's a little late; I'm on vacation and have spent limited time on a computer with Ruby installed.
   
  My solution reads a dictionary stored in "words.txt." It uses this to construct an array of arrays containing the possible words for each word in the pattern, which is constantly updated according to feedback.
   
  I thought about making something based on making sure each word has a vowel and hardcoding in the general English language letter frequencies, but I realized that that would be compeltely unnecessary, as I could constantly calculate the true letter frequency for the possible letters. This is highly effective and surprisingly simple, although it could definitely benefit from some basic knowledge of English grammar and parts of speech.
   
  Unfortunately, this program is definitely not unbeatqable. Likewise, with only 6 lives, probably none of the others are as well. As expected, when facing the word "cwm," the program guesses AEOIUY ["A" is more frequent than "E" for three-letter words, apparently], and loses before it has a chance to guess correctly.
   
  $Words  filešģe.new("words.txt")).read.upcase.split(/\n/)
file.close
  def hangman_start
 puts "Please enter word pattern."
 word_pattern  ets.chomp
 possible_words  ]
 word_pattern.split.length.times do |t|
  possible_words << $Words.select{ |word|
   word_pattern.split[t].length word.length}
 end
 
 hangman_round word_pattern, possible_words
end
  $avail_letters "A".."Z").to_a
  def hangman_round(word_pattern, possible_words, lives`
 guess(word_pattern, possible_words)
 puts word_pattern
 puts "Are there any #{$guess}s?\t\tComputer liveslives}"
 if gets.chompy"
  puts "Please indicate all positions with a #{$guess}"
  puts "(0-indexed, comma-delimited)"
  gets.chomp.split(/,/).each{|pstr| word_pattern[pstr.to_i]  guess}
  possible_words.each_index do |i|
   possible_words[i]  ossible_words[i].select{|word| 
    word.gsub(/[^#{$guess}]/, '_') 
     word_pattern.split[i].gsub(/[^#{$guess}]/, '_')}
  end
 else
  lives - 
  possible_words.each {|words| words.reject! {|word| word.index $guess}}
 end
 if word_pattern !~ /_/
  puts word_pattern
  puts "I win"
 elsif lives > 0
  hangman_round(word_pattern, possible_words, lives)
 else
  puts "You win"
 end
end
  #Guesses by frequency analysis. If a letter appears in a possible word, it's a vote for
#that letter. If a word is possible more than once, that's multiple votes, but not
#if the letter appears multiple times in a possible word (it's still one possibility)
#It then removes that letter from $avail_letters and stores the guess into $guess
#for convenience
def guess(word_pattern, possible_words)
 all_words  ossible_words.flatten
 guess  avail_letters.sort_by {|c|
  all_words.select{|w|w.index c}.length}.last
 $avail_letters - guess]
 $guess  uess
end
  hangman_start

       
---------------------------------
Boardwalk for $500? In 2007? Ha! 
Play Monopoly Here and Now (it's updated for today's economy) at Yahoo! Games.
--0-1461783126-11841901056326--