Art of coding

International Obfuscated C Code Contest (IOCCC) là 1 cuộc thi thường niên dành cho các lập trình viên ngôn ngữ C, được bắt đầu từ năm 1984 đến nay, trừ các năm 1997, 1999, 2002, 2003 và 2006. Tiêu chí của cuộc thi là viết các đoạn mã C ngắn gọn mà lại rối rắm, khó hiểu. Nhưng quan trọng là phải sáng tạo và mang tính nghệ thuật.

Ví dụ 2 bài dự thi giải nhất năm 1988 và 1998 trích ra từ Wikipedia:

In ra số PI:

#define _ -F<00||--F-OO--;
int F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
            _-_-_-_
       _-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
        _-_-_-_-_-_-_-_
            _-_-_-_
}

Format code hình cái máy bay:

#include                                     <math.h>
#include                                   <sys/time.h>
#include                                   <X11/Xlib.h>
#include                                  <X11/keysym.h>
                                          double L ,o ,P
                                         ,_=dt,T,Z,D=1,d,
                                         s[999],E,h= 8,I,
                                         J,K,w[999],M,m,O
                                        ,n[999],j=33e-3,i=
                                        1E3,r,t, u,v ,W,S=
                                        74.5,l=221,X=7.26,
                                        a,B,A=32.2,c, F,H;
                                        int N,q, C, y,p,U;
                                       Window z; char f[52]
                                    ; GC k; main(){ Display*e=
 XOpenDisplay( 0); z=RootWindow(e,0); for (XSetForeground(e,k=XCreateGC (e,z,0,0),BlackPixel(e,0))
; scanf("%lf%lf%lf",y +n,w+y, y+s)+1; y ++); XSelectInput(e,z= XCreateSimpleWindow(e,z,0,0,400,400,
0,0,WhitePixel(e,0) ),KeyPressMask); for(XMapWindow(e,z); ; T=sin(O)){ struct timeval G={ 0,dt*1e6}
; K= cos(j); N=1e4; M+= H*_; Z=D*K; F+=_*P; r=E*K; W=cos( O); m=K*W; H=K*T; O+=D*_*F/ K+d/K*E*_; B=
sin(j); a=B*T*D-E*W; XClearWindow(e,z); t=T*E+ D*B*W; j+=d*_*D-_*F*E; P=W*E*B-T*D; for (o+=(I=D*W+E
*T*B,E*d/K *B+v+B/K*F*D)*_; p<y; ){ T=p[s]+i; E=c-p[w]; D=n[p]-L; K=D*m-B*T-H*E; if(p [n]+w[ p]+p[s
]== 0|K <fabs(W=T*r-I*E +D*P) |fabs(D=t *D+Z *T-a *E)> K)N=1e4; else{ q=W/K *4E2+2e2; C= 2E2+4e2/ K
 *D; N-1E4&& XDrawLine(e ,z,k,N ,U,q,C); N=q; U=C; } ++p; } L+=_* (X*t +P*M+m*l); T=X*X+ l*l+M *M;
  XDrawString(e,z,k ,20,380,f,17); D=v/l*15; i+=(B *l-M*r -X*Z)*_; for(; XPending(e); u *=CS!=N){
                                   XEvent z; XNextEvent(e ,&z);
                                       ++*((N=XLookupKeysym
                                         (&z.xkey,0))-IT?
                                         N-LT? UP-N?& E:&
                                         J:& u: &h); --*(
                                         DN -N? N-DT ?N==
                                         RT?&u: & W:&h:&J
                                          ); } m=15*F/l;
                                          c+=(I=M/ l,l*H
                                          +I*M+a*X)*_; H
                                          =A*r+v*X-F*l+(
                                          E=.1+X*4.9/l,t
                                          =T*m/32-I*T/24
                                           )/S; K=F*M+(
                                           h* 1e4/l-(T+
                                           E*5*T*E)/3e2
                                           )/S-X*d-B*A;
                                           a=2.63 /l*d;
                                           X+=( d*l-T/S
                                            *(.19*E +a
                                            *.64+J/1e3
                                            )-M* v +A*
                                            Z)*_; l +=
                                            K *_; W=d;
                                            sprintf(f,
                                            "%5d  %3d"
                                            "%7d",p =l
                                           /1.7,(C=9E3+
                              O*57.3)%0550,(int)i); d+=T*(.45-14/l*
                             X-a*130-J* .14)*_/125e2+F*_*v; P=(T*(47
                             *I-m* 52+E*94 *D-t*.38+u*.21*E) /1e2+W*
                             179*v)/2312; select(p=0,0,0,0,&G); v-=(
                              W*F-T*(.63*m-I*.086+m*E*19-D*25-.11*u
                               )/107e2)*_; D=cos(o); E=sin(o); } }

Còn đây là đoạn code in ra số nguyên tố lớn nhất hiện tại loài người tìm được 243112609 – 1 số này có khoảng 13 triệu chữ số, đoạn code thì không dài tới nửa KB, đây thực chất là 1 ứng dụng tinh xảo của phép biến đổi nhanh Fourier:

#include <stdio.h>
#include <conio.h>

#define OUTFILE "biggest.txt"

int m=167772161,N=1,t[1<<25]={2},a,*p,i,e=34893349,s,c,U=1;

void g(int d,int h){
	for(i=s;i<1<<24;i*=2) d=d*1LL*d%m;
	for(p=t;p<t+N;p+=s)for(i=s,c=1;i;i--){
		a=p[s]*(h?c:1LL)%m;p[s]=(m+*p-a)*(h?1LL:c)%m;a+=*p;*p++=a%m;c=c*1LL*d%m;
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	printf("calculating...\n");
	while(e/=2){
		N*=2;U=U*1LL*(m+1)/2%m;
		for(s=N;s/=2;)g(17,0);
		for(p=t;p<t+N;p++)*p=*p*1LL**p%m*U%m;
		for(s=1;s<N;s*=2)g(29606852,1);
		for(a=0,p=t;p<t+N;){
			a+=*p<<(e&1);*p++=a%10;a/=10;
		}
	}
	while(!*--p);

	printf("now writing result to file...\n");
	FILE* f = fopen(OUTFILE, "w");
	long count = 0;
	for(t[0]--;p>=t;){
		fputc(48+*p--,f);
		if (!(++count % 100)) fputc('\n',f);
	}
	fclose(f);

	printf("\nfinish!");
	getch();
	return 0;
}
Advertisements

One thought on “Art of coding

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s