모든 언어의 만델 브로트 이미지


91

필자는 항상 손에 넣은 모든 그래픽 응용 프로그램에서 Mandelbrot 이미지를 Hello World의 '그래픽'버전으로 사용했습니다. 이제 네 차례 야

  • 언어는 그래픽 출력 또는 차트를 작성할 수 있어야합니다 (파일 저장이 허용되지 않음)
  • 정사각형 이미지 또는 그래프를 렌더링합니다. 최소 128 및 최대 640 크기 *
  • 프랙탈 좌표는 대략 -2-2i에서 2 + 2i까지입니다.
  • 만델 브로트 세트 외부의 픽셀은 크기가 2를 초과하기 전에 반복 횟수에 따라 색상이 지정되어야합니다 (흑백 제외).
  • 각 반복 횟수는 고유 한 색상 *을 가져야하며 주변 색상은 눈으로 쉽게 식별 할 수 있어야합니다.
  • 다른 픽셀 (아마도 Mandelbrot 세트 내부)은 검은 색 또는 흰색으로 표시되어야합니다.
  • 99 회 이상 반복
  • ASCII 아트는 허용되지 않습니다

* 플랫폼에 의해 제한되지 않는 경우 ( 예 : 그래픽 계산기)

허용됨 :
허용됨
허용되지 않음 :
허용되지 않음
(축소 된 이미지)

우승 조건 :

각 언어에 대한 가장 짧은 버전 (바이트 단위)은이 게시물에서 크기 순으로 언급됩니다.
버튼으로 '응답'되지 않습니다.

리더 보드 :


8
"눈으로 쉽게 구별됩니다"는 객관적으로 만들기가 어렵습니다. ... 또한 Mandelbrot 세트는 개인과의 관계를 제외하고 Hello World와 관련이 없으므로 검색 엔진을 의도적으로 조율하지 않는 한 제목에서 생략하는 것이 가장 좋습니다.
Jonathan Van Matre

1
관련 : ASCII 만델 브로트를 (몇 가지 답변이 ASCII하지 않으며 아마도이 질문에 좋은 답변으로 적합 할 수 게시 있지만).
피터 테일러

3
나는 사람들이 Mandelbrot를 "Hello World"로 표현한다고 언급 한 몇몇 사람들을 보았다. 저도 30 년 동안 그렇게했습니다. Mandelbrot는 완벽한 "Hello World"입니다. 디스플레이에 픽셀로 액세스 할 수 있고 새로운 플랫폼에서 컴퓨팅 바운드 성능에 대한 좋은 느낌을주기 때문입니다.
Roger Dahl

6
수학적 및 미적 감성의 조합이 필요한 질문을하고 모든 설계 결정을 미리 적용하는 것이 좋습니다.
jwg

3
누구나 brainfuck WINS에서 하나를 만들 수 있다고 말하고 싶습니다. : D
MadTux

답변:


94

Sharp EL-9300 그래픽 계산기, 296 바이트

이것은 20 년 전의 중고등 학교 그래프 계산기였습니다 ! 나는 그때까지 그것을 위해 만델 브로트 생성기를 쓰는 것을 기억합니다. 그리고 여전히 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

렌더링하는 데 약 90 분이 걸렸습니다.

이것은 완전히 ungolfed입니다. 나는 약간의 공간을 절약 할 수 있다고 확신하지만, 나는 단지이 역사적인 호기심을 공유하고 싶었습니다!

사용 가능한 유일한 제어문은 gotos입니다.

사진이 있습니다. 그래픽 출력을 얻을 수있는 다른 방법이 없습니다. 여기에 이미지 설명을 입력하십시오


1
나도 그래도 몇 년의 저장 시간 후에 내 NV 메모리가 비었습니다.
Mark Jeronimus

2
zx²+zy²>4그럴 수 없었 Abs(x)>2습니까?
Mark Jeronimus

1
아마도 당신은 새로운 배터리를 받아야합니다 ...
NothingsImossible

25
흥미 롭군 그래서 당신은 꽤 오랫동안 대단 했습니다.
devnull

4
멋진 "스크린 샷"
meawoppl

