Image de Mandelbrot dans toutes les langues


91

J'ai toujours utilisé une image Mandelbrot en tant que version "graphique" de Hello World dans toutes les applications graphiques que j'ai entre les mains. Maintenant, c'est à vous de jouer.

  • La langue doit être capable de générer des graphiques ou des graphiques (l'enregistrement de fichiers n'est pas autorisé)
  • Rendre une image carrée ou un graphique. La taille d'au moins 128 et d'au plus 640 sur *
  • Les coordonnées fractales vont d’environ -2-2i à 2 + 2i
  • Les pixels situés à l'extérieur de l'ensemble de Mandelbrot doivent être colorés en fonction du nombre d'itérations avant que la magnitude ne dépasse 2 (sauf * en noir et blanc).
  • Chaque nombre d’itérations doit avoir une couleur unique * et les couleurs voisines doivent de préférence être facilement distinguées par les yeux.
  • Les autres pixels (probablement à l’intérieur du groupe Mandelbrot) doivent être colorés en noir ou en blanc.
  • Au moins 99 itérations
  • Art ASCII non autorisé

* sauf si limité par la plateforme, p.ex. calculatrice graphique

Autorisé: non
Permis
autorisé:
Non autorisé
(images réduites)

Conditions gagnantes:

La version la plus courte (taille en octets) de chaque langue recevra une mention dans cet article, classée par taille.
Aucune réponse ne sera jamais acceptée avec le bouton.

Classement:


8
"Facilement distingué par les yeux" est difficile à rendre objectif. ... De plus, mis à part votre association personnelle entre les deux groupes, l'ensemble Mandelbrot n'a rien à voir avec Hello World, il est donc préférable de l'omettre du titre, à moins que vous ne suiviez délibérément les moteurs de recherche.
Jonathan Van Matre

1
Connexes: ASCII Mandelbrot (bien que certaines des réponses publiées ne soient pas ASCII et pourraient probablement mieux correspondre à cette question).
Peter Taylor

3
J'ai déjà vu quelques personnes mentionner qu'elles traduisaient Mandelbrot en "Hello World". Je le fais aussi depuis environ 30 ans. Le Mandelbrot est le "Hello World" parfait, car il indique à la fois que vous disposez d'un accès en pixel à l'écran et donne une bonne idée de la performance liée au calcul sur la nouvelle plate-forme.
Roger Dahl

6
Excellente idée de poser une question qui nécessite une combinaison de sensibilités mathématiques et esthétiques, puis d’imposer à l’avance toutes les décisions de conception.
Jwg

3
Tout le monde parvient à en faire un dans le brainfuck WINS, je dirais: D
MadTux

Réponses:


94

Calculatrice graphique Sharp EL-9300, 296 octets

C’était ma calculatrice graphique à l’école secondaire , en marche depuis 20 ans! Je me souviens d'avoir écrit un générateur de mandelbrot pour cela à l'époque. Et bien sûr, il se trouve toujours dans la mémoire de la NV:

ClrG
DispG
Range -2.35,2.35,.5,-1.55,1.55,0.5
y=-1.55
Label ly
x=-2.35
Label lx
n=1
zx=0
zy=0
Label ln
tzx=zx²-zy²+x
zy=(2*zx*zy)+y
zx=tzx
If zx²+zy²>4Goto esc
n=n+1
If n<20Goto ln
Label esc
If fpart (n/2)=0Goto npl
Plot x,y
Label npl
x=x+.05
If x<=2.35Goto lx
y=y+.05
If y<=1.55Goto ly
Wait

Le rendu a pris environ 90 minutes.

C'est totalement non-golfé. Je suis sûr que je pourrais économiser un peu d'espace, mais je voulais juste partager cette curiosité historique!

J'aime que les seules déclarations de contrôle disponibles soient gotos.

Voici une photo. Je n'ai pas d'autre moyen de sortir la sortie graphique: enter image description here


1
Moi aussi, mais ma mémoire NV est devenue vide après des années de conservation.
Mark Jeronimus

2
zx²+zy²>4ça ne pourrait pas être Abs(x)>2?
Mark Jeronimus

1
Tu devrais peut-être avoir une nouvelle batterie ...
NothingsImpossible

25
Intéressant. Donc, vous êtes un nerd pendant un bon moment.
devnull

4
Belle "capture d'écran"
meawoppl

83

Je suis tombé sur cela l'autre jour. Je n'en prends pas le mérite, mais bon sang, c'est génial:

Python 2:

_                                      =   (
                                        255,
                                      lambda
                               V       ,B,c
                             :c   and Y(V*V+B,B,  c
                               -1)if(abs(V)<6)else
               (              2+c-4*abs(V)**-0.4)/i
                 )  ;v,      x=1500,1000;C=range(v*x
                  );import  struct;P=struct.pack;M,\
            j  ='<QIIHHHH',open('M.bmp','wb').write
for X in j('BM'+P(M,v*x*3+26,26,12,v,x,1,24))or C:
            i  ,Y=_;j(P('BBB',*(lambda T:(T*80+T**9
                  *i-950*T  **99,T*70-880*T**18+701*
                 T  **9     ,T*i**(1-T**45*2)))(sum(
               [              Y(0,(A%3/3.+X%v+(X/v+
                               A/3/3.-x/2)/1j)*2.5
                             /x   -2.7,i)**2 for  \
                               A       in C
                                      [:9]])
                                        /9)
                                       )   )

enter image description here http://preshing.com/20110926/high-resolution-mandelbrot-in-obfuscated-python/


12
Semble être interdit: les régions sont difficiles à distinguer, voire pas du tout.
primo

5
En outre, cela écrit dans un fichier.
Lie Ryan

40
refusée ou non, c'est assez impressionnant: D
Navin

18
@ DigitalTrauma, diable, +1 pour la plus belle entrée!
Brian S

19
Est-ce que cela compte comme une quine? ;-)
Blazemonger

47

LaTeX, 673 octets

\countdef\!1\!129\documentclass{article}\usepackage[margin=0pt,papersize=\!bp]{geometry}\usepackage{xcolor,pgf}\topskip0pt\offinterlineskip\def~{99}\let\rangeHsb~\countdef\c2\countdef\d3\countdef\e4\begin{document}\let\a\advance\let\p\pgfmathsetmacro\makeatletter\def\x#1#2#3{#10
\@whilenum#1<#2\do{#3\a#11}}\d0\x\c{\numexpr~+1}{\expandafter\edef\csname\the\c\endcsname{\hbox{\noexpand\color[Hsb]{\the\d,1,1}\/}}\a\d23
\ifnum\d>~\a\d-~\fi}\def\/{\rule{1bp}{1bp}}\x\c\!{\hbox{\x\d\!{\p\k{4*\d/(\!-1)-2}\p\K{2-4*\c/(\!-1)}\def\z{0}\def\Z{0}\x\e~{\p\:{\z*\z-\Z*\Z+\k}\p\Z{2*\z*\Z+\K}\let\z\:\p\:{\z*\z+\Z*\Z}\ifdim\:pt>4pt\csname\the\e\endcsname\e~\fi}\ifnum\e=~\/\fi}}}\stop

Result 129x129 (129 × 129)

L'image PDF est composée d'unités carrées colorées de taille 1pb × 1pb.

Ungolfed

% count register \size contains the width and height of the square
\countdef\size=1
\size=31
\documentclass{article}
\usepackage[margin=0pt,papersize=\size bp]{geometry}
\usepackage{xcolor,pgf}
\topskip0pt
\offinterlineskip
\def\iterations{99}
\let\rangeHsb\iterations
\countdef\c2
\countdef\d3
\countdef\e4
\begin{document}
\let\p\pgfmathsetmacro
\makeatletter
% \Loop: for (#1 = 0; #1 < #2; #1++) {#3}
\def\Loop#1#2#3{%
  #1=0
  \@whilenum#1<#2\do{#3\advance#11}%
}
\d0%
\Loop\c{\numexpr\iterations+1\relax}{%
  \expandafter\edef\csname\the\c\endcsname{%
    \hbox{\noexpand\color[Hsb]{\the\d,1,1}\noexpand\pixel}%
  }%
  \advance\d23 \ifnum\d>\iterations\advance\d-\iterations\fi
}
\def\pixel{\rule{1bp}{1bp}}
% \c: row
% \d: column
% \e: iteration
\Loop\c\size{%
  \typeout{c: \the\c}%
  \hbox{%
    \Loop\d\size{%
      \pgfmathsetmacro\k@re{4*\d/(\size-1)-2}%
      \pgfmathsetmacro\K@im{2-4*\c/(\size-1)}%
      \def\z@re{0}%
      \def\Z@im{0}%
      \Loop\e\iterations{%
         % calculate z(n+1) = z^2(n) + k
         \pgfmathsetmacro\temp{\z@re*\z@re-\Z@im*\Z@im+\k@re}%
         \pgfmathsetmacro\Z@im{2*\z@re*\Z@im+\K@im}%
         \let\z@re\temp
         % calculate abs(z)^2
         \pgfmathsetmacro\temp{\z@re*\z@re+\Z@im*\Z@im}%
         \ifdim\temp pt>4pt\csname\the\e\endcsname\e\iterations\fi
      }%   
      \ifnum\e=\iterations\pixel\fi
    }%
  }%
}
\stop

36

Assemblage DOS x86, 208 177 173 octets

Le binaire complet, en HEX, que j'ai créé à la main, est:

DBE3BE00A0B81300CD1056BA640007BF87F9FDBDC7008BCDE81A008AC3AA4979F7B9C70083EF784D79EE33C0CD16B80300CD10CD208BC12BC289441CDF441CDF06A701DEF9D95C088BC52BC289441CDF441CDF06A701DEF9D95C0CD9EED914D95404D95410D95C14B301D904D84C04DE0EA901D8440CD95404D94410D86414D84408D914D80CD95C10D84C04D95414D84410DF06AB01DED99BDFE09B9E7207433ADA72C632DBC3320002000400

L'image d'exemple est:

Mandlebrot screen shot with black cropped

La source complète en ASM lisible est assez longue (je l'ai utilisée pour comprendre comment je codais cette ventouse):

.286
CODE SEGMENT
ASSUME CS:code, DS:code
ORG 0100h

; *****************************************************************************
start:
  ; Mandlebrot coordinates
  zr   = DWORD PTR [SI+0]
  zi   = DWORD PTR [SI+4]
  cr   = DWORD PTR [SI+8]
  ci   = DWORD PTR [SI+12]
  zrsq = DWORD PTR [SI+16]
  zisq = DWORD PTR [SI+20]

  ; Temp int
  Temp = WORD PTR  [SI+28]

  ; ===========================================================================
  ; Initialize

  ; Initialize the FPU
  FNINIT

  ; SI points to our memory
  mov si, 0A000h ; So we can push it

  ; Shave off some bytes by reusing 100
  mov dx, 100

  ; Switch to MCGA
  mov ax, 013h
  int 010h

  ; ES:DI is the end of our drawing area
  push si
  pop es
  mov di, 63879
  std ; We're using stosb backwards

  ; Initialize our X and Y
  mov bp, 199
  mov cx, bp


  ; ===========================================================================
  ; Main draw loop

MainLoop:
  ; Get our next mandelbrot value
  call GMV

  ; Store it
  mov al, bl
  stosb

  ; Decrement our X
  dec cx
  jns MainLoop

  ; Decrement our Y
  mov cx, 199
  sub di, 120
  dec bp
  jns MainLoop


  ; ===========================================================================
  ; Done

  ; Wait for a key press
  xor ax, ax
  int 016h

  ; Change back to text mode
  mov ax, 3
  int 010h

  ; Exit to DOS
  int 020h



; *****************************************************************************
; GMV: Get Mandelbrot Value
; Gets the value for the next Mandelbrot pixel
; Returns:
;   BL - The color to use
GMV:
  ; ===========================================================================
  ; Initialize

  ; cr = (x - 100) / 50;
  mov ax, cx
  sub ax, dx                  ; \
  mov Temp, ax                ;  > ST0 = Current X - 100
  FILD Temp                   ; /
  FILD Divisor                ; ST0 = 50, ST1 = Current X - 100
  FDIVP                       ; ST0 = (Current X - 100) / 50
  FSTP cr                     ; Store the result in cr

  ; ci = (y - 100) / 50;
  mov ax, bp
  sub ax, dx                  ; \
  mov Temp, ax                ;  > ST0 = Current Y - 100
  FILD Temp                   ; /
  FILD Divisor                ; ST0 = 50, ST1 = Current Y - 100
  FDIVP                       ; ST0 = (Current Y - 100) / 50
  FSTP ci                     ; Store the result in ci

  ; zr = zi = zrsq = zisq = 0;
  FLDZ
  FST zr
  FST zi
  FST zrsq
  FSTP zisq

  ; numiteration = 1;
  mov bl, 1

  ; ===========================================================================
  ; Our main loop

  ; do {
GMVLoop:

  ; zi = 2 * zr * zi + ci;
  FLD zr
  FMUL zi
  FIMUL TwoValue
  FADD ci
  FST zi ; Reusing this later

  ; zr = zrsq - zisq + cr;
  FLD zrsq
  FSUB zisq
  FADD cr
  FST zr ; Reusing this since it already is zr

  ; zrsq = zr * zr;
  ;FLD zr ; Reused from above
  FMUL zr
  FSTP zrsq

  ; zisq = zi * zi;
  ;FLD zi ; Reused from above
  FMUL zi
  FST zisq ; Reusing this for our comparison

  ; if ((zrsq + zisq) < 4)
  ;   return numiteration;
  FADD zrsq
  FILD FourValue
  FCOMPP
  FSTSW ax
  FWAIT
  sahf
  jb GMVDone

  ;} while (numiteration++ < 200);
  inc bx
  cmp bl, dl
  jb GMVLoop

  ;return 0;
  xor bl, bl

GMVDone:  
  ret
;GMV



; *****************************************************************************
; Data

; Divisor
Divisor DW 50
; Two Value
TwoValue DW 2
; 4 Value
FourValue DW 4

CODE ENDS
END start

Ceci est conçu pour la compilation avec TASM, s’exécute en MCGA et attend une pression de touche avant de mettre fin au programme. Les couleurs ne sont que la palette MCGA par défaut.

EDIT: Optimisé, il dessine maintenant en arrière (même image), et a enregistré 31 octets!

EDIT 2: Pour soulager le PO, j'ai recréé le binaire à la main. Ce faisant, j'ai également supprimé 4 octets supplémentaires. J'ai documenté chaque étape du processus, montrant tout mon travail pour que tout le monde puisse le suivre s'il le souhaite vraiment, ici (attention, c'est ennuyeux et très long): http://lightning.memso.com/media/perm/ mandelbrot2.txt

J'ai utilisé quelques regex dans EditPadPro, pour rechercher toutes les ; Final: ...entrées du fichier et les vider sous forme binaire hexadécimal dans un fichier .com. Le binaire résultant est ce que vous voyez en haut de cet article.


1
Le code machine ne compte pas. Si cela compte, toute langue produisant un code octet ou un code machine devrait être plus courte. Je compte 820 après avoir tout changé en noms longs à 1 caractère.
Mark Jeronimus

3
Je pourrais coder à la main le tout en binaire si cela vous facilite la tâche, mais ce serait comme demander à toute personne utilisant un langage de haut niveau d'éviter d'utiliser des constructions automatiques, des macros, etc. C'est tout ce que l'assemblage est vraiment, juste un tas de les macros. Le fichier binaire résultant pour exécuter un code JavaScript, Perl, etc. complet inclut le fichier binaire de la bibliothèque. Avec ASM, la valeur hexadécimale finale est tout, les bibliothèques, ALL CODE, incluses.
Mark Ormston

5
Non, je peux convertir ASM en binaire si vraiment nécessaire. Il sortira avec exactement les mêmes 177 octets que mon assembleur a aidé. Le code résultant peut être collé par n'importe qui avec un éditeur binaire dans un nouveau fichier, sauvegardé, de 177 octets, et cela fonctionnera comme prévu. Apparemment SO est divisé sur les soumissions ASM, alors peut-être devriez-vous préciser si vous estimez que cela ne compte pas: meta.codegolf.stackexchange.com/questions/260/…
Mark Ormston

6
Bon, alors, pour prouver que cette entrée est valide, j'ai passé le temps nécessaire pour traduire cela en binaire. J'ai mis à jour ma réponse en conséquence.
Mark Ormston

7
Le truc, c'est qu'il n'y a pas de compilateur avec assembly. Vous utilisez juste des macros. Dire que cela ne compte pas, c'est comme dire que vous ne pouvez utiliser aucune #defineinstruction prédéfinie en C. Il faut juste beaucoup de temps pour tout remplacer manuellement.
Mark Ormston

28

Java, 505 405 324 octets

Juste un calcul standard, avec golfitude maintenant avec golfitude supplémentaire.

enter image description here

Golfé:

import java.awt.*;class M{public static void main(String[]v){new Frame(){public void paint(Graphics g){for(int t,s,n=640,i=n*n;--i>0;g.setColor(new Color(s*820)),g.drawLine(i/n,i%n+28,i/n,i%n),setSize(n,668)){float c=4f/n,a=c*i/n-2,b=i%n*c-2,r=a,e=b,p;for(s=t=99;t-->0&&r*r+e*e<4;s=t,p=r*r-e*e+a,e=r*e*2+b,r=p);}}}.show();}}

Avec des sauts de ligne:

import java.awt.*;
class M{
    public static void main(String[]v){
        new Frame(){
            public void paint(Graphics g){
                for(int t,s,n=640,i=n*n;--i>0;g.setColor(new Color(s*820)),g.drawLine(i/n,i%n+28,i/n,i%n),setSize(n,668)){
                    float c=4f/n,a=c*i/n-2,b=i%n*c-2,r=a,e=b,p;
                    for(s=t=99;t-->0&&r*r+e*e<4;s=t,p=r*r-e*e+a,e=r*e*2+b,r=p);
                }
            }
        }.show();
    }
}

f.setSize(n,668);- dépend beaucoup du thème utilisé, mais je l'accepterai.
Mark Jeronimus

Vous pouvez supprimer les importations en Java car elles sont de toute façon générées automatiquement.
Mark Jeronimus

Je vois aussi doubleoù vous floatpourriez utiliser si vous essayiez
Mark Jeronimus Le

JFrame=> Framesupprime 2 caractères. Bien que vous ne puissiez plus fermer la fenêtre. ;)
EthanB

2
Votre classe n'a pas besoin d'être publique. De plus, utilisez Java 8 pour vous débarrasser du finalmodificateur. Et vous ne devez pas omettre les importations pour être une soumission complète.
Victor Stafusa

21

Javascript (ECMAScript 6) - 315 308 caractères

document.body.appendChild(e=document.createElement("canvas"));v=e.getContext("2d");i=v.createImageData(e.width=e.height=n=600,n);j=0;k=i.data;f=r=>k[j++]=(n-c)*r%256;for(y=n;y--;)for(x=0;x++<n;){c=s=a=b=0;while(c++<n&&a*a+b*b<5){t=a*a-b*b;b=2*a*b+y*4/n-2;a=t+x*4/n-2}f(87);f(0);f(0);k[j++]=255}v.putImageData(i,0,0)

Default Output

(d=document).body.appendChild(e=d.createElement`canvas`);v=e.getContext`2d`;i=v.createImageData(e.width=e.height=n=600,n);j=0;k=i.data;f=r=>k[j++]=(n-c)*r%256;for(y=n;y--;)for(x=0;x++<n;){c=s=a=b=0;while(c++<n&&a*a+b*b<5){t=a*a-b*b;b=2*a*b+y*4/n-2;a=t+x*4/n-2}f(87);f(0);f(0);k[j++]=255}v.putImageData(i,0,0)

  • Modifier npour faire varier la taille de l'image (et le nombre d'itérations).
  • Modifiez les valeurs transmises dans les f(87);f(0);f(0);appels (vers la fin) pour modifier les valeurs de couleur RVB. ( f(8);f(8);f(8);est en niveaux de gris.)

