Begin forwarded message: > From: Wolfgang Seeberg <wolfgang.seeberg / yahoo.com> > Date: May 26, 2007 1:59:23 PM CDT > To: submission / rubyquiz.com > Subject: Please Forward: Ruby Quiz Submission > > # Usage: ruby -s fractal.rb [-depth=4] [-plotter=[/bin/gnuplot]] > # Output: coordinates of a polygon, goes directly to gnuplot > # if available, or stdout. > class Fractal > def initialize(depth = nil, plotter = nil) > @depth = (depth || 3).to_i > plotter ||= "/usr/bin/gnuplot" > if test(?x, plotter) > @plotter = IO.popen(plotter, "w") > @plotter.printf "set size ratio -1 \n plot '-' w l\n" > else > @plotter = STDOUT > end > @x = @y = @angle = 0 # coordinates & orientation of pen > @cos = [1, 0, -1, 0] # right angle = 100% = 1 > @sin = [0, 1, 0, -1] > @line = "L" > @production = "L+L-L-L+L" > #@production = "L-L+L+L-L+L-L-L+L" > end > > def plot() > @plotter.printf "%d %d\n", @x, @y > end > > def execute(commands, depth) > commands.split("").each do | cmd | > if (cmd != @line) # + or - > @angle = @angle.send(cmd, 1) % 4 > elsif (depth > 0) > execute(@production, depth - 1) > else > @x += @cos[@angle] > @y += @sin[@angle] > plot() > end > end > end > > def main() > plot() > execute(@line, @depth) > if @plotter != STDOUT > @plotter.printf "e\n" > STDERR.printf "%s", " hit <Return> to exit. " > gets > end > end > end # class Fractal > > Fractal.new($depth, $plotter).main() > > __END__ > > > > > > > ______________________________________________________________________ > ______________Be a better Globetrotter. Get better travel answers > from someone who knows. Yahoo! Answers - Check it out. > http://answers.yahoo.com/dir/?link=list&sid=396545469