83

나는 다른 날에 이것을 만났다. 나는 그것을 인정하지 않지만 젠장, 훌륭합니다.

파이썬 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)
                                       )   )

여기에 이미지 설명을 입력하십시오 http://preshing.com/20110926/high-resolution-mandelbrot-in-obfuscated-python/


12
허용되지 않는 것 같습니다 : 영역을 쉽게 구분할 수 없거나 전혀 구분할 수 없습니다.
primo

5
또한 파일에 씁니다.
Lie Ryan

40
허용 여부,이 꽤 굉장합니다 : D
나빈

18
@DigitalTrauma, 도대체, 가장 아름다운 입력을 위해 +1!
Brian S

19
이것은 퀴니로 간주됩니까? ;-)
Blazemonger 2016 년

47

LaTeX, 673 바이트

\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

결과 129x129 (129 × 129)

PDF 이미지는 크기가 1bp × 1bp 인 컬러 사각형 단위로 구성됩니다.

언 골프

% 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

86 DOS 조립, 208 177 173 바이트

내가 직접 만든 HEX의 전체 바이너리는 다음과 같습니다.

DBE3BE00A0B81300CD1056BA640007BF87F9FDBDC7008BCDE81A008AC3AA4979F7B9C70083EF784D79EE33C0CD16B80300CD10CD208BC12BC289441CDF441CDF06A701DEF9D95C088BC52BC289441CDF441CDF06A701DEF9D95C0CD9EED914D95404D95410D95C14B301D904D84C04DE0EA901D8440CD95404D94410D86414D84408D914D80CD95C10D84C04D95414D84410DF06AB01DED99BDFE09B9E7207433ADA72C632DBC3320002000400

샘플 이미지는 다음과 같습니다.

검은 자른 맨들 브로트 스크린 샷

읽을 수있는 ASM의 전체 소스는 상당히 길다 (이 코드를 어떻게 코딩했는지 알아 내기 위해 이것을 사용했다).

.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

이것은 TASM으로 컴파일하고 MCGA에서 실행하며 프로그램을 끝내기 전에 키 누름을 기다립니다. 색상은 기본 MCGA 팔레트입니다.

편집 : 최적화하여 이제 뒤로 (같은 이미지이지만) 그리고 31 바이트를 절약했습니다!

편집 2 : OP를 확보하기 위해 바이너리를 손으로 다시 만들었습니다. 그렇게함으로써 나는 또 다른 4 바이트를 깎았 다. 나는 프로세스의 모든 단계를 문서화하여 모든 작업을 보여주었습니다. 그래서 누군가가 정말로 원한다면 따라갈 수 있습니다 (경고, 지루하고 길다) : http://lightning.memso.com/media/perm/ mandelbrot2.txt

EditPadPro에서 두 정규식을 사용 ; Final: ...하여 파일의 모든 항목 을 찾아 16 진 이진으로 .com 파일에 덤프했습니다. 결과 바이너리는이 게시물의 맨 위에 표시됩니다.


1
기계 코드는 계산되지 않습니다. 그것이 중요하다면, 바이트 코드 또는 기계 코드를 생성하는 언어는 더 짧아야합니다. 모든 것을 1 자로 된 긴 이름으로 바꾼 후 820을 셉니다.
Mark Jeronimus

3
나는 당신을 위해 더 쉽게 만들면 전체를 바이너리로 직접 코딩 할 수 있지만, 자동 구조, 매크로 등을 사용하지 않도록 고급 언어를 사용하는 사람에게 묻는 것과 같을 것입니다. 매크로. 전체 JavaScript, Perl 등을 실행하는 결과 바이너리에는 라이브러리 바이너리가 포함됩니다. ASM을 사용하면 최종 16 진 값은 모든 것, 라이브러리, 모든 코드가 포함됩니다.
Mark Ormston

5
실제로 필요한 경우 ASM을 이진으로 직접 변환 할 수 있습니다. 내 어셈블러가 도와 준 것과 정확히 동일한 177 바이트가 나옵니다. 이진 편집기를 사용하는 사람은 누구나 결과 코드를 새 파일에 붙여 넣어 177 바이트를 저장할 수 있으며 예상대로 작동합니다. 분명히 SO는 ASM 제출로 나뉘어져 있으므로 계산에 포함되지 않았다고 생각되면 명확하게 설명해야합니다. meta.codegolf.stackexchange.com/questions/260/…
Mark Ormston

6
자, 이것이 유효한 항목임을 증명하기 위해 이것을 손으로 이진으로 변환하는 데 걸린 시간을 보냈습니다. 이에 따라 답변을 업데이트했습니다.
Mark Ormston

7
문제는 어셈블리가있는 컴파일러가 없다는 것입니다. 당신은 매크로를 사용합니다. 계산에 포함되지 않는다고 말하는 것은 #defineC에서 사전 정의 된 명령문을 사용할 수 없다고 말하는 것과 같습니다 . 모두 수동으로 바꾸려면 시간이 많이 걸립니다.
Mark Ormston

28

자바, 505 405 324 바이트

골퍼 테이션 이 추가 된 표준 계산 함께 추가 골퍼 테이션이 제공됩니다.

여기에 이미지 설명을 입력하십시오

골프 :

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

줄 바꿈으로 :

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);-사용 된 테마에 크게 의존하지만 동의합니다.
Mark Jeronimus

어쨌든 자동으로 생성되므로 가져 오기를 Java로 삭제할 수 있습니다.
Mark Jeronimus

나는 또한 당신이 시도한 경우 사용할 수있는 double곳 을 참조하십시오float
Mark Jeronimus

JFrame=> Frame2 문자를 면도합니다. 더 이상 창을 닫을 수는 없습니다. ;)
EthanB

2
수업은 공개 할 필요가 없습니다. 또한 Java 8을 사용하여 final수정자를 제거하십시오 . 그리고 완전한 제출을 위해 수입품을 생략해서는 안됩니다.
Victor Stafusa

21

자바 스크립트 (ECMAScript를 6) - (315 개) 308 문자

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)

기본 출력

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

  • n이미지 크기 및 반복 횟수를 변경 하도록 변경하십시오 .
  • f(87);f(0);f(0);RGB 색상 값을 변경하려면 통화에 전달 된 값 (끝 근처)을 변경하십시오. ( f(8);f(8);f(8);회색조입니다.)

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

여기에 이미지 설명을 입력하십시오

(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
좋은. d=document몇 가지 더 절약 할 수 있습니다. (또한, 캔버스를 작성해야하는 이유가 있습니까? codegolf에서 특정 레벨의 HTML을 사용할 수 있다고 가정합니까?)
Matthew Wilcoxson

1
document.createElement`canvas` 2 바이트를 쓰고 저장할 수 있습니다 . 와 동일합니다 getContext`2d` .
Ismael Miguel

순수한 JavaScript 솔루션이므로 HTML Canvas를 가정하지 않았습니다.
MT0


19

J, 73 바이트

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

만델 브로트 세트

편집 , 일부 설명 :

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이지만 코드가 어떻게 작동하는지 조금 설명해 줄 수 있습니까? 특히 (코드의 어느 부분에서) 색상을 선택하는지 알고 싶습니까?
plannapus

1
@ MarkJeronimus, 70으로 만들 수 있지만 명확성을 위해 몇 가지 사항을 유지했습니다. 따라서 계산할 때 LF를 무시할 자유가있었습니다.
Eelvex

@plannapus는 확인을 추가했습니다. 색상 선택은 (0,?$~99 3)각 레벨마다 하나씩 100 개의 RGB 삼중을 생성합니다. 임의성으로 인해 100 개 미만의 트리플렛을 얻을 수 있으므로 일부 레벨은 더 부드럽게 전환되지만 색상은 다릅니다.
Eelvex

17

매쓰, 214 (191) 215 19 30

버전 10.0부터 다음과 같은 내장 기능이 있습니다. (19 바이트)

MandelbrotSetPlot[]

만델 브로트


좌표 범위 요구 사항을 준수하려면 11 바이트가 추가로 필요합니다. (30 바이트)

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

m2


수작업 케이스 :

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

초록


{b, -2, 2, .01}, {a, -2, 2, .01}규칙에 더 짧고 더 가깝습니다
Mark Jeronimus

@MarkJeronimus 감사합니다. 반복되는 그림에 제안 된 범위를 사용했습니다.
DavidC

당신은 거의 옳았습니다. 그리고 당신은 검은 색이 아닌 내부를 만들었습니다. GIF의 마지막 프레임은 검은 색으로 표시되며 답변이 허용됩니다. 편집 : 나는 195 바이트를 계산합니다.
Mark Jeronimus

나는 검은 색에 대한 요점을 놓쳤다. 잘라 내기 및 붙여 넣기에서 일부 단일 문자가 두 문자가 되었기 때문에 개수가 증가했습니다.
DavidC

내장 솔루션은 매우 느슨한 해석을 사용 The fractal coordinates range from approximately -2-2i to 2+2i합니다.
Jonathan Frech

16

Pylab + Numpy가 포함 된 Python, 151 바이트

나는 DQ가 아닌 파이썬 항목을 볼 수 없었지만, 나는 이것에 대해 정말로 나 자신을 능가하고 153 자로 줄 였다고 생각합니다!

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

또한 두 번째 줄부터 마지막 ​​줄은 새로운 개인 기록 인 4 개의 개별 런타임 경고를 발생시킵니다.

여기에 이미지 설명을 입력하십시오


나는 152를 센다. import그리고 사이에 공간이 필요 *하지 않으며 f, 무언가를 잘못 이해하지 않는 한, 정의 가 짧아야한다. 0 번의 반복과 1 번의 반복이 사라지도록 변경해야합니다 (현재는 모두 회색입니다).
primo

기묘한. 화장실에 eof가 포함되어 있습니까? 고정 및 약간 작습니다. 잠시만.
meawoppl

나는 화장실에 151을 얻는다. 첫 번째 골프이므로 점수를 매기는 방법을 잘 모르겠습니다.
meawoppl

줄 바꿈없이 150으로 계산합니다. 일부 인터프리터 / 컴파일러는 하나를 요구하지만 파이썬 인터프리터는 없이도 잘 작동합니다. 에 대해 확실하지 wc않지만 stat -c %s대신 시도 하십시오 . 검은 색 위쪽 및 아래쪽 테두리가 이미지의 일부입니까?
primo

1
from numpy import*대신 import numpy as nmgrid대신을 사용하여 1 개의 문자를 저장할 수 있습니다 n.mgrid.
nyuszika7 시간

15

C + Allegro 4.2.2-248 바이트

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

산출:

M 세트 1


이것이 Allegro 4 (Allegro 5와는 상당히 다르다)입니다. 이것은 어떤 정확한 버전입니까?
Victor Stafusa

길이는 246 또는 249입니다
Mark Jeronimus

@ 빅터 알레그로 4.2.2.
Oberon

1
@MarkJeronimus는 사이에 줄 바꿈이있을 아닌가요 ... allegro.h>x=-1, ...? 메모장 ++가 그것을 \r\n= 로 계산한다고 가정 0D 0A합니다.
Oberon

1
0.01로 입력 할 수 있다고 생각 .01합니다.
Yytsi

14

Windows PowerShell (v4), 299 바이트

만델 브로트 프랙탈 그림

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

명령

  • 일반 PowerShell 콘솔 실행 (ISE가 작동하지 않을 수 있음)
  • 코드 복사 / 붙여 넣기
  • 대기-실행하는 데 1 분 이상 소요
  • 종료하는 유일한 방법은 콘솔을 닫는 것입니다

논평

  • 세트 내부의 색상으로 약간의 규칙 테스트가 진행됩니다. 규칙은 "다른 픽셀 (아마도 Mandelbrot 세트 내부)은 검은 색 또는 흰색으로 표시되어야합니다"라고 말합니다 . 코드는 픽셀을 완전히 검은 색으로 지정합니다 RGB (0,0,0) ... 투명한 검은 색 RGBA (0,0,0,0)입니다. 따라서 현재 Windows 테마의 양식 배경색은이 경우 약간 흰색 (RGB) (240,240,240)입니다.

나는 변경 거라고 lt2하는 lt4그것을 "만델 브로 집합"대신 당신은 지금, 세트의 많은 포인트가 컬러 밴드에 의해 삼킨 한 이미지를 만들 수 있습니다.
Mark Jeronimus

분명히 크기는 a*a+b*b아닙니다sqrt(a*a+b*b)
Mark Jeronimus

나는 그것을 이전에 테스트했다고 생각했지만 "왼쪽의 수평선은 어디로 갔습니까?"에 대한 답을 찾기 위해 갔다 -lt4. 어느 쪽이 좋습니까-감사합니다. 올바른 코드와 이미지로 답변을 업데이트했습니다. (내가 무언가를 놓치고 있기 때문에 그것이 무엇을하고 있는지에 대한 나의 이해를 다시 생각해야 할 것입니다).
TessellatingHeckler

14

파이썬 + PIL , 166 바이트

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

출력 (기본 * .bmp 뷰어에서 열림) :


1
y루프를 제거하면 3을 면도 할 수 있습니다 . r=range(d*d)사용 x/d하고 x%d, X와 Y에 대한.
Geobits

@Geobits 아이디어는 실제로 10을 절약했습니다. 감사합니다!
primo

1
c = + 2j와 같이 복잡한 유형을 초기화 할 수 있습니다 .z = o = x / 9e4-2 + (x % d / 150.-2) * 1j; c = 99
meawoppl

@meawoppl 다른 7 : D
primo

기술적으로 허용되지 않음 : 이것은 파이썬 자체의 그래픽 출력 기능이 아니며 Image.show()암시 적으로 임시 파일을 저장합니다.
nneonneo

12

BBC 기본 (228 바이트)

코드 골프에서 들어 본 적이없는 언어는 어떻습니까? 대부분 최적화 될 수는 있지만 개선이 가능한 곳은 아닙니다. http://rosettacode.org/wiki/Mandelbrot_set#BBC_BASIC을 기반으로 하지만 가능한 한 많이 골프를 코딩하려고했습니다.

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

생성 된 만델 브로트 세트

>이미지 의 심볼은 프롬프트이며 프로그램을 실행 한 후 자동으로 생성됩니다.


더 비효율적 인 버전을 사용하면됩니다. 지원하지 NEXT Y,X않습니까?
Mark Jeronimus

10

APL, 194 자 / 바이트 *

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

이것은 Dyalog APL과 ⎕IO ⎕ML←1 3

대부분의 공간은 API 호출에 의해 사용되어 창에 비트 맵을 표시합니다 (2, 3, 4 행)
. 바로 가기가있는 경우 코드는 60 자 (1 행)로 줄어 듭니다.

PLZ 도움말 찾기 SHORTCUT KTHX

Ungolfed 버전 (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    

스크린 샷 :

(프리웨어 버전은 OS X에서 와인 아래에서 실행됩니다. 예, 그렇게 저렴합니다.)

스크린 샷

* : Dyalog에는 자체 단일 바이트 문자셋이 있으며 APL 기호는 상위 128 바이트 값에 매핑되므로 전체 코드를 194 바이트에 저장할 수 있습니다. 이 주석의 모든 내용은 사실 일 수 있습니다. 침착하고 골프를 계속하십시오.


10

매스 매 티카 10.0, 19 자

MandelbrotSetPlot[]

MandelbrotSetPlot Mathematica 10.0의 새로운 기능입니다.

여기에 이미지 설명을 입력하십시오


이 내장 함수가 내 요구 사항을 모두 만족시키는 것이 얼마나 편리합니까 (13 자 이상으로 설정할 수있는 위치 제외). 이것은 표준 허점입니다.
Mark Jeronimus

19
코드 골프는 일반적으로 단일 문자 토큰을 사용하는 전문 언어 또는 대량의 특수 기능이 내장 된 Mathematica와 같은 시스템에서 수여됩니다. 그것들을 부정 행위로 사용하는 것은 단일 문자 명령을 사용하는 것 이상이 APL에 있습니다.
Michael Stern

9

R, 199 211 자

199 자의 오래된 솔루션 :

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)

들여 쓰기

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)

여기에 이미지 설명을 입력하십시오

편집 : 세트 내부와 첫 번째 레이어 외부를 다르게 색칠하는 211 자의 솔루션 :

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)

들여 쓰기

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)

여기에 이미지 설명을 입력하십시오


외부의 검은 색은 허용되지 않습니다. 당신이 그것을 놓치거나 구현하기가 어렵습니까?
Mark Jeronimus

@MarkJeronimus 둘 다 실제로 :) 나는 그것을하는 방법을 보려고 노력할 것이지만 그것을 깨끗하게 할 수있는 방법을 찾을 것이라고 100 % 확신하지는 않습니다.
plannapus

@MarkJeronimus 님!
plannapus

5
끔찍한 색 구분에서 2 위.
meawoppl

1
@meawoppl blame rainbow():)
plannapus

9

Java-처리 (271 바이트)

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

넓히는:

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


아, maaaaan, 나는 이것을하고 싶었다. +1 .
SIGSTACKFAULT

8

TI-80 기본, 125106 바이트

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

Digital Trauma의 답변을 기반으로합니다. 여기에 이미지 설명을 입력하십시오


6

GLSL-225 바이트 :

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

코드에서 변수 정의 (242 바이트) :

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에서 참조하십시오

만델 브로트 골프

이를 위해서는 적절한 팔레트 텍스처를로로드해야 iChannel0합니다. (여기서 채색은 ShaderToy의 "랜덤 픽셀"텍스처입니다.)


변수 선언은 코드에서 자동 생성되지 않는 한 계산해야합니다. (외부 설정으로 만 사용할 수있는 경우 색 구성표가
좋습니다

@MarkJeronimus : ShaderToy 환경에서 이러한 변수는 고정되어 있습니다. 그렇지 않으면 표준 셰이더의 경우 더 짧은 변수 이름을 선택했을 것입니다.
nneonneo

이게 가장 빠른가요?
Demi

6

옥타브 ( 212 136 바이트)

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

공백으로 :

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

산출:

만델 브로트 단계를 abs (z)> 2

Matlab으로 변환하려면 " m+=abs(z)<2"를 " m=m+(abs(z)<2)"로 변경하십시오 . [+3 바이트]

종횡비를 1 : 1로 만들려면 " ;axis image"를 추가하십시오 . [+11 바이트]

내 첫 번째 대답 (212 바이트) :

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

불연속
컬러

예, 훨씬 나아졌습니다.
aschepler

+1 좋고 간결한 솔루션. 그러나 종횡비는 1 : 1이 아닙니다 (참조 규칙 n ° 2 : 출력은 정사각형이어야 함).
plannapus

가로 세로 비율을 수정하면 11 바이트가 더 필요합니다. 추가 " ;axis image" 자격이 되나요?
aschepler

나는 그것이 단지 nitpicking이라고 생각합니다 :), OP는 그가 아무 말도하지 않았기 때문에 그것에 문제가없는 것 같습니다.
plannapus

6

애플 소프트 베이직, 302 (286) 280 바이트

임의의 점을 선택하여 그리므로 영원히 실행되며 절대로 평면 전체를 채울 수 없습니다.

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 BASIC은 실제로 공간 부족에 대해 용서하고 있습니다. 전체 프로그램에서 하나의 공간 만 필요합니다.

14 시간 후 출력 :

        산출

GIF :

        gif

골프 전 :

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

참고 : POKE 49234,0(Applesoft BASIC에서) 기기를 전체 그래픽 모드로 설정합니다.

흑백 디스플레이에 최적화 된 버전 :

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 시간 후 출력 :

        흑백

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

한 번에 두 개의 픽셀을 플롯하지 않고 전체 화면에서 임의의 픽셀을 선택하면 더 작고 느려집니다.
Mark Jeronimus

1
@MarkJeronimus이 5 일 전에 게시 한 후 이미 너무 느려서 컬러 버전이 아직 완료되지 않았습니다. 나는 그것이 더 느려질 여유가 없다고 생각한다. : P
MD XF

5

gnuplot 110 (줄 바꿈없이 105)

필수 gnuplot 항목. 그것은 수많은 시간이 지났지 만 처음부터 시작되었습니다 (어려운 것은 아닙니다). 나는 gnuplot본질적으로 골프 명령을 좋아합니다 :)

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

언 골프 :

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

그러나 나는 복소수 입력에 실망했다. x*{1,0}+y*{0,1}복소수를 구성하는 가장 슬픈 기존 방법이어야합니다.

죄송합니다. 이미지 : gnuplot 만델 브로트

더 나은 해상도를 위해 isosamples를 높게 설정하십시오. 우리는 또한 말할 수 unset ticsunset colorbox순수한 이미지,하지만 난이 버전은 잘 자격 생각합니다.


첫 번째 Google 히트 "gnuplot mandel"의 복사 / 파스타입니다. 우선, *{1,0}화합하고 코드 볼링 방식과 비슷 *1하며 아마도 떨어질 수 있습니다. (
unested

1
아니요 그것은 붙여 넣기가 아닙니다. 그것은 매우 간단한 공식이며 검색 할 필요조차 없었습니다. 그러나 복잡한 숫자를 초기화하는 더 좋은 방법을 찾고 있었을 때 검색과 함께 제공되는 페이지를 찾았습니다 (이 경우와 다르게 구현이 다릅니다). 실제 부분에 대한 팁을 주셔서 감사합니다. 고정.
오리온

5

MATLAB (89 바이트)

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

출력-

여기에 이미지 설명을 입력하십시오

내부 셀이 검은 색 또는 흰색이어야한다는 요구 사항을 충족하지는 않지만 (1) imshow(K)대신 imagesc(K)1 바이트를 필요로하지만 이미지 처리 도구 상자가 필요함) 또는 (2) 추가 colormap hot(12 개 이상 필요 )를 통해 충족시킬 수 있습니다. 바이트).

언 골프 버전-

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)

라이브러리가 기본적으로 Matlab에 패키지되어 있고 사용자가 코드 또는 오류 메시지에서 사용중인 것으로 추측 할 수 있으면 라이브러리를 사용하는 것이 좋습니다.
Mark Jeronimus

좋아, 넌 날 이겼어 나는 C-C내 대신을 좋아한다 0*e(401). 또한을 사용하지 않습니다 N. 그리고 우리 m+=abs(z)<2대신에 내 아이디어를 사용하여 조금 더 짧을 수 있습니다 K(~K&abs(Z)>2)=j.
aschepler

기본 colormap jetcolormap hot하지만 모두 잘못된 - 그들은 단지 64 개 별개의 색상이 있습니다. colormap(hot(101))시각적으로 구별되지 않습니다. colormap([0,0,0;jet(100)])가능하지만 iffy 일 수 있습니다.
aschepler

작동합니까? 옥타브에서 K=K+abs(Z)<2의미 K=((K+abs(Z))<2)합니다. (그래서 나는 1 바이트 추정치가 잘못되었습니다 +=.)
aschepler

2
90도 회전 한 Mandelbrot 세트는 여전히 Mandelbrot 세트입니다.
Chris Taylor

4

자바 스크립트 + HTML5 (356B)

(참고 : '//'로 끝나는 줄은 여기에 약간 가독성을 위해 추가되었습니다)

