すべての言語のマンデルブロ画像


91

私はいつも、手に入れたグラフィカルアプリケーションで、Hello Worldの「グラフィカル」バージョンとしてマンデルブロ画像を使用していました。今度はあなたの仲間の番です。

  • 言語は、グラフィカル出力またはグラフの描画が可能でなければなりません(ファイルの保存は許可されません)
  • 正方形の画像またはグラフをレンダリングします。サイズは少なくとも128、最大で640です*
  • フラクタル座標の範囲は約-2-2iから2 + 2iです。
  • マンデルブロ集合の外側のピクセルは、大きさが2を超える前の反復回数に応じて色付けする必要があります(*白黒を除く)
  • 各反復カウントには一意の色*が必要であり、隣接する色は目で簡単に区別できることが望ましい
  • 他のピクセル(おそらくMandelbrotセット内)は、黒または白に色付けする必要があります
  • 少なくとも99回の繰り返し
  • ASCIIアートは許可されていません

*プラットフォームによって制限されない限り、例えばグラフィック電卓

許可:
許可された
禁止:(
不許可
縮小画像)

勝利条件:

この投稿では、各言語の最短バージョン(バイト単位のサイズ)がサイズ順に並べられています。
ボタンで「受け入れられる」回答はありません。

リーダーボード:


8
「目で簡単に区別する」ことは客観的にするのが難しいです。...また、2つの個人的な関連付けは別として、MandelbrotセットはHello Worldとは何の関係もないため、検索エンジンを意図的にトローリングしている場合を除き、タイトルから削除することをお勧めします。
ジョナサンヴァンマトレ14年

1
関連:ASCII Mandelbrot(そこに投稿された回答の一部はASCIIではなく、おそらくこの質問に対する回答としてより適している可能性があります)。
ピーターテイラー14年

3
マンデルブロを「Hello World」としてレンダリングしていると言う人が数人います。私もそれをやってきました。30年くらいです。Mandelbrotは、ディスプレイへのピクセルアクセスが可能であることと、新しいプラットフォームでのコンピューティングバウンドパフォーマンスに優れた感触を与えることを示すため、完璧な「Hello World」です。
ロジャーダール14年

6
数学的感度と美的感度の組み合わせを必要とする質問をしてから、すべての設計決定を事前に課すのは素晴らしい考えです。
jwg 14年

3
誰でも頭脳のWINSで1つを作ることをどうにかして、私は言うだろう:D
MadTux 14年

回答:


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分かかりました。

これは完全に無制限です。スペースを少し節約できると確信していますが、この歴史的な好奇心を共有したかっただけです!

使用できる制御ステートメントはgotos のみであることが大好きです。

これが写真です。グラフィカルな出力を取得する他の手段はありません。 ここに画像の説明を入力してください


1
私もですが、長年の棚時間の後、NVメモリは空白になりました。
マークジェロニムス14年

2
zx²+zy²>4できなかったAbs(x)>2
マークジェロニムス14年

1
たぶん、あなたは新しいバッテリーを取得する必要があります...
NothingsImpossible

25
面白い。あなたはかなり長い間オタクでした。
devnull

4
ニースの「スクリーンショット」
meawoppl

83

先日、私はこれに出会いました。私はそれを信用していませんが、いまいましい、それは素晴らしいですか:

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

ここに画像の説明を入力してください http://preshing.com/20110926/high-resolution-mandelbrot-in-obfuscated-python/


12
許可されていないようです:地域は簡単に区別できないか、まったく区別できません。
primo 14年

5
また、これはファイルに書き込みます。
ライライアン14年

40
許可されていないかどうか、これはかなり素晴らしいです:D
ナヴィン14年

18
@DigitalTrauma、まあ、最も美しい入力のために+1!
ブライアンS 14年

19
これは馬としてカウントされますか?;-)
Blazemonger 14年

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

x86 DOSアセンブリ、208 177 173バイト

手作業で作成した16進数の完全なバイナリは次のとおりです。

DBE3BE00A0B81300CD1056BA640007BF87F9FDBDC7008BCDE81A008AC3AA4979F7B9C70083EF784D79EE33C0CD16B80300CD10CD208BC12BC289441CDF441CDF06A701DEF9D95C088BC52BC289441CDF441CDF06A701DEF9D95C0CD9EED914D95404D95410D95C14B301D904D84C04DE0EA901D8440CD95404D94410D86414D84408D914D80CD95C10D84C04D95414D84410DF06AB01DED99BDFE09B9E7207433ADA72C632DBC3320002000400

サンプル画像は次のとおりです。

黒をトリミングしたMandlebrotスクリーンショット

読み取り可能な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を数えます。
マークジェロニムス14年

3
簡単にできる場合は、バイナリ全体を手作業でコーディングすることもできますが、これは、高レベル言語を使用している人に、自動構成、マクロなどの使用を避けるように依頼するようなものです。マクロ。完全なJavaScript、Perlなどを実行するための結果のバイナリには、ライブラリのバイナリが含まれています。ASMの場合、最終的な16進数の値は、ライブラリ、すべてのコード、すべてが含まれます。
マークオームストン14年

5
いいえ。本当に必要な場合は、手動でASMをバイナリに変換できます。私のアセンブラーが助けたのとまったく同じ177バイトが出てきます。結果のコードは、バイナリエディタを使用して誰でも新しいファイルに貼り付け、177バイト保存して、期待どおりに機能します。どうやらSO ASMの提出に分割されているので、あなたはそれはカウントされません感じれば多分あなたは明確にすべき:meta.codegolf.stackexchange.com/questions/260/...
マーク・Ormston

6
さて、これが有効なエントリであることを証明するために、これをバイナリに手動で変換するのにかかる時間を費やしました。それに応じて回答を更新しました。
マークオームストン14年

7
問題は、アセンブリを備えたコンパイラがないことです。マクロを使用するだけです。カウントしないと言うのは#define、Cで事前定義されたステートメントを使用できないということです。すべてを手動で置き換えるのは時間がかかります。
マークオームストン14年

28

Java、505 405 324バイト

ちょうど標準的な計算で、golfitudeが追加されたgolfitudeが追加されました。

ここに画像の説明を入力してください

ゴルフ:

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);-使用するテーマに大きく依存しますが、受け入れます。
マークジェロニムス14年

とにかく自動生成されるため、Javaでインポートを削除できます。
マークジェロニムス14年

私も見doubleどこfloatあなたがしようとした場合に使用することができる
マーク・Jeronimus

JFrame=> Frame2文字を削ります。もうウィンドウを閉じることはできませんが。;)
EthanB 14年

2
クラスを公開する必要はありません。さらに、Java 8を使用してfinal修飾子を取り除きます。また、完全な提出のためにインポートを省略しないでください。
ビクターStafusa 14年

21

Javascript(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の特定のレベルを想定していますか?)
マシューウィルコクソン14年

1
document.createElement`canvas` 2バイトを書き込んで保存できます。と同じgetContext`2d` です。
イスマエルミゲル

これは純粋なJavaScriptソリューションであるため、HTMLキャンバスを想定していませんでした。
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ですが、そのコードがどのように機能するかを少し説明することは可能でしょうか?特に、どのように(コードのどこで)色を選択するのかを知りたいですか?
プランナパス14年

1
@MarkJeronimus、私はそれを70にすることができますが、明確にするためにいくつかのものを残しました。したがって、私はカウントする際にLFを無視する自由を取りました。
エルベックス14年

@ plannapus、OK、コメントを追加しました。カラーピッキングが行われ(0,?$~99 3)、各レベルに1つずつ、100 rgbのトリプレットが生成されます。ランダム性のために、100未満のトリプレットが得られる場合があります。そのため、一部のレベルはよりスムーズに移行します(ただし、色は異なります)。
エルベックス14年

17

Mathematica、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}短く、規則に近い
マークジェロニムス14年

@MarkJeronimusありがとう。反復画像に推奨範囲を使用しました。
DavidC 14年

あなたはそれをほぼ正しく持っていて、それからあなたは中を黒くないものにしました。GIFの最後のフレームは内側が黒く、回答が許可されています。編集:そして私は195バイトを数えます。
マークジェロニムス14年

私は黒であることについてのポイントを逃しました。一部の単一文字がSEへのカットアンドペーストで2文字になったため、カウントが増加しました。
DavidC 14年

組み込みソリューションでは、の非常に緩やかな解釈を使用していThe fractal coordinates range from approximately -2-2i to 2+2iます。
ジョナサンフレッチ

16

Pylab + Numpyを使用したPython、151バイト

非DQのPythonエントリを見るのは我慢できませんでしたが、私はこのエントリに本当に勝っていると思い、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))

また、特に最後から2番目の行では、4つの異なる実行時警告が発生します。これは新しい個人記録です。

ここに画像の説明を入力してください


私は152を数えます。との間にスペースは必要ありません。importまた*f何かを誤解していない限り、定義しないことは短くする必要があります。また、0回の繰り返しと1回の繰り返しが区別されるように変更する必要があります(現在は両方とも灰色です)。
primo 14年

奇妙な。wcにはeofが含まれていますか?固定され、わずかに小さい。ちょっとまってください。
meawoppl 14年

私はwcで151を得ます。最初のゴルフなので、それをどのように採点するかわかりません。
meawoppl 14年

末尾の改行なしで150を数えます。一部のインタープリター/コンパイラーはそれを要求しますが、Pythonインタープリターはそれなしで問題ありません。についてwcはわかりませんが、stat -c %s代わりに試してみてください。黒い境界線は画像の一部ですか?
primo 14年

1
あなたは使用して1つの文字を保存することができますfrom numpy import*代わりにimport numpy as nしてmgrid代わりにn.mgrid
nyuszika7h

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

出力:

MSet 1


これはAllegro 4(Allegro 5とはまったく異なる)であることに注意してください。これはどのバージョンですか?
ビクターStafusa 14年

長さは246または249です
マークジェロニムス14年

@Victor Allegro 4.2.2。
オベロン14年

1
@MarkJeronimusは、間に改行があるように想定されていない... allegro.h>x=-1, ...?Notepad ++はそれを\r\n= として数えると思います0D 0A
オベロン14年

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が機能しない場合があります)
  • コードをコピーして貼り付け、Enterキーを押します
  • 待機-実行に1分以上かかります
  • 終了する唯一の方法は、コンソールを閉じることです

コメント

  • セット内の色については、少しのルールテストが行​​われています。ルールには、「他のピクセル(おそらくマンデルブロ集合内)は黒または白に色付けする必要があります」と書かれています。コードはピクセルを完全に黒のRGB(0,0,0)に色付けしています...たまたま透明な黒のRGBA(0,0,0,0)になっています。そのため、現在のWindowsテーマのフォームの背景色が表示されます。この場合、少しオフホワイトのRGB(240,240,240)です。

現在の画像ではなく、「マンデルブロセット」に変更lt2lt4ます。セットの多くのポイントがカラーバンドに飲み込まれます。
マークジェロニムス

どうやらマグニチュードではa*a+b*bないsqrt(a*a+b*b)
マークジェロニムス

私はそれを以前にテストしたと思っていましたが、「左の水平線はどこに行ったのですか?」という答えを探しに行きました-lt4。どちらが良いですか-ありがとう。修正したコードと画像で回答を更新しました。(私は何かを逃しているので、それが何をしているかについての私の理解を再考する必要があります)。
-TessellatingHeckler

14

Python + 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%dxとyのために。
ジオビット14年

@Geobitsのアイデアは実際に10を節約しました、ありがとう!
プリモ14年

1
複合型は、c = 1 + 2jのように初期化できます。これにより、z = o = x / 9e4-2 +(x%d / 150.-2)* 1j; c = 99で数文字節約できます。
meawoppl 14年

@meawoppl別の7:D
primo 14年

技術的には許可されていません:これはPython自体のグラフィカルな出力機能ではありません(そしてImage.show()一時ファイルを暗黙的に保存します)。
nneonneo

12

BBC Basic(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

生成されたマンデルブロ集合

>画像上のシンボルはプロンプトであり、プログラムの実行後に自動的に生成されます。


2回プロットする必要はありません。より非効率なバージョンを使用してください。サポートしていNEXT Y,Xませんか?
マークジェロニムス14年

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ヘルプショートカットのKTHXを見つける

非ゴルフバージョン(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    

スクリーンショット:

(WineのOS Xで実行されるフリーウェアバージョン。はい、私はそのように安いです。)

スクリーンショット

*:Dyalogには独自のシングルバイト文字セットがあり、APLシンボルは上位128バイトの値にマップされているため、コード全体を194バイトに格納できます。この脚注のすべての文は、おそらく真実です。落ち着いてゴルフを続けてください。


10

Mathematica 10.0、19文字

MandelbrotSetPlot[]

MandelbrotSetPlot はMathematica 10.0の新しい関数です。

ここに画像の説明を入力してください


この組み込み関数がたまたま私の要件をすべて満たすのは便利です(場所は13文字以上設定できます)。これを除き、標準的な抜け穴です。
マークジェロニムス14年

19
コードゴルフは、通常、1文字のトークンを使用する専門言語、または膨大な数の特別な機能が組み込まれているMathematicaのようなシステムによって獲得されます。それらを使用することは不正行為ではなく、1文字のコマンドを使用する以上のものはAPLにあります。
マイケルスターン14

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)

ここに画像の説明を入力してください


技術的には外側の黒は許可されていません。あなたはそれを見逃しましたか、それとも実装するのが難しいですか?
マークジェロニムス14年

@MarkJeronimus両方とも実際に:)私はそれを行う方法を見てみますが、私はそれをきれいに行う方法を見つけると100%確信しているわけではありません。
plannapus 14年

@MarkJeronimus完了!
plannapus 14年

5
恐ろしい色の部門で2位。
meawoppl 14年

1
@meawopplのせいrainbow():)
plannapus 14年

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


ああ、私はこれをやりたかった。1
SIGSTACKFAULT

8

TI-80 BASIC、125 106バイト

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の「ランダムピクセル」テクスチャからです)。


コードから自動生成できない限り、変数宣言もカウントする必要があります。(外部設定としてのみ使用可能な場合、配色は問題ありません)
マークジェロニムス14年

@MarkJeronimus:ShaderToy環境では、これらの変数は修正されています。そうでなければ、標準シェーダーの場合、短い変数名を選択します。
nneonneo 14年

これがすべての最速ですか?
デミ

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

はい、今はずっと良くなっています。
アシェプラー14年

+1すてきで簡潔なソリューション。ただし、アスペクト比は1:1ではありません(ルールn°2を参照:出力は正方形でなければなりません)。
plannapus

アスペクト比を修正するには、さらに11バイトが必要です: " ;axis image"を追加します。資格を得るために必要ですか?
アシェプラー

私はそれを私が選んだだけだと思う​​:)、彼は何も言わなかったので、OPはそれで問題を抱えていないようです。
plannapus

6

Applesoft BASIC、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はスペースの不足を本当に寛容にしています。プログラム全体で必要なスペースは1つだけです。

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

一度に2つのピクセルをプロットせずに、画面全体でランダムなピクセルを選択すると、小さくなります(そして遅くなります)。
マークジェロニムス

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マンデルブロ

アイソサンプルを高く設定すると、解像度が向上します。我々はまた、言うことができるunset ticsunset colorbox純粋なイメージのために、私は、このバージョンがうまく資格だと思います。


最初のグーグルヒット「gnuplot mandel」からのコピー/パスタだと思います。まず第一に、*{1,0}団結しており、コードのボウリングの言い方に似ています*1。(未テスト)
マークジェロニムス14年

1
いいえ、コピーアンドペーストではありません。これは非常に単純な式であり、検索する必要さえありませんでした。しかし、複素数を初期化するより良い方法を探していたときに、その検索で得られるページを見つけました(この場合の実装は異なります)。実際の部分についてのヒントをありがとう、それは動作します。修正。
オリオン14年

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にパッケージ化されていて、すべてのユーザーがコードまたはエラーメッセージから使用されていると推測できる場合、ライブラリの使用は問題ありません。
マークジェロニムス14年

いいね、あなたは私を打ち負かした。私C-Cは私の代わりに好き0*e(401)です。さらに、を使用していませんN。そして私たちm+=abs(z)<2はあなたの代わりに私の考えを使って少し短くすることができますK(~K&abs(Z)>2)=j
アスケプラー14年

デフォルトでcolormap jetありcolormap hot、両方とも正しくありません-それらは64色しかありません。 colormap(hot(101))私には視覚的に区別できません。 colormap([0,0,0;jet(100)])おそらく受け入れられますが、不確かです。
アスケプラー14年

それは動作しますか?オクターブでK=K+abs(Z)<2は、という意味K=((K+abs(Z))<2)です。(だから私は排除するための1バイトの見積もりについて間違っていた+=。)
アシュプラー14年

2
90度回転したマンデルブロ集合は、依然としてマンデルブロ集合です。
クリステイラー

4

JavaScript + 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/

ここに画像の説明を入力してください


ショートバージョンの作成に関する指示がわからない場合はご容赦ください。
マーク

問題ない。var w,最初に削除し、に変更function(x,i,j,k,l,c,o)function()ます。
ɲeuroburɳ

4

Javascript、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へようこそ!
ジョナサンヴァンマトレ

このサイズ285Bから始めて、この回答
KamilKieł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

3文字の#RGBショートハンドスタイルカラートリプレット(#RRGGBBトリプレットの代わりに)を使用した短いバージョンで、異なる色になります。

そしてもう少しゴルフ。

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=9Cells.ColumnWidth=1これは出力の混乱をより困難にしますが、有効として受け入れられています-社会による
テイラースコット

1
@TaylorScott RowHeightVBAのヒント投稿からのトリックを思い出し、きれいな写真をすべて手に入れた後、それを統合するつもりでした。それはすてきなチャンクバイトでした、ありがとう。
エンジニアトースト

私はあなたが交換することにより、別のバイトを削除して逃げることができると信じ2^201E6
テイラー・スコット

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からのマンデルブロフラクタル

このコードからゴルフ


2
ノミネート:最もい配色。
meawoppl 14年

3

フローター、620ピクセル

難解な言語Pietからだけでなく、自分自身の挑戦に触発されたときに作り上げた言語。

ここに画像の説明を入力してください


2
コードの言語と説明へのリンク?それとも実際には、コードは何ですか?
MD XF
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.