📄 64830
字号:
X FOR MORE INFORMATION for details on how to get previous winners.XX Keep in mind that rules change from year to year, so some winning entriesX may not be valid entries this year. What was unique and novel one yearX might be 'old' the next year.XX An entry is usually examined in a number of ways. We typically applyX a number of tests to an entry:XX * look at the original sourceX * convert ANSI tri-graphs to ASCIIX * C pre-process the source ignoring '#include' linesX * C pre-process the source ignoring '#define' and '#include' linesX * run it through a C beautifierX * examine the algorithmX * lint itX * compile itX * execute itXX You should consider how your entry looks in each of the above tests.X You should ask yourself if your entry remains obscure after it has beenX 'cleaned up' by the C pre-processor and a C beautifier.XX Your entry need not do well under all, or in most tests. In certainX cases, a test is not important. Entries that compete for theX 'strangest/most creative source layout' need not do as well asX others in terms of their algorithm. On the other hand, givenX two such entries, we are more inclined to pick the entry thatX does something interesting when you run it.XX We try to avoid limiting creativity in our rules. As such, we leaveX the contest open for creative rule interpretation. As in real lifeX programming, interpreting a requirements document or a customer requestX is important. For this reason, we often award 'worst abuse of theX rules' to an entry that illustrates this point in an ironic way.XX If you do plan to abuse the rules, we suggest that you let us knowX in the remarks section. Please note that an invitation to abuseX is not an invitation to break. We are strict when it comes to theX 3217 byte size limit. Also, abusing the entry format tends toX annoy more than amuse.XX We do realize that there are holes in the rules, and invite entriesX to attempt to exploit them. We will award 'worst abuse of the rules'X and then plug the hole next year. Even so, we will attempt to useX the smallest plug needed, if not smaller. :-)XX Check out your program and be sure that it works. We sometimes makeX the effort to debug an entry that has a slight problem, particularlyX in or near the final round. On the other hand, we have seen someX of the best entries fall down because they didn't work.XX We tend to look down on a prime number printer, that claims thatX 16 is a prime number. If you do have a bug, you are better offX documenting it. Noting "this entry sometimes prints the 4th powerX of a prime by mistake" would save the above entry. And sometimes,X a strange bug/feature can even help the entry! Of course, a correctlyX working entry is best.XXXOUR LIKES AND DISLIKES:XX Doing masses of #defines to obscure the source has become 'old'. WeX tend to 'see thru' masses of #defines due to our pre-processor testsX that we apply. Simply abusing #defines or -Dfoo=bar won't go as farX as a program that is more well rounded in confusion.XX Many ANSI C compilers dislike the following code, and so do we:XX #define d defineX #d foo <-- don't expect this to turn into #define fooXX int i;X j; <-- don't use such implicit type declarationX int k;XX We suggest that you compile your entry with an ANSI C compiler. If you X must use non-ANSI C, such as K&R C, you must avoid areas that result in X compile/link errors for ANSI C compilers.XX Unfortunately, ANSI C requires array indexes to be of integral type.X Thus, the following classical obfuscation hacks are no longer allowed:XX int i;X char *c;X i[c]; <--- use c[i] insteadX (i+3)["string"]; <--- use "string"[i+3] insteadXX If your entry uses functions that have a variable number ofX arguments, be careful. Systems implement va_list as a wide varietyX of ways. Because of this, a number of operations using va_list areX not portable and must not be used:XX * assigning a non-va_list variable to/from a va_list variableX * casting a non-va_list variable into/from a va_list variableX * passing a va_list variable to a function expecting a non-va_list argX * passing a non-va_list variable to a function expecting a va_list argX * performing arithmetic on va_list variablesX * using va_list as a structure or unionXX In particular, do not treat va_list variables as if they were a char **'s.XX Avoid using <varargs.h>, use <stdarg.h> instead.XX If you use C preprocessor directives (#define, #if, #ifdef, ...),X the leading '#' must be the first character on a line. While someX C preprocessors allow whitespace the leading '#', many do not.XX Because the exit() function returns void on some systems, entriesX must not assume that it returns an int.XX Small programs are best when they are short, obscure and concise.X While such programs are not as complex as other winners, they doX serve a useful purpose. They are often the only program that peopleX attempt to completely understand. For this reason, we look forX programs that are compact, and are instructional.XX One line programs should be short one line programs, say around 80X bytes long. Getting close to 160 bytes is a bit too long in our opinion.XX We tend to dislike programs that:XX * are very hardware specificX * are very OS or Un*x version specificX (index/strchr differences are ok, but socket/streams specificX code is likely not to be)X * dump core or have compiler warningsX (it is ok only if you warn us in the 'remark' header item)X * won't compile under both BSD or SYS V Un*xX * abusing the build file to get around the size limitX * obfuscate by excessive use of ANSI tri-graphsX * are longer than they need to beX * are similar to previous winnersX * are identical to previous losers :-)XX Unless you are cramped for space, or unless you are entering theX 'best one liner' category, we suggest that you format your programX in a more creative way than simply forming excessively long lines.XX The build file should not be used to try and get around the sizeX limit. It is one thing to make use of a several -D's to help out,X but it is quite another to use 200+ bytes of -D's in order toX try and squeeze the source under the size limit. You should feelX free to make use of the build file space, but you are better offX if you show some amount of restraint.XX We allowed whitespace, and in certain cases ; { or } do not impactX your program size (up to a certain point), because we want to getX away from source that is simply a compact blob of characters.XX Given two versions of the same program, one that is a compact blobX of code, and the other that is formatted more like a typical CX program, we tend to favor the second version. Of course, a thirdX version of the same program that is formatted in an interestingX and/or obfuscated way, would definitely win over the first two!XX We suggest that you avoid trying for the 'smallest self-replicating'X program. We are amazed at the many different sizes that claimX to be the smallest. There is nothing wrong with self-replicatingX programs. In fact, a number of winners have been self-replicating.X You might want to avoid the claim of 'smallest', lest we (or others)X know of a smaller one!XX X client entries should be as portable as possible. Entries thatX adapt to a wide collection of environments will be favored. Don'tX depend on a particular type of display. For example, don't dependX on color or a given size. Don't require backing store.XX X client entries should avoid using X related libraries andX software that is not in wide spread use. We ask that such X clientX entries restrict themselves to only the low level Xlib and theX Athena widget set (libX11.a, libXaw.a, libXmu.a and libXt.a).X Don't use M*tif, Xv*ew, or OpenL*ok toolkits, since not everyoneX has them. Avoid depending on a particular window manager. NotX everyone has X11r5, and some people are stuck back in X11r4 (orX earlier), so try to target X11r5 without requiring X11r5. BetterX yet, try to make your entry run on all version 11 X Window Systems.XX X client entries should not to depend on particular items onX .Xdefaults. If you must do so, be sure to note the required linesX in the ---remark--- section.XX We like programs that:XX * are as concise and small as they need to beX * do something at least quasi-interestingX * pass lint without complaint (not a requirement, but it is nice)X * are portableX * are unique or novel in their obfuscation styleX * MAKE USE OF A NUMBER OF DIFFERENT TYPES OF OBFUSCATIONX * make us laugh and/or throw up :-)XX Some types of programs can't excel in some areas. Of course, yourX program doesn't have to excel in all areas, but doing well in severalX areas really does help.XX We freely admit that interesting, creative or humorous comments inX the ---remark--- section helps your chance of winning. If you had toX read of many twisted entries, you too would enjoy a good laugh or two.X We think the readers of the contest winners do as well.XX Be creative!XXXENTRY FORMAT:XX In order to help us process the many entries, we must request yourX assistance by formatting your entries in a certain way. This format,X in addition, allows us to quickly separate information about theX author from the program itself. (see JUDGING PROCESS)XX We have provided the program, mkentry, as an example of how toX format entries. You should be aware of the following warning thatX is found in mkentry.c:XX This program attempts to implement the IOCCC rules. EveryX attempt has been made to make sure that this program producesX an entry that conforms to the contest rules. In all cases,X where this program differs from the contest rules, theX contest rules will be used. Be sure to check with theX contest rules before submitting an entry.XX You are not required to use mkentry. It is convenient, however,X as it attempts to uuencode the needed files, and attempt to checkX the entry against the size rules.XX If you have any suggestions, comments, fixes or complaints aboutX the mkentry.c program, please send Email to the judges. (see below)XX The following is a sample entry:XX---entry---Xrule: 1993Xfix: nXtitle: chonglabXentry: 0Xdate: Mon Mar 1 08:45:20 1993Xhost: Un*x v6, pdp11/45X 2.9BSD, pdp11/70X---remark---X This is a non-obfuscated obfuscated C program.XX It is likely not to win a prize. But what do you expect fromX a short example!X---author---Xname: Landon Curt NollXorg: IOCCC Judging GroupXaddr: Toad HallX PO Box 170608X San Francisco, CaliforniaX 94117-0608X USAXemail: chongo@toad.comXanon: nX---author---Xname: Larry BasselXorg: IOCCC Judging GroupXaddr: Toad HallX PO Box 170608X San Francisco, CaliforniaX 94117-0608X USAXemail: hoptoad!sun!labX lab@sun.comXanon: nX---info---Xbegin 444 info.fileXM0V]P>7)I9VAT("AC*2!,86YD;VX@0W5R="!.;VQL+"`Q.3DS+@I!;&P@4FEGXM:'1S(%)E<V5R=F5D+B`@4&5R;6ES<VEO;B!F;W(@<&5R<V]N86PL(&5D=6-AXM=&EO;B!O<B!N;VXM<')O9FET('5S92!I<PIG<F%N=&5D('!R;W9I9&5D('1HXM:7,@=&AI<R!C;W!Y<FEG:'0@86YD(&YO=&EC92!A<F4@:6YC;'5D960@:6X@XM:71S(&5N=&ER971Y"F%N9"!R96UA:6YS('5N86QT97)E9"X@($%L;"!O=&AEXM<B!U<V5S(&UU<W0@<F5C96EV92!P<FEO<B!P97)M:7-S:6]N(&EN('=R:71IXM;F<*9G)O;2!,86YD;VX@0W5R="!.;VQL+@H*5&AA="!T:&%T(&ES+"!I<RX*XM5&AA="!T:&%T(&ES(&YO="P*("`@(&ES(&YO="!T:&%T('1H870@;F]T(&ESXM+@I4:&%T(&ES+"!T:&%T('1H870@:7,@;F]T+"!I<R$*"@D)+2T@8VAO;F=OXM(#$Y-S0*"DQA<W0@>65A<BP@;VYE('!E<G-O;B!T;VQD('5S('1H870@=&AEXM>2!A8W1U86QL>2!D96-O9&5D('1H:7,@9FEL92X*22!W;VYD97(@:&]W(&UAX9;GD@=VEL;"!D;R!I="!T:&ES('EE87(_"@``X`XendX---build---Xbegin 444 buildX28V,@<')O9RYC("UO('!R;V<*X`XendX---program---Xbegin 444 prog.cXM;6%I;B@I"GL*(VEF(&1E9FEN960H05]214=)4U1%4D5$7U9/5$527TE.7U-5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -