当然是这个啦!
用三段 140 字符以内的代码生成一张 1024×1024 的图片原文 by Matrix67
Kyle McCormick 在 StackExchange 上发起了一个叫做 Tweetable Mathematical Art 的比赛,参赛者需要用三条推这么长的代码来生成一张图片。具体地说,参赛者需要用 C++ 语言编写 RD 、 GR 、 BL 三个函数,每个函数都不能超过 140 个字符。每个函数都会接到 i 和 j 两个整型参数(0 ≤ i, j ≤ 1023),然后需要返回一个 0 到 255 之间的整数,表示位于 (i, j) 的像素点的颜色值。举个例子,如果 RD(0, 0) 和 GR(0, 0) 返回的都是 0 ,但 BL(0, 0) 返回的是 255 ,那么图像的最左上角那个像素就是蓝色。参赛者编写的代码会被插进下面这段程序当中(我做了一些细微的改动),最终会生成一个大小为 1024×1024 的图片。
// NOTE: compile with g++ filename.cpp -std=c++11
#include
<iostream>
#include
<cmath>
#include
<cstdlib>
#define DIM 1024
#define DM1 (DIM-1)
#define _sq(x) ((x)*(x))
// square
#define _cb(x) abs((x)*(x)*(x))
// absolute value of cube
#define _cr(x) (unsigned char)(pow((x),1.0/3.0))
// cube root
unsigned
char
GR
(
int
,
int
);
unsigned
char
BL
(
int
,
int
);
unsigned
char
RD
(
int
i
,
int
j
){
// YOUR CODE HERE
}
unsigned
char
GR
(
int
i
,
int
j
){
// YOUR CODE HERE
}
unsigned
char
BL
(
int
i
,
int
j
){
// YOUR CODE HERE
}
void
pixel_write
(
int
,
int
);
FILE
*
fp
;
int
main
(){
fp
=
fopen
(
"MathPic.ppm"
,
"wb"
);
fprintf
(
fp
,
"P6
\n
%d %d
\n
255
\n
"
,
DIM
,
DIM
);
for
(
int
j
=
0
;
j
<
DIM
;
j
++
)
for
(
int
i
=
0
;
i
<
DIM
;
i
++
)
pixel_write
(
i
,
j
);
fclose
(
fp
);
return
0
;
}
void
pixel_write
(
int
i
,
int
j
){
static
unsigned
char
color
[
3
];
color
[
0
]
=
RD
(
i
,
j
)
&
255
;
color
[
1
]
=
GR
(
i
,
j
)
&
255
;
color
[
2
]
=
BL
(
i
,
j
)
&
255
;
fwrite
(
color
,
1
,
3
,
fp
);
}
我选了一些自己比较喜欢的作品,放在下面和大家分享。
首先是一个来自 Martin Büttner 的作品: