Обычные правила для гольфа кода. Вот реализация в 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)
Результат
********************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************
**************************************** ***************************************
**************************************** ***************************************
**************************************** ***************************************
**************************************** ***************************************
**************************************** ***************************************
**************************************** ***************************************
**************************************** ***************************************
*************************************** **************************************
************************************* ************************************
************************************ ***********************************
*********************************** **********************************
************************************ ***********************************
************************************* ************************************
*********************************** **********************************
******************************** *******************************
**************************** ***************************
***************************** ****************************
**************************** ***************************
************************ * * ***********************
*********************** * * **********************
******************** ******* ******* *******************
**************************** ***************************
****************************** *****************************
***************************** * * * ****************************
********************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************
Править:
Правила для ASCII-творчества:
Правила для диаграммы:
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Теперь будет обновляться на основе обновленных правил ....
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.
Несколько лет назад уже было решение 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). Может быть, простой Mandlebrot не очень интересен богам Perl; .-)
С уважением
rboo
ASCII art, полностью соответствует. Довольно простой перевод эталонной реализации 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 art. Установите 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"}}
Использование комплексных чисел и фактический подсчет необходимого количества итераций (в отличие от " простая версия в моем другом ответе).
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
Размеры результирующего изображения считываются из стандартного ввода. Вывод «раскрашен» в соответствии с количеством требуемых итераций:
$ ./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
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(''))}
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
Мое обычное безумие в тестовом прогоне постоянного тока
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
(довольно) прямолинейная художественная версия 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]]
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
alt text http://i40.tinypic.com/2i7lm0.jpg
load'viewmat'
c=:>(<:;|:;0$])((2$>:@+:)$-:%~i:)99
viewmat {:99&<.@;@(({:+4&<@:({.+1&{)@:*:);~(0{c)&+@({.-1&{)@:*:,:(1{c)&+@:+:@({.*1&{))^:99 c
Выход:
alt text http://i40.tinypic.com/6ynxap.jpg
load'viewmat'
c=:>(<:;|:)((2$>:@+:)$-:%~i:)200
viewmat 4>:({.+{:)@:*:(5<.>@(({.c)&+@({.-{:)@:*:;({:c)&+@:+:@({.*{:)))^:999 c
В основном просто запускает "viewmat" на выходе ascii.
alt text http://i40.tinypic.com/etv5lf.jpg
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`
Добавьте к этому массиву второй массив того же размера, но транспонированный. -&1
вычитает единицу из каждого элемента, ;
- добавляет, |:
- транспонирует. Теперь у нас есть массив 2x41x41, где первый массив 41x41 содержит значения "x0" каждой координаты, а второй - значения "y0".
4<:~({.+{:)@:*:(5<.>@(({.c)&+@:({.-{:)@:*:;({:c)&+@:+:@:({.*{:)))^:1000 ($c)$0
Ого. Давайте разобьем это справа.
($c)$0
Это создает второй массив 2x41x41 (того же размера, что и c), заполненный 0. Это будет переменная, по которой мы итерируем - в основном первый массив содержит значения "x", а второй - значения "y".
^:1000
означает "Повторить предыдущее в скобках 1000 раз". Это наш счетчик цикла.
(5<.>@(({.c)&+@:({.-{:)@:*:;({:c)&+@:+:@:({.*{:))
Это следующий большой кусок. По сути, он выполняет одну итерацию цикла. Сначала мы генерируем x с помощью (({.c)&+@:({.-{:)@:*:
, затем соединяем ;
его с y ({:c)&+@:+:@:({.*{:)
(({.c)&+@:({.-{:)@:*:
Это генерирует x (помните, что он работает с массивом 2x41x41, представляющим x и y). Сначала он возводит в квадрат *:
каждый элемент, затем выполняет {. - {:
, или x^2 - y^2. {.
выбирает первый массив 41x41, а {:
- второй. @:
соединяет функции вместе.
К x^2-y^2 нам нужно добавить x0 - это первый массив 41x41 из c, поэтому мы можем сделать это с помощью ({.c)&+
- &
переводит {.c
(x0) в +
.
({:c)&+@:+:@:({.*{:)
Мы генерируем y аналогичным образом. Сначала мы попарно перемножаем входные x {.
и y {:
массивы, удваиваем результат с +:
, и добавляем y0 {:c
.
Последний шаг этой функции - просто 5<.>
- распаковка соединения двух новых массивов x и y, и усечение на 5 - это нормально, поскольку эта функция монотонно возрастает выше 4, и мы получим запредельные целые числа, если не будем усекать значения на каждой итерации.
4>:({.+{:)@:*:
Последний шаг, когда мы закончили итерацию. Мы возводим в квадрат массивы x и y *:
, складываем их {.+{:
и создаем массив boolean, который будет истинным для каждого элемента, который >:
меньше 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
ASCII версия. Использует 7 уровней для градиентного затенения.
программа P;
и {$APPTYPE CONSOLE}
согласно (предложено Uwe Raabe);'8Oo;,. '
переменную;слово
на целое число
, чтобы переменная цикла могла быть отрицательной, а затем изменил диапазон цикла для I с 3...38
на -5... 30
, чтобы (I-8)
можно было заменить на I
(предложение Эрика Гранжа); 1000
на 1e3
(предложено Эриком Гранжем)Double
на Real
(предложено Люком Невиллом по электронной mail)while((x*x+y*y<=4)and(t<1000))do
--> while(x*x+y*y<=4)and(t<1000)do
(предложено Luc Neville по e-mail)for j: =-5 до 30 do
становится for j:=-5 до 30do
(предложено Невиллом по электронной почте)for j:=8 до 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