```------art_7791_32033177.1184181018598
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

2007/7/11, James Edward Gray II <james / grayproductions.net>:
> Not many people solved this one, so I wanted to see if it was too
> tough.  Didn't seem so:
>
I was busy until today.

Here's my solution and my first quiz solution since I learn Ruby. It
wasn't that hard. I learned a lot about Ruby with it.

>ruby hangman.rb [-wrd] [-lfes]
If you don't pass a word it will choose a random word from the
dictionary. Lifes is set to 6 if you don't provide it.

<code>
#Ruby Quiz 130
#solution by Thomas Wieczorek <wieczo.yo / googlemail.com>
#11.07.2007
require 'yaml'
\$debug  rue

class Player

public

def initialize(word)
@word  ord
@letters  'a'..'z').to_a
@guessed  ]
scan_dictionary(word)
end

def guess()
return @dictionary[0] if @dictionary.length 1
while (true)
letter  probabilities.pop
next if @guessed.include?(letter[0])
@guessed << letter[0]
break
end
return letter[0]
end

def wordalue)

if not value.include?(".") then
#lost
#unknown word
if not @dictionary.include?(value) then
@dictionary << value
File.open("dictionary.yaml", "w") { |f| YAML.dump(@dictionary, f) }
end
else
if @word.eql?(value) then
@word  alue
scan_dictionary(value)
end
end
end

private

DICTIONARYFILE  dictionary.yaml"

@dictionary  dictionary.grep(Regexp.new("^#{@word}\$"))
set_probability()
end

def set_probability
alphabet  'a'..'z').to_a
@probabilities  }
alphabet.each { |l| @probabilities[l]   }
@dictionary.each do |word|
word.each_byte do |letter|
#p letter
l  etter.chr
@probabilities[l] +  if alphabet.include?(l)
end
end

@probabilities  probabilities.sort {|a,b| a[1]<[1]}
end

end
end #of Player

def random_word
return words[rand(words.length)]
end

if word.include?(guess) then
#puts "#{guess} is in #{word}"
word.length.times do |i|
if word[i].chr guess then
end
end
end

end

def play_game(word  ", lifes  , give_output  alse)
#user given word
word  andom_word if word ""
guess  "

while(lifes > 0)
#AI guesses a letter or word
puts "AI is looking for >#{masked_word}<" if give_output
guess  layer.guess()
new_word  "
won  alse
puts "AI guessed '#{guess}'"  if give_output
if guess.length 1 then

else
if guess.length > 1 then
break if guess word
lifes -
next
else
#nil
end
end

#wrong guess
lifes -
puts "AI lost a life. #{lifes} lifes left."
else
#found word
break
else
#found a letter
next
end
end
end

if lifes > 0 then
won  rue
else
#give word to player to extend dictionary
player.word  ord
won  alse
end

return won, word, lifes
end #of play_game

won  alse
word  "
lifes
if ARGV.length > 0
ARGV.each do |arg|
option  rg.split("
case option[0]
when "-w"
word  ption[1]
when "-l"
lifes  ption[1].to_i
end
end
end

won, word, lifes  lay_game(word, lifes, true)

if won then
puts "AI won! It guessed \"#{word}\" with #{lifes} lifes left."
else
puts "Awww! Lost! AI couldn't guess \"#{word}\"."
end

</code>

------art_7791_32033177.1184181018598
Content-Type: application/octet-stream; name=hangman.rb
Content-Transfer-Encoding: base64
X-Attachment-Id: f_f406se2t
Content-Disposition: attachment; filename="hangman.rb"

I1J1YnkgUXVpeiAxMzANCiNzb2x1dGlvbiBieSBUaG9tYXMgV2llY3pvcmVrIDx3aWVjem8ueW9A
Z29vZ2xlbWFpbC5jb20+DQojdGhlIGRpY3Rpb25hcnkgY29tZXMgZnJvbSBodHRwOi8vd3d3Lmp1
bmUyOS5jb20vSURQL2ZpbGVzL0dlcm1hbi50eHQgSSByZW1vdmVkIHRoZSBkdXBsaWNhdGVzIGFu
ZCB0aGUgR2VybWFuIHdvcmRzDQojMTEuMDcuMjAwNw0KcmVxdWlyZSAneWFtbCcNCiRkZWJ1ZyA9
IHRydWUNCg0KY2xhc3MgUGxheWVyDQoNCnB1YmxpYw0KDQogIGRlZiBpbml0aWFsaXplKHdvcmQp
DQogICAgQHdvcmQgPSB3b3JkDQogICAgQGRpY3Rpb25hcnkgPSBZQU1MLmxvYWRfZmlsZShESUNU
SU9OQVJZRklMRSkNCiAgICBAbGV0dGVycyA9ICgnYScuLid6JykudG9fYQ0KICAgIEBndWVzc2Vk
ID0gW10NCiAgICBzY2FuX2RpY3Rpb25hcnkod29yZCkNCiAgZW5kDQogIA0KICBkZWYgZ3Vlc3Mo
KQ0KICAgIHJldHVybiBAZGljdGlvbmFyeVswXSBpZiBAZGljdGlvbmFyeS5sZW5ndGggPT0gMQ0K
ICAgIHdoaWxlICh0cnVlKQ0KICAgICAgbGV0dGVyID0gQHByb2JhYmlsaXRpZXMucG9wDQogICAg
ICBuZXh0IGlmIEBndWVzc2VkLmluY2x1ZGU/KGxldHRlclswXSkNCiAgICAgIEBndWVzc2VkIDw8
IGxldHRlclswXQ0KICAgICAgYnJlYWsNCiAgICBlbmQNCiAgICByZXR1cm4gbGV0dGVyWzBdDQog
IGVuZA0KDQogIGRlZiB3b3JkPSh2YWx1ZSkNCiAgICANCiAgICBpZiBub3QgdmFsdWUuaW5jbHVk
ZT8oIi4iKSB0aGVuDQogICAgICAjbG9zdA0KICAgICAgI3Vua25vd24gd29yZA0KICAgICAgaWYg
bm90IEBkaWN0aW9uYXJ5LmluY2x1ZGU/KHZhbHVlKSB0aGVuDQogICAgICAgIEBkaWN0aW9uYXJ5
ID0gbG9hZF9kaWN0aW9uYXJ5KCkNCiAgICAgICAgQGRpY3Rpb25hcnkgPDwgdmFsdWUNCiAgICAg
ICAgRmlsZS5vcGVuKCJkaWN0aW9uYXJ5LnlhbWwiLCAidyIpIHsgfGZ8IFlBTUwuZHVtcChAZGlj
dGlvbmFyeSwgZikgfQ0KICAgICAgZW5kDQogICAgZWxzZQ0KICAgICAgaWYgQHdvcmQuZXFsPyh2
eSh2YWx1ZSkNCiAgICAgIGVuZA0KICAgIGVuZA0KICBlbmQNCiAgDQpwcml2YXRlIA0KDQogIERJ
Q1RJT05BUllGSUxFID0gImRpY3Rpb25hcnkueWFtbCINCiAgDQogIGRlZiBzY2FuX2RpY3Rpb25h
cnkobWFza2VkKQ0KICAgIEBkaWN0aW9uYXJ5ID0gQGRpY3Rpb25hcnkgb3IgbG9hZF9kaWN0aW9u
YXJ5KCkNCiAgICBAZGljdGlvbmFyeSA9IEBkaWN0aW9uYXJ5LmdyZXAoUmVnZXhwLm5ldygiXiN7
QHdvcmR9JCIpKQ0KICAgIHNldF9wcm9iYWJpbGl0eSgpDQogIGVuZA0KICANCiAgZGVmIHNldF9w
cm9iYWJpbGl0eQ0KICAgIGFscGhhYmV0ID0gKCdhJy4uJ3onKS50b19hDQogICAgQHByb2JhYmls
aXRpZXMgPSB7fQ0KICAgIGFscGhhYmV0LmVhY2ggeyB8bHwgQHByb2JhYmlsaXRpZXNbbF0gPSAw
IH0NCiAgICBAZGljdGlvbmFyeS5lYWNoIGRvIHx3b3JkfA0KICAgICAgd29yZC5lYWNoX2J5dGUg
ZG8gfGxldHRlcnwNCiAgICAgICAgI3AgbGV0dGVyDQogICAgICAgIGwgPSBsZXR0ZXIuY2hyDQog
ICAgICAgIEBwcm9iYWJpbGl0aWVzW2xdICs9IDEgaWYgYWxwaGFiZXQuaW5jbHVkZT8obCkNCiAg
ICAgIGVuZA0KICAgIGVuZA0KICAgIA0KICAgIEBwcm9iYWJpbGl0aWVzID0gQHByb2JhYmlsaXRp
ZXMuc29ydCB7fGEsYnwgYVsxXTw9PmJbMV19DQogIGVuZA0KICANCiAgZGVmIGxvYWRfZGljdGlv
bmFyeSgpDQogICAgcmV0dXJuIFlBTUwubG9hZF9maWxlKERJQ1RJT05BUllGSUxFKQ0KICBlbmQN
CmVuZCAjb2YgUGxheWVyDQoNCmRlZiByYW5kb21fd29yZA0KICB3b3JkcyA9IFlBTUwubG9hZF9m
aWxlKCJkaWN0aW9uYXJ5LnlhbWwiKQ0KICByZXR1cm4gd29yZHNbcmFuZCh3b3Jkcy5sZW5ndGgp
XQ0KZW5kDQoNCmRlZiBjaGVja19mb3JfbGV0dGVycyh3b3JkLCBndWVzcywgbWFza2VkX3dvcmQp
DQogIGlmIHdvcmQuaW5jbHVkZT8oZ3Vlc3MpIHRoZW4NCiAgICAjcHV0cyAiI3tndWVzc30gaXMg
aW4gI3t3b3JkfSINCiAgICB3b3JkLmxlbmd0aC50aW1lcyBkbyB8aXwNCiAgICAgIGlmIHdvcmRb
aV0uY2hyID09IGd1ZXNzIHRoZW4NCiAgICAgICAgbWFza2VkX3dvcmRbaV0gPSBndWVzcw0KICAg
ICAgZW5kDQogICAgZW5kDQogIGVuZA0KICANCiAgcmV0dXJuIG1hc2tlZF93b3JkDQplbmQNCg0K
ZGVmIHBsYXlfZ2FtZSh3b3JkID0gIiIsIGxpZmVzID0gNiwgZ2l2ZV9vdXRwdXQgPSBmYWxzZSkN
CiAgI3VzZXIgZ2l2ZW4gd29yZA0KICB3b3JkID0gcmFuZG9tX3dvcmQgaWYgd29yZCA9PSAiIg0K
ICBtYXNrZWRfd29yZCA9IHdvcmQuZ3N1YigvXHcvLCAiLiIpDQogIGd1ZXNzID0gIiINCg0KICBw
bGF5ZXIgPSBQbGF5ZXIubmV3KG1hc2tlZF93b3JkKQ0KDQogIHdoaWxlKGxpZmVzID4gMCkNCiAg
ICAjQUkgZ3Vlc3NlcyBhIGxldHRlciBvciB3b3JkDQogICAgcHV0cyAiQUkgaXMgbG9va2luZyBm
b3IgPiN7bWFza2VkX3dvcmR9PCIgaWYgZ2l2ZV9vdXRwdXQNCiAgICBndWVzcyA9IHBsYXllci5n
dWVzcygpDQogICAgbmV3X3dvcmQgPSAiIg0KICAgIHdvbiA9IGZhbHNlDQogICAgcHV0cyAiQUkg
Z3Vlc3NlZCAnI3tndWVzc30nIiAgaWYgZ2l2ZV9vdXRwdXQNCiAgICBpZiBndWVzcy5sZW5ndGgg
PT0gMSB0aGVuDQogICAgICBtYXNrZWRfd29yZCA9IGNoZWNrX2Zvcl9sZXR0ZXJzKHdvcmQsIGd1
ZXNzLCBtYXNrZWRfd29yZCkNCiAgICAgIA0KICAgIGVsc2UgDQogICAgICBpZiBndWVzcy5sZW5n
dGggPiAxIHRoZW4NCiAgICAgICAgYnJlYWsgaWYgZ3Vlc3MgPT0gd29yZA0KICAgICAgICBsaWZl
cyAtPSAxDQogICAgICAgIG5leHQNCiAgICAgIGVsc2UNCiAgICAgICAgI25pbA0KICAgICAgZW5k
DQogICAgZW5kDQogICAgDQogICAgI3dyb25nIGd1ZXNzDQogICAgaWYgbm90IG1hc2tlZF93b3Jk
LmluY2x1ZGU/KGd1ZXNzKSB0aGVuDQogICAgICBsaWZlcyAtPSAxDQogICAgICBwdXRzICJBSSBs
b3N0IGEgbGlmZS4gI3tsaWZlc30gbGlmZXMgbGVmdC4iDQogICAgZWxzZSAgICANCiAgICAgICNm
b3VuZCB3b3JkDQogICAgICBpZiBtYXNrZWRfd29yZCA9PSB3b3JkIHRoZW4NCiAgICAgICAgYnJl
YWsNCiAgICAgIGVsc2UNCiAgICAgICAgI2ZvdW5kIGEgbGV0dGVyDQogICAgICAgIHBsYXllci53
b3JkID0gbWFza2VkX3dvcmQNCiAgICAgICAgbmV4dA0KICAgICAgZW5kDQogICAgZW5kDQogIGVu
ZA0KDQogIGlmIGxpZmVzID4gMCB0aGVuDQogICAgd29uID0gdHJ1ZQ0KICBlbHNlDQogICAgI2dp
dmUgd29yZCB0byBwbGF5ZXIgdG8gZXh0ZW5kIGRpY3Rpb25hcnkNCiAgICBwbGF5ZXIud29yZCA9
IHdvcmQNCiAgICB3b24gPSBmYWxzZQ0KICBlbmQNCiAgDQogIHJldHVybiB3b24sIHdvcmQsIGxp
ZmVzDQplbmQgI29mIHBsYXlfZ2FtZQ0KDQp3b24gPSBmYWxzZQ0Kd29yZCA9ICIiDQpsaWZlcyA9
IDYNCmlmIEFSR1YubGVuZ3RoID4gMA0KICBBUkdWLmVhY2ggZG8gfGFyZ3wNCiAgICBvcHRpb24g
PSBhcmcuc3BsaXQoIj0iKQ0KICAgIGNhc2Ugb3B0aW9uWzBdDQogICAgICB3aGVuICItdyINCiAg
ICAgICAgd29yZCA9IG9wdGlvblsxXQ0KICAgICAgd2hlbiAiLWwiDQogICAgICAgIGxpZmVzID0g
b3B0aW9uWzFdLnRvX2kNCiAgICBlbmQNCiAgZW5kDQplbmQNCg0Kd29uLCB3b3JkLCBsaWZlcyA9
IHBsYXlfZ2FtZSh3b3JkLCBsaWZlcywgdHJ1ZSkNCg0KaWYgd29uIHRoZW4NCiAgcHV0cyAiQUkg
d29uISBJdCBndWVzc2VkIFwiI3t3b3JkfVwiIHdpdGggI3tsaWZlc30gbGlmZXMgbGVmdC4iDQpl
bHNlDQogIHB1dHMgIkF3d3chIExvc3QhIEFJIGNvdWxkbid0IGd1ZXNzIFwiI3t3b3JkfVwiLiIN
CmVuZA0K
------art_7791_32033177.1184181018598--

```