Su tarea es dibujar el conjunto mandelbrot en ascii. Debería verse algo así
El número complejo c
se encuentra en el conjunto de Mandelbrot, cuando la secuencia z(n+1) = z(n)^2 + c
, z(0) = 0
restos acotada. Para el propósito de este desafío, puede considerar la secuencia limitada por c
if |z(32)| < 2
.
Trace el conjunto mandelbrot en el plano complejo desde (-2 - i) hasta (1 + i), y una resolución mínima de 40x30, utilizando caracteres ascii en su idioma favorito, utilizando la menor cantidad posible de caracteres.
*
Respuestas:
Suponiendo que el código de máquina cuenta, escribí un producto hace un tiempo que genera un Mandelbrot de 320x200 colores en 64 bytes - http://www.pouet.net/prod.php?which=53287
Aquí está el código:
Versión compilada en base64:
fuente
sudo apt-get install dosbox; dosbox ./Microbrot.com
me encontraron levantando la mandíbula del suelo. ¡Esto es bastante impresionante!C, 988 caracteres
Aquí está el mío, que hace un mandelbrot ASCII, escrito como un mandelbrot ASCII, en C.
Ah ... y también tiene la funcionalidad de zoom interactivo. (presione los números del teclado 1-9 para acercar el área respectiva)
Originalmente publicado aquí http://marquisdegeek.com/rnd_obs.php
fuente
Ceceo común - 195 caracteres
Probado con sbcl y clisp. Resultado:
Ligeramente modificado del blog de B. Clementson .
fuente
Python,
146145143charTuve que agregar la cláusula (abs (x) <2) a la expresión condicional para evitar que Python vuele por desbordamientos. Pero ... esta es una razón por la que amo a Sage ...
Sage, 133char
Salida de muestra (de la versión de Python)
fuente
15j
en la versión de Pythonr=range(-50,26)
. Luego reemplacerange(-15,16)
conr[35:66]
y reemplacerange(-50,26)
conr
.J , 61 caracteres
55 para 0/1 separados por espacios en lugar de estrellas.
fuente
BASH -
167165148El
mb3
archivo:(sin línea nueva)
Ejecútelo en una terminal con longitud de línea 125:
BASH -
214190Básicamente, este es el mismo código que el siguiente, con los cálculos reemplazados por valores codificados y la imagen se volteó alrededor del eje x.
La siguiente versión no se ajustaba completamente a las reglas que rompían "de (-2 - i) a (1 + i)".
BASH -
263261260236Usa esta fuente, Luke:
Este código usa aritmética de enteros solamente, por lo que BASH no necesita ayudantes adicionales para hacer cálculos de coma flotante ...
fuente
x=;y=
. Los operadores de desplazamiento tienen una precedencia menor que la suma y la multiplicación, por lo que no es necesario paréntesis alrededor>>
del operando del lado izquierdo. Y puede usar{
... en}
lugar dedo
...done
, como Digital Trauma aconseja en su consejo . Y puede poner varias expresiones en una evaluación aritmética, simplemente sepárelas con,
.(x*x-y*y)>>12
. No cambian nada.Ruby, 95 caracteres
Salida de muestra:
fuente
Haskell, 130
Salida:
fuente
Aquí hay una respuesta de script de café que se ejecuta en node.js: en blanco y negro:
Agregar color:
fuente
Mathematica 56
Mathematica 77
Mathematica 77
fuente
GraphicsGrid@ImageData@Binarize@MandelbrotSetPlot[ImageResolution->40]/.{1->" ",0->"*"}
pero tenía 84 caracteres y la salida no es tan buena como la tuya de todos modos.Perl, 153 caracteres
Salida: no puedo publicar una imagen porque soy un usuario nuevo, así que intentaré publicar el texto de la salida.
fuente
C # - 304 caracteres
Cuando codifico, codifico con legibilidad y un formato hermoso. Vomité escribiendo esto.
Estoy seguro de que mi solución se puede mejorar, pero como referencia la publicaré. Tenga en cuenta que la consola de Windows aplasta la imagen.
fuente
Haskell: 340 caracteres
Bueno, como no veo una respuesta de haskell, publico la mía, traté de minimizarla por lo que he hecho hasta ahora. Estoy seguro de que puedo reducirlo mucho. Pero aquí está el primer intento:
Y aqui esta el resultado:
OK: inspirado en un código C ofuscado animado en HN, aquí hay una versión animada:
Copie / pegue, haga un runghc mandel.hs, ¡disfrute!
Aquí está el tipo de resultado después de 50 iteraciones:
Y un enlace a un código más legible:
http://yannesposito.com/Scratch/en/blog/Haskell-Mandelbrot/
fuente
J, 70
Muestra los miembros del conjunto como
1
, el resto como0
. Espacia cada punto calculado con dos caracteres de ancho, para mantener un píxel mayormente cuadrado con la mayoría de las fuentes.fuente
QBasic, 222 caracteres. No es tan breve, pero QBasic es un lenguaje bastante detallado. Además, actualicé con una versión aparentemente más correcta
La salida es como en la siguiente imagen.
fuente
SpecBAS 201
Sé que esta es una vieja pregunta, pero hemos estado jugando con el brote ascii de Perlin en el foro de programación BASIC, y aquí está el mío, en SpecBAS (que es una especie de intérprete BASIC de Sinclair) y realmente es solo texto, y uno línea de código:
Salida:
fuente
1FOR y=-29TO 30:FOR x=-10TO 89:LET m,r=0:FOR k=0TO 112:LET j=r^2-m^2-2+x/25,m=2*r*m+y/25,r=j,l=k&15,k=IIF(j^2+m^2>11,113,k):NEXT k:PRINT" .:-;!/>)|&IH%*#"(l+1);:NEXT x:NEXT y
.Perl - 193 caracteres
Resultado
Creo que ganó el concurso de perl ofuscado hace unos años.
fuente
Python, 115.
Funciona solo en terminales 80x24, pero puede agregar
print
despuésfor
para arreglarlo.Salida de muestra (con
print
instrucciones adicionales ):fuente
c ++ - 11 - 298 caracteres
Versión totalmente parametrizada y sin parámetros que solo hace lo que se requiere:
La implementación es completamente irrelevante. Simplemente viendo lo que se puede hacer usando el tiempo complejo nativo (que, por desgracia, es un poco prolijo).
Sin golf y parametrizado para que pueda hacer regiones
Salida
fuente
GolfScript - 77
Probablemente se pueda jugar mucho más al golf. El resultado es una aproximación porque tengo que usar enteros.
Salida:
Se necesitan unos 9 bytes más para que use espacios y estrellas:
fuente
GNU bc, 136 bytes
Salida:
fuente
CJam, 52 bytes
Explicación:
fuente
Matlab, 96
fuente
Befunge, 266 bytes
Pruébalo en línea!
Este es un renderizador de Mandelbrot que implementé hace un par de años para enviar un código de Rosetta . Como Befunge no tiene punto flotante, utiliza una forma de aritmética de punto fijo de 14 bits emulada con operaciones de enteros. Tiene un máximo de 94 iteraciones con el conjunto de caracteres ASCII como "paleta".
Esto se implementó originalmente teniendo en cuenta la portabilidad en lugar del tamaño, pero aún debe ser razonablemente bien tal como está.
Salida de muestra
fuente
Python 444
Aquí hay uno de los desarrolladores de Python ,
que aunque no es realmente corto,
es una línea que es bastante jefe.
fuente
c ++ (260)
Código de golf:
Salida de ejemplo:
fuente
Minkolang 0.9 ,
7774 bytes (NO VÁLIDO)Esta respuesta no es válida porque el idioma se creó mucho después de este desafío, pero lo publico para que haya una solución en este idioma. ¡Haciéndolo bastante afeitado en 3 bytes!
Pruébalo aquí.
Salida
Explicación
Esto aprovecha el manejo interno de Python de números complejos, por lo que puedo hacer
1~12$:;
(el equivalente de(-1)**0.5
Python) para obtener la unidad imaginaria. Entonces hay tres bucles for anidados, que bucle a través dey
,x
yz=z^2+c
. Es necesario romper el bucle más interno (y hacerlo pord$~2`9&
) porque de lo contrario, los números se volverán tan grandes que se volverán(NaN+Nanj)
, lo que aparentemente tiene una magnitud inferior a 2.fuente
Python 3, 185 bytes
Traducción de perl (193) con algunas mejoras
fuente
> <> , 118 bytes
Pruébalo en línea! Ten en cuenta que tarda unos 25 segundos en ejecutarse con TIO, ¡así que ten paciencia!
Más un auto desafío que una entrada seria. Produce el siguiente resultado:
fuente
; # , 150,878 bytes (sin competencia)
No cabe aquí :(
Salida:
fuente