code-golf rosetta-stone fractals mandelbrot

Code golf: el conjunto de Mandelbrot



code-golf rosetta-stone (15)

C # - 330

277 si suelta la instrucción de uso y elimina los espacios en blanco iniciales y los finales de línea

int c,i,j,w=300,h=300,m=50; using(var b=new Bitmap(w,h)){ for(i=0;i<w;i++){ for(j=0;j<h;j++){ double x0=4.0*(i-w/2)/w-1,y0=4.0*(j-h/2)/h,x=0.0,y=0.0; for(c=0;x*x+y*y<=4.0&&c<m;c++){ var t=x*x-y*y+x0; y=2.0*x*y+y0;x=t; } int v=c==m?255:c*10%255; b.SetPixel(i,j,Color.FromArgb(v,v,v)); } } }

No se graba la configuración por un plano general, pero es divertido convertirla desde la fuente de muestra de Python y comprimirla más allá de lo legible.

Reglas habituales para el código de golf. Aquí hay una implementación en python como ejemplo

from PIL import Image im = Image.new("RGB", (300,300)) for i in xrange(300): print "i = ",i for j in xrange(300): x0 = float( 4.0*float(i-150)/300.0 -1.0) y0 = float( 4.0*float(j-150)/300.0 +0.0) x=0.0 y=0.0 iteration = 0 max_iteration = 1000 while (x*x + y*y <= 4.0 and iteration < max_iteration): xtemp = x*x - y*y + x0 y = 2.0*x*y+y0 x = xtemp iteration += 1 if iteration == max_iteration: value = 255 else: value = iteration*10 % 255 print value im.putpixel( (i,j), (value, value, value)) im.save("image.png", "PNG")

El resultado debería verse así

Se permite el uso de una biblioteca de imágenes. Alternativamente, puede usar el arte ASCII. Este código hace lo mismo

for i in xrange(40): line = [] for j in xrange(80): x0 = float( 4.0*float(i-20)/40.0 -1.0) y0 = float( 4.0*float(j-40)/80.0 +0.0) x=0.0 y=0.0 iteration = 0 max_iteration = 1000 while (x*x + y*y <= 4.0 and iteration < max_iteration): xtemp = x*x - y*y + x0 y = 2.0*x*y+y0 x = xtemp iteration += 1 if iteration == max_iteration: line.append(" ") else: line.append("*") print "".join(line)

El resultado

******************************************************************************** ******************************************************************************** ******************************************************************************** ******************************************************************************** ******************************************************************************** ******************************************************************************** ******************************************************************************** ******************************************************************************** ******************************************************************************** ******************************************************************************** **************************************** *************************************** **************************************** *************************************** **************************************** *************************************** **************************************** *************************************** **************************************** *************************************** **************************************** *************************************** **************************************** *************************************** *************************************** ************************************** ************************************* ************************************ ************************************ *********************************** *********************************** ********************************** ************************************ *********************************** ************************************* ************************************ *********************************** ********************************** ******************************** ******************************* **************************** *************************** ***************************** **************************** **************************** *************************** ************************ * * *********************** *********************** * * ********************** ******************** ******* ******* ******************* **************************** *************************** ****************************** ***************************** ***************************** * * * **************************** ******************************************************************************** ******************************************************************************** ******************************************************************************** ******************************************************************************** ******************************************************************************** ********************************************************************************

Editar :

Reglas para el arte ASCII:

  • el tamaño en filas / columnas está parametrizado y el código debe funcionar con cualquier valor válido.
  • al menos tres niveles de diferenciación en densidad dependiendo del recuento de iteraciones (por lo que mi prototipo no es compatible)
  • orientado horizontalmente (por lo que mi prototipo no es compatible)
  • los parámetros críticos son fijos (iteración máxima = 1000, valor de escape x x + y y <= 4.0)

Reglas para el gráfico:

  • el tamaño en filas / columnas está parametrizado y el código debe funcionar con cualquier valor válido.
  • al menos tres niveles de colores, escala de grises
  • orientado horizontalmente (mi prototipo es compatible)

Delphi - 310 249 239 224 caracteres

