[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Fwd: Please Forward: Ruby Quiz Submission

James Gray

5/27/2007 5:19:00 PM

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...