On Fri, 15 Apr 2005 14:52:15 +0200, Ruby Quiz <james / grayproductions.net>  
wrote:

> This week's Ruby Quiz is to write a program that presents the user with  
> Madlibs.
> The script should ask the user for a series of words, then fill in the  
> proper
> places in the story using the user's answers.

Here is my solution. It is a very simplistic command line interface  
version, but it does the job :-)
Just give it the madlib filename as first argument.

The Code:

def ask_for(str)
    puts "Give me #{str}:"
    $stdin.gets.chomp
end

keys={}

puts "", ARGV[0].split(".")[0].gsub("_", " "),  
IO.read(ARGV[0]).gsub(/\(\(([^)]+)\)\)/) {
    if (t=$1) =~ /\A([^:]+):(.+)\z/
       keys[$1]=ask_for($2)
    else
       keys[t] || ask_for(t)
    end
}

=======================

And here is an even shorter version, that does the same:

keys=Hash.new { |h, k|
    puts "Give me #{k.sub(/\A([^:]+):/, "")}:"
    h[$1]=$stdin.gets.chomp
}
puts "", $*[0].split(".")[0].gsub("_", " "),  
IO.read($*[0]).gsub(/\(\(([^)]+)\)\)/) { keys[$1] }