Avec f(8);f(23);f(87);:

enter image description here

(d=document).body.appendChild(e=d.createElement`canvas`);v=e.getContext`2d`;i=v.createImageData(e.width=e.height=n=600,n);j=0;k=i.data;f=r=>k[j++]=(n-c)*r%256;for(y=n;y--;)for(x=0;x++<n;){c=s=a=b=0;while(c++<n&&a*a+b*b<5){t=a*a-b*b;b=2*a*b+y*4/n-2;a=t+x*4/n-2}f(8);f(23);f(87);k[j++]=255}v.putImageData(i,0,0)


2
Agréable. d=documentvous sauverait un peu plus. (Aussi, y a-t-il une raison pour créer la toile? CodeGolf suppose-t-il un certain niveau de HTML disponible?)
Matthew Wilcoxson

1
Vous pouvez écrire document.createElement`canvas` et sauvegarder 2 octets. Identique à la getContext`2d` .
Ismael Miguel

Je n'ai pas présumé de HTML Canvas car il s'agit d'une solution JavaScript pure.
MT0

ou vous pouvez "déposer" du tout comme ici
Kamil Kiełczewski

19

J, 73 octets

load'viewmat'
(0,?$~99 3)viewmat+/2<|(j./~i:2j479)(+*:) ::(3:)"0^:(i.99)0

ensemble mandelbrot

Modifier , certains expliquant:

x (+*:) y           NB. is x + (y^2)
x (+*:) ::(3:) y    NB. returns 3 when (+*:) fails (NaNs)
j./~i:2j479         NB. a 480x480 table of complex numbers in required range
v =: (j./~i:2j479)(+*:) ::(3:)"0 ]     NB. (rewrite the above as one verb)
v z0                NB. one iteration of the mandelbrot operation (z0 = 0)
v v z0              NB. one iteration on top of the other
(v^:n) z0           NB. the result of the mandelbrot operation, after n iterations
i.99                NB. 0 1 2 3 4 ... 98
(v^:(i.99))0        NB. returns 99 tables, one for each number of iterations
2<| y               NB. returns 1 if 2 < norm(y), 0 otherwise
2<| (v^:(i.99))0    NB. 99 tables of 1s and 0s
+/...               NB. add the tables together, element by element.
NB. we now have one 480x480 table, representing how many times each element exceeded norm-2.
colors viewmat M    NB. draw table 'M' using 'colors'; 'colors' are rgb triplets for each level of 'M'.
$~99 3              NB. 99 triplets of the numbers 99,3
?$~99 3             NB. 99 random triplets in the range 0 - 98 and 0 - 2
0,?$~99 3           NB. prepend the triplet (0,0,0): black

