Please Forward: Ruby Quiz Submission

From: Alex Wayne <alex@beautifulpixel.com>
Date: November 20, 2006 7:15:26 PM CST
To: submission@rubyquiz.com
Subject: Please Forward: Ruby Quiz Submission

My first ruby quiz entry, since it seems to be an easy week. Not as complicated as some of the other solutions, but gets the job done without much fuss.

Although I didn't peek, it ended up being very similar to http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/225745, but I would like to think mine is a bit easier to read an understand.

Keep up the great quizzes,
-Alex Wayne

Usage:
ruby lrb.rb some_file

Program code:

# Get filename
filename = ARGV.first
filename += '.lrb' unless filename =~ /\.\w+$/

# load source
source = File.read(filename)

# Initialize variables for loop
inside_block = false
executable_lines =

# Process file, line by line
source.each do |line|
# Look for the start of a code block
if !inside_block && line =~ (/^\\begin\{(\w+)\}/)
   inside_block = Regexp.last_match[1]
   next
end
# Look for the end of a code block, with the same identifier that opened it
if inside_block && line =~ /^\\end\{#{inside_block}\}/
   inside_block = false
   next
end
if inside_block
   # Inside a code block so simply add the lines to the stack
   executable_lines << line
else
   # Trim off the '>' and add the line to the stack
   executable_lines << line.gsub(/^>\s/, '') if line =~ /^>\s/
end
end

# Convert array of lines into a single string executable_lines = executable_lines.join("\n")

# Execute the resulting code
eval(executable_lines)

ยทยทยท

Begin forwarded message: