247 words

Possibly the smallest Mandelbrot tracer ever in JavaScript: 101 bytes

Experience always wins the day

Recent discoveries in the codegolf group allowed me to revisit the good old Mandelbrot tracer and squeeze it in 101 bytes

<svg onload=for(n=99;n-=1/64;write(n%3?k:-7))for(r=i=0,k=20;--k/r;i=t)t=2*r*i+1-n/49,r=r*r-i*i+1-n%3>

Check this 101 mandelbrot tracer for yourself. Like the smallest versions before, this one works best in a Webkit or Blink based browser. Making it work in Firefox and Edge takes 3 more bytes.

<svg onload='for(n=99;n-=1/64;write(n%3?k:" "))for(r=i=0,k=20;--k/r;i=t)t=2*r*i+1-n/49,r=r*r-i*i+1-n%3'>

Then came Xen who saved another 2 bytes by offseting the initial values of the complex number:

<svg onload='for(n=99;n-=r=i=1/64;write(n%3?k:" "))for(k=20;--k/r;i=t)t=2*r*i+1-n/49,r=r*r-i*i+1-n%3'>

The genesys

Back in 2008, I got this hitch that a Mandelbrot tracer was possible in 128b. There had been countless Mandelbrot and Julia fractals in 256b but the 128b mark seemed within reach. My first attempts clocked at 137b and 133b. Jacob 'cupboy' Seidelin then kicked the ball down to 122bytes, at which point this whole thing turned into a friendly competition that lead us to more dirty tricks and down to 112bytes.

<body onload=for(n=84;n-=1/32;document.write(n%3?k:''))for(r=i=0,k=21;--k/r;i=t)t=2*r*i+1-n/42,r=r*r-i*i+1-n%3>

You can see most of the iterations:

Trimming the BODY element is really rough on the various browser engines. To this day, only Firefox accepts this. The 112b version on the other hand works in Opera and Firefox. The 115b version also works in Webkit browsers.

Other recent experiments

There are many experiments and projects like MANDELBROT TRACER to discover other here.

Let's talk

Don't be shy; get in touch by mail, twitter, github, linkedin or pouet if you have any questions, feedback, speaking, workshop or performance opportunity.