Подтвердить что ты не робот

Code golf: набор Мандельброта

Обычные правила для кода гольфа. Вот пример реализации в 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")

Результат должен выглядеть так:

Mandelbrot set

Разрешено использование библиотеки изображений. Кроме того, вы можете использовать искусство 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)

Результат

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

Edit

Правила для искусства ASCII:

  • размер в строках/столбцах параметризуется, и код должен работать с любым допустимым значением.
  • по крайней мере три уровня дифференциации по плотности в зависимости от количества итераций (поэтому мой прототип там не соответствует)
  • ориентирован горизонтально (поэтому мой прототип там не соответствует)
  • фиксируются критические параметры (максимальная итерация = 1000, значение убегания xx + yy <= 4.0)

Правила для графики:

  • размер в строках/столбцах параметризуется, и код должен работать с любым допустимым значением.
  • как минимум три уровня цветов, шкала серого
  • ориентирован горизонтально (мой прототип совместим)
4b9b3361

Ответ 1

Уже несколько лет назад было решение perl размещенное в perlmonks, он гласит:

#!/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

Ответ 2

J, графический выход в шкале серого с уровнями, 170 символов.

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

alt text http://i40.tinypic.com/2i7lm0.jpg

J, графический вывод с уровнями, 151 символ.

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

Вывод:

alt text http://i40.tinypic.com/6ynxap.jpg

J, графический вывод, 124 символа.

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

В основном просто запускается "viewmat" на выходе ascii.

alt text http://i40.tinypic.com/etv5lf.jpg

J, ASCII, 101 символ.

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

Отброшено 6 символов, чтобы правильно параметризовать размер.

J, ASCII, 95 символов.

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

Пока он не выполняет несколько уровней оттенков серого.

Объяснение (в настоящее время устарело, будет обновлено позже):

i:20

Создайте список целых чисел от -20 до 20.

10%~i:20

Разделить их на 10 (% является делением, ~ является инвертированным порядком аргументов.

41 41$10%~i:20 

Заполните этот список в массив 41x41 с упаковкой.

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

Добавьте к этому массиву второй массив того же размера, но транспонированный. -&1 вычитает один из каждого элемента, ; добавляется, |: является транспонированным. Теперь у нас есть массив 2x41x41, где первый массив 41x41 содержит значения "x0" для каждой координаты, а второй содержит значения "y0".

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

Ого. Позвольте разбить это справа.

($c)$0

Это создает второй массив 2x41x41 (тот же размер, что и c), заполненный 0s. Это будет переменная, которую мы итерируем - в основном первый массив содержит значения "x", а второй содержит значения "y".

^:1000 означает "Повторять предыдущую вещь в круглых скобках 1000 раз. Это наш счетчик циклов.

(5<.>@(({.c)&[email protected]:({.-{:)@:*:;({:c)&[email protected]:+:@:({.*{:))

Это следующий большой кусок. Он в основном выполняет одну итерацию цикла. Сначала мы генерируем x с (({.c)&[email protected]:({.-{:)@:*:, затем присоединяем ; it к y ({:c)&[email protected]:+:@:({.*{:)

   (({.c)&[email protected]:({.-{:)@:*:

Это генерирует x (помните, что он работает с этим массивом 2x41x41, представляющим x и y). Сначала он квадратизирует *: каждый элемент, тогда {. - {:, или x ^ 2 - y ^ 2. {. выбирает первый массив 41x41 и {: второй. @: объединяет функции вместе.

В x ^ 2-y ^ 2 нам нужно добавить x0 - это первый массив 41x41 c, поэтому мы можем сделать это с помощью ({.c)&+ - & curries {.c (x0) в +.

({:c)&[email protected]:+:@:({.*{:)

Мы порождаем y аналогичным образом. Сначала мы попарно умножим входные массивы x {. и y {:, удвоим результат с помощью +: и добавим y0 {:c.

Последний шаг этой функции - это просто 5<.> - освобождение соединения двух новых массивов 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

Ответ 3

Python 108 (был 122):

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

Это последнее "30" - это счетчик итераций, а не один из параметров.
Результат выглядит так:

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . . . . x . . . . . . . . . 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . . x x . . . . . . . . . . 
. . . . . . . . . . . . . . . . . x x . . . . . . . . . . 
. . . . . . . . . . . . . . x . x x x x x . . . . . . . . 
. . . . . . . . . . . . . . x x x x x x x x x . . . . . . 
. . . . . . . . . . . . . x x x x x x x x x x . . . . . . 
. . . . . . . . . x . . . x x x x x x x x x x . . . . . . 
. . . . . . . . x x x . x x x x x x x x x x x x . . . . . 
. . . . . . . x x x x x x x x x x x x x x x x . . . . . . 
x x x x x x x x x x x x x x x x x x x x x x . . . . . . . 
. . . . . . . x x x x x x x x x x x x x x x x . . . . . . 
. . . . . . . . x x x . x x x x x x x x x x x x . . . . . 
. . . . . . . . . x . . . x x x x x x x x x x . . . . . . 
. . . . . . . . . . . . . x x x x x x x x x x . . . . . . 
. . . . . . . . . . . . . . x x x x x x x x x . . . . . . 
. . . . . . . . . . . . . . x . x x x x x . . . . . . . . 
. . . . . . . . . . . . . . . . . x x . . . . . . . . . . 
. . . . . . . . . . . . . . . . . x x . . . . . . . . . . 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . . . . x . . . . . . . . . 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Теперь мы будем обновляться на основе обновленных правил....

Ответ 4

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. Выход "цветной" в соответствии с количеством требуемых итераций:

$ ./fract
60 30
1111111111111111111111111111111111111111111111111111111111111
1111111111111112222222222222222111111111111111111111111111111
1111111112222222222222222222222222222111111111111111111111111
1111112222222222222222222222222222222222111111111111111111111
1112222222222222222222222222222222222222222111111111111111111
1222222222222222222222333333333322222222222221111111111111111
2222222222222222223333333344443333332222222222211111111111111
2222222222222233333333344458755443333322222222222111111111111
2222222222233333333344445568117544433333222222222211111111111
2222222233333333344445556711111765544333322222222221111111111
2222233333333444445562391112161568786443332222222222111111111
2223333334444455556681111111111111157544333222222222211111111
2333334445617677777911111111111111111854333222222222211111111
3333444456681131231111111111111111111654333322222222221111111
3444555671111111111111111111111111114644333322222222221111111
2569888111111111111111111111111111296544333322222222221111111
3444555671111111111111111111111111114644333322222222221111111
3333444456681131231111111111111111111654333322222222221111111
2333334445617677777911111111111111111854333222222222211111111
2223333334444455556681111111111111157544333222222222211111111
2222233333333444445562391112161568786443332222222222111111111
2222222233333333344445556711111765544333322222222221111111111
2222222222233333333344445568117544433333222222222211111111111
2222222222222233333333344458755443333322222222222111111111111
2222222222222222223333333344443333332222222222211111111111111
1222222222222222222222333333333322222222222221111111111111111
1112222222222222222222222222222222222222222111111111111111111
1111112222222222222222222222222222222222111111111111111111111
1111111112222222222222222222222222222111111111111111111111111
1111111111111112222222222222222111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111

Ответ 5

Delphi - 310 249 239 224 символа

ASCII версия. Использует 7 уровней для градиентного затенения.

  • Удалено program P; и {$APPTYPE CONSOLE} согласно (предложенному Уве Раабе);
  • Inlined 1000 const (предложенный Уве Раабе);
  • Вложенная переменная '8Oo;,. ';
  • Изменен word на integer, так что переменная цикла может быть отрицательной, а затем изменила диапазон циклов для я от 3..38 до -5..30, чтобы (I-8) можно было заменить на I (предположительно Эрик Грандж);
  • Изменен 1000 на 1e3 (предложенный Эриком Гранге)
  • Изменен тип Double до Real (предложенный Люком Невиллом по электронной почте)
  • Удаленные скобки while((x*x+y*y<=4)and(t<1000))dowhile(x*x+y*y<=4)and(t<1000)do (предложенный Люком Невиллом по электронной почте)
  • Удалены пробелы между номерами, за которыми следует ключевое слово (так что for j:=-5 to 30 do становится for 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

Ответ 6

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 @[email protected]+v from m order by y,x option(maxrecursion 400)
select @s

Вывод находится здесь:

Ответ 7

awk - 134 135 chars

Искусство ASCII, полностью совместимое. Достаточно простой перевод реализации ссылки на 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"}}

Ответ 8

Haskell (162 символа)

A (справедливо) прямо 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]]

Ответ 9

Python 197 162

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.

Ответ 10

Ассемблер

.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

Ответ 11

JavaScript (168/174 символов)

версия для носорога (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(''))}

Ответ 12

И запись постоянного тока - 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

Ответ 13

Ruby - 139 символов (Twitter-friendly)

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&%$$$$$$$$########"""""
"""""###############################$$$$$$$$$%%%&'*)'&&%%%$$$$$$$#######"""""""""
"""""""""#################################$$$$$$$%%%%%$$$$$#########"""""""""""""
""""""""""""""""#############################################""""""""""""""""""""

Ответ 14

С# - 330

277, если вы отбрасываете оператор using и удаляете начальные пробелы и окончания строк

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 и сжимать вниз, чем можно читать.

Ответ 15

Python. 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