每种语言的Mandelbrot图片


91

在我接触过的任何图形应用程序中,我总是使用Mandelbrot图像作为Hello World的“图形”版本。现在轮到你们了。

  • 语言必须能够图形输出或绘制图表(不允许保存文件)
  • 渲染正方形图像或图形。大小至少为128,最大为640 *
  • 分形坐标范围从大约-2-2i到2 + 2i
  • Mandelbrot集外的像素应根据大小超过2之前的迭代次数进行着色(不包括*黑色和白色)
  • 每个迭代计数必须具有唯一的颜色*,并且相邻的颜色最好应易于用眼睛区分
  • 其他像素(大概在Mandelbrot集内)必须为黑色或白色
  • 至少99次迭代
  • 不允许使用ASCII艺术

*除非受平台限制,例如图形计算器

允许:
允许的
禁止:(
不允许的
缩小的图像)

获奖条件:

每种语言的最短版本(以字节为单位)将在此帖子中提及,并按大小排序。
该按钮将永远不会被“接受”。

排行榜:


8
“容易用眼睛分辨”很难做到客观。...此外,除了您个人之间的关联外,Mandelbrot集与Hello World无关,因此,除非您有意拖曳搜索引擎,否则最好从标题中忽略掉它。
乔纳森·范·马特雷

1
相关:ASCII Mandelbrot(尽管发布的某些答案不是ASCII,并且可能更适合作为此问题的答案)。
彼得·泰勒

3
我见过一些人提到他们将曼德布罗特市称为“世界你好”。我也做了30多年了。Mandelbrot是完美的“ Hello World”,因为它既可以显示像素,也可以显示像素,并且可以很好地体验新平台上的计算绑定性能。
Roger Dahl 2014年

6
提出一个需要结合数学和美学敏感性的问题的好主意,然后预先施加所有设计决策。
jwg 2014年

3
任何人都设法在
Brainfuck胜利中取得成功

Answers:


94

夏普EL-9300图形计算器,296字节

这是我 20年前上中学的图形计算器!我记得当时为它编写了一个mandelbrot生成器。可以肯定的是,它仍然位于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记忆体还是一片空白。
Mark Jeronimus 2014年

2
zx²+zy²>4那不是Abs(x)>2吗?
Mark Jeronimus 2014年

1
也许您应该获得一个新电池...
没什么不可能2014年

25
有趣。所以,你已经是一个书呆子相当长一段时间。
devnull 2014年

4
不错的“屏幕截图”
meawoppl 2014年

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
似乎不被允许:这些区域很难区分,甚至根本不容易区分。
2014年

5
同样,这将写入文件。
Lie Ryan

40
无论是否允许,这都很棒:D
Navin 2014年

18
@DigitalTrauma,哎呀,最美丽的输入+1!
Brian S

19
这算作奎尔吗?;-)
Blazemonger 2014年

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字节

我手工创建的十六进制完整二进制文件是:

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: ...文件中的所有条目并将其作为十六进制二进制文件转储到.com文件中。生成的二进制文件就是您在本文顶部看到的内容。


1
机器码不计算在内。如果这很重要,那么任何产生字节代码或机器代码的语言都应该更短。将所有内容更改为1个字符的长名称后,我数了820。
Mark Jeronimus 2014年

3
如果可以简化整个程序,我可以用二进制代码进行手工编码,但这就像要求任何使用高级语言的人都避免使用自动构造,宏等。这实际上就是汇编的全部,仅仅是一堆宏。运行完整的JavaScript,Perl等所产生的二进制文件包括该库的二进制文件。使用ASM,最终的十六进制值是包括的所有内容,库,所有代码。
Mark Ormston 2014年

5
否。如果确实需要,我可以手动将ASM转换为二进制。它将输出与我的汇编程序帮助过的完全相同的177个字节。任何人都可以使用二进制编辑器将生成的代码粘贴到一个新文件中,该文件可以保存177个字节,并且可以按预期工作。:显然是的划分上ASM意见,所以也许如果你觉得它不指望你应该澄清meta.codegolf.stackexchange.com/questions/260/...
马克Ormston

6
好了,为了证明这是一个有效的条目,我花了一些时间将其手动转换为二进制。我已经相应更新了我的答案。
Mark Ormston 2014年

7
问题是,没有带有汇编的编译器。您只使用宏。说不算数就好比说您不能#define在C中使用任何预定义的语句。手动替换所有内容仅是浪费时间。
Mark Ormston 2014年

28

Java中,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 2014年

我还看到如果您尝试过可以在double哪里float使用
Mark Jeronimus 2014年

JFrame=> Frame刮掉2个字符。尽管您无法再关闭窗口。;)
EthanB 2014年

2
您的课程不必公开。此外,使用Java 8摆脱final修饰符。而且,您也不能为了完整提交而忽略导入。
维克多·斯塔夫萨

21

Javascript(ECMAScript 6)-315308个字符

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 2014年

1
您可以写入document.createElement`canvas` 并保存2个字节。与相同getContext`2d`
Ismael Miguel

我不认为HTML Canvas是纯JavaScript解决方案。
MT0

或者您也可以像这里
KamilKiełczewski

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 2014年

1
@MarkJeronimus,我可以将其设置为70,但是为了清楚起见,我保留了一些内容。因此,我在计数时可以自由地忽略LF。
Eelvex 2014年

@plannapus,好的,添加了一些评论。完成颜色选择后,(0,?$~99 3)将生成100个三元组的RGB,每个级别一个。由于随机性,您可能获得的三元组少于100个,因此某些级别的过渡会更平滑(但仍然具有不同的颜色)。
Eelvex 2014年

17

Mathematica,214 191 215 19 30

从10.0版开始,内置了:(19个字节)

MandelbrotSetPlot[]

曼德布罗特


为了符合坐标范围要求,需要额外的11个字节。(30个字节)

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

平方米


手动情况:

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 2014年

@MarkJeronimus谢谢。我将建议的范围用于迭代图片。
DavidC 2014年

您几乎正确,然后使内部变成非黑色。GIF中的最后一帧内部为黑色,并且允许回答。编辑:我数195个字节。
Mark Jeronimus

我错过了变黑的要点。计数增加是因为在SE的剪切和粘贴过程中,某些单个字符变成了两个字符。
DavidC 2014年

您的内置解决方案使用的松散解释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))

此外,值得注意的是,倒数第二行会发出4个不同的运行时警告,这是新的个人记录!

在此处输入图片说明


我数152。import和之间不需要空格*,并且完全没有定义f的地方应该更短,除非我误解了可能的情况。您还应该对其进行更改,以消除0次迭代和1次迭代(它们当前均为灰色)。
2014年

奇怪的。wc是否包括eof?固定的,略小。一会儿。
meawoppl 2014年

我得到151。第一次打高尔夫球,所以不确定如何得分。
meawoppl 2014年

我数150,没有尾随换行符。一些解释器/编译器需要一个,但是python解释器可以很好地工作。不确定wc,但可以尝试stat -c %s。图像的上边框和下边框是黑色的吗?
2014年

1
您可以使用from numpy import*代替import numpy as nmgrid来保存1个字符n.mgrid
nyuszika7h 2014年

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完全不同)。这是哪个确切版本?
维克多·斯塔夫萨

它长246或249长
Mark Jeronimus

@Victor Allegro 4.2.2。
Oberon 2014年

1
@MarkJeronimus是不是有应该是之间的换行... allegro.h>x=-1, ...?我想Notepad ++会将其视为\r\n= 0D 0A
Oberon 2014年

1
我认为0.01可以输入为.01
Yytsi

14

Windows PowerShell(v4),299字节

Mandelbrot分形图片

# Linewrapped here for show:

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


# The single line 299 char entry version:

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

使用说明

  • 运行普通的PowerShell控制台(ISE可能不起作用)
  • 复制/粘贴代码,按Enter
  • 等待-需要一分钟或更长时间才能运行
  • 退出的唯一方法是关闭控制台

评论

  • 集合中的颜色进行了一些规则测试。规则说:“其他像素(大概在Mandelbrot集内)必须是黑色或白色”。代码将像素完全着色为RGB(0,0,0)黑色...它恰好是透明的黑色RGBA(0,0,0,0)。因此,显示的是当前Windows主题的表单背景颜色,在这种情况下为略带白色的RGB(240,240,240)。

我将其更改lt2lt4“ mandelbrot集”,而不是现在的图像,色带吞噬了集的许多点。
Mark Jeronimus

显然幅度a*a+b*b不是sqrt(a*a+b*b)
Mark Jeronimus

我以为我已经测试过了,但是我寻找了一个答案,“左边的水平线去了哪里?”,过了一会儿,我发现它恰好在您说的地方-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和y 使用x/dx%d
Geobits 2014年

@Geobits这个想法实际上节省了10,谢谢!
2014年

1
可以将复杂类型初始化为:c = 1 + 2j,我认为这样可以为您节省几个字符:z = o = x / 9e4-2 +(x%d / 150.-2)* 1j; c = 99
meawoppl 2014年

@meawoppl另外7:D
primo

从技术上讲是不允许的:Python本身没有任何图形输出功能(并Image.show()隐式保存了一个临时文件)。
nneonneo 2014年

12

BBC基本(228字节)

那没有人听说过代码高尔夫球的语言呢?很有可能可以进行优化,但是我不太清楚-可以进行改进。基于http://rosettacode.org/wiki/Mandelbrot_set#BBC_BASIC,但是我尝试尽可能地对golf进行编码。

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

The generated Mandelbrot set

>图像上的符号是提示性的,运行程序后会自动生成。


无需绘制两次,只需使用效率较低的版本即可。它不支持NEXT Y,X吗?
Mark Jeronimus 2014年

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    

屏幕截图:

(免费版本在OS X上的Wine下运行。是的,我很便宜。)

screenshot

*:Dyalog有自己的单字节字符集,APL符号映射到高128个字节的值,因此整个代码可以存储在194个字节中。此脚注中的每句话都可能是正确的。保持冷静并进行打高尔夫球。


10

Mathematica 10.0,19个字符

MandelbrotSetPlot[]

MandelbrotSetPlot 是Mathematica 10.0中的新功能。

enter image description here


恰好满足我的所有要求(位置除外,可以再设置13个字符),这个内置功能多么方便。除此之外,这是一个标准漏洞。
Mark Jeronimus 2014年

19
通常,具有单字符标记的专业语言或具有大量内置特殊功能的系统(如Mathematica)都会赢得代码高尔夫。使用它们并不是在作弊,在APL中,使用单字符命令将比使用它们多得多。
Michael Stern

9

R,199211个字符

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)

enter image description here

编辑: 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)

enter image description here


从技术上讲,不允许在外部使用黑色。您错过了吗?还是很难实施?
Mark Jeronimus 2014年

@MarkJeronimus实际上都是:)我会尝试看看如何做到这一点,但我不是100%相信我会找到一种干净的方法。
plannapus 2014年

@MarkJeronimus完成!
plannapus 2014年

5
在可怕的颜色部门中排名第二。
meawoppl 2014年

1
@meawoppl怪rainbow():)
plannapus 2014年

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


w,我想做这个。+1
SIGSTACKFAULT

8

TI-80 BASIC,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

基于数字创伤的答案。 在此处输入图片说明


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上的“随机像素”纹理)。


变量声明也应计算在内,除非可以从代码中自动生成它们。(如果只能将配色方案用作外部设置,则可以使用配色方案)
Mark Jeronimus 2014年

@MarkJeronimus:对于ShaderToy环境,这些变量是固定的。否则,对于标准着色器,我会选择较短的变量名。
nneonneo 2014年

这是所有人中最快的吗?
黛咪

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

输出:

Mandelbrot迈向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

是的,现在好多了。
aschepler 2014年

+1简洁的解决方案。但是您的长宽比不是1:1(请参阅规则n°2:输出应为正方形)。
plannapus 2014年

固定长宽比将再花费11个字节:追加“ ;axis image”。是否需要资格?
aschepler 2014年

我认为那只是我的挑剔:),OP似乎没有问题,因为他什么也没说。
plannapus 2014年

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 确实对空间不足感到宽容。整个程序只需要一个空格。

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,并且可能会被放弃。(未经测试)
Mark Jeronimus 2014年

1
不,这不是复制粘贴。这是一个非常简单的公式,甚至没有必要进行搜索。但是,当我寻找一种初始化复数的更好方法时,确实找到了通过搜索获得的页面(在这种情况下,它们的实现也有所不同)。感谢您提供有关真实部分的提示,它可以正常工作。定影。
Orion 2014年

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 2014年

很好,你打败了我。我喜欢C-C代替我的0*e(401)。另外,您没有使用N。我们可以用我的m+=abs(z)<2想法代替你的做法来缩短点数K(~K&abs(Z)>2)=j
aschepler 2014年

默认值colormap jetcolormap hot都不正确-它们只有64种不同的颜色。 colormap(hot(101))在我看来在视觉上没有区别。 colormap([0,0,0;jet(100)])是可以接受的,但很不稳定。
aschepler 2014年

那样有用吗?在八度音阶上K=K+abs(Z)<2K=((K+abs(Z))<2)。(所以我对消除一个字节的估计是错误的+=。)
aschepler 2014年

2
旋转90度的Mandelbrot集仍然是Mandelbrot集。
克里斯·泰勒

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/

在此处输入图片说明


如果我不理解您制作简短版本的说明,请原谅我。
Mark Jeronimus

没问题。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/

was: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/

Mandelbrot Coffeescript


OP要求提供颜色,除非您的平台不支持颜色。看起来不错,但是代码简洁。欢迎来到PPCG!
乔纳森·范·马特雷2014年

我从这个大小285B开始,然后在此答案中
KamilKiełczewski13

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

Excel 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谢谢。那是我原著的遗留物,它具有用于复数数学的专用功能。
Engineer Toast

是否真的需要> = 4还是可以摆脱> 4?此外,可以代替j<99使用j<D
ceilingcat '17

@EngineerToast可以()从子名称中删除,您应该更改(j<99)为,(j<d)并且可以使方形单元格仅Cells.RowHeight=48用于代替Cells.RowHeight=9Cells.ColumnWidth=1-这样会使您的输出变得更加困难,但已被接受为有效由社区-–
泰勒·斯科特

1
@TaylorScott我还记得RowHeightVBA技巧文章中的技巧,并打算在获得所有漂亮图片后将其整合。谢谢你,那真是个好兆头。
Engineer Toast

我相信您可以通过2^201E6
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的Mandelbrot分形

从此代码打高尔夫球


2
提名:最丑的配色方案。
meawoppl 2014年

3

浮动像素620像素

当我从自己的挑战以及深奥的彼得(Piet)语言中获得灵感时,我所创造的语言。

在此处输入图片说明


2
链接到语言和代码说明?或者实际上,代码是什么?
MD XF
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.