diff --git a/Makefile b/Makefile index a9d9a53bd..63476b637 100644 --- a/Makefile +++ b/Makefile @@ -518,7 +518,7 @@ faq: ${GEN_TOP_HTML} faq.md @echo '=-=-=-=-= IOCCC begin make $@ =-=-=-=-=' @echo "You have a question?" ${GEN_TOP_HTML} -v 1 faq - @echo "Perhaps the FAQ might help." + @echo "Perhaps the FAQ might help!" @echo '=-=-=-=-= IOCCC complete make $@ =-=-=-=-=' diff --git a/faq.html b/faq.html index 46f012fda..1a9b89b73 100644 --- a/faq.html +++ b/faq.html @@ -1026,40 +1026,54 @@ to the official IOCCC website.
NOTE: The size rule was actually rule 1.
NOTE: The size rule was actually rule 1.
NOTE: The size rule was actually rule 1.
The IOCCC judges run the IOCCC entirely out of their own funds. This includes paying for IOCCC related hardware, services, registration, software and related technical items.
-There is NO requirement for anyone to support the IOCCC. +
There is NO requirement for anyone to support the IOCCC. Nevertheless, it has been shown that receiving anonymous gifts -provides the IOCCC judges with a nice dopamine +provides the IOCCC judges with a nice +dopamine boost, and happy IOCCC judges help make the IOCCC better for everyone. :-)
-If you wish to express your support and/or appreication or our +
If you wish to express your support and/or appreciation for our efforts, we suggest making an Anonymous gift via the IOCCC Amazon wishlist.
| These IOCCC guidelines are version 28.2 2024-06-30.
| These IOCCC guidelines are version 28.3 2024-07-01.
IMPORTANT: Be SURE to read the IOCCC rules.
| The submit URL should be active on or slightly before 2024-MMM-DD HH:MM:SS UTC.
| XXX - date/time is TBD - XXX
| The IOCCC rules, IOCCC
-guidelines will be available on the official IOCCC
+guidelines will be available on the Official IOCCC
website on or slightly before start of this IOCCC. Please check
the IOCCC FAQ about how to submit to see how
to submit entries, on or after the start of this IOCCC, to be sure
@@ -459,7 +459,8 @@ you are using the correct versions of these items before using the
IOCCC submission URL.
| The Rule 2a size has increased from 4096 to 4993 bytes.
| The Rule 2b size has increased from 2053 to 2503 bytes.
| The default way to compile submissions is now -std=gnu17 -O3 -g3 -Wall -Wextra -pedantic.
| The default way to compile submissions is now -std=gnu17 -O3 -g3 -Wall -Wextra -pedantic. See below for more details about the example Makefile
+for more help.
| Submissions are in the form of a single xz compressed tarball.
| To assist in the formation of the xz compressed tarball for submission, use the
mkiocccentry(1) tool as found in the mkiocccentry repo.
| See the mkiocccentry repo for the iocccsize(1) tool.
| To further clarify Rule 2, we subdivided it into two parts, 2a and 2b.
| The overall size limit (see Rule 2a) on prog.c is now 4993 bytes.
| Your submission must satisfy BOTH the maximum size Rule 2a AND your submission
-must satisfy the IOCCC size tool Rule 2b.
| Your submission must satisfy BOTH the maximum size Rule
+2a AND the IOCCC size tool Rule 2b.
| This IOCCC size tool imposes a 2nd limit on C code size (see Rule 2a. To check your
-code against the 2nd limit of Rule 2:
./iocccsize prog.c
| The IOCCC size tool algorithm may be summarized as follows:
The size tool counts most C reserved words (keyword, secondary,
- and selected preprocessor keywords) as 1. The size tool counts all
- other octets as 1 excluding ASCII whitespace, and excluding any
- '`;`', '`{`' or '`}`' followed by ASCII whitespace, and excluding any
- '`;`', '`{`' or '`}`' octet immediately before the end of file.
++The size tool counts most C reserved words (keyword, secondary, and selected +preprocessor keywords) as 1. The size tool counts all other octets as 1 +excluding ASCII whitespace, and excluding any ‘
+;’, ‘{’ or ‘}’ followed by +ASCII whitespace, and excluding any ‘;’, ‘{’ or ‘}’ octet immediately +before the end of file.
ASCII whitespace includes ASCII tab, ASCII space, ASCII newline, ASCII formfeed, and ASCII carriage return.
| When ‘;’, ‘{’ or ‘}’ are within a C string, they may still not be
@@ -573,34 +576,35 @@ to get around the size limits of Rule 2.
Yes Virginia, that is a hint!
| The Rule 2a size was changed from
4096 to 4993: a change that keeps the “2b to 2a” size ratio to a
-value similar to the 2001-2020 IOCCC era.
| We recommend that you use the
example Makefile
from the IOCCC mkiocccentry repo.
-renamed as Makefile of course, as the starting point for your submissions
-required Makefile. Feel free to modify the Makefile to suit your obfuscated needs.
Makefile of course, as the starting point for your submission’s
+required Makefile. Feel free to modify the Makefile to suit your obfuscated needs.
| The rest of these guidelines will assume that you are using some variant of the
example Makefile,
renamed as Makefile of course.
| We suggest that you compile your submission with a commonly available
-std=gnu17 (ISO C 2017 with GNU extensions) C compiler.
| Unless you clearly state otherwise in your remarks.md file AND put into your
-submission’s Makefile, we will compile using -O3 -std=gnu17.
Makefile, we will compile using -std=gnu17 -O3 -g3.
| It is OK to require your submission to not be compiled
-using the default -O3 -g3 -std=gnu17 settings. Simply explain why
-your submission should not be compiled using -O3 -g3 -std=gnu17 in
+using the default -std=gnu17 -O3 -g3 settings. Simply explain why
+your submission should not be compiled using -std=gnu17 -O3 -g3 in
your remarks.md file and adjust your Makefile accordingly.
| IMPORTANT NOTE: The use of -std=gnu17 does NOT imply the use of the gcc
compiler! We often start by compiling using the clang C compiler instead.
| You may change the standard under which your submission is compiled
by modifying the CSTD Makefile variable. For example, to use c17 instead:
CSTD= -std=c17
-| For compilers, such as clang, that have the -Weverything option,
+
| For compilers, such as clang, that have the -Weverything option,
while you may wish to try it, you should look at the FAQ about clang
-Weverything. We do NOT recommend that you put
the use of -Weverything into your submission’s Makefile for the reasons
cited there. This goes even if your version does not trigger a warning as some
-other version might.
| You may change the level of optimization and compiler debug level
that your submission is compiled with, by modifying the OPT Makefile variable.
For example, to compile without optimization and debug symbols:
| To turn off a compiler warning, to your submission’s Makefile,
+
| We LIKE code that has a minimum of warnings, especially under the
+more strict -Wall -Wextra -pedantic mode:
CWARN= -Wall -Wextra -pedantic
+| The two previous guidelines may be thought by some as being somewhat
+contradictory. Isn’t life, and isn’t trying to satisfy “contradictory customer
+requirements” all too often like that? :-) Try to minimize warnings if you
+can.
| If you manage to produce very few warnings, or perhaps no warnings at
+all under the -Wall -Wextra -pedantic mode, then by all means brag about it in
+your remarks.md file AND BE SURE TO TELL US the OS, OS version, compiler
+and compiler version in which you observed this occurring (in case our OS and
+compiler produces a different result: so your submission won’t be penalized for
+not meeting your claims).
| If your submission issues lots of warnings but is otherwise
+marvelously obfuscated in multiple levels, don’t worry about it. Nevertheless,
+be sure that the warnings do not constitute a potential “show stopper”
+compiler problem. Be sure that compilers such as both gcc and clang won’t
+produce a compile error and refuse to compile your code: unless for some
+reason that is what you intend to happen in which case document that too in your
+remarks.md file. :-)
All other things being equal, a program that must turn off fewer +warnings will be considered better, for certain values of better.
+| To turn off a compiler warning, in your submission’s Makefile,
try something such as:
CSILENCE= -Wno-some-thing -Wno-another-thing -Wno-unknown-warning-option
| If you do add “-Wno-some-thing” to your Makefile,
-consider also adding -Wno-unknown-warning-option just in case the
-warning you use is not available in the compilers we use test your
-submission. Observe, however, that some compilers DO NOT have that option so
-you might wish to note this in your remarks.md as it can be a command line
-error.
CUNKNOWN=
+to:
+ CUNKNOWN= -Wno-unknown-warning-option
+| Some compilers have reported this as an error, however, and if you have
+such a compiler you might want to not add it and note it in your remarks.md.
| If you need to define something on the compile line, use
the CDEFINE Makefile variable. For example:
CDEFINE= -Dfoo -Dbar=baz
| If you need to include a file on the command line, use
the CINCLUDE Makefile variable. For example:
CINCLUDE= -include stdio.h
-| If need add other “magic” flags to your compile line,
+
| If need to add other “magic” flags to your compile line,
use the COTHER Makefile variable. For example:
COTHER= -fno-math-errno
-NOTE: We recommend using “magic” flags only if BOTH gcc -and clang support it.
+NOTE: We only recommend using “magic” flags if BOTH gcc
+and clang support it.
| We LIKE entries that use an edited variant of the
example Makefile,
renamed as Makefile of course. This makes it easier for the IOCCC Judges
-to test your submission. And if your submissions wins, integrate it into
+to test your submission. And if your submissions wins, it makes it easier to integrate it into
the Official IOCCC winner website.
Doing masses of #defines to obscure the source has become ‘old’. We
-tend to ‘see thru’ masses of #defines due to our pre-processor tests
-that we apply. Simply abusing #defines or -Dfoo=bar won’t go as far
+
Doing masses of #defines to obscure the source has become ‘old’. We
+tend to ‘see thru’ masses of #defines due to our pre-processor tests
+that we apply. Simply abusing #defines or -Dfoo=bar won’t go as far
as a program that is more well rounded in confusion.
Many C compilers DISLIKE the following code, and so do we:
+Many C compilers DISLIKE the following code, and so do we:
#define d define
#d foo /* <-- don't expect this to turn into #define foo */
+| In other words, it is a compilation error.
When declaring local or global variables, you should declare the type:
int this_is_fine;
this_is_not; /* <-- Try to avoid implicit type declarations */
-| We LIKE code that has a minimum of warnings, especially under the
-more strict -Wall -Wextra -pedantic mode:
CWARN= -Wall -Wextra -pedantic
-All other things being equal, a program that must turn off fewer -warnings will be considered better, for certain values of better.
-| We tend to like less a submission that requires either
-gcc or clang. We prefer submissions that can compile
-under both gcc and clang.
| We tend to like less a submission that requires either
+gcc OR clang. We prefer submissions that can compile
+under BOTH gcc AND clang.
| We RECOMMEND that the compiler flags you use in your
-submission’s Makefile are supported by both gcc and clang.
Makefile are supported by BOTH gcc AND clang.
| We DISLIKE the use of obscure compiler flags, especially
-if either gcc or clang does not support it. We suggest
+if gcc and/or clang do not support it. We suggest
that you not use any really obscure compiler flags if you can help it.
One side effect of the above is that you cannot assume the use of nested functions such as:
@@ -673,14 +696,14 @@ of nested functions such as:| On 2012 July 20, the judges rescinded the encouragement of
nested functions. Such constructions, while interesting and sometimes
amusing, will have to wait until they required by a C standard that are
-actually implemented in both gcc and clang.
| We DISLIKE submissions require the use of -fnested-functions.
gcc AND clang.
+| We DISLIKE submissions that require the use of -fnested-functions.
We prefer programs that do not require a fish license: crayons and cat detector vans not withstanding.
If your submission uses functions that have a variable number of
-arguments, be careful. Systems implement va_list as a wide variety
-of ways. Because of this, a number of operations using va_list are
-not portable and must not be used:
va_list in a wide variety
+of ways. Because of this, a number of operations using va_list are
+not portable and must not be used:
va_list variable to/from a va_list variableva_list variable into/from a va_list variableOn 28 January 2007, the Judges rescinded the requirement that the
# in a C preprocessor directive must be the 1st non-whitespace octet.
The exit(3) function returns void. Some broken systems have exit(3)
-return int, your submission should assume that exit(3) returns a void.
int; your submission should assume that exit(3) returns a void.
| This guideline has a change mark at the very start of this line.
Small programs are best when they are short, obscure and concise. While such programs are not as complex as other winners, they do -serve a useful purpose. They are often the only program that people +serve a useful purpose: they are often the only program that people attempt to completely understand. For this reason, we look for programs that are compact, and are instructional.
-While those who are used to temperatures found on dwarf -planet, -(yes Virginia, dwarf planets are planets) such as -Pluto might be able to +
| While those who are used to temperatures found on dwarf
+planets
+(yes Virginia, dwarf planets ARE planets!), such as
+Pluto, might be able to
explain to the Walrus why our seas are boiling hot, the question of
whether pigs have wings is likely to remain a debatable point to most.
One line programs should be short one line programs: say around 80 to 120 @@ -714,17 +737,19 @@ a one-liner in our vague opinion.
We tend to DISLIKE programs that:
| * dump core or have compiler warnings (it is OK only if you warn us in your ‘remark.md’ file)| * won’t compile or run a Single UNIX Specification environment| are very OS version specific (index(3)/strchr(3) differences are OK, but sockets/streams specific code is likely not to be)| * dump core or have compiler warnings (it is OK only if you warn us in your remarks.md file)| * won’t compile or run in a Single UNIX
+Specification environment| * depend on a utility or application not normally found in systems that conform to the Single UNIX Specification| * obfuscate by use of ANSI trigraphs| * obfuscate by use of digraphs| * are larger than they need to be| * have more lines than they need to have| * are “blob-ier” (just a pile of unformatted C code) than they need to be| * are “blob-ier” (just a pile of unformatted C code) than they need to be
+| * are rather similar to previous winners :-(
+| * are identical to previous losers :-)
In order to encourage submission portability, we DISLIKE entries that @@ -732,11 +757,13 @@ fail to build unless one is using an IDE. For example, do not mandate that one must use Microsoft Visual Studio to compile your submission. Nevertheless some of the better IDEs have command-line interfaces to their compilers, once one learns how to invoke a shell.
-| The program must compile and link cleanly in a Single UNIX Specification environment Therefore do not assume the system has a
+
| The program must compile and link cleanly in a Single UNIX
+Specification
+environment. Therefore do not assume the system has a
windows.h include file:
#include <windows.h> /* we DISLIKE this include */
Unless you are cramped for space, or unless you are entering the -‘Best one liner’ category, we suggest that you format your program +‘Best one liner’ category, we suggest that you format your program in a more creative way than simply forming excessively long lines.
At least one judge prefers to maintain the use of the leap-second @@ -744,16 +771,19 @@ as part of the world’s time standard. If your code prints time with seconds, we prefer that your code be capable of printing the time of day during a leap-second where the value in seconds after the minute mark is 60.
-The “how to build” make process should not be used to try and get
-around the size limit. It is one thing to make use of a several -Ds
-on the compile line to help out, but it is quite another to use many
-bytes of -Ds in order to try and squeeze the source under the size limit.
The “how to build” process (via the Makefile or otherwise) should not be
+used to try and get around the size limit. It is one thing to make use of a
+several -Ds on the compile line to help out, but it is quite another to use
+many bytes of -Ds in order to try and squeeze the source under the size limit.
Your source code, post-pre-processing, should not exceed the size of -Windows. :-)
+Microsoft Windows. :-) +| Other windows, on the other hand, might be OK: especially where “X
+marks the spot”. Yet on the third hand, windows are best when they are
+“unseen” (i.e., not dirty). :-)
The judges, as a group, have a history giving wide degree of latitude to reasonable entries. And recently they have had as much longitudinal -variation as it is possible to have on Earth. :-)
-| You should try to restrict commands used on the build file to
+variation as it is possible to have on Earth. :-)
| You should try to restrict commands used in the build file to
commands found in Single UNIX Specification environments
and systems that conform to the Single UNIX Specification.
| You may compile and use your own programs. If you do, try to build and execute
@@ -761,9 +791,10 @@ from the current directory. This restriction is not a hard and
absolute one. The intent is to ensure that the building if your
program is reasonably portable.
We prefer programs that are portable across a wide variety of Unix-like -operating systems (i.e., Linux, GNU Hurd, BSD, Unix, etc.).
+operating systems (e.g., Linux, GNU Hurd, BSD, Unix, etc.).You are in a maze of twisty guidelines, all different.
-There are at least zero judges who think that Fideism has little +
There are at least zero judges who think that +Fideism has little or nothing to do with the IOCCC judging process.
Don’t forget that the building of your program should be done WITHOUT human intervention. So don’t do things such as:
@@ -774,11 +805,11 @@ or nothing to do with the IOCCC judging process.However, you can do something cute such as making your program do something dumb (or cute) when it is built ‘automatically’, and when it is run with a human involved, do something more clever. -For example, one could use the build instructions:
+For example, one could put in theirMakefile:
prog: prog.c
${CC} prog.c -DNON_HUMAN_COMPILE -o prog
@echo "See remarks section about alternate ways to compile"
-and then include special notes in tour remarks.md file for
+
and then include special notes in their remarks.md file for
alternate / human intervention based building.
We want to get away from source that is simply a compact blob of octets. Really try to be more creative than blob coding. HINT!
@@ -801,46 +832,52 @@ of code, and the other that is formatted more like a typical C program, we tend to favor the second version. Of course, a third version of the same program that is formatted in an interesting and/or obfuscated way, would definitely win over the first two! -Remember, you can submit more than one submission. See the IOCCC rules for details. -We suggest that you avoid trying for the ‘smallest self-replicating’ -source. The smallest, a zero byte submission, won in 1994.
+Remember, you can submit more than one submission. See the IOCCC +rules for details (in particular, Rule 9). +We suggest that you avoid trying for the ‘smallest self-replicating’ +source. The smallest, a zero byte entry, won in +1994.
Programs that claim to be the smallest C source that does something, really better be the smallest such program or they risk being rejected because they do not work as documented.
Please note that the C source below, besides lacking in obfuscation, is NOT the smallest C source file that when compiled and run, dumps core:
main;
-| Unless you specify -fwritable-strings (see COTHER in the example Makefile do not assume this sort of code will work:
| Unless you specify -fwritable-strings (see COTHER in the example
+Makefile) do not assume this sort of code will work:
char *T = "So many primes, so little time!";
...
T[14] = ';'; /* modifying a string requires: -fwritable-strings */
-| Initialized char arrays are OK to write over. This is OK:
| Initialized char arrays are OK to write over. For instance, this is OK:
char b[] = "Is this OK";
b[9] = 'k'; /* modifying an initialized char array is OK */
| There are more than 1 typos in this very sentence.
X client entries should be as portable as possible. Entries that +
X client entries should be as portable as possible. Submissions that adapt to a wide collection of environments will be favored. For example, don’t depend on a particular type or size of display. Don’t assume the use of a particular browser. Instead assume a -generic browser that forms to a widely used W3C standard. +generic browser that forms to a widely used W3C +standard. Don’t assume a particular sound sub-system or video driver is installed in the OS. Instead, make use of a well known and widely available open source program (one that actually works) to display audio/visual data.
X client entries should avoid using X related libraries and -software that is not in wide spread use.
-This is the only guideline that contains the word fizzbin.
+software that are not in wide spread use. +This is the only guideline that contains the word +fizzbin.
| However, do you know how to play fizzbin?
You do?!? (Except on Tuesday?)
| OK, there are actually 3 guidelines that contain the word fizzbin.
| OK, there are actually 3 guidelines that contain the word
+fizzbin.
We DISLIKE entries that use proprietary toolkits such as the M*tif,
Xv*ew, or OpenL*ok toolkits, since not everyone has them. Use an
open source toolkit that is widely and freely available instead.
NOTE: The previous guideline in this spot has been replaced by this guideline:
-| X client entries should try to not to depend on particular items on
+
| X client entries should try to not to depend on particular items in
.Xdefaults. If you must do so, be sure to note the required lines
in the your remarks.md file. They should also not depend on any
particular window manager.
| Try to avoid entries that play some people believe is copyrighted music.
| Try to avoid entries that play music that some people believe is copyrighted music.
| While we recognize that UNIX is not a universal operating system, the contest does have a bias towards such systems. In an effort to expand the scope of the contest, we phrase our bias to favor the Single UNIX Specification.
| You are well advised to submit entries that conform to the Single UNIX Specification Version 4.
| To quote the IOCCC judges:
| You are better off explaining what your submission does in your
-remarks.md file section rather than leaving it obscure for the judges
-as we might miss something and/or be too tired to notice.
remarks.md file section rather than leaving it obscure for the
+judges as we might miss something and/or be too tired to
+notice.
| Please avoid this specific individual guideline, if it at all possible.
| We freely admit that interesting, creative or humorous comments in
your remarks.md file help your chances of winning. If you had to
-read so many twisted entries, you too would enjoy a good laugh or two.
+read so many twisted submissions, you too would enjoy a good laugh or two.
We think the readers of the contest winners do as well. We do read
-the your remarks.md content during the judging process, so it is worth your
+your remarks.md content during the judging process, so it is worth your
while to write remarkable remarks.md file.
We DISLIKE C code with trailing control-M’s (\r or \015) that results
in compilation failures. Some non-Unix/non-Linux tools such as
@@ -887,7 +925,7 @@ prevent such trailing control-M’s being added.
One should restrict libcurses to portable features found on BSD or Linux curses.
Rule 13 states any C source that fails to compile because of unescaped -octets with the high bit set (octet value >= 128) will be rejected. +octets with the high bit set (octet value >= 128) might be rejected. Instead of unescaped octets, you should use or escapes:
/* 123456789 123456789 123456789 123456 */
@@ -897,7 +935,7 @@ Instead of unescaped octets, you should use or escapes:
else printf("This code should not print this message\n");
| It is a very good idea to, in your remarks.md file, tell us why you
think your submission is obfuscated. This is particularly true if
-your submission is has some very subtle obfuscations that we might
+your submission has some very subtle obfuscations that we might
otherwise overlook. <<– Hint!
Anyone can format their code into a dense blob. A really clever author will try format their submission using a “normal” formatting style @@ -906,25 +944,65 @@ the code might pass for non-obfuscated C. Deceptive comments, and misleading formatting, in some cases, may be a plus. On the other hand, a misleading code style requires more source bytes.
If you do elect to use misleading formatting and comments, we
-suggest you remark on this point in your remarks where you talk
+suggest you remark on this point in your remarks.md where you talk
about why you think your submission is obfuscated. On the other hand,
if you are pushing up against the size limits, you may be forced
into creating a dense blob. Such are the trade-offs that obfuscators face!
| We prefer code that can run on either a 64-bit or 32-bit
processor. However, it is UNWISE to assume it will run on an
some Intel-like x86 architecture.
We believe that Mark Twain’s once wrote:
+We believe that Mark Twain’s quote:
Get your facts first, then you can distort them as you please.
… is a good motto for those writing code for the IOCCC.
| The IOCCC size tool source
-is not an original work, unless you are Anthony C Howe, in which case it is original! :-)
+is not an original work, unless you are Anthony C
+Howe, in which case it is original! :-)
Submitting source that uses the content of iocccsize.c, unless you are
-Anthony C Howe, might run the risk of violating Rule 7.
Rule 7 does not prohibit you from writing your own obfuscated IOCCC size tool. -However if you do, you might wish to make your tool do something more -interesting than simply implementing the IOCCC size tool algorithm.
+Anthony C Howe, might run the risk of +violating Rule 7. +| The txzchk
+tool source
+is not an original work, unless you are Cody Boone
+Ferguson, in which case it is original! :-)
+Submitting source that uses the content of txzchk.c, unless you are
+Cody Boone Ferguson, might run the risk of
+violating Rule 7.
| Neither the chkentry
+tool source nor the
+mkiocccentry
+tool source nor
+the fnamchk tool
+source nor
+various others in the mkiocccentry
+repo
+are original works, unless you are Landon Curt
+Noll, in which case they are original! :-)
+Submitting source that uses the content of these tools, unless you are
+Landon Curt Noll, might run the risk of
+violating Rule 7.
| Neither the jparse tool and
+library nor the
+jstrencode
+tool nor
+jstrdecode
+tool
+are original works, unless you are Cody Boone Ferguson or
+Landon Curt
+Noll, in which case they are original! :-)
+Submitting source that uses the code of these tools or libraries, unless you are
+Cody Boone Ferguson
+or Landon Curt Noll, might run the risk of
+violating Rule 7.
| Rule 7 does not prohibit you from writing your own
+obfuscated versions of these tools, unless of course you are Landon Curt
+Noll, in which case you probably won’t
+win since judges are disqualified! :-)
+However, if you do write your own version, you might wish to make it do something more
+interesting than simply implementing the IOCCC tools’ algorithms. On the other
+hand, writing an obfuscated version of a library runs the risk of violating
+Rule 1 as it is likely not a complete program.
While programs that only run in a specific word size are OK. If you have to pick, choose a 64-bit word size.
| If IOCCC judges are feeling ornery we
@@ -933,40 +1011,45 @@ a PDP-11. Heck, should we ever find an emulator of 60-bit CDC Cyber
CPU, we might just try your submission on that emulator as well :-)
| If your submission MUST run only on a 64-bit or 32-bit architecture,
then you MUST specify the -arch on your command line
-(see ARCH in the example Makefile. Do not assume a processor word size without specifying -arch. For example:
ARCH in the example
+Makefile). Do not assume a processor word size without specifying -arch. For example:
ARCH= -m64
+| Note, however, that some platforms will not necessarily support some
+architectures. For instance, more recent versions of macOS do NOT support
+32-bit!
| Try to be even more creative!
| If there are limitations in your submission, you are highly encouraged
to note such limitations in your remarks.md file. For example if your
submission factors values up to a certain size, you might want to state:
--This submission factors values up 2305567963945518424753102147331756070.
+This submission factors values up
2305567963945518424753102147331756070.
Attempting to factor larger values will produce unpredictable results.
The judges might try to factor the value -5, so you want to might state:
+The judges might try to factor the value -5, so you want to might state:
--This submission factors positive values up 2305567963945518424753102147331756070.
+This submission factors positive values up
2305567963945518424753102147331756070.
Attempting to factor large values will produce unpredictable results.
However the judges might try to also factor 0, so you want to might state:
+However the judges might try to also factor 0, so you want to might state:
-This submission factors values between 1 and 2305567963945518424753102147331756070.
+This submission factors values between 1 and
2305567963945518424753102147331756070.
Attempting to factor values outside that range will produce unpredictable results.
Moreover the try to also factor 3.5 or 0x7, or Fred, so you want to might state:
-This submission factors integers between 1 and 2305567963945518424753102147331756070.
+This submission factors integers between 1 and
2305567963945518424753102147331756070.
Attempting to factor anything else will produce unpredictable results.
You submission might be better off catching the attempt to factor bogus values and doing something interesting. So you might want to code accordingly and state:
--This submission factors integers between 1 and 2305567963945518424753102147331756070.
+This submission factors integers between 1 and
2305567963945518424753102147331756070.
Attempting to factor anything else will cause the program to insult your pet fish Eric.
The judges might not have a pet fish named Eric, so might want to state:
+The judges might not have a pet fish named Eric, so might want to state:
-@@ -978,12 +1061,23 @@ and state: given enough time and memory. If the value is not a proper integer, the programThis submission factors integers between 1 and 2305567963945518424753102147331756070.
+This submission factors integers between 1 and +
2305567963945518424753102147331756070.
Attempting to factor anything else will cause the program to insult your pet fish Eric,
or in the case that you lack such a pet, will insult the pet that you do not have.
| Do not fear if you not 100% sure of the significance of 2305567963945518424753102147331756070 as it is not of prime importance: or is it? :-)
| Do not fear if you’re not 100% sure of the significance of 2305567963945518424753102147331756070 as it is not of prime importance: or is it? :-)
| We DISLIKE the use of use ASCII tab characters in markdown files, such as in the required remarks.md file.
| We don’t mind the use ASCII tab characters in your C code. Feel free to use ASCII tab characters if that suits your obfuscation needs. If is perfectly OK to use tab characters elsewhere in your submission, just not in markdown files as this tends complicate and annoys us when be comes to rendering your markdown content.
| If you do use ASCII tab characters in your non-markdown files, be aware that some people may use tab stop that is different than the common 8 character tab stop.
| PLEASE observe our IOCCC markdown guidelines when forming your submission’s remarks.md file. And if your submission contains additional markdown files, please follow those same guidelines. See also Rule 19.
| We LIKE a reading remarks.md files, especially if they contain useful, informative, and even humorous content about your submission. Yes, this is a hint. :-)
| We don’t mind the use ASCII tab characters in your C code. Feel free
+to use ASCII tab characters if that suits your obfuscation needs. If is
+perfectly OK to use tab characters elsewhere in your submission, just not in
+markdown files as this tends complicate and annoy us when it comes time to
+rendering your markdown content.
| If you do use ASCII tab characters in your non-markdown files, be
+aware that some people may use tab stop that is different than the common 8
+character tab stop.
| PLEASE observe our IOCCC markdown guidelines
+when forming your submission’s remarks.md file. And if your submission
+contains additional markdown files, please follow those same guidelines. See
+also Rule 19.
| We LIKE reading remarks.md files, especially if they contain
+useful, informative, and even humorous content about your submission. Yes, this
+is a hint. :-)
| We RECOMMEND you put a reasonable amount effort into the content of the remarks.md file: it is a required for for a reason. :-)
Legal rule abuse is encouraged to help promote creativity. Rule abuse entries, regardless of if they receive an award, result in changes to the next year’s IOCCC rules and IOCCC guidelines.
-Legal abuse of the IOCCC rules is NOT an invitation to violate the +
Legal abuse of the IOCCC rules is NOT an invitation to violate the IOCCC rules. A submission that violates the rules in the opinion of the judges, WILL be disqualified. RULE ABUSE CARRIES A CERTAIN LEVEL OF RISK! If you @@ -1026,7 +1120,7 @@ is that we sometimes make genuine mistakes. But in many cases such problems, flaws or areas of confusion are deliberate. Changes to IOCCC rules and IOCCC guidelines in response to rule abuses, are done in a minimal fashion. Often we will deliberately leave behind holes (or introduce -new ones) so that future rule abuse may continue. A cleaver author +new ones) so that future rule abuse may continue. A clever author should be able to read them and “drive a truck through the holes” in the IOCCC rules and IOCCC guidelines.
At the risk of stating the obvious, this contest is a parody of the software @@ -1044,10 +1138,10 @@ This is one of the reasons why the IOCCC rules and
Entries are judged by Leonid A. Broukhis and Landon Curt Noll.
Each submission submitted is given a random id number and subdirectory. The -submission files including, but not limited to prog.c, Makefile (that we -form from around your “how to build” information), as well as any -data files that you submit are all placed under their own directory -stored and judged from this directory.
+submission files including, but not limited toprog.c, Makefile (that we
+form from your submitted Makefile and any additional “how to build”
+information you provide), as well as any data files that you submit are all
+placed under their own directory and stored and judged from this directory.
Any information about the authors is not read by the judges until the judging process is complete, and then only from entries that have won an award. Because we do not read this information for entries that @@ -1062,33 +1156,34 @@ and outside the scope of the above paragraph.
including comments of famous Internet personalities such as Peter Honeyman. The judges are on to this trick and therefore consider any obfuscated source or data file claiming to be from -Honeyman to not be form Honeyman. This of course creates an interesting paradox -known as the “obfuscated Peter Honeyman paradox”. Should Peter Honeyman -actually submit an obfuscated submission, he alone is excluded from the above, as we -will likely believe it just another attempt at confusion. This guideline is -known as the “Peter Honeyman is exempt” guideline. +Honeyman to not be from Honeyman. This of course creates an interesting paradox +known as the “obfuscated Peter Honeyman paradox”. Should Peter Honeyman +actually submit to the IOCCC, he alone is excluded from the above, as we +will likely believe it’s just another attempt at confusion. This guideline is +known as the “Peter Honeyman is exempt” guideline.BTW: None of the entries claiming to be from Peter Honeyman have ever won an award. So it is theoretically possible that Peter Honeyman -did submit a submission in the past. In the past, Peter had denied +did submit to the IOCCC in the past. In the past, Peter had denied submitting anything to the IOCCC. Perhaps those entries were submitted by one of his students?
| Hopefully we are VERY CLEAR on this point! The rules now strongly state:
PLEASE DO NOT put a name of an author, in an obvious way, into your
-source code, remarks.md, data files, etc. The above “Peter Honeyman is
-exempt” notwithstanding.
remarks.md, data files, etc., the above “Peter Honeyman is
+exempt” notwithstanding.
We seemed to have digressed again … :-) Returning to the judging process:
We prefer to be kept in the dark as much as you are until the final awards are given. We enjoy the surprise of finding out in the end, -who won and where they were from.
+who won and where they are from.We attempt to keep all entries anonymous, unless they win an award. Because the main ‘prize’ of winning is being announced, we make all attempts to send non-winners into oblivion. We remove all non-winning -files, and shred all related paper. By tradition, we do not even +files, and shred all related printouts. By tradition, we do not even reveal the number of entries that we received.
-During the judging process, a process that spans multiple sessions -over a few weeks, we post general updates from our Mastodon -account. Make sure you reload the feed every so -often as unless you are mentioned you will not get a push notification.
+| During the judging process, a process that spans multiple sessions over
+a few weeks, we post general updates from our Mastodon
+account.
| Make sure you reload the feed every so often because unless you
+are mentioned you will NOT get a push notification!
A reading consists of a number of actions:
prog.c, the C source| * reviewing the remarks.md information#included files
#included files
In later rounds, other actions are performed including performing miscellaneous tests on the source and binary.
-| This is the very guideline that goes, BING!
Until we reduce the stack of entries down to about 25 entries, entries -are judged on an individual basis. A submission is set aside because it +
| This is the very guideline that goes, BING!
Until we reduce the stack of submissions down to about 25 submissions, +submissions are judged on an individual basis. A submission is set aside because it does not, in our opinion, meet the standard established by the round. -When the number of entries thins to about 25 entries, we begin to form -award categories. Entries begin to compete with each other for awards. +When the number of submissions thins to about 25 submissions, we begin to form +award categories. Submissions begin to compete with each other for awards. A submission will often compete in several categories.
-The actual award category list will vary depending on the types of entries +
The actual award category list will vary depending on the types of submissions we receive. A typical category list might be:
We do not limit ourselves to this list. For example, a few entries are so @@ -1150,50 +1244,53 @@ half that number: declaring those remaining to be winners.
the final round are definitely better than the ones that do not make it. The selection of the winners out of the final round, is less clear cut. -Sometimes a final round submission is good enough to win, but is beat out -by a similar, but slightly better submission. For this reason, it is -sometimes worthwhile to re-enter an improved version of a submission -that failed to win in a previous year. This assumes, of course, -that the submission is worth improving in the first place!
+Sometimes a final round submission is good enough to win, but is beat out by a +similar, but slightly better submission. For this reason, it is sometimes +worthwhile to resubmit an improved version of a submission that failed to win in +a previous year, the next year. This assumes, of course, that the submission is +worth improving in the first place!
| Over the years, more than one IOCCC judge
-has been known to bribe another IOCCC judge into voting for a
-winning submission by offering a bit high quality chocolate, or
+has been known to bribe another IOCCC judge into voting for a
+winning entry by offering a bit of high quality chocolate, or
other fun item.
| One should not attempt to bribe an IOCCC
-judge, unless you are an IOCCC judge,
-because bribing a IOCCC judge by a non-judge
-has been shown to NOT be effective when the person attempting
-the bribe is made known to the IOCCC judges
-(i.e., they are not anonymous) AND/OR the bribe is otherwise
-associated with a submission to the IOCCC.
| One should NOT attempt to bribe an IOCCC
+judge, unless you are an IOCCC judge,
+because bribing an IOCCC judge by a non-judge
+has been shown to NOT be effective when the person attempting
+the bribe is made known to the IOCCC judges
+(i.e., they are not anonymous) AND/OR the bribe is otherwise
+associated with a submission to the IOCCC.
| With the previous guideline in mind: anonymous gifts
-for the IOCCC judges that are NOT associated
-with a submission to the IOCCC may be sent to the
+for the IOCCC judges that are NOT ASSOCIATED
+WITH a submission to the IOCCC may be sent to the
IOCCC judges via the
IOCCC Amazon wishlist.
It has been shown that receiving anonymous gifts provides the
-IOCCC judges with a nice dopamine boost, and happy
-IOCCC judges help make the IOCCC better for everyone. :-)
| See FAQ: How may I support the IOCCC?.
More often than not, we select a small submission (usually one line), a -strange/creative layout submission. We sometimes also select an +
More often than not, we select a small submission (usually one line) and a +strange/creative layout submission. We sometimes also select a submission that abuses the IOCCC guidelines in an interesting way, -or that stretches the content rules that while legal, is -nevertheless goes against the intent of the rules.
-In the end, we traditionally pick one submission as ‘best’. Sometimes such +or that stretches the contest rules that while legal, it +nevertheless goes against the intent of the rules.
+| Nevertheless, see Rule 12.
In the end, we traditionally pick one submission as ‘best’. Sometimes such a submission simply far exceeds any of the other entries. More often, the -‘best’ is picked because it does well in a number of categories.
-In years past, we renamed the winning submission from prog.c to a -name related to the submitter(s) names. This is no longer done. -Winning source is called prog.c A compiled binary is called prog.
+‘best’ is picked because it does well in a number of categories. +In years past, we renamed the winning submission from prog.c to a
+name related to the author(s)’ names. This is no longer done.
+Winning source is called prog.c. A compiled binary is called prog.
The judges will toot initial announcement of who won, the name -of their award, and a very brief description of the winning submission -from the @IOCCC Mastodon account. You should -follow us on Mastodon and refresh the page (even if you do follow us) as unless -you are mentioned you will not get a notification.
+| The judges will toot initial announcement of who won, the name
+of their award, and a very brief description of the winning entry
+from the @IOCCC Mastodon account.
| We recommend that you follow us on mastodon but please make sure to
+refresh the feed every so often (if not more often) because unless you are
+mentioned or someone boosts your post you will not get a push notification.
| The contest_status in the status.json file will change from judging to closed as well.
| When the above happens, the winning entries have been selected by the IOCCC judges.
| The IOCCC judges will begin to prepare to release the source code of the new IOCCC winners.
| The IOCCC judges will post the winning source to the IOCCC winner repo as well as to the Official IOCCC winner website.
| The IOCCC judges will commit the winning source to the
+IOCCC winner repo which will update the Official IOCCC website.
| The IOCCC news will also contain an announcement of the winners.
| The IOCCC no longer uses twitter. IOCCC entries will be announced by a
-git commit to the IOCCC entries repo
-that, in turn, updates the official IOCCC
+git commit to the IOCCC entries repo
+that, in turn, updates the Official IOCCC
website.
| In addition a note is posted to the IOCCC Mastodon account.
| It is pointless to ask the IOCCC judges how many
-submissions we receive. See How many submissions do the judges receive for a given IOCCC.
Often, winning entries are published in selected magazines from around -the world. Winners have appeared in books (“The New Hackers Dictionary”) -and on T-Shirts. More than one winner has been turned into a tattoo!
-Last, but not least, winners receive international fame and flames! :-)
+submissions we receive. See How many submissions do the judges receive for a +given IOCCC?. +Often, winning entries are published in selected magazines from around the
+world. Winners have appeared in books (‘The New Hackers Dictionary’,
+‘Obfuscated C and Other Mysteries’, ‘Pointers On C’, others) and on t-shirts.
+More than one winner has been turned into a tattoo!
Last, but not least, winners receive international fame and flames! :-)
| See the Official IOCCC website news for additional information.
| For the updates and breaking IOCCC news, you are encouraged to follow
the IOCCC on Mastodon. See our
-FAQ on Mastodon for more information. Please be aware that
-unless you are mentioned you most likely will NOT get a notification
-so you should make sure to check the page.
| Check out the Official IOCCC website in general.
Leonid A. Broukhis
chongo (Landon Curt Noll) /\cc/\
| These IOCCC rules are version 28.2 2024-06-30.
| These IOCCC rules are version 28.3 2024-07-01.
IMPORTANT: Be sure to read the IOCCC guidelines.
remarks.md file.
Legal abuse of the rules is somewhat encouraged. A submission that, in
-the opinion of the judges, violates the rules will be disqualified.
-Entries that attempt to abuse the rules MUST try to justify why
-their rule abuse is legal, in the submission’s remarks.md file.
Legal abuse of the rules is somewhat encouraged. A submission that, in
+the opinion of the judges, violates the rules will be disqualified.
+Submissions that attempt to abuse the rules MUST** try to justify why
+their rule abuse is legal, in the remarks.md file.
mkiocccentry(1)txzchk(1)fnamchk(1)jparse(1) and jparse(8) (which chkentry(1) uses)| The above mentioned tools will help you verify that your submission
conforms to Rule 17.
| Each above mentioned tools has a -h option that provides command
line help. For additional details, see the tools’ man pages.
| You do not explicitly need to invoke jparse(1) but the jparse(8)
+library will be used when compiling various tools.
| Each submission MUST be in the form of a xz compressed tarball.
| The xz compressed tarball filename must be of the form: