一个比较经典的例子是年得奖的代码,这个程序直接估算字符面积求圆周率,可读性算是比较友好的:?westley.c?
#define_F--00
-F-OO--;intF=00,OO=00;main(){F_OO();printf(%1.3f\n,4.*-F/OO/OO);}F_OO(){_-_-_-__-_-_-_-_-_-_-_-__-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-__-_-_-_}
注:这段程序实际上是年修正过的,由于88年原来程序代码没有考虑到ANSIC的编译标准,导致在处理例如
#define_-i-_
的时候,老旧的KR框架和ANSIC结果不一样:KR是直接的
--i
而ANSIC编译结果实际上等同于
-(-i)
因此之前的程序现在运行的话出来的结果是0.,而不是3.。修正过的程序就没有这个问题了。又比如13年有个只有一行的程序,可以判断从FranklinPierce往后的31位美国总统是民主党还是共和党,这个就有点不知所云了:?cable1.c?
main(intriguing,char**acters){puts(1[acters-~!(*(int*)1[acters]%%%riguing)]);}
食用方法:
makecable1./cable1obamapublicandemocrat./cable1bushpublicandemocrat
总统名要小写,publican和democrat顺序不能颠倒。经
chuazier提醒,历史上的确有重名的美国总统,除了Johnson之外,还有TheodoRoosevelt/FranklinD.Roosevelt,程序原作者注明用./cable1rooseveltpublicandemocrat
表示TheodoRoosevelt,而用
./cable1fdrpublicandemocrat
表示FranklinD.Roosevelt。这一行代码做了这么多事:首先查询输入的总统的名字,然后在一个look-uptable里面找出对应的政治阵营,再输出出来。问题在于这31位总统名字存放在哪里?而这个look-uptable又存放在哪里?有趣的是,IOCCC的评委还提到,你甚至可以用这个程序检测一些IT大佬的Mac/PC阵营:
./cable1CooperMacPC./cable1NollMacPC./cable1BroukhisMacPC./cable1JobsMacPC./cable1GatesMacPC./cable1BallmerMacPC
难道这个程序暴露了Ballmer离开微软的真相?最近几届比赛的代码为了增加混乱程度,代码越来越长,可读性也越来越差(不过话说回来,让可读性变得越来越差其实原本就是这个比赛的第一宗旨吧),不少代码甚至本身就是个ASCIIartwork……比如11年有一只阿卡林:?akari.c?为了保持美观我就直接上图了。源代码见此:治白癜风的中药方哪家治疗白癜风医院好