수행자 버전 (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>

느린 버전 (356B) : 전역 범위가 사용되도록 내부 함수에서 'var'및 매개 변수를 제거하십시오.

사용해보십시오 : http://jsfiddle.net/neuroburn/Bc8Rh/

여기에 이미지 설명을 입력하십시오


짧은 버전을 만드는 방법에 대한 귀하의 지시가 이해되지 않으면 용서하십시오.
Mark Jeronimus

문제 없어요. var w,시작 부분에서 제거 하고로 변경 function(x,i,j,k,l,c,o)하십시오 function().
ɲ euroburɳ

4

자바 스크립트, 285B

내 코드와 MT0 코드 일부 개선 사항 을 바탕으로 색상이 285B로 줄었습니다.

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

작동 : http://jsfiddle.net/acLhe/7/

: 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는 읽을 수 있어야합니다 :-/ 실제로 확인하십시오 : http://jsfiddle.net/acLhe/6/

만델 브로트 커피 스크립트


플랫폼에서 색상을 지원하지 않는 한 OP는 색상을 묻습니다. 그래도 훌륭하고 간결한 코드가 보입니다. PPCG에 오신 것을 환영합니다!
Jonathan Van Matre

나는이 크기 285B에서 시작 하여이 답변
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

표준 DOS 팔레트 :

여기에 이미지 설명을 입력하십시오


4

Tcl / Tk, 316

322 324 336 348 349 351 352 353 354 355

이제 #RRGGBB 삼중 대 대신 3 자 #RGB 속기 스타일의 컬러 삼중을 사용하는 더 짧은 버전으로 색상이 다릅니다.

그리고 더 많은 골프.

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

프랙탈


Tcl / Tk, 325

331 333 345 357 358 360 361 362 364 365

나는 기준이 아름다움이라면 내가 이길 것이라고 생각합니다!

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

발표:

프랙탈


1
좋은. 당신은 추가 (380, 내가 생각 아래) 몇 가지 문자를 줄일 수 있습니다 rename set s상단에 다음 모든 교체 set로를s
Rolazaro Azeveires을

4

엑셀 VBA, 251 246 224 223 221 바이트

ceilingcat 덕분에 5 바이트 절약 Taylor Scott 덕분에 23 바이트 절약

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

산출:

D = 99 인 출력

나는 오래 전에 이것을 한 버전을 만들었지 만 사용자가 기본 색상과 따르기 쉬운 수학을 선택하게하는 것과 같은 추가 기능이 많이있었습니다. 골프를 치는 것은 흥미로운 도전이었습니다. Color방법은 사용 1E6유효 색이기 때문에 다양한 색상을 얻을 수있는 수단 02^24. 10^6멋진 대비 영역 을 제공 하도록 설정합니다 .

설명 / 자동 서식 :

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

또한 주변에 연주 D=999j=1 to 998훨씬 더 크고 더 정확한 이미지를 얻을 수 있습니다. 그들이 너무 큰있어하지만이 때문에 결과는 도전과 관련이없는 입니다 깔끔한.

D = 999


@ceilingcat 감사합니다. 그것은 복소수 연산을 위해 특수 기능을 가진 내 원본에서 이월되었습니다.
엔지니어 토스트

실제로 4 이상이어야합니까, 아니면 4 이상으로 벗어날 수 있습니까? 또한, 교체 할 수 있습니다 j<99j<D.
ceilingcat

당신은 삭제할 수 있습니다 @EngineerToast ()하위 이름에서, 당신은 변경해야합니다 (j<99)(j<d)사각형 셀은 사용하기위한 목적으로, 당신이 할 수와 Cells.RowHeight=48의 위치에 Cells.RowHeight=9, Cells.ColumnWidth=1- 이것이 당신의 출력 주변에 어려운을 엉망으로 만드는 않고 유효한 것으로 받아 들여졌다 커뮤니티에 의해 –
Taylor Scott

1
@TaylorScott RowHeightVBA 팁 게시물 의 트릭을 기억하고 예쁜 사진을 모두 얻은 후에 통합해야했습니다. 좋은 청크 바이트였습니다. 감사합니다.
엔지니어 토스트

난 당신이 교환하여 다른 바이트를 제거 넘어갈 수 있다고 생각 2^20과 함께1E6
테일러 스콧

3

펄 + 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

이 코드 에서 골프를 쳤다


2
후보 : 가장 못생긴 색 구성표.
meawoppl

3

플로터, 620 픽셀

난해한 언어 인 피에트 (Piet)뿐만 아니라 제 자신의 도전에서 영감을 얻은 언어입니다.

여기에 이미지 설명을 입력하십시오


2
코드의 언어 및 설명에 연결 하시겠습니까? 아니면 실제로 코드는 무엇입니까?
MD XF
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.