Versión ASCII. Utiliza 7 niveles para sombreado degradado.

  • Se eliminó el program P; y {$APPTYPE CONSOLE} acuerdo con (sugerido por Uwe Raabe);
  • Inlined 1000 const (sugerido por Uwe Raabe);
  • En línea ''8Oo;,. '' ''8Oo;,. '' variable;
  • Se cambió la word a integer para que la variable de bucle pueda ser negativa, y luego se modificó el rango de bucle para I de 3..38 a -5..30 para que (I-8) pueda ser reemplazado por I (sugerido por Eric Grange) ;
  • Cambió de 1000 a 1e3 (sugerido por Eric Grange)
  • Se cambió el tipo de Double a Real (sugerido por Luc Neville a través del correo electrónico)
  • Se eliminaron los corchetes while((x*x+y*y<=4)and(t<1000))do -> while(x*x+y*y<=4)and(t<1000)do (sugerido por Luc Neville por correo electrónico)
  • Se eliminaron los espacios entre los números que fueron seguidos por una palabra clave (de modo que for j:=-5 to 30 do convierte for j:=-5to 30do (Sugerido por Neville por correo electrónico)
  • Se cambió el rango de bucle a for j:=8to 40do , se for j:=8to 40do el signo negativo y se cambió el entero a palabra. Compensó este desplazamiento en la fórmula, cambiando x * x - y * y + i / 16 - 2; a x * x - y * y + i / 16 - 3 ;

Versión ilegible

var n,x,y:Real;t,i,j:Word;begin for j:=8to 40do begin for i:=8to 65do begin x:=0;y:=0;t:=0;while(x*x+y*y<=4)and(t<1e3)do begin n:=x*x-y*y+i/16-3;y:=2*x*y+j/12-2;x:=n;inc(t)end;Write(''8Oo;,. ''[t mod 7+1])end;WriteLn;end;end.

Código formateado:

var n, x, y: Real; t, i, j: Word; begin for j := 8 to 40 do begin for i := 8 to 65 do begin x := 0; y := 0; t := 0; while (x * x + y * y <= 4) and (t < 1e3) do begin n := x * x - y * y + i / 16 - 3; y := 2 * x * y + j / 12 - 2; x := n; inc(t) end; Write(''8Oo;,. ''[t mod 7 + 1]) end; WriteLn; end; end.

Salida:

OOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooo OOOOOOOOOOOOOOOOooooooooo;;;;;;;;;;;;;;;oooooooooooooooooo OOOOOOOOOOOOOOOoooooo;;;;;;;;;;;;;;,,,,,;;;;oooooooooooooo OOOOOOOOOOOOOOooooo;;;;;;;;;;;;;,,,, ; .,,,;;;oooooooooooo OOOOOOOOOOOOOoooo;;;;;;;;;;;;;,,,,.. O ,,,,;;;oooooooooo OOOOOOOOOOOOooo;;;;;;;;;;;;;,,,,,...8oo,8..,,,;;;;oooooooo OOOOOOOOOOOooo;;;;;;;;;;;;,,,,,,.. Oo. ; 8...,,;;;;ooooooo OOOOOOOOOOOoo;;;;;;;;;;;;,,,,,. 8OO O8 ..,,;;;;oooooo OOOOOOOOOOoo;;;;;;;;;;;,,,,.. O,oO8oo ,OOoO88,.,;;;;ooooo OOOOOOOOOOo;;;;;;;;;;,,,.... o. . OOO ,;;;;;oooo OOOOOOOOOO;;;;;;;;;,,...... o., o .,;;;;;ooo OOOOOOOOOo;;;;;;,,. o 88O. ;O.,;;;;;ooo OOOOOOOOO;;;,,,,,.. ,,o;,oOo; o ,,;;;;;oo OOOOOOOOO;,,,,,... 8o; 8;, .,,;;;;;oo OOOOOOOOO,,,,,... Oo . 8.,,;;;;;oo OOOOOOOOO,.,. 88oo o , , .,,;;;;;oo OOOOOOOO ,8 .,,;;;;;;o OOOOOOOOO,.,. 88oo o , , .,,;;;;;oo OOOOOOOOO,,,,,... Oo . 8.,,;;;;;oo OOOOOOOOO;,,,,,... 8o; 8;, .,,;;;;;oo OOOOOOOOO;;;,,,,,.. ,,o;,oOo; o ,,;;;;;oo OOOOOOOOOo;;;;;;,,. o 88O. ;O.,;;;;;ooo OOOOOOOOOO;;;;;;;;;,,...... o., o .,;;;;;ooo OOOOOOOOOOo;;;;;;;;;;,,,.... o. . OOO ,;;;;;oooo OOOOOOOOOOoo;;;;;;;;;;;,,,,.. O,oO8oo ,OOoO88,.,;;;;ooooo OOOOOOOOOOOoo;;;;;;;;;;;;,,,,,. 8OO O8 ..,,;;;;oooooo OOOOOOOOOOOooo;;;;;;;;;;;;,,,,,,.. Oo. ; 8...,,;;;;ooooooo OOOOOOOOOOOOooo;;;;;;;;;;;;;,,,,,...8oo,8..,,,;;;;oooooooo OOOOOOOOOOOOOoooo;;;;;;;;;;;;;,,,,.. O ,,,,;;;oooooooooo OOOOOOOOOOOOOOooooo;;;;;;;;;;;;;,,,, ; .,,,;;;oooooooooooo OOOOOOOOOOOOOOOoooooo;;;;;;;;;;;;;;,,,,,;;;;oooooooooooooo OOOOOOOOOOOOOOOOooooooooo;;;;;;;;;;;;;;;oooooooooooooooooo OOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooo


Ensamblador

.COM ejecutable = 140 bytes

Fuente = 652 bytes

mov ax,13h int 10h mov bx,200 xor di,di mov ax,0a000h mov es,ax l1:mov bp,320 mov [si],bx fild w[si] fisub w[v100] fidiv w[v50] l2:mov cx,1000 mov [si],bp fild w[106h] fisub w[si] fidiv w[v80] fld1 fsubp fldz fldz l3:fld st(1) fmul st(0) fld st(1) fmul st(0) fld st(0) fadd st(2) fcomp d[v4] fstsw ax test ah,45h jz l4 fsubp fadd st(3) fxch st(2) fild w[v2] fmulp st(1) fmulp st(1) fadd st(3) loop l3 mov al,255 l5:fcompp fcomp stosb dec bp jnz l2 fcomp dec bx jnz l1 mov ah,7 int 21h mov ax,3 int 10h ret l4:mov ax,-10 mul cx fcompp jmp l5 v100:dw 100 v50:dw 80 v80:dw 90 v4:dd 4.0 v2:dw 2


Haskell (162 personajes)

Una versión de arte ASCII (bastante) directa:

c(x,y)|x*x+y*y<4.0=''x'' |True=''.'' i v w=c(iterate s(v,w)!!1000)where s(x,y)=(x*x-y*y+v,2*x*y+w) main=mapM_ putStrLn[[i x y|x<-[-1.5,-1.45..0.5]]|y<-[1,0.9.. -1]]

Salida:

$ ./a.out ......................................... ......................................... ..........................xxxx........... ..........................xxxx........... ....................x..xxxxxxxxxx........ ....................xxxxxxxxxxxxxxxxx.... ..................xxxxxxxxxxxxxxxxxxx.... .................xxxxxxxxxxxxxxxxxxxxx... .......xxxxxxx..xxxxxxxxxxxxxxxxxxxxxx... ......xxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxx... ..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..... ......xxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxx... .......xxxxxxx..xxxxxxxxxxxxxxxxxxxxxx... .................xxxxxxxxxxxxxxxxxxxxx... ..................xxxxxxxxxxxxxxxxxxx.... ....................xxxxxxxxxxxxxxxxx.... ....................x..xxxxxxxxxx........ ..........................xxxx........... ..........................xxxx........... ......................................... .........................................

Versión más legible:

outchar (x,y) | x*x + y*y < 4.0 = ''x'' | otherwise = ''.'' calc v w = outchar (iterate step (v,w) !! 1000) where step (x,y) = (x*x - y*y + v, 2*x*y + w) main = mapM_ putStrLn [[calc x y | x <- [-1.5, -1.45 .. 0.5]] | y <- [1, 0.9 .. -1]]


Haskell (185 caracteres, con todas las características requeridas en la pregunta)

Usar números complejos y en realidad contar el número requerido de iteraciones (a diferencia de la versión "simple" en mi otra respuesta).

import Complex i v=show(length$takeWhile((<=4).magnitude)$take 1000$iterate(/c->c*c+v)v)!!0 r t=[-2,4/read t-2..2] main=getLine>>=(/[s,t]->mapM_ putStrLn[[i$x:+y|x<-r s]|y<-r t]).words

Las dimensiones de la imagen resultante se leen desde stdin. La salida está "coloreada" según el número de iteraciones requeridas:

$ ./fract 60 30 1111111111111111111111111111111111111111111111111111111111111 1111111111111112222222222222222111111111111111111111111111111 1111111112222222222222222222222222222111111111111111111111111 1111112222222222222222222222222222222222111111111111111111111 1112222222222222222222222222222222222222222111111111111111111 1222222222222222222222333333333322222222222221111111111111111 2222222222222222223333333344443333332222222222211111111111111 2222222222222233333333344458755443333322222222222111111111111 2222222222233333333344445568117544433333222222222211111111111 2222222233333333344445556711111765544333322222222221111111111 2222233333333444445562391112161568786443332222222222111111111 2223333334444455556681111111111111157544333222222222211111111 2333334445617677777911111111111111111854333222222222211111111 3333444456681131231111111111111111111654333322222222221111111 3444555671111111111111111111111111114644333322222222221111111 2569888111111111111111111111111111296544333322222222221111111 3444555671111111111111111111111111114644333322222222221111111 3333444456681131231111111111111111111654333322222222221111111 2333334445617677777911111111111111111854333222222222211111111 2223333334444455556681111111111111157544333222222222211111111 2222233333333444445562391112161568786443332222222222111111111 2222222233333333344445556711111765544333322222222221111111111 2222222222233333333344445568117544433333222222222211111111111 2222222222222233333333344458755443333322222222222111111111111 2222222222222222223333333344443333332222222222211111111111111 1222222222222222222222333333333322222222222221111111111111111 1112222222222222222222222222222222222222222111111111111111111 1111112222222222222222222222222222222222111111111111111111111 1111111112222222222222222222222222222111111111111111111111111 1111111111111112222222222222222111111111111111111111111111111 1111111111111111111111111111111111111111111111111111111111111


J, salida gráfica en escala de grises con niveles, 170 caracteres.

load''viewmat'' c=:>(<:;|:;0$])((2$>:@+:)$-:%~i:)300 (2.5*|:3 99$i._99)viewmat {:99&<.@;@(({:+4&<@:({.+1&{)@:*:);~(0{c)&+@({.-1&{)@:*:,:(1{c)&+@:+:@({.*1&{))^:99 c

texto alternativo http://i40.tinypic.com/2i7lm0.jpg

J, salida gráfica con niveles, 151 caracteres.

load''viewmat'' c=:>(<:;|:;0$])((2$>:@+:)$-:%~i:)99 viewmat {:99&<.@;@(({:+4&<@:({.+1&{)@:*:);~(0{c)&+@({.-1&{)@:*:,:(1{c)&+@:+:@({.*1&{))^:99 c

Salida:

texto alternativo http://i40.tinypic.com/6ynxap.jpg

J, salida gráfica, 124 caracteres.

load''viewmat'' c=:>(<:;|:)((2$>:@+:)$-:%~i:)200 viewmat 4>:({.+{:)@:*:(5<.>@(({.c)&+@({.-{:)@:*:;({:c)&+@:+:@({.*{:)))^:999 c

Básicamente solo ejecuta "viewmat" en la salida de ASCII.

texto alternativo http://i40.tinypic.com/etv5lf.jpg

J, ASCII, 101 caracteres.

c=:>(<:;|:)((2$>:@+:)$-:%~i:)20 4>:({.+{:)@:*:(5<.>@(({.c)&+@({.-{:)@:*:;({:c)&+@:+:@({.*{:)))^:999 c

Perdió 6 caracteres para parametrizar correctamente el tamaño.

J, ASCII, 95 caracteres.

c=:>(<:;|:)41 41$10%~i:20 4>:({.+{:)@:*:(5<.>@(({.c)&+@({.-{:)@:*:;({:c)&+@:+:@({.*{:)))^:999 c

Todavía no tiene múltiples niveles de escala de grises.

Explicación (actualmente desactualizado, se actualizará más tarde):

i:20

Genere la lista de enteros de -20 a 20.

10%~i:20

Divida a todos por 10 ( % es dividido, ~ es el orden inverso de los argumentos.

41 41$10%~i:20

Llene esta lista en una matriz 41x41, con envoltura.

(-&1;|:)41 41$`10%~i:20`

Agregue a esta matriz una segunda matriz del mismo tamaño, pero transpuesta. -&1 resta uno de cada elemento ; es agregar, |: está transpuesta. Ahora tenemos una matriz 2x41x41, donde la primera matriz 41x41 contiene los valores "x0" de cada coordenada y la segunda contiene los valores "y0".

4<:~({.+{:)@:*:(5<.>@(({.c)&+@:({.-{:)@:*:;({:c)&+@:+:@:({.*{:)))^:1000 ($c)$0

Guau. Vamos a separar esto de la derecha.

($c)$0

Esto crea una segunda matriz de 2x41x41 (el mismo tamaño que c), llena de ceros. Esta va a ser la variable sobre la que estamos iterando; básicamente, la primera matriz contiene los valores "x" y la segunda contiene los valores "y".

^:1000 significa "Repite lo anterior entre paréntesis 1000 veces. Este es nuestro contador de bucle.

(5<.>@(({.c)&+@:({.-{:)@:*:;({:c)&+@:+:@:({.*{:))

Este es el próximo gran pedazo. Básicamente está haciendo una iteración del ciclo. Primero generamos x con (({.c)&+@:({.-{:)@:*: luego lo unimos a y ({:c)&+@:+:@:({.*{:)

(({.c)&+@:({.-{:)@:*:

Esto genera x (recuerde que está operando en esa matriz de 2x41x41 que representa xey). Primero cuadra *: cada elemento, luego hace {. - {: {. - {: , o x ^ 2 - y ^ 2. {. selecciona la primera matriz 41x41 y {: la segunda. @: une funciones juntas.

Para x ^ 2-y ^ 2, necesitamos agregar x0 - esta es la primera matriz 41x41 de c, así que podemos hacer esto con ({.c)&+ - & curry {.c (x0) en + .

({:c)&+@:+:@:({.*{:)

Generamos y de manera similar. Primero multiplicamos por parejas la entrada x {. y y {: matrices, duplica el resultado con +: y agrega y0 {:c .

El último paso de esta función es simplemente 5<.> - desempaquetar la unión de las dos nuevas matrices x e y, y ponerle un límite de 5 - está bien ya que esta función aumenta monótonamente por encima de 4, y saldremos de - limita enteros si no tapamos los valores en cada iteración.

4>:({.+{:)@:*:

El último paso, una vez que hayamos terminado de iterar. Cuadremos las matrices x e y *: agréguelas juntas {.+{: , Y cree una matriz booleana que sea verdadera para cada elemento que sea >: menor que 4.

Salida:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0


Y una entrada de dc - 152 caracteres

Mi locura habitual en dc

Ak?4r/sa4r/sbA00sm[0*]sG_2sj[_3si[0ddsxsysk[lxd*lyd*-li+2lxly**lj+sysx1lxd*lyd*+ 4!>G1lk1+dsklm<G*1=L]dsLx0klk1-vvnAklila+dsi1!<I]dsIxAPljlb+dsj2!<J]dsJx

prueba de funcionamiento:

bash-3.2$ dc -f mandel.dc 10 20 000000000000000000000 000000000011111111111 000000001111111111111 000000111111115211111 000000111111555551111 000000555555555551111 000000111111555551111 000000111111115211111 000000001111111111111 000000000011111111111 000000000000000000000


awk - 134 135 caracteres

Arte ASCII, totalmente compatible. Traducción bastante simple de la implementación de referencia de python:

{for(j=-2;j<=2;j+=4/$2){for(i=-3;i<=1;i+=4/$1){for(x=y=k=0;x*x+y*y<=4&&++k<4^5;) {t=x*x-y*y+i;y=2*x*y+j;x=t}printf"%d",log(k)}print""}}

prueba de funcionamiento

$ awk -f mandel.awk 10 10 00000000000 00000000000 00000111000 00001116110 00011166610 00046666611 00011166610 00001116110 00000111000 00000000000 00000000000

y este es un arte VT-100 . Establezca el xterm en caracteres "ilegibles", luego pruebe con un conjunto de 400x200:

{for(j=-2;j<=2;j+=4/$2){for(i=-3;i<=1;i+=4/$1){for(x=y=k=0;x*x+y*y<=4&&++k<1000;) {t=x*x-y*y+i;y=2*x*y+j;x=t}printf"/x1b[4%dm ",log(k)}print"/x1b[0m"}}


Hubo una solución Perl hace algunos años publicado en perlmonks , dice:

#!/usr/bin/perl $r=25; $c=80; $xr=6;$yr=3;$xc=-0.5;$dw=$z=-4/ 100;local$";while($q=$dr=rand() /7){$w+=$dw;$_=join$/,map{$Y=$_* $yr/$r; join"" ,map{$ x=$_*$ xr/$c;($ x,$y)= ($xc+$x *cos($ w)-$Y* sin$w,$yc+ $x*sin ($w)+$Y*cos $w);$ e=-1;$ a=$b=0 ;($a,$b) =($u-$v+$x,2*$a* $b+$y) while( $ u=$a*$ a)+($v=$b*$b)<4.5 &&++$e <15;if (($e>$ q&&$e< 15)||($e==$q and rand() <$dr)) {$q=$e;($d0,$d1) =($x,$ y); } chr(+( 32,96,+ 46,45,43,58,73,37 ,36,64 ,32)[$ e/1.5] );}(-$ c/2)..($c/2)-1;} (-$r/2 )..($ r/2)-1;select$", $",$", 0.015; system $^O=~m ~[wW]in~x?"cls": "clear";print ;$xc=( $d0+15 *$xc)/16;$yc=($ d1+15*$yc)/ 16;$_*= 1+$z for $xr,$yr;$dw *=-1 if rand ()<0.02; (++$i%110 )||($z*=-1)}

que es un "explorador de Mandelbrot".

(Gira, se acerca y se aleja, y se desplaza aleatoriamente para examinar regiones del conjunto de Mandelbrot que considere "interesantes", según su creador).

No sigue exactamente las especificaciones nombradas aquí, pero hace una entrada interesante (imho). Tal vez un simple Mandlebrot no sea muy interesante para los dioses perl; .-)

Saludos

rboo


Pitón 197 162

def m(): for a in range(900): c=complex(a%30*.1-2,a/30*.1-1.5);z,i=c-c,0 while i<28 and abs(z)<2:z,i=z*z+c,i+1 if a%30==0:print print ".-+oxawOX "[i/3],

Estoy interesado en cómo deshacerse del espacio en blanco en python.


Python 108 (era 122):

for a in range(900):print"/n.x"[(a%30>0)+(abs(reduce(lambda z,c:z*z+c,[a%30*.1-2+1j*(a/30*.1-1.5)]*30))<2)],

Ese último "30" es el recuento de iteraciones, no una de las dimensiones.
La salida se ve así:

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x x . . . . . . . . . . . . . . . . . . . . . . . . . . . x x . . . . . . . . . . . . . . . . . . . . . . . . x . x x x x x . . . . . . . . . . . . . . . . . . . . . . x x x x x x x x x . . . . . . . . . . . . . . . . . . . x x x x x x x x x x . . . . . . . . . . . . . . . x . . . x x x x x x x x x x . . . . . . . . . . . . . . x x x . x x x x x x x x x x x x . . . . . . . . . . . . x x x x x x x x x x x x x x x x . . . . . . x x x x x x x x x x x x x x x x x x x x x x . . . . . . . . . . . . . . x x x x x x x x x x x x x x x x . . . . . . . . . . . . . . x x x . x x x x x x x x x x x x . . . . . . . . . . . . . . x . . . x x x x x x x x x x . . . . . . . . . . . . . . . . . . . x x x x x x x x x x . . . . . . . . . . . . . . . . . . . . x x x x x x x x x . . . . . . . . . . . . . . . . . . . . x . x x x x x . . . . . . . . . . . . . . . . . . . . . . . . . x x . . . . . . . . . . . . . . . . . . . . . . . . . . . x x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Ahora vamos a actualizar en base a las reglas actualizadas ...


JavaScript (168/174 caracteres)

Versión de Rhino (168 caracteres):

m=1000;for(i=0;i<40;i++){l=[];for(j=0;j<80;j++){v=j/80*3-2,w=2-i/40*3,x=y=c=0;while(x*x+y*y<5&&c<m)t=x*x-y*y+v,y=2*x*y+w,x=t,c++;l.push(c==m?'' '':''-'')}print(l.join(''''))}

Versión de Firebug (174 caracteres):

m=1000;for(i=0;i<40;i++){l=[];for(j=0;j<80;j++){v=j/80*3-2,w=2-i/40*3,x=y=c=0;while(x*x+y*y<5&&c<m)t=x*x-y*y+v,y=2*x*y+w,x=t,c++;l.push(c==m?'' '':''-'')}console.log(l.join(''''))}


Pitón. 98 caracteres.

for _ in range(526):z=0;exec"z=z*z+_%25*.1-2+_/25*.1j-1j;"*50;print[".#"[z.real<4],"/n"][_%25<1],

Imprime algo como esto:

. . . . . . . . . . . . . . . . . . . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # . . . . . . . . . . . . . . . . . . . . . . # # . . . . . . . . . . . . . . . . . . . # . # # # # # . . . . . . . . . . . . . . . . . # # # # # # # # # . . . . . . . . . . . . . . # # # # # # # # # # . . . . . . . . . . . . . . # # # # # # # # # # . . . . . . . . . # # # . # # # # # # # # # # # . . . . . . . . # # # # # # # # # # # # # # # # . # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . # # # # # # # # # # # # # # # # . . . . . . . . . # # # . # # # # # # # # # # # . . . . . . . . . . . . . . # # # # # # # # # # . . . . . . . . . . . . . . # # # # # # # # # # . . . . . . . . . . . . . . . # # # # # # # # # . . . . . . . . . . . . . . . # . # # # # # . . . . . . . . . . . . . . . . . . . . # # . . . . . . . . . . . . . . . . . . . . . . # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # . . . .

http://codepad.org/rNPrgQ3H


Ruby - 139 caracteres ( compatible con Twitter)

b,a=$*;a.to_i.times{|l|puts (0..b.to_i).map{|n|x=y=i=0;(x,y,i=x*x-y*y+n/38.0-1.5,2*x*y+l/14.0-1,i+1)until(x*x+y*y>4||i>78);(32+i).chr}*""}

$ ruby mandelbrot.rb 80 32

o como una sola línea de comando (134 caracteres incluyendo ruby -e )

ruby -e "32.times{|l|puts (0..78).map{|n|x=y=i=0;(x,y,i=x*x-y*y+n/38.0-1.5,2*x*y+l/14.0-1,i+1)until(x*x+y*y>4||i>78);(32+i).chr}*''''}"

"###############################$$$$$$$$$$$%%%%&&'')*/))*.o&%$$$$$$$$########""""" ############################$$$$$$$$$$$$$%%%%%&''''((*-G,*(''&&%%$$$$$$$$$########"" #########################$$$$$$$$$$$$$%%%%%&&''929-03ooL.+0:''&%%%%%$$$$$$$######## #####################$$$$$$$$$$$$$$%%%&&&&&''''()-1oooooooo/*(''&&%%%%%%%$$$$$###### ##################$$$$$$$$$$$$%%%&''''''''''''''''''())*,6oooooooo.*)((''''&&&&&&&&%$$$##### ###############$$$$$$$$$%%%%%%&&''(+3:0.,++ooE6ooooooooooo?8o1j?8)(((()4/''&%$$$### ###########$$$$$$%%%%%%%%%%&&&&''''(*1>ooo8oooooooooooooooooooooooo.3oooD/,''%%$$$## #######$$$$%%%%%%%%%%%%%&&&&&&'')8,,17ooooooooooooooooooooooooooooooooQ0)''&&%%$$$# $$$$$$%&)(&&&&&&&&&&&&&&&''''''((*18oooooooooooooooooooooooooooooooooooool*((''&%%$$$ $$%%%%&&*2*))((((25*((''''''((()+F>=oooooooooooooooooooooooooooooooooooooooo1.(%%$$$ %%%%%&&''()*,1o47//5o5/?,+***+3oooooooooooooooooooooooooooooooooooooooooo.)(&%%$$$ %%%%&''''''(*+-3ooooooooooom//-.oooooooooooooooooooooooooooooooooooooooooooo9+&%%$$$ &&(*+)))+-?ooooooooooooooooL5ooooooooooooooooooooooooooooooooooooooooooo8)&%%%$$$ ''()*-X=U95ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo*''&&%%%$$$ ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo:.+)(''&&%%%$$$ ''()*-X=U95ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo*''&&%%%$$$ &&(*+)))+-?ooooooooooooooooL5ooooooooooooooooooooooooooooooooooooooooooo8)&%%%$$$ %%%%&''''''(*+-3ooooooooooom//-.oooooooooooooooooooooooooooooooooooooooooooo9+&%%$$$ %%%%%&&''()*,1o47//5o5/?,+***+3oooooooooooooooooooooooooooooooooooooooooo.)(&%%$$$ $$%%%%&&*2*))((((25*((''''''((()+F>=oooooooooooooooooooooooooooooooooooooooo1.(%%$$$ $$$$$$%&)(&&&&&&&&&&&&&&&''''''((*18oooooooooooooooooooooooooooooooooooool*((''&%%$$$ #######$$$$%%%%%%%%%%%%%&&&&&&'')8,,17ooooooooooooooooooooooooooooooooQ0)''&&%%$$$# ###########$$$$$$%%%%%%%%%%&&&&''''(*1>ooo8oooooooooooooooooooooooo.3oooD/,''%%$$$## ###############$$$$$$$$$%%%%%%&&''(+3:0.,++ooE6ooooooooooo?8o1j?8)(((()4/''&%$$$### ##################$$$$$$$$$$$$%%%&''''''''''''''''''())*,6oooooooo.*)((''''&&&&&&&&%$$$##### #####################$$$$$$$$$$$$$$%%%&&&&&''''()-1oooooooo/*(''&&%%%%%%%$$$$$###### #########################$$$$$$$$$$$$$%%%%%&&''929-03ooL.+0:''&%%%%%$$$$$$$######## ############################$$$$$$$$$$$$$%%%%%&''''((*-G,*(''&&%%$$$$$$$$$########"" "###############################$$$$$$$$$$$%%%%&&'')*/))*.o&%$$$$$$$$########""""" """""###############################$$$$$$$$$%%%&''*)''&&%%%$$$$$$$#######""""""""" """""""""#################################$$$$$$$%%%%%$$$$$#########""""""""""""" """"""""""""""""#############################################""""""""""""""""""""


T-SQL ( 421 408 caracteres)

declare @s varchar(max); with x(x)as(select CAST(-2.0 as real)union all select x+.01 from x where x<1), y(y)as(select CAST(-1.1 as real)union all select y+.02 from y where y<1.1), g(x,y,u,v,g)as(select x,y,x*0,y*0,0 from x,y union all select x,y,u*u-v*v+x,2*u*v+y,g+1 from g where g<24and u*u+v*v<4), m(x,y,v)as(select x,y,case when x<-1.99 then char(10)end+substring('' .-''''^"+oiexp**##$$$§§%%%@'',COUNT(*),1)from g group by x,y) select @s=@s+v from m order by y,x option(maxrecursion 400) select @s

La salida está aquí: