找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1355|回复: 11

IOCCC — 国际看不懂的C程序大赛

[复制链接]

该用户从未签到

发表于 2007-12-12 14:41:59 | 显示全部楼层 |阅读模式
IOCCC — 国际看不懂的C程序大赛

谁说我们编程序一定要遵循一定的编码规则?你是否使用过“匈牙利命名法”,“GNU coding style”,“Linux kernel coding style”。它们都说自己的方式好,别人的不好。但是看看 IOCCC 大赛的程序,你就知道最糟糕的编码规则也能写出很好的程序

大赛网址http://www.ioccc.org

IOCCC 的大赛忠旨IOCCC 的比赛忠旨就是:
  • 在遵守下面规则的前提下,写出最混乱,最让人看不明白的C程序。
  • 用讽刺的手法显示编程风格的重要性。
  • 用反常的代码加重编译器的负担。
  • 演示C语言的不让人注意的地方。
  • 为糟糕的C代码提供避难所。

大赛程序下载这里可以下载历年 IOCCC 程序大赛的所有代码源程序:[下载].

推荐程序那些程序很多。你可能不知道有些程序怎么用。仔细看看就会发现,每个程序都是那样的精巧!以至于他们的输出结果会让你大吃一惊!

  • 2000年thadgavin.c 这个程序的代码使用了 ascii-art,看起来像一个风车。你猜它运行起来是什么呢?答案是一个旋转的风车?漩涡?黑洞?
  • 1996年eldby.c

float s=1944,x[5],y[5],z[5],r[5],j,h,a,b,d,e;int i=33,c,l,f=1;int g(){return f=(f*6478+1)%65346;}m(){x=g()-l;y=(g()-l)/4;r=g()>>4;}main(){char t[1948]=" `MYmtw%FFlj%Jqig~%`jqig~Etsqnsj3stb",*p=t+3,*k="3tjlq9TX";l=s*20;while(i<s)p[i++]='\n'+5;for(i=0;i<5;i++)z=(i?z[i-1]:0)+l/3+!m();while(1){for(c=33;c<s;c++){c+=!((c+1)%81);j=c/s-.5;h=c%81/40.0-1;p[c]=37;for(i=4;i+1;i--)if((b=(a=h*x+j*y+z)*a-(d=1+j*j+h*h)*(-r*r+x*x+y*y+z*z))>0){for(e=b;e*e>b*1.01||e*e<b*.99;e-=.5*(e*e-b)/e);p[c]=k[(int)(8*e/d/r)];}}for(i=4;i+1;z-=s/2,i--)z=z<0?l*2+!m():z;while(i<s)putchar(t[i++]-5);}}

你能看懂吗?运行后就像远处在向你不断发射连珠炮一样的东西!

  • 2000 年 bmeyer.c 你想不到这段代码是2000世界上压缩灰度图像压缩比最大的程序吧?它速度很慢,为了防止用户不耐烦, 它在压缩的时候可以在屏幕上显示图像的ascii版本作为进度条:

编译方法:保存为 bmeyer.c

cc -DY= -O6 bmeyer.c -o bmeyer -lm

它只能处理 PGM raw 格式的图片.如果你的是 gif, jpeg 图片,先要把它转成 PGM 得到 pgm 图像的办法,用 ImageMagic 里的 convert 程序: 比如:

convert -size 400x300 cat_01.jpg ok.pgm

然后运行这个程序(名字叫 bmeyer) 压缩:

./bmeyer <ok.pgm >ok.glic              

程序会在在屏幕画出 ASCII …… 爽啊!得到压缩的 ok.glic 文件,这个文件用普通图像浏览程序不能直接预览
解压缩:

./bmeyer <ok.glic >ok.pgmbmeyer -2

可以增加压缩比。



[ 本帖最后由 5J 于 2007-12-12 14:47 编辑 ]

该用户从未签到

发表于 2007-12-12 14:46:10 | 显示全部楼层
看的头晕  

该用户从未签到

 楼主| 发表于 2007-12-12 14:48:14 | 显示全部楼层
#include <X11/Xlib.h>
#define M     typedef
#define N(         a)=r=(a)+j
#define S f(; G; )D[B[R=i[--G]]=F+=F<p]++
#define        f for
#define g [H]









  M short a;                                               M int b; M
  unsigned  c ;                                               M unsigned
  char*d; M XPoint                                       *e; M void
  _; b*h,*i,j,k,l,m,n,o,p                               ; b O; d A
  ,B,C; _*q,*r,*calloc(); e s                               ,t; Window
  u,v; GC x[256]; b D[256]; b w,y,                       z;_ Q(b E)
  { XMapWindow(q,v=XCreateSimpleWindow(q,              XRootWindow
  (q,z=XDefaultScreen(q)),!v*n,0,n,n,0,0,0));              XSelectInput
  ( q,v,E); }        _ P(){ C N(h N(i N(s N(t N(A N(B=calloc(C-B+256,1)
  ) )) ))); }              _ J(){ b F,G,H; c R =w %4; F=G=m; f(H=0; H<j
  ; H++){ h g                     =l+(R-2?R?R-1?(G-F*F/n)+F*nG*G-F*F)
  /m*n+2*F*G/                            m: 2*(F*F- G*G)/m+4*F*G/m*n:G+
  F*n);( s g.                                 x= m-F--,s +H) ->y=m-G;F=
  F+m?FG--,                                       m);}} _ K(){ b H,R;
  f(H=0;H<j;H                                           ++)D[ B g=(c)(R
  =h g+k)< j?                                               (A[ R]<p)+A


                                 [R
                                 ]:
                                 1]
                                 ++
                            ; } _ I ( d F)
                             { F?(_)0_
                               ) (F=B,
                                gets(
                                 B))
                                  ;

  y=atoi(F);}                                               _ Y(){ b F,
  G; c R ; F = G                                        = 0; K( );
  f( R = k + l ; R <                                        j && ( F =
  B[ R ] ) < p; R = h [R                                ] + k) { D
  [ F ] -- ; B [ i [ G ++ ] =R                                ] =p; } if
  ( R >= j) F = 1; S; } _ L() { b H,                        F,G; c R ;
  f( H =0; H < j; H ++) B g =0; O =-1; f(                G = R = 0;
  R < j; R++         ){ f(; R < j && !( F = B[ R ]);        R = h[ R ]
  + k) B [i[               G ++] = R ] = p; S; } } _ U() { e X [ 256 ]
  ,W; b H; W                     = t; f ( H = 0; H < o; H ++ ) { X g =
  W; W +=D g                              ;} f( H =0; H < j; H ++) if(
  A g - B g)                                    * X[ B g ] ++ = s g; {
XMotionEvent                                           * V = r = t ; W
  = t; f ( H                                                = 0; H < o
  ; H ++ ) {                                                XDrawPoints


                                                                         (q ,
                                                              v                  ,x g,
                                                              W,X        g -W,
                                                              CoordModeOrigin
                                                              ) ;    W +=  D
                                                              g ;      D g

                                = 0 ;
                                } f(;
                            XPending(q)+!
                            ++O; V->type-
                            ButtonPress?(
                                k =V
                                ->x+


                           V -> y * n - l) : (
                    O = - 42 ) )  XNextEvent ( q , r
              = V ) ; } } _ main ( b X , d * W ) { b H, F
        ,G; c R; if ( X < 3 ) { puts( "tvr: mode size < cmap"
    ); exit(0);} P(); I(*++ W); w = y %12; I(*++ W); n = y *2; j
   = n * n ; P ( ) ; m =                         y ; l = j / 2 + m
  ; q=XOpenDisplay                                     ( 0 ) ; Q ( 0 )
  ; u = v ; Q (                                             PointerMotionMask
  |ButtonPressMask                                      ) ; I ( 0 ) ; o
   =y ; p = o -1                                     ; { XColor F ;
    Colormap G; f                                   ( H = 0 ; H < o
      ; H++){ I(0);                                  XParseColor(q,G
       =XDefaultColormap                       ( q , z ) , r =
            B ,         & F ) ;                       XAllocColor
                (q , G ,                       & F ) ;










                                      XSetForeground
                                      (q,x g = XCreateGC
                                      ( q, u ,0 , 0 ) , F
      .pixel         ) ; } }                     P ( ); J (); f
      ( F =R         = G =H = 0;                           H < j; )
      if(++F         >= p || ( R =                             h [ R ]
      +G)>=j         ) { D [ B g = F                     ] ++; R
                         = l + k; G=                     ++H -R;
                            F =0; } H=j;            U(); v=
                              u; f(F=w/4; ; A+=H-=H+H,B-=H
                                )(O<0?L:*("tvr@cs.hut.fi."
                                    +7*F)?F^1?Y:K)()
                                       ,(U)(); }

该用户从未签到

发表于 2007-12-12 15:00:37 | 显示全部楼层
晕 ,   看不懂.  好郁闷啊

该用户从未签到

发表于 2007-12-12 15:05:02 | 显示全部楼层
完全不知所云

该用户从未签到

发表于 2007-12-12 15:22:06 | 显示全部楼层
这些都是干什么的

LZ介绍一下 啊

该用户从未签到

发表于 2007-12-12 15:25:16 | 显示全部楼层
有点乱。。。。。。。。

该用户从未签到

发表于 2007-12-12 15:39:33 | 显示全部楼层
汗一个  欺负俺不会C ..
死5j  割你小JJ

该用户从未签到

 楼主| 发表于 2007-12-12 16:28:24 | 显示全部楼层
原帖由 Simen.Resh@d 于 2007-12-12 15:39 发表
汗一个  欺负俺不会C ..
死5j  割你小JJ



你也可以欺负我不会JAVA啊


还是喜欢C语言,可以随便写,想怎么写就怎么写哈哈

该用户从未签到

发表于 2007-12-12 17:32:06 | 显示全部楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表