当前位置: 首页 > 科技观察

有没有一段代码,让你觉得人类的智慧也可以极其高明?

时间:2023-03-17 21:47:14 科技观察

有网友在知乎上发帖提问:有没有一段代码,让你觉得人类的智慧也可以高明无比?不一定要是一个完整的算法,就是那种让人看着就觉得high的结构或者语句。KyleMcCormick在StackExchange上发起了一项名为TweetableMathematicalArt的竞赛。参与者需要使用三条这种长度的推文来生成一张图片。具体来说,参赛者需要用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。//注意:使用g++filename.cpp-std=c++11#include#include#include#defineDIM1024#defineDM1(DIM-1)#define_sq(x)((x)*(x))//square#define_cb(x)abs((x)*(x)*(x))//absolutevalueofcube#define_cr(x)(unsignedchar)(pow((x),1.0/3.0))//cuberootunsignedcharGR(int,int);unsignedcharBL(int,int);unsignedcharRD(inti,intj){//YOURCODEHERE}unsignedcharGR(inti,intj){//YOURCODEHERE}unsignedcharBL(inti,intj){//YOURCODEHERE}voidpixel_write(int,int);FILE*fp;intmain(){fp=fopen("MathPic.ppm","wb");fprintf(fp,"P6\n%d%d\n255\n",DIM,DIM);for(intj=0;j4)break;}returnlog(k)*47;}unsignedcharGR(inti,intj){floatx=0,y=0;intk;for(k=0;k++<256;){floata=x*x-y*y+(i-768.0)/512;y=2*x*y+(j-512.0)/512;x=a;if(x*x+y*y>4)break;}returnlog(k)*47;}unsignedcharBL(inti,intj){floatx=0,y=0;intk;for(k=0;k++<256;){floata=x*x-y*y+(i-768.0)/512;y=2*x*y+(j-512.0)/512;x=a;if(x*x+y*y>4)break;}return128-log(k)*23;}ManuelKasten还制作了一张Mandelbrot集的图片。不同的是这张图描绘的是Mandelbrot集局部放大的结果:它的代码如下:unsignedcharRD(inti,intj){doublea=0,b=0,c,d,n=0;while((c=a*a)+(d=b*b)<4&&n++<880){b=2*a*b+j*8e-9-.645411;a=c-d+i*8e-9+.356888;}return255*pow((n-80)/800,3.);}unsignedcharGR(inti,intj){doublea=0,??b=0,c,d,n=0;while((c=a*a)+(d=b*b)<4&&n++<880){b=2*a*b+j*8e-9-.645411;a=c-d+i*8e-9+.356888;}return255*pow((n-80)/800,.7);}unsignedcharBL(inti,intj){doublea=0,b=0,c,d,n=0;while((c=a*a)+(d=b*b)<4&&n++<880){b=2*a*b+j*8e-9-.645411;a=c-d+i*8e-9+.356888;}return255*pow((n-80)/800,.5);}这是ManuelKasten的另一部作品:生成这张图片的代码非常有趣:该函数依赖于静态变量来控制绘画的过程,而i和j这两个参数根本就没有用到!unsignedcharRD(inti,intj){staticdoublek;k+=rand()/1./RAND_MAX;intl=k;l%=512;returnl>255?511-l:l;}unsignedcharGR(inti,intj){staticdoublek;k+=rand()/1./RAND_MAX;intl=k;l%=512;returnl>255?511-l:l;}unsignedcharBL(inti,intj){staticdoublek;k+=rand()/1./RAND_MAX;国际=k;l%=512;returnl>255?511-l:l;}这是githubphagocyte的作品:代码如下:unsignedcharRD(inti,intj){floats=3./(j+99);floaty=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;返回(int((i+DIM)*s+y)%2+int((DIM*2-i)*s+y)%2)*127;}unsignedcharGR(inti,intj){floats=3./(j+99);floaty=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;返回(int(5*((i+DIM)*s+y))%2+int(5*((DIM*2-i)*s+y))%2)*127;}unsignedcharBL(inti,intj){floats=3./(j+99);floaty=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;返回(int(29*((i+DIM)*s+y))%2+int(29*((DIM*2-i)*s+y))%2)*127;}Thisisanotherworkfromgithubphagocyte:这是使用扩散限制聚合模型得到的图片。该程序需要很长时间才能运行。代码很有意思:巧妙地使用宏定义来打破函数之间的界限和三段代码的字符限制可以一起使用。unsignedcharRD(inti,intj){#defineDDIM#defineMm[(x+D+(d==0)-(d==2))%D][(y+D+(d==1)-(d==3))%D]#defineRrand()%D#defineBm[x][y]return(i+j)?256-(BL(i,j))/2:0;}unsignedcharGR(inti,intj){#defineAstaticintm[D][D],e,x,y,d,c[4],f,n;if(i+j<1){for(d=D*D;d;d--){m[d%D][d/D]=d%6?0:rand()%2000?1:255;}for(n=1returnRD(i,j);}unsignedcharBL(inti,intj){A;n;n++){x=R;y=R;if(B==1){f=1;for(d=0;d<4;d++){c[d]=M;f=f2){B=f-1;}else{++e%=4;d=e;if(!c[e]){B=0;M=1;}}}}}returnm[i][j];}***这张图来自EricTressler:这是逻辑映射得到的费根鲍姆分岔图。和之前一样,对应的代码也巧妙的使用了宏定义来保存字符:unsignedcharRD(inti,intj){#defineAfloata=0,b,k,r,x#defineBinte,o#defineC(x)x>255?255:x#defineRreturn#defineDDIMRBL(i,j)*(D-i)/D;}unsignedcharGR(inti,intj){#defineEDM1#defineFstaticfloat#defineGfor(#defineHr=a*1.6/D+2.4;x=1.0001*b/DRBL(i,j)*(D-j/2)/D;}unsignedcharBL(inti,intj){Fc[D][D];if(i+j<1){A;B;G;aD/2){e=a;o=(E*x);c[e][o]+=0.01;}}}}}RC(c[j][i])*i/D;}