1
+1 mais serait-il possible que vous expliquiez un peu le fonctionnement de ce code? En particulier, je suis curieux de savoir comment (où dans le code) choisit-il les couleurs?
Plannapus

1
@MarkJeronimus, je peux le faire 70 mais j'ai gardé certaines choses pour plus de clarté. J'ai donc pris la liberté d'ignorer la FL lors du décompte.
Eelvex

@plannapus, OK, a ajouté quelques commentaires. La sélection des couleurs se fait avec (0,?$~99 3)ce qui produit 100 triplets RGB, un pour chaque niveau. En raison du caractère aléatoire, vous pouvez obtenir moins de 100 triplets, ce qui permet à certains niveaux d’effectuer une transition plus douce (tout en conservant des couleurs différentes).
Eelvex

17

Mathematica, 214 191 215 19 30

Depuis la version 10.0, il y a une fonction intégrée: (19 octets)

MandelbrotSetPlot[]

Mandelbrot


Pour se conformer aux exigences de la plage de coordonnées, 11 octets supplémentaires sont nécessaires. (30 octets)

MandelbrotSetPlot@{-2-2I,2+2I}

m2


Une caisse roulée à la main:

m=Compile[{{c,_Complex}},Length[FixedPointList[#^2+c&,0,99,SameTest→(Abs@#>=2&)]]];
ArrayPlot[Table[m[a+I b],{b,-2,2,.01},{a,-2,2,.01}],DataRange→{{-2,2},{-2,2}},
ColorRules→{100→Black},ColorFunction→(Hue[Log[34,#]]&)]

vert


{b, -2, 2, .01}, {a, -2, 2, .01}est plus court et plus proche des règles
Mark Jeronimus

@ MarkJeronimus Merci. J'ai utilisé la plage suggérée pour l'image itérative.
DavidC

Vous aviez presque raison, puis vous avez rendu l'intérieur non noir. La dernière image du fichier GIF est en noir à l'intérieur et constitue une réponse autorisée. EDIT: et je compte 195 octets.
Mark Jeronimus

J'ai manqué le point d'être noir. Le nombre a augmenté car certains caractères uniques sont devenus deux caractères dans le copier-coller vers SE.
DavidC

Votre solution intégrée utilise une interprétation très souple de The fractal coordinates range from approximately -2-2i to 2+2i.
Jonathan Frech

16

Python avec Pylab + Numpy, 151 octets

Je ne pouvais pas supporter de voir une entrée Python non-DQ'ed, mais je pense que je me suis vraiment surpassée sur celui-ci, et je l'ai réduite à 153 caractères!

import numpy as n
from pylab import*
i=99
x,y=n.mgrid[-2:2:999j,-2:2:999j]
c=r=x*1j+y
x-=x
while i:x[(abs(r)>2)&(x==0)]=i;r=r*r+c;i-=1
show(imshow(x))

Aussi, notamment, l'avant-dernière ligne génère 4 avertissements d'exécution distincts, un nouveau record personnel!

entrez la description de l'image ici


Je compte 152. Aucun espace n'est requis entre importet *, et ne pas définir fdu tout devrait être plus court, sauf si j'ai mal compris quelque chose, ce qui est possible. Vous devez également le modifier de manière à ce que 0 itération et 1 itération soient distiguées (elles sont actuellement toutes les deux en gris).
Primo

Bizarre. Est-ce que wc inclut l'eof? Fixe et légèrement plus petit. Juste un moment.
Meawoppl

J'en ai 151 avec wc. Premier golf, donc vous ne savez pas comment le marquer.
Meawoppl

J'en compte 150, sans fin de nouvelle ligne. Certains interprètes / compilateurs en demandent un, mais l'interpréteur python s'en sort bien. Pas sûr wc, mais peut-être essayer à la stat -c %splace. Les bordures supérieure et inférieure noires font-elles partie de l'image?
Primo

1
Vous pouvez enregistrer 1 caractère en utilisant à la from numpy import*place de import numpy as net à la mgridplace de n.mgrid.
nyuszika7h

15

C + Allegro 4.2.2 - 248 octets

#include<allegro.h>
x=-1,y,K=400;float a,h,c,d,k;main(i){set_gfx_mode('SAFE',K,K,allegro_init(),0);while(x++<K)
for(y=0;y<K;y++){for(a=h=i=0;a*a+h*h<4&&++i<256;k=a,a=a*a-h*h+x*0.01-2,h=2*k*h+y*0.01-2);
putpixel(screen,x,y,i);}while(1);}END_OF_MAIN()

Sortie:

MSet 1


Vous devriez mentionner qu'il s'agit d'Allegro 4 (qui est assez différent d'Allegro 5). Quelle version exacte est-ce?
Victor Stafusa

c'est soit 246 ou 249 de long
Mark Jeronimus

@Victor Allegro 4.2.2.
Oberon

1
@MarkJeronimus N'y a-t-il pas lieu de supposer de nouvelle ligne entre ... allegro.h>et x=-1, ...? Je suppose que Notepad ++ le compte comme \r\n= 0D 0A.
Oberon

1
Je pense que 0.01peut être tapé comme .01.
Yytsi

14

Windows PowerShell (v4), 299 octets

Image fractale de Mandelbrot

# Linewrapped here for show:

$M='System.Windows.Forms';nal n New-Object;Add-Type -A System.Drawing,$M;(
$a=n "$M.Form").backgroundimage=($b=n Drawing.Bitmap 300,300);0..299|%{
$r=$_;0..299|%{$i=99;$k=$C=n numerics.complex($_/75-2),($r/75-2);while(((
$k=$k*$k).Magnitude-lt4)-and$i--){$k+=$C}$b.SetPixel($_,$r,-5e6*++$i)}};$a.Show()


# The single line 299 char entry version:

$M='System.Windows.Forms';nal n New-Object;Add-Type -A System.Drawing,$M;($a=n "$M.Form").backgroundimage=($b=n Drawing.Bitmap 300,300);0..299|%{$r=$_;0..299|%{$i=99;$k=$C=n numerics.complex($_/75-2),($r/75-2);while((($k=$k*$k).Magnitude-lt4)-and$i--){$k+=$C}$b.SetPixel($_,$r,-5e6*++$i)}};$a.Show()

Instructions

  • Exécuter une console PowerShell normale (ISE peut ne pas fonctionner)
  • Copier / coller le code dans, appuyez sur Entrée
  • Attendez - cela prend une minute ou plus pour courir
  • La seule façon de quitter est de fermer la console

Commentaire

  • Il y a un tout petit peu de test de règles en cours avec les couleurs à l'intérieur du décor; les règles disent "Les autres pixels (probablement à l'intérieur du jeu de Mandelbrot) doivent être colorés en noir ou en blanc" " ; le code colore les pixels complètement en noir RVB (0,0,0) ... il s’agit tout simplement d’un RGBA noir transparent (0,0,0,0). Donc, ce qui apparaît est la couleur de fond de la forme du thème Windows actuel, un RVB légèrement blanc cassé (240 240 240) dans ce cas.

Je changerais lt2pour lt4en faire un "ensemble de mandelbrot" au lieu de l'image que vous avez maintenant. De nombreux points de l'ensemble sont engloutis par les bandes de couleurs.
Mark Jeronimus

Apparemment, la magnitude n'est a*a+b*bpassqrt(a*a+b*b)
Mark Jeronimus

Je pensais que je l' ai testé plus tôt, mais je suis allé à la recherche d'une réponse à « où est la ligne horizontale à gauche disparu? », Et après un peu, je l' ai trouvé exactement où vous avez dit, -lt4. Ce qui est bien - merci. J'ai mis à jour ma réponse avec le code corrigé et l'image. (Il faudra que je repense à ma compréhension de ce que ça fait, car il me manque quelque chose).
TessellatingHeckler

14

Python + PIL , 166 octets

import Image
d=600;i=Image.new('RGB',(d,d))
for x in range(d*d):
 z=o=x/9e4-2-x%d/150.j-2j;c=99
 while(abs(z)<2)*c:z=z*z+o;c-=1
 i.putpixel((x/d,x%d),5**8*c)
i.show()

Sortie (s'ouvrira dans le visualiseur par défaut * .bmp):


1
Vous pouvez réduire de 3 si vous vous débarrassez de la yboucle. r=range(d*d), utilisez x/det x%dpour x et y.
Geobits

@Geobits l'idée effectivement sauvé 10, merci!
Primo

1
Les types complexes peuvent être initialisés comme: c = 1 + 2j, ce qui, je pense, vous épargnerait quelques caractères avec: z = o = x / 9e4-2 + (x% d / 150.-2) * 1j; c = 99
Meawoppl

@meawoppl encore 7: D
primo

Techniquement non autorisé: cela n'affecte aucune fonctionnalité de sortie graphique de Python (et Image.show()enregistre implicitement un fichier temporaire).
Nneonneo

12

BBC Basic (228 octets)

Qu'en est-il des langues dont personne n'a jamais entendu parler dans le code golf? Le plus probablement pourrait être optimisé, mais je ne suis pas tout à fait où - améliorations possibles. Basé sur http://rosettacode.org/wiki/Mandelbrot_set#BBC_BASIC , mais j’ai essayé de coder le golf autant que possible.

VDU23,22,300;300;8,8,8,8
ORIGIN0,300
GCOL1
FORX=0TO600STEP2
i=X/200-2
FORY=0TO300STEP2
j=Y/200
x=0
y=0
FORI=1TO128
IFx*x+y*y>4EXIT FOR
t=i+x*x-y*y
y=j+2*x*y
x=t
NEXT
COLOUR1,I*8,I*4,0
PLOTX,Y:PLOTX,-Y
NEXT
NEXT

Le jeu de Mandelbrot généré

Le >symbole sur l'image est prompt et il est généré automatiquement après l'exécution du programme.


Pas besoin de tracer deux fois, allez simplement avec une version plus inefficace. Est-ce qu'il ne supporte pas NEXT Y,X?
Mark Jeronimus

10

APL, 194 caractères / octets *

m←{1{⍺=99:0⋄2<|⍵:⍺⋄(⍺+1)∇c+⍵*2}c←⍵}¨⍉v∘.+0j1×v←¯2+4÷s÷⍳s←640
'F'⎕WC'Form'('Coord' 'Pixel')('Size'(s s))
'B'⎕WC'Bitmap'('CMap'(0,,⍨⍪0,15+10×⍳24))('Bits'(24⌊m))
'F.I'⎕WC'Image'(0 0)('Picture' 'B')

Ceci est pour Dyalog APL avec ⎕IO ⎕ML←1 3

La plupart de l'espace est pris par les appels d'API pour afficher un bitmap dans une fenêtre (lignes 2, 3, 4)
S'il y avait un raccourci pour le faire, le code serait réduit à 60 caractères (ligne 1)

PLZ HELP TROUVEZ LE COURT RACCOURCI KTHX

Version non-golfée (ligne 1 seulement)

s←640            ⍝ size of the bitmap
v←(4×(⍳s)÷s)-2   ⍝ vector of s reals, uniform between ¯2 and 2
m←(0j1×v)∘.+v    ⍝ square matrix of complex numbers from ¯2j¯2 to 2j2
m←{              ⍝ transform each number in matrix m according to the following
  1{             ⍝   function that takes iteration counter as ⍺ and current value as ⍵
    ⍺=99: 0      ⍝     if we have done 99 iterations, return 0
    2<|⍵: ⍺      ⍝     if |⍵| > 2 return the number of iterations done
    (⍺+1)∇c+⍵*2  ⍝     otherwise, increment the iterations and recurse with the new value
  }c←⍵           ⍝   save the initial value as c
}¨m    

Capture d'écran:

(La version gratuite fonctionne sous OS X sous Wine. Oui, je suis bon marché comme ça.)

capture d'écran

*: Dyalog possède son propre jeu de caractères sur un octet, avec les symboles APL mappés sur les valeurs supérieures de 128 octets, de sorte que le code entier puisse être stocké dans 194 octets. Chaque affirmation de cette note de bas de page est probablement vraie. Restez calme et continuez à jouer au golf.


10

Mathematica 10.0, 19 caractères

MandelbrotSetPlot[]

MandelbrotSetPlot est une nouvelle fonction de Mathematica 10.0.

entrez la description de l'image ici


Comme il est pratique que cette fonction intégrée réponde à toutes mes exigences (sauf la localisation, qui peut être définie avec 13 caractères supplémentaires). Sauf que c'est une échappatoire standard.
Mark Jeronimus

20
Le code golf est généralement remporté par des langages spécialisés dotés de jetons à caractère unique ou par des systèmes tels que Mathematica, dotés d'un grand nombre de fonctions spéciales intégrées. Les utiliser n'est pas une tricherie, pas plus que d'utiliser des commandes à un caractère serait en APL.
Michael Stern

9

R, 199 211 caractères

Ancienne solution à 199 caractères:

r=seq(-2,2,l=500);c=t(sapply(r,function(x)x+1i*r));d=z=array(0,dim(c));a=1:25e4;for(i in 1:99){z[a]=c[a]+z[a]^2;s=abs(z[a])<=2;d[a[!s]]=i;a=a[s]};image(d,b=0:99,c=c(1,sample(rainbow(98))),ax=F,asp=1)

Avec indentation:

r=seq(-2,2,l=500)
c=t(sapply(r,function(x)x+1i*r)) #Produces the initial imaginary number matrix
d=z=array(0,dim(c)) #empty matrices of same size as c 
a=1:25e4            #(z will store the magnitude, d the number of iterations before it reaches 2)
for(i in 1:99){     #99 iterations
    z[a]=c[a]+z[a]^2
    s=abs(z[a])<=2
    d[a[!s]]=i
    a=a[s]
    }
image(d,b=0:99,c=c(1,sample(rainbow(98))),ax=F,asp=1) #Colors are randomly ordered (except for value 0)

entrez la description de l'image ici

Edit: Solution à 211 caractères qui colore différemment l’intérieur du jeu et l’extérieur du premier calque:

r=seq(-2,2,l=500);c=t(sapply(r,function(x)x+1i*r));d=z=array(0,dim(c));a=1:25e4;for(i in 1:99){z[a]=c[a]+z[a]^2;s=abs(z[a])<=2;d[a[!s]]=i;a=a[s]};d[a[s]]=-1;image(d,b=-1:99,c=c(1:0,sample(rainbow(98))),ax=F,asp=1)

Avec indentation:

r=seq(-2,2,l=500)
c=t(sapply(r,function(x)x+1i*r))
d=z=array(0,dim(c))
a=1:25e4
for(i in 1:99){
    z[a]=c[a]+z[a]^2
    s=abs(z[a])<=2
    d[a[!s]]=i
    a=a[s]
    }
d[a[s]]=-1 #Gives the inside of the set the value -1 to differenciate it from value 0.
image(d,b=-1:99,c=c(1,sample(rainbow(99))),ax=F,asp=1)

entrez la description de l'image ici


techniquement, le noir à l'extérieur est interdit. L'avez-vous manqué ou est-ce difficile à mettre en œuvre?
Mark Jeronimus

@ MarkJeronimus tous les deux en fait :) Je vais essayer de voir comment le faire, mais je ne suis pas sûr à 100% que je trouverai le moyen de le faire proprement.
Plannapus

@MarkJeronimus Done!
Plannapus

5
Deuxième place dans la division des couleurs hideuses.
Meawoppl

1
@meawoppl blame rainbow():)
Plannapus

9

Java - Traitement (271 octets)

void setup(){int h=100,e=5*h,i;float d,v,w,a,b,c;size(e,e);colorMode(HSB,h);loadPixels();d=4./e;v=2;for(int x=1;x<=e;x++){v-=d;w=2;for(int y=0;y<e;){w-=d;a=b=c=0;i=-1;while(a*a+b*b<4&&++i<h){c=a*a-b*b+v;b=2*a*b+w;a=c;}pixels[e*++y-x]=color(i*9%h,h,h-i);}}updatePixels();}

Étendu:

void setup(){
  int h=100, e=5*h, i; //init of size "e", max hue "h", iterator "i"
  float d,v,w,a,b,c; //init of stepwidth "d", y-coord "v", x-coord "w", Re(z) "a", Im(z) "b", temp_a "c"
  size(e,e);
  colorMode(HSB,h);
  loadPixels();
  d = 4./e;
  v = 2;
  for(int x = 1; x <= e; x++){
    v -= d;
    w = 2;
    for(int y = 0; y < e;){
      w -= d;
      a = b = c = 0;
      i = -1;
      while(a*a + b*b < 4 && ++i < h){
        c = a*a - b*b + v;
        b = 2*a*b + w;
        a = c;
      }
      pixels[e * ++y - x] = color(i*9 % h, h, h-i);
    }
  }
  updatePixels();
}


Aw, maaaaan, je voulais faire ça. +1 .
SIGSTACKFAULT le

8

TI-80 BASIC, 125 à 106 octets

ZDECIMAL
FOR(Y,-2,2,.1
FOR(X,-2,2,.1
0->S
0->T
1->N
LBL N
N+1->N
IF S²+T²≥4
GOTO B
S²-T²+X->I
2ST+Y->T
I->S
IF N<20
GOTO N
LBL B
IF FPART (N/2
PT-ON(X,Y
END
END

Basé sur la réponse de Digital Trauma. entrez la description de l'image ici


6

GLSL - 225 octets:

void main(){vec2 c=gl_FragCoord.xy/iResolution.y*4.-2.,z=c,v;for(int i=0;i<99;i++){z=vec2(z.x*z.x-z.y*z.y,2.*z.x*z.y)+c;if(length(z)>2.&&v.y<1.)v=vec2(float(i)/99.,1.);}gl_FragColor=(v.y<1.)?vec4(v,v):texture2D(iChannel0,v);}

Définition de variables dans le code (242 octets):

uniform vec3 r;uniform sampler2D t;void main(){vec2 c=gl_FragCoord.xy/r.y*4.-2.,z=c,v;for(int i=0;i<99;i++){z=vec2(z.x*z.x-z.y*z.y,2.*z.x*z.y)+c;if(length(z)>2.&&v.y<1.)v=vec2(float(i)/99.,1.);}gl_FragColor=(v.y<1.)?vec4(v,v):texture2D(t,v);}

Voir dans ShaderToy

Golf de Mandelbrot

Cela nécessite qu'une texture de palette appropriée soit chargée en tant que iChannel0. (La coloration ici provient de la texture "pixel aléatoire" sur ShaderToy).


Les déclarations de variables doivent également être comptées, sauf si elles peuvent être générées automatiquement à partir du code. (Le jeu de couleurs est correct s'il n'est disponible qu'en paramètre externe)
Mark Jeronimus

@MarkJeronimus: Pour l'environnement ShaderToy, ces variables sont fixes. Sinon, pour les shaders standards, j'aurais choisi des noms de variables plus courts.
Nneonneo

Est-ce le plus rapide de tous?
Demi

6

Octave ( 212 136 octets)

(Incluant maintenant quelques idées dues à @ChrisTaylor.)

[y,x]=ndgrid(-2:.01:2);z=c=x+i*y;m=c-c;for n=0:99;m+=abs(z)<2;z=z.^2+c;end;imagesc(m);colormap([hsv(128)(1+mod(0:79:7890,128),:);0,0,0])

Avec des espaces:

[y,x] = ndgrid(-2:.01:2);
z = c = x + i*y;
m = c-c;
for n=0:99
    m += abs(z)<2;
    z = z.^2 + c;
end
imagesc(m)
colormap([hsv(128)(1+mod(0:79:7900,128),:);
          0,0,0])

Sortie:

Pas de Mandelbrot vers l'abs (z)> 2

Pour convertir en Matlab, changez "m+=abs(z)<2 " par " m=m+(abs(z)<2)". [+3 octets]

Pour que le rapport de format 1: 1, ajoutez ";axis image ". [+11 octets]

Ma première réponse (212 octets):

[x,y]=meshgrid(-2:.01:2);z=c=x+i*y;m=0*e(401);for n=0:99;m+=abs(z)<2;z=z.^2+c;endfor;t=[0*e(1,7);2.^[6:-1:0]];[s{1:7}]=ndgrid(num2cell(t,1){:});t=1+sum(cat(8,s{:}),8);imagesc(m);colormap([hsv(128)(t(:),:);0,0,0])

Il existe probablement un moyen plus rapide d'obtenir une palette de couleurs discontinue ....
aschepler

Oui, beaucoup mieux maintenant.
Aschepler

+1 solution simple et concise. Mais votre format d'image n'est pas 1: 1 (cf. règle n ° 2: la sortie doit être carrée).
Plannapus

La fixation du format d’image nécessitera 11 octets supplémentaires: append " ;axis image". Est-ce nécessaire pour se qualifier?
Aschepler

Je pense que c’était juste moi qui trépignais :), le PO ne semble pas avoir de problème avec ça car il n’a rien dit.
Plannapus

6

Applesoft BASIC, 302 286 280 octets

Cela sélectionne des points aléatoires à dessiner, ainsi il fonctionnera pour toujours et ne remplira jamais complètement le plan.

1HGR:POKE49234,0:DIMco(10):FORc=0TO10:READd:co(c)=d:NEXT:DATA1,2,3,5,6,1,2,3,5,6,0
2x=INT(RND(1)*280):y=INT(RND(1)*96):x1=x/280*3-2:y1=y/191*2-1:i=0:s=x1:t=y1
3s1=s*s-t*t+x1:t=2*s*t+y1:s=s1:i=i+1:IFs*s+t*t<4ANDi<20THENGOTO3
4c=co(i/2):IFc THENHCOLOR=c:HPLOTx,y:HPLOTx,191-y
5GOTO2

Il s'avère que Applesoft BASIC est pardonne vraiment le manque d'espace. Un seul espace est nécessaire dans tout le programme.

Sortie après 14 heures:

        sortie

GIF:

        gif

Avant de jouer au golf:

10 HGR : POKE 49234,0
20 DIM co(10) : FOR c = 0 TO 10 : READ d : co(c) = d : NEXT
30 DATA 1, 2, 3, 5, 6, 1, 2, 3, 5, 6, 0
100 x = INT(RND(1) * 280) : y = INT(RND(1) * 96)
110 x1 = x / 280 * 3 - 2 : y1 = y / 191 * 2 - 1
120 i = 0:s = x1:t = y1
130 s1 = s * s - t * t + x1
140 t = 2 * s * t + y1:s = s1: i = i + 1
150 IF s * s + t * t < 4 AND i < 20 THEN GOTO 130
160 c = co(i/2) : IF c THEN HCOLOR= c : HPLOT x,y : HPLOT x,191 - y
170 GOTO 100

Remarque: POKE 49234,0 (dans Applesoft BASIC) place la machine en mode graphique complet.

Une version optimisée pour les affichages N & B:

110 HGR:POKE 49234,0:HCOLOR=3
120 FOR x = 0 TO 279:FOR y = 0 TO 95
130 x1 = x / 280 * 3 - 2:y1 = y / 191 * 2 - 1
140 i = 0:s = x1:t = y1:c = 0
150 s1 = s * s - t * t + x1
160 t = 2 * s * t + y1:s = s1:c = 1 - c:i = i + 1
170 IF s * s + t * t < 4 AND i < 117 THEN GOTO 150
180 IF c = 0 THEN HPLOT x,y:HPLOT x,191 - y
190 NEXT:NEXT

Sortie après 12 heures:

        b & w

Une version qui fonctionnera sous GW-BASIC (DOS):

5 CLS
6 SCREEN 1
20 DIM co(10) : FOR c = 0 TO 10 : READ d : co(c) = d : NEXT
30 DATA 1, 2, 3, 5, 6, 1, 2, 3, 5, 6, 0
100 x = INT(RND(1) * 280) : y = INT(RND(1) * 96)
110 x1 = x / 280 * 3 - 2 : y1 = y / 191 * 2 - 1
120 i = 0 : s = x1 : t = y1
130 s1 = s * s - t * t + x1
140 t = 2 * s * t + y1 : s = s1 : i = i + 1
150 IF s * s + t * t < 4 AND i < 20 THEN GOTO 130
160 c = co(i/2) : PSET (x,y),C : PSET (x,191 - y),C
170 GOTO 100

Serait plus petit (et plus lent) si vous n'aviez pas tracé deux pixels à la fois mais choisi un pixel aléatoire sur tout l'écran.
Marc Jéronimus

1
@MarkJeronimus Il est déjà si lent que la version couleur n'est pas encore terminée, après avoir posté ceci il y a 5 jours. Je ne pense pas pouvoir me permettre de
MD XF

5

gnuplot 110 (105 sans nouvelles lignes)

Entrée obligatoire dans le gnuplot. Cela a été fait d'innombrables fois mais celui-ci est à partir de zéro (pas que c'est difficile). J'aime la façon dont le gnuplotgolf est intrinsèque à ses commandes :)

f(z,w,n)=abs(z)>2||!n?n:f(z*z+w,w,n-1)
se vi map
se si sq
se isos 256
sp [-2:2] [-2:2] f(0,x+y*{0,1},99) w pm

ungolfed:

f(z,w,n)=abs(z)>2||n==0?n:f(z*z+w,w,n-1)
set view map
set size square
set isosamples 256
splot [-2:2] [-2:2] f(0,x*{1,0}+y*{0,1},99) with pm3d

Cependant, je suis PROFONDÉMENT déçu de la saisie de nombres complexes. x*{1,0}+y*{0,1}doit être le plus triste moyen existant de construire un nombre complexe.

Oups, l'image: gnuplot mandelbrot

Augmentez la résolution des isosamples. Nous pourrions aussi dire unset ticset unset colorboxpour une image pure, mais je pense que cette version se qualifie très bien.


Je parie que ce sont des copies / pâtes du premier hit Google "gnuplot mandel". Pour commencer, *{1,0}c'est l'unité et c'est plutôt une façon de dire code-bowling *1, et peut probablement être abandonnée. (non testé)
Mark Jeronimus

1
Non ce n'est pas un copier-coller. C'est une formule très simple et il n'était même pas nécessaire de la rechercher. Cependant, j'ai trouvé les pages que vous obtenez avec cette recherche lorsque je cherchais un meilleur moyen d'initialiser des nombres complexes (leur implémentation est différente, bien, aussi différente qu'elle puisse l'être dans ce cas). Merci pour le conseil sur la vraie partie, ça marche. Fixation.
Orion

5

Matlab (89 bytes)

[X,Y]=ndgrid(-2:.01:2);C=X+i*Y;Z=C-C;K=Z;
for j=1:99,Z=Z.*Z+C;K=K+(abs(Z)<2);end,imagesc(K)

Sortie -

entrez la description de l'image ici

Ne satisfait pas à l'exigence voulant que les cellules internes soient noires ou blanches, mais cela peut être satisfait en (1) utilisant imshow(K)au lieu de imagesc(K)(nécessite 1 octet de moins mais nécessite la boîte à outils de traitement d'image) ou (2) en ajout colormap hot(nécessite 12 autres octets).

Version non-lisée -

Z = zeros(N);
K = Z;

[X,Y]=ndgrid(-2:.01:2);
C = X+1i*Y;

for j = 1:99
  Z = Z.*Z + C;
  K(K==0 & abs(Z) > 2) = j;
end

imagesc(K)

L'utilisation d'une bibliothèque est acceptable si elle est fournie par défaut dans Matlab et que tout utilisateur peut deviner qu'elle est utilisée à partir du code ou des messages d'erreur.
Mark Jeronimus

Nice, tu m'as battu. J'aime le C-Clieu de mon 0*e(401). De plus, vous n'utilisez pas N. Et nous pouvons être un peu plus courts en utilisant mon m+=abs(z)<2idée à la place de votre K(~K&abs(Z)>2)=j.
Aschepler

Les valeurs par défaut colormap jetet colormap hotsont toutes les deux incorrectes cependant - elles n’ont que 64 couleurs distinctes. colormap(hot(101))ne me semble pas distinctement visible. colormap([0,0,0;jet(100)])est peut-être acceptable mais douteux.
Aschepler

Ça marche? Sur Octave, K=K+abs(Z)<2signifie K=((K+abs(Z))<2). (Je me suis donc trompé sur l'estimation d'un octet à éliminer +=.)
Aschepler

2
L'ensemble Mandelbrot tourné à 90 degrés est toujours l'ensemble Mandelbrot.
Chris Taylor

4

JavaScript + HTML5 (356B)

(Remarque: les lignes se terminant par '//' sont ajoutées ici pour une meilleure lisibilité)

Version performante (375B):

<body onload='var
w,h=w=C.width=C.height=500,X=C.getContext("2d"),I=X.createImageData(w,h),D=I.data, //
y=0,f=255,T=setInterval(function(x,i,j,k,l,c,o){for(x=0;x<w;){                     //
for(i=x*4/w-2,j=y*4/h-2,k=l=0,c=f;--c&&k*k+l*l<4;)t=k*k-l*l+i,l=2*k*l+j,k=t
D[o=(y*w+x++)*4]=(c*=0xc0ffeeee)&f
D[++o]=c>>8&f
D[++o]=c>>16&f
D[++o]=f}X.putImageData(I,0,0)
++y-h||clearInterval(T)},0)'><canvas id=C>

Version lente (356B): supprimez la 'var' et les paramètres de la fonction interne pour que la portée globale soit utilisée.

Essayez-le: http://jsfiddle.net/neuroburn/Bc8Rh/

entrez la description de l'image ici


Pardonnez-moi si je ne comprends pas vos instructions pour faire la version courte.
Mark Jeronimus

Aucun problème. Supprimer var w,au début et changer function(x,i,j,k,l,c,o)en function().
euroburɳ

4

Javascript, 285B

Basé sur mon code et quelques améliorations sur le code de MT0 , j'ai maintenant 285B en couleurs:

document.body.appendChild(V=document.createElement('Canvas'));j=(D=(X=V.getContext('2d')).createImageData(Z=V.width=V.height=255,Z)).data;for(x=Z*Z;x--;){k=a=b=c=0;while(a*a+b*b<4&&Z>k++){c=a*a-b*b+4*(x%Z)/Z-3;b=2*a*b+4*x/(Z*Z)-2;a=c;}j[4*x]=99*k%256;j[4*x+3]=Z;}X.putImageData(D,0,0);

en action: http://jsfiddle.net/acLhe/7/

était: Coffeescript, 342B

document.body.appendChild V=document.createElement 'Canvas'
N=99
Z=V.width=V.height=400
P=[]
P.push "rgba(0,0,0,"+Math.random()*i/N+')' for i in [N..0]
X=V.getContext '2d'
for x in [0..Z]
 for y in [0..Z]
  k=a=b=0
  [a,b]=[a*a-b*b+4*x/Z-3,2*a*b+4*y/Z-2] while a*a+b*b<4 and N>k++
  X.fillStyle=P[k-1]
  X.fillRect x,y,1,1

Coffeescript est censé être lisible: - / le voir en action: http://jsfiddle.net/acLhe/6/

Mandelbrot Coffeescript


OP demande la couleur sauf si votre plate-forme ne prend pas en charge la couleur. Ça a l'air génial, et c'est un bon code concis. Bienvenue chez PPCG!
Jonathan Van Matre

Je pars de cette taille 285B et l’améliore davantage dans cette réponse
Kamil Kiełczewski

4

QBasic, QuickBasic, QB64 - 156 153

SCREEN 13
FOR J=0TO 191
B=J/48-2
FOR I=0TO 191
A=I/48-2
X=A
Y=B
C=0
DO
U=X*X
V=Y*Y
Y=2*X*Y+B
X=U-V+A
C=C+1
LOOP UNTIL C>247OR U+V>4
PSET(I,J),C
NEXT
NEXT

Palette DOS standard:

entrez la description de l'image ici


4

Tcl / Tk, 316

322 324 336 348 349 351 352 353 354 355

Maintenant, une version plus courte utilisant des triplets de couleurs de style abrégé #RGB de 3 lettres (au lieu de triplets de #RRGGBB), qui donne des couleurs différentes

Et un peu plus de golf.

rename set s
grid [canvas .c -w 640 -he 640]
.c cr i 320 320 -i [s p [image c photo -w 640 -h 640]]
time {incr x
s y 0
time {incr y
s a 0
s b 0
s n 0
while \$n<99 {s A [expr $a*$a-$b*$b+$x[s f *4/639.-2]]
if [s b [expr 2*$a*$b+$y$f]]*$b+[s a $A]*$a>4 break
incr n}
$p p [format #%03x [expr $n*41]] -t $x $y} 640} 640

fractale


Tcl / Tk, 325

331 333 345 357 358 360 361 362 364 365

Je pense que je gagnerais si le critère était la beauté!

rename set s
grid [canvas .c -w 640 -he 640]
.c cr i 320 320 -i [s p [image c photo -w 640 -h 640]]
time {incr x
s y 0
time {incr y
s a 0
s b 0
s n 0
while \$n<99 {s A [expr $a*$a-$b*$b+$x[s f *4/639.-2]]
if [s b [expr 2*$a*$b+$y$f]]*$b+[s a $A]*$a>4 break
incr n}
$p p [format #%06x [expr $n*16777215/99]] -t $x $y} 640} 640

Présentation:

fractale


1
Agréable. Vous pouvez réduire quelques caractères (jusqu'à 380, je pense) en ajoutant rename set sau sommet, puis remplacer tous les setpars
Rolazaro Azeveires

4

Excel VBA, 251 246 224 223 221 octets

5 octets sauvés grâce à ceilingcat 23 octets sauvés grâce à Taylor Scott

Sub m
D=99
For x=1To 4*D
For y=1To 4*D
p=0
q=0
For j=1To 98
c=2*p*q
p=p^2-q^2-2+(x-1)/D
q=c+2+(1-y)/D
If p^2+q^2>=4Then Exit For
Next
j=-j*(j<D)
Cells(y,x).Interior.Color=Rnd(-j)*1E6*j/D
Next y,x
Cells.RowHeight=48
End Sub

Sortie:

Sortie avec D = 99

J'ai créé une version qui le faisait il y a longtemps, mais qui comportait de nombreux extras, tels que permettre à l'utilisateur de choisir la couleur de base et les calculs faciles à suivre. Jouer au golf était un défi intéressant. La Colorméthode utilise 1E6comme moyen d’obtenir une large gamme de couleurs puisque les couleurs valides sont 0à 2^24. Le régler pour 10^6donner de belles zones de contraste

Explication / Mise en forme automatique:

Sub m()

    'D determines the number of pixels and is factored in a few times throughout
    D = 99
    For x = 1 To 4 * D
    For y = 1 To 4 * D
        'Test to see if it escapes
        'Use p for the real part and q for the imaginary
        p = 0
        q = 0
        For j = 1 To 98
            'This is a golfed down version of complex number math that started as separate generic functions for add, multiple, and modulus
            c = 2 * p * q
            p = p ^ 2 - q ^ 2 - 2 + (x - 1) / D
            q = c + 2 + (1 - y) / D
            If p ^ 2 + q ^ 2 >= 4 Then Exit For
        Next

        'Correct for no escape
        j = -j * (j < D)

        'Store the results
        'Rnd() with a negative input is deterministic
        'This is what gives us the distinct color bands
        Cells(y, x).Interior.Color = Rnd(-j) * 1000000# * j / D

    Next x, y

    'Resize for pixel art
    Cells.RowHeight = 48

End Sub

J'ai également joué avec D=999et j=1 to 998pour obtenir une image beaucoup plus grande et plus précise. Les résultats ne sont pas pertinents pour le défi car ils sont beaucoup trop volumineux mais ils sont bien.

D = 999


@ceilingcat Merci. C’était un report de mon original qui avait des fonctions spécialisées pour les mathématiques complexes.
Ingénieur Toast

Doit-il vraiment être> = 4 ou pouvez-vous vous en sortir avec> 4? En outre, peut remplacer j<99par j<D.
ceilingcat

@EngineerToast vous pouvez laisser tomber le ()du nom de sous, vous devez changer (j<99)pour (j<d)et vous pouvez, dans le but de faire des cellules carrées utilisent uniquement Cells.RowHeight=48à la place du Cells.RowHeight=9, Cells.ColumnWidth=1- cela ne fait déconner avec votre sortie plus difficile , mais a été accepté comme valable par la communauté -
Taylor Scott

1
@TaylorScott Je me souviens de l' RowHeightastuce du post de conseils VBA et je voulais l'intégrer après avoir obtenu toutes mes jolies images. C'était un bon chunk'o'bytes, merci.
Ingénieur Toast

Je crois que vous pouvez vous en tirer en supprimant un autre octet en échangeant 2^20avec1E6
Taylor Scott

3

Perl + GD, 264

$I=new GD::Image $s=499,$s;Z(0,0,0);Z(map rand 256,1..3)for
0..99;for$x(0..$s){for$y(0..$s){for($H=$K=$c=$t=0;$c++<99&&$H*$H+$K*$K<4;){sub
Z{$I->colorAllocate(@_)}($H,$K)=($H*$H-$K*$K+4*$x/$s-2,2*$H*$K+4*$y/$s-2)}use
GD;$I->setPixel($x,$y,$c<99&&$c)}}print $I->png

Fractale de Mandelbrot de Perl + GD

Golfé à partir de ce code


2
Nominé: le jeu de couleurs le plus moche.
Meawoppl

3

Flotteur, 620 pixels

Un langage que j’ai inventé lorsque j’ai été inspiré par mon propre défi, ainsi que par le langage ésotérique Piet.

entrez la description de l'image ici


2
Lien vers une langue et description du code? Ou en fait, quel est le code?
MD XF
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.