Her dilde Mandelbrot görüntüsü


91

Hep kullanılan Mandelbrot ben elime herhangi bir grafik uygulamasında Merhaba Dünya 'grafiksel' versiyonu olarak görüntü. Şimdi adamların sırası.

  • Dil grafik çıktı veya çizim çizelgesi yapabilmelidir (izin verilmeyen dosyaları kaydetmek)
  • Kare bir görüntü veya grafik oluşturun. Boyut en az 128 ve en fazla 640 arasında *
  • Fraktal koordinatlar yaklaşık -2-2i ila 2 + 2i arasındadır
  • Mandelbrot setinin dışındaki pikseller, büyüklük 2'yi geçmeden önceki yineleme sayısına göre renklendirilmelidir (* siyah beyaz hariç)
  • Her yineleme sayısı benzersiz bir renge * sahip olmalı ve komşu renkler tercihen gözle kolayca ayırt edilebilir olmalıdır
  • Diğer pikseller (muhtemelen Mandelbrot setinin içinde) siyah veya beyaz renkli olmalıdır
  • En az 99 yineleme
  • ASCII sanatına izin verilmiyor

* Platformla sınırlı olmadığı sürece, örneğin grafik hesap makinesi

İzin verildi:
İzin
İzin verilmeyen:
İzin verilmeyen
(küçültülmüş görüntüler)

Kazanma koşulları:

Her dilin en kısa sürümü (bayt cinsinden), bu yayında boyutuna göre sıralanacaktır.
Düğmeyle hiçbir cevap 'kabul edilmeyecek'.

Liderler Sıralaması:


8
“Kolayca gözle ayırt” objektif yapmak zordur. ... Ayrıca, ikisi arasındaki kişisel ilişkinizden ayrı olarak, Mandelbrot setinin Hello World ile hiçbir ilgisi yok, bu yüzden arama motorlarını kasıtlı olarak trolling etmediğiniz sürece başlıktan çıkarmamak en iyisidir.
Jonathan Van Matre

1
İlgili: ASCII Mandelbrot (orada yayınlanan cevapların bazıları ASCII olmasa da ve muhtemelen bu sorunun cevapları olarak daha uygun olabilir).
Peter Taylor

3
Mandelbrot’u “Merhaba Dünya” olarak yaptıklarını söyleyen birkaç insan gördüm. Bunu da 30 yıl gibi bir şey için yaptım. Mandelbrot mükemmel "Merhaba Dünya" dır, çünkü hem ekrana piksel erişiminiz olduğunu gösterir hem de yeni platformdaki hesaplama performansı için iyi bir his verir.
Roger Dahl,

6
Matematiksel ve estetik duyarlılıkların bir arada olmasını gerektiren bir soru sormak için harika bir fikir, ardından tüm tasarım kararlarını önceden empoze edin.
jwg

3
Herkes
beynini lanet

Yanıtlar:


94

Sharp EL-9300 Grafik Hesap Makinesi, 296 bayt

Bu benim ortaokul grafik hesap makinemdi , 20 yıl önce devam ediyordu ! O zamanlar bunun için bir mandelbrot jeneratör yazdığımı hatırlıyorum. Ve tabii ki, hala NV belleğinde oturuyor:

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

Oluşturması yaklaşık 90 dakika sürdü.

Bu tamamen ungolfed. Biraz yer kazanabileceğime eminim ama sadece bu tarihi merakı paylaşmak istedim!

Mevcut tek kontrol ifadesinin gotos olduğunu seviyorum .

İşte bir fotoğraf. Grafik çıktısını çıkarmak için başka yolum yok: görüntü tanımını buraya girin


1
Ben de, ama NV hafızam yıllarca rafa kaldırıldıktan sonra boşaldı.
Mark Jeronimus

2
zx²+zy²>4bu olamaz Abs(x)>2mı?
Mark Jeronimus

1
Belki de yeni bir pil almalısın ...
NothingsImpossible

25
İlginç. Demek bir süredir inek oldun .
devnull 09.03

4
Güzel "Ekran Görüntüsü"
meawoppl

83

Geçen gün buna rastladım. Bunun için kredi almam ama kahretsin, harika mı:

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)
                                       )   )

görüntü tanımını buraya girin http://preshing.com/20110926/high-resolution-mandelbrot-in-obfuscated-python/


12
İzin verilmeyen görünüyor: bölgeler kolayca ayırt edilemiyor, hatta hiç.
primo

5
Ayrıca, bu bir dosyaya yazar.
Yalan Ryan

40
izin verilmeyen ya da değil, bu oldukça harika: D
Navin

18
@DigitalTrauma, heck, en güzel giriş için +1!
Brian S

19
Bu bir uğur olarak sayılıyor mu? ;-)
Blazemonger

47

LaTeX, 673 bayt

\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

Sonuç 129x129 (129 × 129)

PDF görüntüsü 1bp × 1bp boyutunda renkli kare birimlerden oluşur.

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

x86 DOS Meclisi, 208 177 173 bayt

HEX'te elle yarattığım tam ikili:

DBE3BE00A0B81300CD1056BA640007BF87F9FDBDC7008BCDE81A008AC3AA4979F7B9C70083EF784D79EE33C0CD16B80300CD10CD208BC12BC289441CDF441CDF06A701DEF9D95C088BC52BC289441CDF441CDF06A701DEF9D95C0CD9EED914D95404D95410D95C14B301D904D84C04DE0EA901D8440CD95404D94410D86414D84408D914D80CD95C10D84C04D95414D84410DF06AB01DED99BDFE09B9E7207433ADA72C632DBC3320002000400

Örnek resim:

Mandlebrot ekran kırpılmış siyah ile vurdu

Okunabilir ASM'deki kaynak tam olarak oldukça uzundur (Bu emici nasıl kodladığımı bulmak için kullandım):

.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

Bu, TASM ile derlemek için tasarlanmıştır, MCGA'da çalışır ve programı sonlandırmadan önce bir tuşa basılmasını bekler. Renkler yalnızca varsayılan MCGA paletidir.

EDIT: Optimize edilmiş, şimdi geri çizer (yine de aynı resim) ve 31 bayt kurtardı!

2 EDIT: OP'yi belirlemek için, ikiliyi elle yeniden yarattım. Bunu yaparak, 4 bayt daha tıraş ettim. Sürecin her adımını belgeledim, çalışmamın tamamını gösteren, gerçekten isterlerse herkesin takip edebilmesi için izleyebildiğim (uyarı, sıkıcı ve çok uzun): http://lightning.memso.com/media/perm/ mandelbrot2.txt

Dosyadaki tüm ; Final: ...girişleri bulmak ve onları bir .com dosyasına onaltılık ikili olarak bırakmak için EditPadPro'da bir çift regex kullandım . Sonuçta ortaya çıkan ikili bu yazının tepesinde gördüğünüz şeydir.


1
Makine kodu sayılmaz. Bu sayılırsa, bayt kodu veya makine kodu üreten herhangi bir dil daha kısa olmalıdır. Her şeyi 1 karakterlik uzun isimlerle değiştirdikten sonra 820'yi sayıyorum.
Mark Jeronimus

3
Sizin için kolaylaştırırsa, her şeyi ikili olarak kodlayabilirim, ancak otomatik yapı, makro vb. Kullanmaktan kaçınmak için yüksek seviyeli bir dil kullanan herkese sormak gibi olur. makrolar. Tam bir JavaScript, Perl, vb. Çalıştırmak için ortaya çıkan ikili dosya kütüphanesinin ikili kodunu içerir. ASM ile son hex değeri her şeydir, kütüphaneler, ALL CODE dahil.
Mark Ormston

5
Hayır. Gerçekten gerekliyse ASM'yi ikiliye dönüştürebilirim. Benim montajcı yardımcı olduğu aynı 177 bayt ile çıkacaktır. Sonuçta ortaya çıkan kod, bir ikili editöre sahip olan herkes tarafından 177 byte'lık yeni bir dosyaya yapıştırılabilir ve beklendiği gibi çalışacaktır. Görünüşe göre SO ASM gönderimlerine ayrılmıştır, bu yüzden sayılmadığını
Mark Ormston

6
Tamam, geçerli bir giriş olduğunu kanıtlamak için, bu süreyi ikiliye çevirmek için harcadım. Buna göre cevabımı güncelledim.
Mark Ormston

7
Mesele şu ki, montajlı bir derleyici yok. Sadece makroları kullanıyorsun. Bunun sayılmadığını söylemek #define, C'de önceden tanımlanmış herhangi bir ifadeyi kullanamayacağınızı söylemek gibi bir şeydir. Bunların hepsini el ile değiştirmek zaman alır.
Mark Ormston

28

Java, 505 405 324 bayt

Sadece standart bir hesaplama, golfitude ile ekstra golfitude ile şimdi.

görüntü tanımını buraya girin

golfed:

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();}}

Satır sonları ile:

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);- ağırlıklı olarak kullanılan temaya bağlı, ama kabul edeceğim.
Mark Jeronimus

İçe aktarma işlemlerini Java'da bırakabilirsiniz, çünkü yine de otomatik olarak oluşturulurlar.
Mark Jeronimus

Ayrıca eğer doublefloat
denerseniz

JFrame=> Frame2 karakter tıraş olur. Yine de pencereyi kapatamıyorsun. ;)
EthanB

2
Sınıfınızın herkese açık olması gerekmez. Ayrıca, finaldeğiştiriciden kurtulmak için Java 8 kullanın . Tam bir başvuru yapabilmek için ithalatı ihmal etmemelisiniz.
Victor Stafusa,

21

Javascript (ECMAScript 6) - 315 308 Karakterler

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)

Varsayılan çıkış

(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)

  • nResmin boyutunu (ve yineleme sayısını) değiştirmek için değiştirin .
  • Geçirilen değerleri değiştirme f(87);f(0);f(0);RGB renk değerlerini değiştirmek için (sonuna yakın) çağrılar. ( f(8);f(8);f(8);gri tonlamalıdır.)

İle f(8);f(23);f(87);:

görüntü tanımını buraya girin

(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
Güzel. d=documentSeni birkez daha kurtarırdım. (Ayrıca, tuvali oluşturmak için bir neden var mı? Codegolf belirli bir HTML seviyesini kabul ediyor mu?)
Matthew Wilcoxson 10:14

1
document.createElement`canvas` 2 bayt yazıp kaydedebilirsiniz. İle aynı getContext`2d` .
Ismael Miguel,

Bir HTML Tuvali olduğunu farz etmedim, çünkü bu saf bir JavaScript çözümü.
MT0


19

J, 73 bayt

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

mandelbrot seti

Düzenleyen , bazıları açıklayan:

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 ama bu kodun nasıl çalıştığını biraz açıklamanız mümkün mü? Özellikle (kodun neresinde) renkleri seçtiğini bilmek istiyorum.
plannapus

1
@ MarkJeronimus, 70 yapabilirim ama açıklık için bazı şeyler sakladım. Böylece, sayırken LF'yi görmezden gelme özgürlüğünü kullandım.
Eelvex

@plannapus, tamam, bazı yorumlar ekledi. Renk toplama, (0,?$~99 3)her seviye için bir tane olmak üzere 100 rgb üçüz üretecek şekilde yapılır . Rastgele olduğu için 100'den az üçlü elde edersiniz, böylece bazı seviyeler daha yumuşak bir geçişe sahip olur (ama yine de farklı renkler vardır).
Eelvex

17

Mathematica, 214 191 215 19 30

10.0 sürümünden beri yerleşik bir sürüm vardır: (19 bayt)

MandelbrotSetPlot[]

mandelbrot


Koordinat aralığı gereksinimlerine uymak için, 11 ek bayt gereklidir. (30 bayt)

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

m2


Elle haddelenmiş bir kasa:

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,#]]&)]

yeşil


{b, -2, 2, .01}, {a, -2, 2, .01}daha kısa ve kurallara daha yakın
Mark Jeronimus

@ MarkJeronimus Teşekkürler. Yinelenen resim için önerilen aralığı kullandım.
DavidC

Neredeyse doğru yaptın, sonra içini siyah olmayan yaptın. GIF'deki son kare siyah iç kısım ve izin verilen bir cevaptır. EDIT: ve 195 bayt sayıyorum.
Mark Jeronimus

Siyah olma noktasını özledim. Sayım arttı, çünkü bazı tek karakterler SE'de kes ve yapıştırda iki karakter oldu.
DavidC

Yerleşik çözümünüz çok gevşek bir yorum kullanıyor The fractal coordinates range from approximately -2-2i to 2+2i.
Jonathan Frech

16

Pylab + Numpy ile Python, 151 bayt

DQ'lu olmayan bir Python girişi görmeye dayanamadım, ama sanırım bu konuda kendimi aştım ve 153 karaktere düşürdüm!

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))

Ayrıca, özellikle, sondan ikinci satıra 4 ayrı çalışma zamanı uyarısı, yeni bir kişisel rekor!

görüntü tanımını buraya girin


Ben hiçbir boşluk arasında gereklidir 152'ye saymak importve *ve tanımlama değil fben mümkündür şey, yanlış anladın sürece, kısa olmalıdır hiç. Ayrıca, 0 yineleme ve 1 yineleme ayırt edilecek şekilde de değiştirmelisiniz (şu anda ikisi de gridir).
primo

Tuhaf. WC, içermekte midir? Sabit ve biraz daha küçük. Bir dakika.
meawoppl

Wc ile 151 elde ediyorum. İlk golf, bu yüzden nasıl skor emin değil.
meawoppl

Newline'ı takip etmeden 150'yi sayıyorum. Bazı tercümanlar / derleyiciler talep eder, ancak python tercümanı olmadan da iyidir. Emin değilim wc, ama belki deneyin stat -c %s. Siyah üst ve alt sınırlar resmin bir parçası mı?
primo

1
from numpy import*Yerine import numpy as nve mgridyerine kullanarak 1 karakter kaydedebilirsiniz n.mgrid.
nyuszika7h

15

C + Allegro 4.2.2 - 248 bayt

#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()

Çıktı:

MSet 1


Bunun Allegro 4 (Allegro 5'ten oldukça farklı) olduğunu söylemelisiniz. Bu tam olarak hangi versiyon?
Victor Stafusa,

246 veya 249 ya kadar uzun
Mark Jeronimus

@Victor Allegro 4.2.2.
Oberon

1
@ MarkJeronimus ... allegro.h>ve arasında yeni bir satır olması gerekmiyor x=-1, ...mu? Sanırım Notepad ++ bunu \r\n= olarak sayar 0D 0A.
Oberon

1
Bence 0.01yazılabilir .01.
Yytsi,

14

Windows PowerShell (v4), 299 bayt

Mandelbrot fraktal resmi

# 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()

Talimatlar

  • Normal bir PowerShell konsolu çalıştırın (İMKB çalışmayabilir)
  • Kodu kopyala / yapıştır, Enter tuşuna basın
  • Bekle - çalışması bir dakika veya daha uzun sürüyor
  • Çıkmanın tek yolu konsolu kapatmak.

Yorum Yap

  • Setin içindeki renklerle devam eden küçük bir kural testi var; Kurallar "diğer piksellerin (muhtemelen Mandelbrot setinin içinde) siyah veya beyaz renkli olması gerekir" diyor ; Kod pikselleri tamamen siyah RGB (0,0,0) olarak renklendiriyor ... sadece şeffaf bir siyah RGBA (0,0,0,0) oluyor. Öyleyse, şu anki Windows temasının biçim arka plan rengi, bu durumda biraz beyaz olmayan bir RGB (240,240,240).

Şimdi sahip olduğunuz görüntü yerine onu "mandelbrot seti" yapmak için değiştirirdim lt2, lt4setin birçok noktası renk bantları tarafından yutulur.
Mark Jeronimus

Görünüşe göre Büyüklük a*a+b*bdeğildirsqrt(a*a+b*b)
Mark Jeronimus 30:15

Bunu daha önce test ettiğimi düşünmüştüm, ama “soldaki yatay çizgi nereye gitti?” Sorusuna bir cevap aramaya başladım ve bir süre sonra tam olarak söylediğiniz yerde buldum -lt4. Hangisi iyi - teşekkürler. Cevabımı düzeltilmiş kod ve resim ile güncelledim. (Bir şeyi kaçırdığımdan beri ne yaptığını anladığımı tekrar düşünmek zorunda kalacağım).
MozaiklerHeckler

14

Python + PIL , 166 bayt

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()

Çıktı (varsayılan * .bmp görüntüleyicide açılacaktır):


1
Döngüden kurtulursanız 3 tıraş olabilirsiniz y. r=range(d*d), kullanın x/dve x%dx ve y için.
Geobits

@Geobits fikri aslında 10 kurtardı, teşekkürler!
primo

1
Karmaşık türler şu şekilde başlatılabilir: c = 1 + 2j, ki bu size birkaç karakter kazandıracak: z = o = x / 9e4-2 + (x% d / 150.-2) * 1j; c = 99
meawoppl

@meawoppl başka bir 7: D
primo

Teknik olarak izin verilmeyen: Bu Python'un kendisinin grafiksel bir çıkış özelliği değildir (ve Image.show()geçici bir dosyayı dolaylı olarak kaydeder).
nneonneo

12

BBC Basic (228 bayt)

Peki golf kodunda hiç kimsenin duymadığı diller? Büyük olasılıkla optimize edilmiş olabilir, ama ben tam olarak nerede değilim - iyileştirmeler mümkün. Tabanlı http://rosettacode.org/wiki/Mandelbrot_set#BBC_BASIC ama mümkün olduğunca çok golf kod çalıştı.

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

Oluşturulan Mandelbrot seti

Resmin >üzerindeki simge istemidir ve programı çalıştırdıktan sonra otomatik olarak oluşturulur.


İki kez çizmenize gerek yok, sadece daha verimsiz bir sürümle devam edin. Desteklemiyor NEXT Y,Xmu?
Mark Jeronimus

10

APL, 194 karakter / bayt *

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')

Bu Dyalog APL için ⎕IO ⎕ML←1 3

Boşlukların çoğu, bir pencerede bir bitmap göstermek için API çağrıları tarafından alınır (satır 2, 3, 4)
Bunu yapmak için bir kısayol olsaydı, kod 60 karaktere (satır 1) indirilirdi.

PLZ YARDIM BULUNAN KISA KTHX

Ungolfed versiyonu (sadece satır 1)

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    

Ekran görüntüsü:

(Freeware sürümü Şarap altında OS X'de çalışır. Evet, ben böyle ucuzum.)

ekran görüntüsü

*: Dyalog, APL sembollerinin üst 128 byte değerine eşlendiği kendi tek bayt karakter setine sahiptir, böylece kodun tamamı 194 baytta saklanabilir. Bu dipnottaki her açıklama muhtemelen doğrudur. Sakin ol ve golf oynamaya devam et.


10

Mathematica 10.0, 19 karakter

MandelbrotSetPlot[]

MandelbrotSetPlot Mathematica 10.0'daki yeni bir işlevdir.

görüntü tanımını buraya girin


Ne kadar kolay, bu yerleşik işlev sadece tüm gereksinimlerimi karşılar (13 karakterle ayarlanabilen konum hariç). Bunun dışında standart bir kaçamak var.
Mark Jeronimus

19
Code golf genellikle tek karakterli simgeleri olan uzman diller veya yerleşik çok sayıda özel işlevi olan Mathematica gibi sistemler tarafından kazanılır. Bunları kullanmak hile yapmak değildir, tek karakterli komutları kullanmaktan daha fazlası APL'de olacaktır.
Michael Stern,

9

R, 199 211 karakter

199 karakterden oluşan eski çözüm:

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)

Girintili:

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)

görüntü tanımını buraya girin

Düzenleme: Setin içini ve ilk katmanın dışını farklı şekilde renklendiren 211 karakterde çözüm:

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)

Girintili:

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)

görüntü tanımını buraya girin


Teknik olarak dışarıdan siyah çıkmaz. Bunu özledin mi yoksa uygulaması zor mu?
Mark Jeronimus

@MarkJeronimus ikisi de aslında :) Bunun nasıl yapıldığına bir göz atmaya çalışacağım ama% 100 emin değilim ki bunu temiz bir şekilde yapabileceğime inanıyorum.
plannapus

@ MarkJeronimus Tamamlandı!
plannapus

5
İğrenç renkler bölümünde ikinci sırada.
meawoppl

1
@meawoppl blame rainbow():)
plannapus

9

Java - İşleme (271 bayt)

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();}

Expanded:

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, bunu yapmak istedim. +1 .
SIGSTACKFAULT 28:17

8

TI-80 BASIC, 125 106 bayt

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

Dijital Travma'nın cevabına dayanarak. görüntü tanımını buraya girin


6

GLSL - 225 bayt:

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);}

Koddaki değişkenleri tanımlama (242 bayt):

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);}

ShaderToy'da görün

Mandelbrot Golf

Bu, uygun bir palet dokusunun olarak yüklenmesini gerektirir iChannel0. (Buradaki renklendirme, ShaderToy'daki "rasgele piksel" dokusundandır).


Değişken bildirimler, koddan otomatik olarak oluşturulamadıkça sayılmalıdır. (yalnızca dış ayar olarak kullanılabilirse, renk şeması iyi durumdadır)
Mark Jeronimus

@ MarkJeronimus: ShaderToy ortamı için bu değişkenler sabittir. Aksi halde, standart gölgelendiriciler için daha kısa değişken isimleri seçerdim.
nneonneo

Bu hepsinden hızlı mı?
Demi

6

Oktav ( 212 136 bayt)

(Şimdi @ChrisTaylor nedeniyle bazı fikirler dahil.)

[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])

Boşluk ile:

[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])

Çıktı:

Mandelbrot adım adım abs (z)> 2

Matlab'a dönüştürmek için " m+=abs(z)<2" ile " m=m+(abs(z)<2)" arasında değiştirin. [+3 bayt]

En boy oranını 1: 1 yapmak için, " ;axis image" işaretini ekleyin . [+11 bayt]

İlk cevabım (212 bayt):

[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])

Süreksiz bir renk haritası elde etmenin muhtemelen daha kısa bir yolu var ....
aschepler

Evet, şimdi çok daha iyi.
aschepler

+1 güzel ve özlü bir çözüm. Ancak en boy oranınız 1: 1 değil (bkz. Kural n ° 2: çıktı kare olmalıdır).
plannapus

En boy oranının düzeltilmesi 11 bayt daha alır: " ;axis image" ekleyiniz . Bu hak kazanmak için gerekli mi?
aschepler

Ben sadece benim nitpicking oldu sanırım :), OP bir şey söylemediğinden beri onunla bir sorun gibi görünmüyor.
plannapus

6

Applesoft BASIC, 302 286 280 bayt

Bu, rastgele noktaları çizmek için seçer, böylece sonsuza dek sürecek ve asla tam düzlemi dolduramayacaktır.

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

Applesoft'un ortaya çıktığı BASIC, boşluk eksikliği konusunda gerçekten çok bağışlayıcı. Tüm programda sadece bir boşluk gereklidir.

14 saat sonra çıkış:

        çıktı

GIF:

        gif

Golfe başlamadan önce:

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

Not: POKE 49234,0(Applesoft BASIC'te), makineyi tam grafik moduna geçirir.

B&W görüntüler için optimize edilmiş bir sürüm:

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

12 saat sonra çıkış:

        B & W

GW-BASIC'de (DOS) çalışacak bir sürüm:

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

Aynı anda iki piksel çizmediyseniz ancak tüm ekranda rastgele bir piksel seçtiyseniz, daha küçük (ve daha yavaş) olur.
Mark Jeronimus

1
@MarkJeronimus Bu 5 gün önce yayınlandıktan sonra renkli sürümün henüz bitmediği için çok yavaş. Daha yavaş olmasını sağlayabileceğimi sanmıyorum: P
MD XF

5

gnuplot 110 (yeni satırlar olmadan 105)

Zorunlu gnuplot girişi. Sayısız kere yapıldı ama bu sıfırdan (zor değil). Nasıl gnuplotkomutlarını özsel olarak golf oynamayı severim :)

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

Ancak, ben karmaşık sayıları girişinde DEEPLY hayal kırıklığına uğradım. x*{1,0}+y*{0,1}karmaşık bir sayı oluşturmanın en üzücü yolu olmalı.

Hata! Görüntü: gnuplot mandelbrot

Daha iyi çözünürlük için örnekleri daha yüksek ayarlayın. Söyleyebiliyoruz unset ticsve unset colorboxsaf bir görüntü için de söyleyebiliriz , ama bence bu sürüm gayet iyi.


Bahse girerim ilk google hit "gnuplot mandel" den kopya / makarna. Yeni başlayanlar için, *{1,0}birlik ve daha çok şey demenin bir bowling yolu *1gibi olması muhtemeldir ve muhtemelen bırakılabilir. (denenmemiş)
Mark JERONIMUS

1
Hayır, kopyala yapıştır değil. Çok yalındır bir formül ve onu aramaya bile gerek yoktu. Ancak, karmaşık sayıları başlatmak için daha iyi bir yol ararken, bu arama ile elde ettiğiniz sayfaları buldum (uygulamaları bu durumda olabileceği kadar farklıdır). Gerçek kısmıyla ilgili ipucu için teşekkürler, işe yarıyor. Tamir ediyorum.
orion

5

Matlab (89 bayt)

[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)

Çıktı -

görüntü tanımını buraya girin

İç hücrelerin siyah veya beyaz olması gerekliliğini karşılamıyor, ancak imshow(K)bunun yerine imagesc(K)(1 daha az byte gerektirir, ancak görüntü işleme araç kutusuna ihtiyaç duyuyor) veya (2) ekleme colormap hot(12 tane daha gerekiyor.) bayt).

Ungolfed versiyonu -

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)

Bir kitaplığın kullanılması, varsayılan olarak Matlab'da paketlenmişse iyidir ve herhangi bir kullanıcı koddan veya hata iletilerinden kullanıldığını tahmin edebilir.
Mark Jeronimus

Güzel, beni yendin. Sevdiğim C-CSesimin yerine 0*e(401). Ayrıca kullanmıyorsun N. Ve m+=abs(z)<2senin yerine fikrimi kullanarak biraz daha kısaltabiliriz K(~K&abs(Z)>2)=j.
aschepler

Varsayılan colormap jetve colormap hother ikisi de yanlış olsa da - yalnızca 64 ayrı rengi var. colormap(hot(101))görsel olarak ayırt edilebilir görünmüyor bana. colormap([0,0,0;jet(100)])belki kabul edilebilir ama iffy.
aschepler

İşe yarıyor mu? Octave'de K=K+abs(Z)<2demek oluyor ki K=((K+abs(Z))<2). (Öyleyse, elimine edilecek bir bayt tahminde yanılmışım +=.)
aschepler,

2
90 derece döndürülen Mandelbrot seti, hala Mandelbrot takımıdır.
Chris Taylor

4

JavaScript + HTML5 (356B)

(Not: '//' ile biten satırlar biraz okunabilirlik için buraya eklenir)

Performans versiyonu (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>

Yavaş versiyon (356B): iç kapsamdaki 'var' ve parametreleri kaldırın, böylece global kapsam kullanılır.

Deneyin: http://jsfiddle.net/neuroburn/Bc8Rh/

görüntü tanımını buraya girin


Kısa versiyonunu yapma hakkındaki talimatlarını anlamıyorsam beni affet.
Mark Jeronimus

Sorun değil. Kaldır var w,başında ve değiştirmek function(x,i,j,k,l,c,o)için function().
Euroburɳ

4

Javascript, 285B

Kodumu ve MT0 kodundaki bazı gelişmeleri temel alarak bunu 285B'ye düşürdüm:

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);

eylem: http://jsfiddle.net/acLhe/7/

öyleydi: 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

Kahvenin okunabilir olması gerekiyordu: - / eylemde görmek: http://jsfiddle.net/acLhe/6/

Mandelbrot Kahveler


Platformunuz rengi desteklemediği sürece OP renk ister. Harika görünüyor olsa da, güzel ve özlü kod. PPCG'ye Hoşgeldiniz!
Jonathan Van Matre

Bu boyut 285B başlayıp bu daha da geliştirmek cevap
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

Standart DOS paleti:

görüntü tanımını buraya girin


4

Tcl / Tk, 316

322 324 336 348 349 351 352 353 354 355

Şimdi 3 harfli #RGB kullanarak daha kısa bir sürüm, farklı renklerle sonuçlanan stil renk üçlelerini (#RRGGBB üçüzlerini yerine) kısaltır.

Ve biraz daha 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

fraktal


Tcl / Tk, 325

331 333 345 357 358 360 361 362 364 365

Sanırım kriter, güzellik olsa kazanacağım!

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

Sunum:

fraktal


1
Güzel. Sen ekleyerek (380, sanırım aşağı) birkaç karakter azaltabilir rename set süstünde ve sonra tüm değiştirilmesi setbiriminin bys
Rolazaro Azeveires

4

Excel VBA, 251 246 224 223 221 bayt

Ceilingcat sayesinde 5 byte kurtarıldı Taylor Scott ile 23 byte kurtarıldı

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

Çıktı:

D = 99 ile çıkış

Bunu uzun zaman önce yapan bir sürüm yaptım ancak kullanıcının temel rengi ve izlemesi kolay matematiği seçmesine izin vermek gibi birçok ekstra vardı. Aşağıya doğru golf oynamak ilginç bir zorluktu. ColorYöntem kullanan 1E6geçerli renkler olduğundan renklerde geniş bir yelpazede almak için bir araç olarak 0için 2^24. Bunu ayarlamak için 10^6güzel bir kontrast alanları verdi.

Açıklama / Otomatik Biçimlendirme:

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

Ayrıca etrafında oynanan D=999ve j=1 to 998çok daha büyük ve daha hassas görüntü elde etmek. Onlar yol çok büyük olduğunu ancak, çünkü sonuçları meydan alakası olmayan vardır düzgün.

D = 999


@ceilingcat Teşekkürler. Bu, orjinalimin karmaşık sayıdaki matematik için özel fonksiyonları olan bir aktarımıydı.
Mühendis Tost

Gerçekten> 4 olması gerekiyor mu, yoksa> 4 ile kaçabilir misin? Ayrıca, yerine j<99ile j<D.
ceilingcat

Eğer bırakın @EngineerToast ()alt adından, değiştirmek gerekir (j<99)için (j<d)kare hücreleri sadece kullanmak yapma amacıyla, olabildiğince ve Cells.RowHeight=48yerine Cells.RowHeight=9, Cells.ColumnWidth=1- bu çıkışı ile etrafında daha zor karıştırmasını hale gelmez ama geçerli kabul edilmiştir topluluk tarafından -
Taylor Scott

1
@TaylorScott RowHeightVBA ipuçlarının gönderdiği numarayı hatırlıyorum ve tüm güzel resimlerimi aldıktan sonra onu entegre etmek istemiştim. Bu, baytların hoş bir parçasıydı, teşekkürler.
Mühendis Tost

Sana değiştirerek başka byte çıkarmadan paçayı inanıyoruz 2^20ile1E6
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

Perl + GD'den Mandelbrot fraktal

Bu koddan golf oynadım


2
Aday Gösterildi: En çirkin renk şeması.
meawoppl

3

Kayan, 620 piksel

Kendi zorluğumdan ve ezoterik Piet Piet'den ilham aldığımda oluşturduğum bir dil.

görüntü tanımını buraya girin


2
Bir dilin bağlantısı ve kodun açıklaması? Ya da aslında, kod nedir?
MD XF
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.