--Boundary_(ID_i946CdvW4ezDb6K6qusHxA)
Content-type: text/plain; charset=ISO-8859-1; format=flowed
Content-transfer-encoding: 7BIT
I made two this time. One plays a game and one just picks the word.
Here's the one that just picks a word. It runs very quickly, about .155
or .2 seconds.
#! /usr/bin/ruby -w
class Array
def rand_elem
self[rand(size)]
end
end
# Open and read the dictionary.
dict O.read("/usr/share/dict/words")
# Pick a random word with 6 letters.
baseWord ict.scan(/^[a-z]{6}$/).rand_elem
# Find words that use the same letters
selectedWords ict.scan(/^[#{baseWord}]{3,6}$/)
# Display the words.
puts baseWord + ":\n\t" + selectedWords.join("\n\t")
And here's the one that plays a game. Basically, it gives you the
letters and you enter the 5 best words you can think of. The score is
the length of the word ** 3 added to a running total, but subtracted if
the word isn't valid (already said or not in the list).
#! /usr/bin/ruby -w
class Array
def rand_elem
self[rand(size)]
end
def english_join
self[0...-1].join(', ') + ', and ' + self[-1]
end
end
class String
def letters
unless $DEBUG
split(//).uniq.sort_by{rand}
else
split(//)
end
end
end
class Game
@@dict il
def initialize
# Open and read the dictionary.
@@dict || O.read("/usr/share/dict/words")
@points
@round
end
def play
# Pick a random word with 6 letters.
baseWord @dict.scan(/^[a-z]{6}$/).rand_elem
# Find words that use the same letters
selectedWords @dict.scan(/^[#{baseWord}]{3,6}$/)
# Initialize word list & continue var.
guessed ]
continue alse
# Display banner
puts "",
"Round #{@round}:",
"Enter the 5 longest words you can make from the letters
#{baseWord.letters.english_join}.",
"Invalid and repeated words count towards the 5 words but subtract
points.",
""
# Gather all the points, calculate the score, and see if the player
should go to the next round.
5.times do
print "#{@points}\t"
word ets.chomp.downcase
if !guessed.include?(word) && selectedWords.include?(word)
@points + ord.length ** 3
guessed << word
continue rue if word.length 6
else
@points - ord.length ** 3
end
end
# Go on to the next round or lose.
if continue
@round +
play
else
puts "Sorry, you didn't get a 6 letter word. You got #{@points}
points, however."
end
end
end
Game.new.play
Ruby Quiz wrote:
> This is a riff on the Jumble puzzle found in many (US) newspapers. More
> specifically, it's based on the game TextTwist[1], made by GameHouse[2] and
> published in various places around the web.
--Boundary_(ID_i946CdvW4ezDb6K6qusHxA)
Content-type: application/x-ruby; name=wordjumblefast.rb
Content-transfer-encoding: base64
Content-disposition: inline; filename=wordjumblefast.rb
IyEgL3Vzci9iaW4vcnVieSAtdwoKY2xhc3MgQXJyYXkKCWRlZiByYW5kX2VsZW0KCQlzZWxm
W3JhbmQoc2l6ZSldCgllbmQKZW5kCgojIE9wZW4gYW5kIHJlYWQgdGhlIGRpY3Rpb25hcnku
CmRpY3QgPSBJTy5yZWFkKCIvdXNyL3NoYXJlL2RpY3Qvd29yZHMiKQoKIyBQaWNrIGEgcmFu
ZG9tIHdvcmQgd2l0aCA2IGxldHRlcnMuCmJhc2VXb3JkID0gZGljdC5zY2FuKC9eW2Etel17
Nn0kLykucmFuZF9lbGVtCgojIEZpbmQgd29yZHMgdGhhdCB1c2UgdGhlIHNhbWUgbGV0dGVy
cwpzZWxlY3RlZFdvcmRzID0gZGljdC5zY2FuKC9eWyN7YmFzZVdvcmR9XXszLDZ9JC8pCgoj
IERpc3BsYXkgdGhlIHdvcmRzLgpwdXRzIGJhc2VXb3JkICsgIjpcblx0IiArIHNlbGVjdGVk
V29yZHMuam9pbigiXG5cdCIp
--Boundary_(ID_i946CdvW4ezDb6K6qusHxA)
Content-type: application/x-ruby; name=wordjumblegame.rb
Content-transfer-encoding: base64
Content-disposition: inline; filename=wordjumblegame.rb
IyEgL3Vzci9iaW4vcnVieSAtdwoKY2xhc3MgQXJyYXkKCWRlZiByYW5kX2VsZW0KCQlzZWxm
W3JhbmQoc2l6ZSldCgllbmQKCQoJZGVmIGVuZ2xpc2hfam9pbgoJCXNlbGZbMC4uLi0xXS5q
b2luKCcsICcpICsgJywgYW5kICcgKyBzZWxmWy0xXQoJZW5kCmVuZAoKY2xhc3MgU3RyaW5n
CglkZWYgbGV0dGVycwoJCXVubGVzcyAkREVCVUcKCQkJc3BsaXQoLy8pLnVuaXEuc29ydF9i
eXtyYW5kfQoJCWVsc2UKCQkJc3BsaXQoLy8pCgkJZW5kCgllbmQKZW5kCgpjbGFzcyBHYW1l
CglAQGRpY3QgPSBuaWwKCQoJZGVmIGluaXRpYWxpemUKCQkjIE9wZW4gYW5kIHJlYWQgdGhl
IGRpY3Rpb25hcnkuCgkJQEBkaWN0IHx8PSBJTy5yZWFkKCIvdXNyL3NoYXJlL2RpY3Qvd29y
ZHMiKQoJCQoJCUBwb2ludHMgPSAwCgkJQHJvdW5kID0gMQoJZW5kCgoJZGVmIHBsYXkKCQkj
IFBpY2sgYSByYW5kb20gd29yZCB3aXRoIDYgbGV0dGVycy4KCQliYXNlV29yZCA9IEBAZGlj
dC5zY2FuKC9eW2Etel17Nn0kLykucmFuZF9lbGVtCgoJCSMgRmluZCB3b3JkcyB0aGF0IHVz
ZSB0aGUgc2FtZSBsZXR0ZXJzCgkJc2VsZWN0ZWRXb3JkcyA9IEBAZGljdC5zY2FuKC9eWyN7
YmFzZVdvcmR9XXszLDZ9JC8pCgkJCgkJIyBJbml0aWFsaXplIHdvcmQgbGlzdCAmIGNvbnRp
bnVlIHZhci4KCQlndWVzc2VkID0gW10KCQljb250aW51ZSA9IGZhbHNlCgkJCgkJIyBEaXNw
bGF5IGJhbm5lcgoJCXB1dHMgIiIsCgkJCSJSb3VuZCAje0Byb3VuZH06IiwKCQkJIkVudGVy
IHRoZSA1IGxvbmdlc3Qgd29yZHMgeW91IGNhbiBtYWtlIGZyb20gdGhlIGxldHRlcnMgI3ti
YXNlV29yZC5sZXR0ZXJzLmVuZ2xpc2hfam9pbn0uIiwKCQkJIkludmFsaWQgYW5kIHJlcGVh
dGVkIHdvcmRzIGNvdW50IHRvd2FyZHMgdGhlIDUgd29yZHMgYnV0IHN1YnRyYWN0IHBvaW50
cy4iLAoJCQkiIgoJCQoJCSMgR2F0aGVyIGFsbCB0aGUgcG9pbnRzLCBjYWxjdWxhdGUgdGhl
IHNjb3JlLCBhbmQgc2VlIGlmIHRoZSBwbGF5ZXIgc2hvdWxkIGdvIHRvIHRoZSBuZXh0IHJv
dW5kLgoJCTUudGltZXMgZG8KCQkJcHJpbnQgIiN7QHBvaW50c31cdCIKCQkJd29yZCA9IGdl
dHMuY2hvbXAuZG93bmNhc2UKCQkJaWYgIWd1ZXNzZWQuaW5jbHVkZT8od29yZCkgJiYgc2Vs
ZWN0ZWRXb3Jkcy5pbmNsdWRlPyh3b3JkKQoJCQkJQHBvaW50cyArPSB3b3JkLmxlbmd0aCAq
KiAzCgkJCQlndWVzc2VkIDw8IHdvcmQKCQkJCWNvbnRpbnVlID0gdHJ1ZSBpZiB3b3JkLmxl
bmd0aCA9PSA2CgkJCWVsc2UKCQkJCUBwb2ludHMgLT0gd29yZC5sZW5ndGggKiogMwoJCQll
bmQKCQllbmQKCQkKCQkjIEdvIG9uIHRvIHRoZSBuZXh0IHJvdW5kIG9yIGxvc2UuCgkJaWYg
Y29udGludWUKCQkJQHJvdW5kICs9IDEKCQkJcGxheQoJCWVsc2UKCQkJcHV0cyAiU29ycnks
IHlvdSBkaWRuJ3QgZ2V0IGEgNiBsZXR0ZXIgd29yZC4gIFlvdSBnb3QgI3tAcG9pbnRzfSBw
b2ludHMsIGhvd2V2ZXIuIgoJCWVuZAoJZW5kCmVuZAoKR2FtZS5uZXcucGxheQ
--Boundary_(ID_i946CdvW4ezDb6K6qusHxA)--