<%
pixsize      = 6
cols,lines   = 160, 60
minre,minim  = -2.04, -1.15
maxre,maxim  =  0.9,   1.15
maxiter = 16

puts '<html><head>'
puts '<title>Mandelbrot fractal in ERuby</title>'
puts '<style type="text/css"><!--'
maxiter.times do |n|
  pitch1=n*25/maxiter
  pitch2=n*16/maxiter
  pitch3=n*10/maxiter
  pitch1=15 if pitch1>15
  printf '.c%X {', n
  printf ';color:#%X%X%X ',     pitch1,pitch2,pitch3
  printf ';background:#%X%X%X', pitch1,pitch2,pitch3
  puts '}'
end
print 'body{background:white;color:white'
print     ';font-family:monospace;font-size:', pixsize, 'px}'
print '--></style></head><body><pre>'

$defaultcolor=maxiter-1
$lastcolor=$defaultcolor
def color(c)
  return if c==$lastcolor
  endcolor
  printf '<span class=c%X>', c unless c==$defaultcolor
  $lastcolor=c
end
def endcolor 
  print '</span>' unless $lastcolor == $defaultcolor
end

im=minim
lines.times do
  re=minre
  cols.times do
    zr,zi = re,im
    n=0
    (0..maxiter).each do |n|
      a,b = zr*zr, zi*zi
      break if a+b > 4.0
      zr,zi = a-b+re, 2*zr*zi+im
    end
    color n%maxiter
    print '#'
    re += (maxre-minre)/cols
  end
  im += (maxim-minim)/lines
  puts
end
endcolor

puts '</pre></body></html>'
%>
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################
################################################################################################################################################################