當然是這個啦!
用三段 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 的作品: