40

コードゴルフの通常のルール。これが例としてのPythonでの実装です

from PIL import Image

im = Image.new("RGB", (300,300))
for i in xrange(300):
    print "i = ",i
    for j in xrange(300):
        x0 = float( 4.0*float(i-150)/300.0 -1.0)
        y0 = float( 4.0*float(j-150)/300.0 +0.0)
        x=0.0
        y=0.0
        iteration = 0
        max_iteration = 1000
        while (x*x + y*y <= 4.0 and iteration < max_iteration):
            xtemp = x*x - y*y + x0
            y = 2.0*x*y+y0
            x = xtemp
            iteration += 1
        if iteration == max_iteration:
            value = 255 
        else:
            value = iteration*10 % 255
        print value 
        im.putpixel( (i,j), (value, value, value))

im.save("image.png", "PNG")

結果は次のようになります

マンデルブロ集合

画像ライブラリの使用が許可されています。または、ASCIIアートを使用することもできます。このコードは同じことをします

for i in xrange(40):
    line = []
    for j in xrange(80):
        x0 = float( 4.0*float(i-20)/40.0 -1.0)
        y0 = float( 4.0*float(j-40)/80.0 +0.0)
        x=0.0
        y=0.0
        iteration = 0
        max_iteration = 1000
        while (x*x + y*y <= 4.0 and iteration < max_iteration):
            xtemp = x*x - y*y + x0
            y = 2.0*x*y+y0
            x = xtemp
            iteration += 1
        if iteration == max_iteration:
            line.append(" ")
        else:
            line.append("*")
    print "".join(line)

結果

********************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************
**************************************** ***************************************
**************************************** ***************************************
**************************************** ***************************************
**************************************** ***************************************
**************************************** ***************************************
**************************************** ***************************************
**************************************** ***************************************
***************************************   **************************************
*************************************       ************************************
************************************         ***********************************
***********************************           **********************************
************************************         ***********************************
*************************************       ************************************
***********************************           **********************************
********************************                 *******************************
****************************                         ***************************
*****************************                       ****************************
****************************                         ***************************
************************   *                         *   ***********************
***********************    *                         *    **********************
******************** *******                         ******* *******************
****************************                         ***************************
******************************                     *****************************
*****************************  *        *        *  ****************************
********************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************

編集

アスキーアートのルール:

  • 行/列のサイズはパラメーター化されており、コードは任意の有効な値で機能する必要があります。
  • 反復回数に応じて、密度が少なくとも3レベル異なります(したがって、そこにある私のプロトタイプは準拠していません)
  • 水平方向(つまり、私のプロトタイプは準拠していません)
  • 重要なパラメータは固定されています(最大反復= 1000、暴走値x x + y y <= 4.0)

グラフィックのルール:

  • 行/列のサイズはパラメーター化されており、コードは任意の有効な値で機能する必要があります。
  • 少なくとも3レベルの色、グレースケール
  • 水平方向(私のプロトタイプは準拠しています)
4

15 に答える 15

42

すでに数年前にperlmonksに投稿されたperlソリューションがありました、それは読みます:

#!/usr/bin/perl
 $r=25; $c=80;
                                              $xr=6;$yr=3;$xc=-0.5;$dw=$z=-4/
                                              100;local$";while($q=$dr=rand()
                                             /7){$w+=$dw;$_=join$/,map{$Y=$_*
                                             $yr/$r;
  join""                                    ,map{$                  x=$_*$
 xr/$c;($                                   x,$y)=                 ($xc+$x
  *cos($                                   w)-$Y*               sin$w,$yc+
                                           $x*sin              ($w)+$Y*cos
  $w);$                                   e=-1;$                    a=$b=0
;($a,$b)   =($u-$v+$x,2*$a*               $b+$y)                    while(
$ u=$a*$   a)+($v=$b*$b)<4.5  &&++$e     <15;if                     (($e>$
  q&&$e<   15)||($e==$q and   rand()     <$dr))  {$q=$e;($d0,$d1)   =($x,$
  y); }                        chr(+(   32,96,+  46,45,43,58,73,37  ,36,64
 ,32)[$                        e/1.5]   );}(-$   c/2)..($c/2)-1;}   (-$r/2
 )..($     r/2)-1;select$",     $",$", 0.015;                       system
$^O=~m     ~[wW]in~x?"cls":     "clear";print                       ;$xc=(
$d0+15     *$xc)/16;$yc=($       d1+15*$yc)/                        16;$_*=
1+$z for                         $xr,$yr;$dw                     *=-1 if rand
()<0.02;                          (++$i%110                      )||($z*=-1)}

これは「マンデルブロエクスプローラー」です。

(作成者によると、回転、ズームイン、ズームアウト、ランダムにスクロールして、「興味深い」と見なされるマンデルブロ集合の領域を調べます。)

ここで指定されている仕様に正確には準拠していませんが、興味深いエントリ(imho)を作成します。たぶん、単純なマンデルブロは、perlの神々にとってあまり興味深いものではありません; .-)

よろしく

rboo

于 2010-04-16T21:09:15.270 に答える
25

J、レベル付きのグレースケールグラフィック出力、170文字。

load'viewmat'
c=:>(<:;|:;0$])((2$>:@+:)$-:%~i:)300
(2.5*|:3 99$i._99)viewmat {:99&<.@;@(({:+4&<@:({.+1&{)@:*:);~(0{c)&+@({.-1&{)@:*:,:(1{c)&+@:+:@({.*1&{))^:99 c

代替テキストhttp://i40.tinypic.com/2i7lm0.jpg

J、レベル付きのグラフィカル出力、151文字。

load'viewmat'
c=:>(<:;|:;0$])((2$>:@+:)$-:%~i:)99
viewmat {:99&<.@;@(({:+4&<@:({.+1&{)@:*:);~(0{c)&+@({.-1&{)@:*:,:(1{c)&+@:+:@({.*1&{))^:99 c

出力:

代替テキストhttp://i40.tinypic.com/6ynxap.jpg

J、グラフィック出力、124文字。

load'viewmat'
c=:>(<:;|:)((2$>:@+:)$-:%~i:)200
viewmat 4>:({.+{:)@:*:(5<.>@(({.c)&+@({.-{:)@:*:;({:c)&+@:+:@({.*{:)))^:999 c

基本的には、ASCII出力で「viewmat」を実行するだけです。

代替テキストhttp://i40.tinypic.com/etv5lf.jpg

J、ASCII、101文字。

c=:>(<:;|:)((2$>:@+:)$-:%~i:)20
4>:({.+{:)@:*:(5<.>@(({.c)&+@({.-{:)@:*:;({:c)&+@:+:@({.*{:)))^:999 c

サイズを適切にパラメータ化するために6文字を無駄にしました。

J、ASCII、95文字。

c=:>(<:;|:)41 41$10%~i:20
4>:({.+{:)@:*:(5<.>@(({.c)&+@({.-{:)@:*:;({:c)&+@:+:@({.*{:)))^:999 c

まだ複数レベルのグレースケールを実行していません。

説明(現在は古くなっていますが、後で更新されます):

i:20

-20から20までの整数のリストを生成します。

10%~i:20

それらをすべて10で除算します(%除算、~引数の逆順です。

41 41$10%~i:20 

このリストを41x41の配列にラッピングして入力します。

(-&1;|:)41 41$`10%~i:20`

この配列に同じサイズの2番目の配列を追加しますが、転置します。-&1各要素から1を減算し、;追加し、|:転置します。これで2x41x41配列ができました。最初の41x41配列には各座標の「x0」値が含まれ、2番目の配列には「y0」値が含まれています。

4<:~({.+{:)@:*:(5<.>@(({.c)&+@:({.-{:)@:*:;({:c)&+@:+:@:({.*{:)))^:1000 ($c)$0

わお。これを右から分割してみましょう。

($c)$0

これにより、0で埋められた2番目の2x41x41配列(cと同じサイズ)が作成されます。これは、反復する変数になります。基本的に、最初の配列には「x」値が含まれ、2番目の配列には「y」値が含まれます。

^:1000「括弧内の前のことを1000回繰り返します。これがループカウンターです。

(5<.>@(({.c)&+@:({.-{:)@:*:;({:c)&+@:+:@:({.*{:))

これは次の大きな塊です。基本的に、ループを1回繰り返します。最初に、でxを生成し、次にそれをy(({.c)&+@:({.-{:)@:*:に結合します;({:c)&+@:+:@:({.*{:)

   (({.c)&+@:({.-{:)@:*:

これによりxが生成されます(xとyを表す2x41x41配列で動作していることを思い出してください)。最初に*:各要素を二乗し、次に{. - {:、またはx ^ 2-y^2を実行します。{.最初の41x41アレイと{:2番目のアレイを選択します。@:関数を結合します。

({.c)&+x ^ 2-y ^ 2に、x0を追加する必要があります-これはcの最初の41x41配列であるため、-curries &{.cx0)を。に追加できます+

({:c)&+@:+:@:({.*{:)

同様の方法でyを生成します。まず、入力x配列{.とy{:配列をペアごとに乗算し、結果を2倍にして+:、y0を追加し{:cます。

この関数の最後のステップは単純です5<.>-2つの新しいx配列とy配列の結合を解除し、5で上限を設定します-この関数は4を超えて単調に増加しているため、問題ありません。各反復で値に上限を設定しないでください。

4>:({.+{:)@:*:

反復が終了したら、最後のステップ。x配列とy配列を二乗し、*:それらを足し合わせて、 4未満{.+{:のすべての要素に当てはまるブール配列を作成します。>:

出力:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
于 2010-04-15T05:55:16.510 に答える
12

Python 108 (以前は 122):

for a in range(900):print"\nx"[(a%30>0)+(abs(reduce(lambda z,c:z*z+c,[a%30*.1-2+1j*) (a/30*.1-1.5)]*30))<2)]、

最後の「30」は反復回数であり、次元の 1 つではありません。
出力は次のようになります。

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . バツ 。. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . xx . . . . . . . . . .
. . . . . . . . . . . . . . . . . xx . . . . . . . . . .
. . . . . . . . . . . . . . バツ 。xxxxx。. . . . . . .
. . . . . . . . . . . . . . xxxxxxxxx . . . . . .
. . . . . . . . . . . . . xxxxxxxxx . . . . . .
. . . . . . . . . バツ 。. . xxxxxxxxx . . . . . .
. . . . . . . . xxx . xxxxxxxxxxxx . . . . .
. . . . . . . xxxxxxxxxxxxxxx . . . . . .
xxxxxxxxxxxxxxxxxxxxx x . . . . . . .
. . . . . . . xxxxxxxxxxxxxxx . . . . . .
. . . . . . . . xxx . xxxxxxxxxxxx . . . . .
. . . . . . . . . バツ 。. . xxxxxxxxx . . . . . .
. . . . . . . . . . . . . xxxxxxxxx . . . . . .
. . . . . . . . . . . . . . xxxxxxxxx . . . . . .
. . . . . . . . . . . . . . バツ 。xxxxx。. . . . . . .
. . . . . . . . . . . . . . . . . xx . . . . . . . . . .
. . . . . . . . . . . . . . . . . xx . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . バツ 。. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

更新されたルールに基づいて更新します....

于 2010-04-14T18:17:26.317 に答える
10

Haskell (185 文字、質問で必要なすべての機能を含む)

複素数を使用し、必要な反復回数を実際にカウントします(他の回答の「単純な」バージョンとは異なります)。

import Complex
i v=show(length$takeWhile((<=4).magnitude)$take 1000$iterate(\c->c*c+v)v)!!0
r t=[-2,4/read t-2..2]
main=getLine>>=(\[s,t]->mapM_ putStrLn[[i$x:+y|x<-r s]|y<-r t]).words

結果の画像の寸法は stdin から読み取られます。出力は、必要な反復回数に応じて「色付け」されます。

$ ./分数
60 30
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111の
1111111111111112222222222222221111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111の、
11111111122222222222222222222222222111111111111111111111111111111111111111111111111111111222222222222222222222222221111111111111111111111111111111222222222222222222111111111111111111111111111111111111111111111112222222222222222221111111111111111111111112222222222222222221111111111111111111111での
11111122222222222222222222222222222221111111111111111111111111111111111111111
111222222222222222222222222222222222222211111111111111111
1222222222222222222223333333333222222222221111111111111111
22222222222222222333333334444333333222222222211111111111111
2222222222222333333333445875544333332222222222111111111111
2222222222233333333444455681175444333322222222211111111111
2222222233333333444455567111117655443332222222221111111111
22222333333334444556239111216156878644333222222222111111111
222333333444445555668111111111111115754433322222222211111111
23333344456176777779111111111111111185433322222222211111111
33334444566811312311111111111111111165433332222222221111111
34445556711111111111111111111111111464433322222222221111111111111111111111111464433332222222221111111
25698881111111111111111111111111129654433332222222221111111
34445556711111111111111111111111111464433322222222221111111111111111111111111464433332222222221111111
33334444566811312311111111111111111165433332222222221111111
23333344456176777779111111111111111185433322222222211111111
222333333444445555668111111111111115754433322222222211111111
22222333333334444556239111216156878644333222222222111111111
2222222233333333444455567111117655443332222222221111111111
2222222222233333333444455681175444333322222222211111111111
2222222222222333333333445875544333332222222222111111111111
22222222222222222333333334444333333222222222211111111111111
1222222222222222222223333333333222222222221111111111111111
111222222222222222222222222222222222222211111111111111111
11111122222222222222222222222222222221111111111111111111111111111111111111111
11111111122222222222222222222222222111111111111111111111111111111111111111111111111111111222222222222222222222222221111111111111111111111111111111222222222222222222111111111111111111111111111111111111111111111112222222222222222221111111111111111111111112222222222222222221111111111111111111111での
1111111111111112222222222222221111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111の、
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111の
于 2010-04-14T23:48:04.123 に答える
9

Delphi - 310 249 239 224 文字

アスキー版。グラデーション シェーディングに 7 レベルを使用します。

  • (Uwe Raabe の提案による) に従って削除program P;されました。{$APPTYPE CONSOLE}
  • インライン化された 1000 const (Uwe Raabe による提案);
  • インライン'8Oo;,. '変数。
  • ループ変数を負にできるように に変更wordinteger、I のループ範囲を から に変更し3..38て(Eric Grange の提案);に置き換えられるようにしました-5..30(I-8)I
  • 1000に変更1e3(Eric Grange が提案)
  • タイプDoubleReal(電子メールで Luc Neville が提案)に変更しました
  • 括弧を削除while((x*x+y*y<=4)and(t<1000))do--> while(x*x+y*y<=4)and(t<1000)do(電子メールで Luc Neville が提案)
  • キーワードが続く数字の間のスペースを削除しました(そのため、 (ネビルfor j:=-5 to 30 dofor j:=-5to 30do電子メールで提案)
  • ループ範囲をfor j:=8to 40doに変更し、マイナス記号を削除し、整数を単語に戻しました。x * x - y * y + i / 16 - 2;に変更することにより、数式でこのオフセットを補正しましたx * x - y * y + i / 16 - 3

読めないバージョン:

var n,x,y:Real;t,i,j:Word;begin for j:=8to 40do begin for i:=8to 65do begin x:=0;y:=0;t:=0;while(x*x+y*y<=4)and(t<1e3)do begin n:=x*x-y*y+i/16-3;y:=2*x*y+j/12-2;x:=n;inc(t)end;Write('8Oo;,. '[t mod 7+1])end;WriteLn;end;end.

フォーマットされたコード:

var
  n, x, y: Real;
  t, i, j: Word;
begin
  for j := 8 to 40 do
  begin
    for i := 8 to 65 do
    begin
      x := 0;
      y := 0;
      t := 0;
      while (x * x + y * y <= 4) and (t < 1e3) do
      begin
        n := x * x - y * y + i / 16 - 3;
        y := 2 * x * y + j / 12 - 2;
        x := n;
        inc(t)
      end;
      Write('8Oo;,. '[t mod 7 + 1])
    end;
    WriteLn;
  end;
end.

出力:

OOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooo
OOOOOOOOOOOOOOOOooooooooo;;;;;;;;;;;;;;;oooooooooooooooooo
OOOOOOOOOOOOOOOoooooo;;;;;;;;;;;;;;,,,,,;;;;oooooooooooooo
OOOOOOOOOOOOOOooooo;;;;;;;;;;;;;,,,, ; .,,,;;;oooooooooooo
OOOOOOOOOOOOOoooo;;;;;;;;;;;;;,,,,.. O   ,,,,;;;oooooooooo
OOOOOOOOOOOOooo;;;;;;;;;;;;;,,,,,...8oo,8..,,,;;;;oooooooo
OOOOOOOOOOOooo;;;;;;;;;;;;,,,,,,.. Oo. ; 8...,,;;;;ooooooo
OOOOOOOOOOOoo;;;;;;;;;;;;,,,,,.   8OO    O8 ..,,;;;;oooooo
OOOOOOOOOOoo;;;;;;;;;;;,,,,..  O,oO8oo ,OOoO88,.,;;;;ooooo
OOOOOOOOOOo;;;;;;;;;;,,,....  o. .         OOO  ,;;;;;oooo
OOOOOOOOOO;;;;;;;;;,,......  o.,              o .,;;;;;ooo
OOOOOOOOOo;;;;;;,,. o     88O.                ;O.,;;;;;ooo
OOOOOOOOO;;;,,,,,.. ,,o;,oOo;                  o ,,;;;;;oo
OOOOOOOOO;,,,,,... 8o;   8;,                    .,,;;;;;oo
OOOOOOOOO,,,,,... Oo       .                   8.,,;;;;;oo
OOOOOOOOO,.,.  88oo o       ,                 , .,,;;;;;oo
OOOOOOOO                                     ,8 .,,;;;;;;o
OOOOOOOOO,.,.  88oo o       ,                 , .,,;;;;;oo
OOOOOOOOO,,,,,... Oo       .                   8.,,;;;;;oo
OOOOOOOOO;,,,,,... 8o;   8;,                    .,,;;;;;oo
OOOOOOOOO;;;,,,,,.. ,,o;,oOo;                  o ,,;;;;;oo
OOOOOOOOOo;;;;;;,,. o     88O.                ;O.,;;;;;ooo
OOOOOOOOOO;;;;;;;;;,,......  o.,              o .,;;;;;ooo
OOOOOOOOOOo;;;;;;;;;;,,,....  o. .         OOO  ,;;;;;oooo
OOOOOOOOOOoo;;;;;;;;;;;,,,,..  O,oO8oo ,OOoO88,.,;;;;ooooo
OOOOOOOOOOOoo;;;;;;;;;;;;,,,,,.   8OO    O8 ..,,;;;;oooooo
OOOOOOOOOOOooo;;;;;;;;;;;;,,,,,,.. Oo. ; 8...,,;;;;ooooooo
OOOOOOOOOOOOooo;;;;;;;;;;;;;,,,,,...8oo,8..,,,;;;;oooooooo
OOOOOOOOOOOOOoooo;;;;;;;;;;;;;,,,,.. O   ,,,,;;;oooooooooo
OOOOOOOOOOOOOOooooo;;;;;;;;;;;;;,,,, ; .,,,;;;oooooooooooo
OOOOOOOOOOOOOOOoooooo;;;;;;;;;;;;;;,,,,,;;;;oooooooooooooo
OOOOOOOOOOOOOOOOooooooooo;;;;;;;;;;;;;;;oooooooooooooooooo
OOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooo
于 2010-06-05T04:12:01.977 に答える
8

T-SQL ( 421 408 文字)

declare @s varchar(max);
with
x(x)as(select CAST(-2.0 as real)union all select x+.01 from x where x<1),
y(y)as(select CAST(-1.1 as real)union all select y+.02 from y where y<1.1),
g(x,y,u,v,g)as(select x,y,x*0,y*0,0 from x,y union all select x,y,u*u-v*v+x,2*u*v+y,g+1 from g where g<24and u*u+v*v<4),
m(x,y,v)as(select x,y,case when x<-1.99 then char(10)end+substring(' .-''^"+oiexp**##$$$§§%%%@',COUNT(*),1)from g group by x,y)
select @s=@s+v from m order by y,x option(maxrecursion 400)
select @s

出力は次のとおりです。

于 2010-04-16T21:32:31.667 に答える
7

awk - 134 135文字

アスキーアート、完全準拠。Python リファレンス実装のかなり単純な翻訳:

{for(j=-2;j<=2;j+=4/$2){for(i=-3;i<=1;i+=4/$1){for(x=y=k=0;x*x+y*y<=4&&++k<4^5;)
{t=x*x-y*y+i;y=2*x*y+j;x=t}printf"%d",log(k)}print""}}

テスト走行

$ awk -f mandel.awk 
10 10
00000000000
00000000000
00000111000
00001116110
00011166610
00046666611
00011166610
00001116110
00000111000
00000000000
00000000000

これがVT-100アートです。xterm を「読めない」文字に設定してから、400x200 の設定を試してください:

{for(j=-2;j<=2;j+=4/$2){for(i=-3;i<=1;i+=4/$1){for(x=y=k=0;x*x+y*y<=4&&++k<1000;)
{t=x*x-y*y+i;y=2*x*y+j;x=t}printf"\x1b[4%dm ",log(k)}print"\x1b[0m"}}
于 2010-04-17T21:48:29.740 に答える
6

Haskell(162文字)

(かなり)単純なASCIIアートバージョン:

c(x,y)|x*x+y*y<4.0='x'
 |True='.'
i v w=c(iterate s(v,w)!!1000)where s(x,y)=(x*x-y*y+v,2*x*y+w)
main=mapM_ putStrLn[[i x y|x<-[-1.5,-1.45..0.5]]|y<-[1,0.9.. -1]]

出力:

$ ./a.out
........................................。
........................................。
..........................xxxx..........。
..........................xxxx..........。
....................x..xxxxxxxxxx.......。
....................xxxxxxxxxxxxxxxxx...。
..................xxxxxxxxxxxxxxxxxxx...。
................. xxxxxxxxxxxxxxxxxxxxx .. ..
.......xxxxxxx..xxxxxxxxxxxxxxxxxxxxxx..。
......xxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxx..。
..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx....。
......xxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxx..。
.......xxxxxxx..xxxxxxxxxxxxxxxxxxxxxx..。
................. xxxxxxxxxxxxxxxxxxxxx .. ..
..................xxxxxxxxxxxxxxxxxxx...。
....................xxxxxxxxxxxxxxxxx...。
....................x..xxxxxxxxxx.......。
..........................xxxx..........。
..........................xxxx..........。
........................................。
........................................。

より読みやすいバージョン:

outchar (x,y)
   | x*x + y*y < 4.0 = 'x'
   | otherwise       = '.'

calc v w = outchar (iterate step (v,w) !! 1000)
   where step (x,y) = (x*x - y*y + v, 2*x*y + w)

main = mapM_ putStrLn [[calc x y
                        | x <- [-1.5, -1.45 .. 0.5]]
                       | y <- [1, 0.9 .. -1]]
于 2010-04-14T17:14:30.693 に答える
6

パイソン197162

def m():
    for a in range(900):
        c=complex(a%30*.1-2,a/30*.1-1.5);z,i=c-c,0
        while i<28 and abs(z)<2:z,i=z*z+c,i+1
        if a%30==0:print
        print ".-+oxawOX "[i/3],

Pythonで空白を取り除く方法に興味があります。

于 2010-04-14T17:21:39.127 に答える
6

アセンブラ

.COM 実行可能ファイル = 140 バイト

ソース = 652 バイト

mov ax,13h
int 10h
mov bx,200
xor di,di
mov ax,0a000h
mov es,ax
l1:mov bp,320
mov [si],bx
fild w[si]
fisub w[v100]
fidiv w[v50]
l2:mov cx,1000
mov [si],bp
fild w[106h]
fisub w[si]
fidiv w[v80]
fld1
fsubp
fldz
fldz
l3:fld st(1)
fmul st(0)
fld st(1)
fmul st(0)
fld st(0)
fadd st(2)
fcomp d[v4]
fstsw ax
test ah,45h
jz l4
fsubp
fadd st(3)
fxch st(2)
fild w[v2]
fmulp st(1)
fmulp st(1)
fadd st(3)
loop l3
mov al,255
l5:fcompp
fcomp
stosb
dec bp
jnz l2
fcomp
dec bx
jnz l1
mov ah,7
int 21h
mov ax,3
int 10h
ret
l4:mov ax,-10
mul cx
fcompp
jmp l5
v100:dw 100
v50:dw 80
v80:dw 90
v4:dd 4.0
v2:dw 2
于 2010-10-18T14:29:49.770 に答える
5

JavaScript(168/174文字)

Rhinoバージョン(168文字):

m=1000;for(i=0;i<40;i++){l=[];for(j=0;j<80;j++){v=j/80*3-2,w=2-i/40*3,x=y=c=0;while(x*x+y*y<5&&c<m)t=x*x-y*y+v,y=2*x*y+w,x=t,c++;l.push(c==m?' ':'-')}print(l.join(''))}

Firebugバージョン(174文字):

m=1000;for(i=0;i<40;i++){l=[];for(j=0;j<80;j++){v=j/80*3-2,w=2-i/40*3,x=y=c=0;while(x*x+y*y<5&&c<m)t=x*x-y*y+v,y=2*x*y+w,x=t,c++;l.push(c==m?' ':'-')}console.log(l.join(''))}
于 2010-04-17T07:16:06.400 に答える
5

Ruby -139文字(Twitter対応)

b,a=$*;a.to_i.times{|l|puts (0..b.to_i).map{|n|x=y=i=0;(x,y,i=x*x-y*y+n/38.0-1.5,2*x*y+l/14.0-1,i+1)until(x*x+y*y>4||i>78);(32+i).chr}*""}

$ ruby mandelbrot.rb 80 32

または単一のコマンドラインとして(134文字を含むruby -e

ruby -e "32.times{|l|puts (0..78).map{|n|x=y=i=0;(x,y,i=x*x-y*y+n/38.0-1.5,2*x*y+l/14.0-1,i+1)until(x*x+y*y>4||i>78);(32+i).chr}*''}"
"############################### $$$$$$$$$$$$ %%%% &&') * /))*。o&%$$$$$$$$ ######## "" "" "
############################ $$$$$$$$$$$$$ %%%%%&''( (* -G、*('&& %% $$$$$$$$$ ######## ""
######################### $$$$$$$$$$$$$ %%%%%&&'929-03ooL。+ 0:'&%%%%% $$$$$$$$ ########
##################### $$$$$$$$$$$$$$ %%% &&&&&''()-1oooooooo / *('&& %%%%%%% $$$$$$ ######
################## $$$$$$$$$$$$$ %%%&'''''''''())*、6oooooooo。 *)(('' &&&&&&&&%$$$ #####
############### $$$$$$$$$ %%%%%% &&'(+ 3:0。、++ ooE6ooooooooooo?8o1j?8)((( ()4 /'&%$$$ ###
########### $$$$$$$ %%%%%%%%%% &&&&''(* 1> ooo8oooooooooooooooooooooooo.3oooD /、'%% $$$$ ##
####### $$$$ %%%%%%%%%%%%% &&&&&&')8、、17ooooooooooooooooooooooooooooooooQ0)' && %% $$$#
$$$$$$%&)(&&&&&&&&&&&&&&&'''((* 18oooooooooooooooooooooooooooooooooooool *(('&%% $$$
$$ %%%% && * 2 *))((((25 *(('''((()+ F> = oooooooooooooooooooooooooooooooooooooooo1。(%% $$$
%%%%% &&'()*、1o47 // 5o5 /?、+*** + 3oooooooooooooooooooooooooooooooooooooooooo。)(&%% $$$
%%%%&'''(* +-3ooooooooooom//-。oooooooooooooooooooooooooooooooooooooooooooo9+&%% $$$
&&(* +)))+-?ooooooooooooooooL5ooooooooooooooooooooooooooooooooooooooooooo8)&%%% $$$
'()*-X = U95ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo *'&& %%% $$$
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo:。+)('&& %%% $$$
'()*-X = U95ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo *'&& %%% $$$
&&(* +)))+-?ooooooooooooooooL5ooooooooooooooooooooooooooooooooooooooooooo8)&%%% $$$
%%%%&'''(* +-3ooooooooooom//-。oooooooooooooooooooooooooooooooooooooooooooo9+&%% $$$
%%%%% &&'()*、1o47 // 5o5 /?、+*** + 3oooooooooooooooooooooooooooooooooooooooooo。)(&%% $$$
$$ %%%% && * 2 *))((((25 *(('''((()+ F> = oooooooooooooooooooooooooooooooooooooooo1。(%% $$$
$$$$$$%&)(&&&&&&&&&&&&&&&'''((* 18oooooooooooooooooooooooooooooooooooool *(('&%% $$$
####### $$$$ %%%%%%%%%%%%% &&&&&&')8、、17ooooooooooooooooooooooooooooooooQ0)' && %% $$$#
########### $$$$$$$ %%%%%%%%%% &&&&''(* 1> ooo8oooooooooooooooooooooooo.3oooD /、'%% $$$$ ##
############### $$$$$$$$$ %%%%%% &&'(+ 3:0。、++ ooE6ooooooooooo?8o1j?8)((( ()4 /'&%$$$ ###
################## $$$$$$$$$$$$$ %%%&'''''''''())*、6oooooooo。 *)(('' &&&&&&&&%$$$ #####
##################### $$$$$$$$$$$$$$ %%% &&&&&''()-1oooooooo / *('&& %%%%%%% $$$$$$ ######
######################### $$$$$$$$$$$$$ %%%%%&&'929-03ooL。+ 0:'&%%%%% $$$$$$$$ ########
############################ $$$$$$$$$$$$$ %%%%%&''( (* -G、*('&& %% $$$$$$$$$ ######## ""
"############################### $$$$$$$$$$$$ %%%% &&') * /))*。o&%$$$$$$$$ ######## "" "" "
"" "" "############################### $$$$$$$$$$ %%%& ' *)'&& %%% $$$$$$$$ ####### "" "" "" "" ""
"" "" "" "" "################################# $$$$$$$% %%%% $$$$$$ ######### "" "" "" "" "" "" ""
"" "" "" "" "" "" "" "" #################################### ########### "" "" "" "" "" "" "" "" "" "" "
于 2010-10-18T07:56:15.650 に答える
5

DC エントリ - 152 文字

私のいつもの狂気dc

Ak?4r/sa4r/sbA00sm[0*]sG_2sj[_3si[0ddsxsysk[lxd*lyd*-li+2lxly**lj+sysx1lxd*lyd*+
4!>G1lk1+dsklm<G*1=L]dsLx0klk1-vvnAklila+dsi1!<I]dsIxAPljlb+dsj2!<J]dsJx

テスト走行:

bash-3.2$ dc -f mandel.dc 
10 20
000000000000000000000
000000000011111111111
000000001111111111111
000000111111115211111
000000111111555551111
000000555555555551111
000000111111555551111
000000111111115211111
000000001111111111111
000000000011111111111
000000000000000000000
于 2010-04-18T18:33:26.553 に答える
1

パイソン。98文字。

for _ in range(526):z=0;exec"z=z*z+_%25*.1-2+_/25*.1j-1j;"*50;print[".#"[z.real<4],"\n"][_%25<1],

次のようなものを出力します。

. . . . . . . . . . . . . . . . . . . # . . . . 
. . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . . # # . . . . . 
. . . . . . . . . . . . . . . . . # # . . . . . 
. . . . . . . . . . . . . . # . # # # # # . . . 
. . . . . . . . . . . . . . # # # # # # # # # . 
. . . . . . . . . . . . . # # # # # # # # # # . 
. . . . . . . . . . . . . # # # # # # # # # # . 
. . . . . . . . # # # . # # # # # # # # # # # . 
. . . . . . . # # # # # # # # # # # # # # # # . 
# # # # # # # # # # # # # # # # # # # # # # . . 
. . . . . . . # # # # # # # # # # # # # # # # . 
. . . . . . . . # # # . # # # # # # # # # # # . 
. . . . . . . . . . . . . # # # # # # # # # # . 
. . . . . . . . . . . . . # # # # # # # # # # . 
. . . . . . . . . . . . . . # # # # # # # # # . 
. . . . . . . . . . . . . . # . # # # # # . . . 
. . . . . . . . . . . . . . . . . # # . . . . . 
. . . . . . . . . . . . . . . . . # # . . . . . 
. . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . . . . # . . . . 

http://codepad.org/rNPrgQ3H

于 2011-10-23T17:41:13.230 に答える
1

C#-330

using ステートメントを削除し、先頭の空白と行末を削除した場合は 277

int c,i,j,w=300,h=300,m=50;
using(var b=new Bitmap(w,h)){
 for(i=0;i<w;i++){
  for(j=0;j<h;j++){
   double x0=4.0*(i-w/2)/w-1,y0=4.0*(j-h/2)/h,x=0.0,y=0.0;
   for(c=0;x*x+y*y<=4.0&&c<m;c++){
    var t=x*x-y*y+x0;
    y=2.0*x*y+y0;x=t;
   }
   int v=c==m?255:c*10%255;
   b.SetPixel(i,j,Color.FromArgb(v,v,v));
  }
 }
}

ロングショットで設定を記録するわけではありませんが、Python サンプルソースから変換して、判読できないほど圧縮するのは楽しいことです。

于 2011-08-14T05:09:38.843 に答える