diff --git a/faq.html b/faq.html index a7cfce8332..61b52293b4 100644 --- a/faq.html +++ b/faq.html @@ -453,7 +453,7 @@
This is FAQ version 29.03 2025-11-30.
+This is FAQ version 29.04 2025-12-01.
As you can read above, the Size rule is slow to change.
+Given how long the IOCCC 2013-2020 size rule lasted, +one might expect the IOCCC 2024-date size rule to last +well into the 2030’s.
Jump to: top
All Rights Reserved. Permission for personal, education or non-profit use is granted provided this copyright and notice are included in its entirety and remains unaltered. All other uses must receive prior permission in -writing by contacting the judges.
+writing by contacting the Judges.Be sure to read the IOCCC rules.
+Be sure to read the Rules.
#include statements and/or implicit defines on the C compiler command line
that are found in
-winning IOCCC entries, and try to NOT set a new record.
+winning Entries, and try to NOT set a new record.
Jump to: top
iocccentry(1) tool.
For example:
iocccsize prog.c
-The IOCCC size tool algorithm can be summarized as follows:
+The iocccsize(1) algorithm can 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 bytes as 1 @@ -537,36 +536,39 @@
Guidelines for IOCCC -judges. +
iocccsize(1)conflict, the algorithm implemented +by the minimum required version ofiocccsize(1)is preferred by the Judges.Make sure
-iocccsizedoes not flag any issues with yourprog.c.NOTE: by default
iocccsizewill only report the rule 2b size, unless the +NOTE: by default
iocccsizewill only report the size, unless the code surpasses the limit.There a much less need to
#defineC reserved words in an effort to get around the size limits of Rule 2 - Size restrictions because of theiocccsize(1)algorithm.Yes Virginia, the previous guideline sentence is an important hint!
+Don’t expect the Rule 2 - Size restrictions to +change any time soon.
+See the +FAQ on “How has the Rule 2 size restrictions rule changed over the years?”.
Jump to: top
-+Guidelines for Rule 3 - Register for the IOCCC
It can take a few days to process your registration and for the server to email your details, therefore make sure to allow yourself ample time to register and submit your entries; DO NOT WAIT UNTIL THE FINAL DAYS -to register! The judges are NOT responsible for delayed or lost +to register! The Judges are NOT responsible for delayed or lost email or for those who wait until the last minute to try to register!
Guidelines for Entering the IOCCC: the bare minimum you need to know.
Jump to: top
-+@@ -608,82 +610,130 @@Guidelines for Rule 7 - Original Work
Guidelines for May I use AI, LLM, Virtual coding assistants, or similar tools to write my submission?”.
Jump to: top
-+-Guidelines for Rule 8 - Submitting requirements
Do NOT register more than one account just try and get around the limit on the number of submission slots.
+Do NOT register more than one account just to try and get around the limit on the number of submission slots.
+Jump to: top
+++++++Guidelines for Rule 9 - No interactive compiling allowed
+Don’t forget that the building of your program should be done +WITHOUT human intervention. So don’t do things such as:
++prog: prog.c + #echo this next line requires data from standard input + cat > prog.c + ${CC} prog.c -o progHowever, 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 put in their
+Makefile:+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 your
remarks.mdfile for +alternate / human intervention based building.Jump to: top
--+-Guidelines for Rule 11 - Legal rule abuse
We do realize that there are holes in the IOCCC rules, and invite +
We do realize that there are holes in the Rules, and invite submitters to attempt to apply creative rule interpretation. A rule abuse though, even if not rewarded, may result in a subsequent rule change for future contests.
We sometime award ‘Best abuse of the rules’ or ‘Worst abuse of the rules’, or some variation, to a submission that creatively attempts to exploit a holes in the -IOCCC rules.
-When we do need to plug a hole in the IOCCC rules -or IOCCC guidelines, we will attempt to use a very small plug, +Rules.
+When we do need to plug a hole in the Rules +or Guidelines, we will attempt to use a very small plug, if not smaller.
Or, maybe not. :-)
Legal rule abuse may involve, but is not limited to, doing things that are -technically allowed by the IOCCC rules and yet do not fit the spirit of what +technically allowed by the Rules and yet do not fit the spirit of what we intended to be submitted.
-Legal abuse of the IOCCC rules is NOT an invitation to violate -the IOCCC rules (especially Rule 17 - +
Legal abuse of the Rules is NOT an invitation to violate +the Rules (especially Rule 17 - Use mkiocccentry). A submission that violates the -rules in the opinion of the IOCCC judges, +rules in the opinion of the Judges, WILL be disqualified. RULE ABUSE CARRIES A CERTAIN LEVEL OF RISK!
-If you intend to abuse the IOCCC rules, +
If you intend to abuse the Rules, indicate so in your
+Rules. Humor or creativity help plead a case.remarks.mdfile. You MUST try to justify, plead, beg, why you consider your rule abuse to be allowed under the -IOCCC rules. Humor or creativity help plead a case.As there is no guarantee that you will succeed, you might consider submitting an -alternate version that conforms to the IOCCC rules, if it might -otherwise be interesting; one that does not abuse the IOCCC rules +alternate version that conforms to the Rules, if it might +otherwise be interesting; one that does not abuse the Rules and one that does, making sure to note in the one that does not abuse the rules -that this is another version, so that the judges do not assume you uploaded it +that this is another version, so that the Judges do not assume you uploaded it by mistake.
If you do bypass the
-mkiocccentry(1)warnings about Rule 2a - Gross Size and/or about Rule 2b - Net Size or any other -rule and submit a submission anyway, you MUST try to justify why the IOCCC -IOCCC judges should not reject your submission due to a rule +rule and submit a submission anyway, you MUST try to justify why the +Judges should not reject your submission due to a rule violation, and you would be wise to do this towards the top of yourremarks.md-file.We are often asked why the contest IOCCC rules and IOCCC -guidelines seem strange or contain mistakes, flaws, or +file so as not to be overlooked.
+We are often asked why the contest Rules and Guidelines seem strange or contain mistakes, flaws, or grammatical errors. One reason 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 +
Changes to Rules and 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 can continue. A clever author should be able to read and “drive a -truck through the holes” in the IOCCC rules and IOCCC -guidelines.
+truck through the holes” in the Rules and Guidelines.At the risk of stating the obvious, this contest is a parody of the software -development process. The IOCCC rules and IOCCC guidelines +development process. The Rules and Guidelines are only part of the overall contest. Even so, one might think the -contest IOCCC rules and IOCCC guidelines process as a parody +contest Rules and Guidelines process as a parody of the sometimes tragic mismatch between what a customer (or marketing) wants and what engineering delivers. Real programmers must face obfuscated and sometimes conflicting, ballooning specifications, and requirements from marketing, sales, product management and even from customers themselves on an all too regular basis. -This is one of the reasons why the IOCCC rules and -IOCCC guidelines are written in obfuscated form.
+This is one of the reasons why the Rules and +Guidelines are written in obfuscated form. +Jump to: top
+++++Guidelines for Rule 12 - UTF-8
+The IOCCC no longer discourages the use of multibyte UTF-8 characters in
+Ccode.++++Guidelines for Rule 13 - No carriage returns in prog.c
+We DISLIKE C code with trailing control-M’s (
+\ror\015) that results +in compilation failures.Some non-UNIX/non-Linux tools such as MS Visual C and MS Visual C++ +leave trailing control-M’s on lines. Users of such tools should strip +off such control-M’s before submitting their submissions. In some cases +tools have a “Save As” option that will prevent such trailing control-M’s +being added.
+ +Jump to: top
--Guidelines for Rule 15 - GNU Makefile
Submissions will be judged in an environment that has no IDE. Any submission that fails to compile/build because it requires an IDE will be rejected.
@@ -695,20 +745,18 @@Guidelines for -Your Makefile MUST be compatible with GNU
makeand we suggest you use -Makefile.example as a template, renamed as Makefile of +YourMakefileMUST be compatible with GNUmakeand we suggest you use +Makefile.example as a template, renamed asMakefileof course.See the FAQ on “What are the detailed recommendations for a submission Makefile?”.
Jump to: top
--Guidelines for Rule 17 - Use mkiocccentry
Guidelines for If you DO include a tarball then make sure it uses the v7 format. See the @@ -790,9 +839,9 @@
General Guidelines
-Overall Guidelines
These guideline are hints and suggestions, NOT IOCCC rules.
-While submissions that violate guideline are allowed, -submissions that remain within the IOCCC guidelines are preferred.
+These Guidelines are hints and suggestions, NOT Rules.
+While submissions that violate the Guidelines are allowed, +submissions that remain within the Guidelines are preferred.
You are encouraged to review the following FAQs:
- @@ -808,9 +857,8 @@
Overall Guidelines
The official locale of the IOCCC is C.You are encouraged to examine the winners of previous contests.
-Because rules change from year to year, some past winning entries -may be rejected this year.
-What was was unique and novel one year might be ‘old’ the next year.
+Because the Rules change from year to year, some past winning entries +may be rejected this year. What was was unique and novel one year might be ‘old’ the next year.
A submission is usually examined in a number of ways. We typically apply a number of tests to a submission:
@@ -863,12 +911,12 @@
Overall Guidelines
Jump to: top
-Our Likes and Dislikes:
+Our Likes and Dislikes
We VERY MUCH LIKE submissions that use an edited variant of the -example Makefile, as described and linked to in the Makefile section, -renamed as
Makefileof course. This makes it easier for the IOCCC judges +exampleMakefile, as described and linked to in the Makefile section, +renamed asMakefileof course. This makes it easier for the Judges to test your submission. And if your submissions wins, it makes it easier to integrate it into the Official IOCCC winner website.We VERY MUCH LIKE submissions that have some educational value. This does NOT mean @@ -908,6 +956,10 @@
Our Likes and Dislikes:
+Jump to: top
++About C preprocessor
+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=barwon’t go as far @@ -921,6 +973,12 @@Our Likes and Dislikes:
int this_is_fine;and NOT like this:
+this_is_not; /* <-- Try to avoid implicit type declarations */We really DISLIKE submissions that make blatant use of
+#includeof +large data files to get around the source code size limit. This does not mean +#includeof standard header files, just data files you provide.On 28 January 2007, the Judges rescinded the requirement that the +
+#in a C preprocessor directive must be the 1st non-whitespace byte.About compilers
We tend to like less a submission that requires either
@@ -929,7 +987,11 @@gccORclang. We prefer submissions that can compile under BOTHgccANDclang. Hint!Our Likes and Dislikes:
We DISLIKE the use of obscure compiler flags, especially if
+gccand/orclangdo not support it. We suggest that you not use any really obscure compiler flags if you can help it.++About nested functions
+One side effect of the above is that you cannot assume the use of nested functions such as:
-int main() { @@ -938,12 +1000,12 @@Our Likes and Dislikes:
} | please_dont_submit_this(); }On 2012 July 20, the IOCCC judges rescinded the encouragement of +
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 are required by a C standard that are actually implemented in BOTH
gccANDclang.We DISLIKE submissions that require the use of
+-fnested-functions.About variadic functions
If your submission uses functions that have a variable number of arguments, be careful. Systems implement
-va_listin a wide variety of ways. Because of this, a number of operations usingva_listare @@ -958,7 +1020,9 @@Our Likes and Dislikes:
In particular, do not treat
va_listvariables as if they were achar **.We DISLIKE the use of
+varargs.h. Usestdarg.hinstead.About I/O
We DISLIKE the use of
+gets(3). Usefgets(3)instead.About tarballs
We tend to DISLIKE the blatant use of tarballs in an attempt to simply get around the extra file number limit. We realize there may be cases where a tarball containing a number of extra files may be needed. Such a need for a @@ -967,10 +1031,14 @@
Our Likes and Dislikes:
Using a mass ofgotos to obfuscate your code has become ‘old’ and is unlikely to make it through the final rounds, if it even gets that far.On 28 January 2007, the Judges rescinded the requirement that the -
+#in a C preprocessor directive must be the 1st non-whitespace byte.+About stdlib
+The
+exit(3)function returnsvoid. Some broken systems haveexit(3)returnint; your submission should assume thatexit(3)returns avoid.+What it means to be small
+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 @@ -979,6 +1047,26 @@
Our Likes and Dislikes:
One line programs should be short one line programs: say around 80 to 132 bytes long. Going well beyond 132 bytes is a bit too long to be called a one-liner in our vague opinion.
+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.
+We want to get away from source that is simply a compact blob of +bytes. REALLY TRY to be more creative than blob coding. HINT!
+Unless you are cramped for space, or unless you are entering the +‘Best one liner’ category, we suggest that you format your program +in a more creative way than simply forming excessively long lines.
+The
+Makefileshould 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.Please do not use things like
+gzip(1)to get around the size limit. This was +done years ago; please try to be much more creative.Your source code, post-pre-processing, should not exceed the size of +Microsoft Windows. :-)
+About environment
We tend to DISLIKE programs that:
- are very hardware specific
@@ -1011,15 +1099,6 @@Our Likes and Dislikes:
(UNIX-like) environment. Therefore do not assume the system has a windows.h include file:-#include <windows.h> /* we DISLIKE this */Unless you are cramped for space, or unless you are entering the -‘Best one liner’ category, we suggest that you format your program -in a more creative way than simply forming excessively long lines.
-The
-Makefileshould 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 -Microsoft Windows. :-)
We prefer programs that are portable across a wide variety of UNIX-like operating systems (e.g., Linux, GNU Hurd, BSD, UNIX, macOS, etc.).
-Don’t forget that the building of your program should be done -WITHOUT human intervention. So don’t do things such as:
--prog: prog.c - #echo this next line requires data from standard input - cat > prog.c - ${CC} prog.c -o progHowever, 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 put in their
-Makefile:-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 your
-remarks.mdfile for -alternate / human intervention based building.We want to get away from source that is simply a compact blob of -bytes. REALLY TRY to be more creative than blob coding. HINT!
-Please do not use things like
-gzip(1)to get around the size limit. This was -done years ago; please try to be much more creative.We really DISLIKE submissions that make blatant use of
+#includeof -large data files to get around the source code size limit. This does not mean -#includeof standard header files, just data files you provide.Try to avoid submissions that play music that some people believe is copyrighted +music.
Did we remember to indicate that programs that blatantly use some complex state machine to do something simple, are boring? We think we did. :-)
@@ -1064,15 +1123,9 @@Our Likes and Dislikes:
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 +Rules for details (in particular, Rule 8 - Submitting requirements). -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:
@@ -1086,6 +1139,21 @@main;Our Likes and Dislikes:
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 */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**.
+While programs that only run in a specific word size are OK, if you have +to pick, choose a 64-bit word size.
+If your submission MUST run only on a 64-bit or 32-bit architecture, +then you MUST specify the
+-archon your command line +(seeARCHin the example +Makefile, described in Makefile section). Do not assume a +processor word size without specifying-arch. For example:+ARCH= -m64Note, however, that some platforms will not necessarily support some +architectures. For instance, more recent versions of
+macOSdo NOT support +32-bit, and more than zero Judges use it!About X
X client submissions 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. @@ -1108,32 +1176,40 @@
Our Likes and Dislikes:
.Xdefaults. If you must do so, be sure to note the required lines in the yourremarks.mdfile. They should also not depend on any particular window manager. -Try to avoid submissions 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 -(UNIX-like).
-You are well advised to submit code that conforms to the Single UNIX -Specification Version 4.
-To quote the IOCCC judges:
-We LIKE programs that:
--
-- are as concise and small as they need to be
-- do something at least quasi-interesting
-- are portable
-- are unique or novel in their obfuscation style
-- make use of a NUMBER OF DIFFERENT TYPES OF OBFUSCATIONS! <== HINT!!
-- make us laugh and/or throw up :-) (humor really helps!)
-- make us want to eat good chocolate
-Some types of programs can’t excel (anti-tm) in some areas. Your -program doesn’t have to excel in all areas, but doing well in several -areas really does help.
+About Curses
+One should restrict libcurses to portable features found on both BSD +and Linux curses.
+ +Jump to: top
+++About ASCII TAB
+We DISLIKE the use of ASCII tab characters in markdown files, such as in the required
+remarks.mdfile.We don’t mind the use of 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 annoy us when it comes time to +rendering your markdown content as it complicates the process.
+If you do use ASCII tab characters in your non-markdown files, be +aware that some people may use a tab stop that is different than the common 8 +character tab stop.
+PLEASE observe our Markdown Guidelines +when forming your submission’s
+remarks.mdfile. And if your submission +contains additional markdown files, please follow those same Guidelines for +those files. See also +Rule 4 - Required files, +and the +FAQ on “markdown”.Jump to: top
++About remarks.md
+You are better off explaining what your submission does in your
remarks.mdfile section rather than leaving it obscure for the -IOCCC judges as we might miss something and/or be too tired to +Judges as we might miss something and/or be too tired to notice.We freely admit that interesting, creative or humorous comments in your
remarks.mdfile help your chances of winning. If you had to @@ -1141,21 +1217,6 @@Our Likes and Dislikes:
We think the readers of the contest winners do as well. We do read yourremarks.mdcontent during the judging process, so it is worth your while to write a remarkableremarks.mdfile. -We DISLIKE C code with trailing control-M’s (
-\ror\015) that results -in compilation failures. Some non-UNIX/non-Linux tools such as -MS Visual C and MS Visual C++ leave trailing control-M’s on lines. -Users of such tools should strip off such control-M’s before submitting -their submissions. In some cases tools have a “Save As” option that will -prevent such trailing control-M’s being added.One should restrict libcurses to portable features found on both BSD -and Linux curses.
- -Rule 12 - UTF-8 -no longer discourages the use of UTF-8 -characters in C code.
It is a very good idea to, in your
remarks.mdfile, tell us why you think your submission is obfuscated. This is particularly true if your submission has some very subtle obfuscations that we might @@ -1171,34 +1232,49 @@Our Likes and Dislikes:
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**.
-While programs that only run in a specific word size are OK, if you have -to pick, choose a 64-bit word size.
-If your submission MUST run only on a 64-bit or 32-bit architecture, -then you MUST specify the
--archon your command line -(seeARCHin the example -Makefile, described in Makefile section). Do not assume a -processor word size without specifying-arch. For example:-ARCH= -m64Note, however, that some platforms will not necessarily support some -architectures. For instance, more recent versions of
macOSdo NOT support -32-bit, and more than zero judges use it!If there are limitations in your submission, you are highly encouraged to note such limitations in your
+remarks.mdfile. For example if your submission factors values up to a certain size, you might want to state:We LIKE reading
+remarks.mdfiles, 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.mdfile: it is a required file for a reason. :-)Try to be even more creative!
+Jump to: top
+Miscellaneous
+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 +(UNIX-like).
+You are well advised to submit code that conforms to the Single UNIX +Specification Version 4.
+To quote the Judges:
+We LIKE programs that:
++
+- are as concise and small as they need to be
+- do something at least quasi-interesting
+- are portable
+- are unique or novel in their obfuscation style
+- make use of a NUMBER OF DIFFERENT TYPES OF OBFUSCATIONS! <== HINT!!
+- make us laugh and/or throw up :-) (humor really helps!)
+- make us want to eat good chocolate
+Some types of programs can’t excel (anti-tm) in some areas. Your +program doesn’t have to excel in all areas, but doing well in several +areas really does help.
-This submission factors values up
2305567963945518424753102147331756070. Attempting to factor larger values will produce unpredictable results.The IOCCC 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. Attempting to factor large values will produce unpredictable results.However the IOCCC judges might try to also factor 0, so you want to might state:
+However the Judges might try to also factor 0, so you might want to state:
-This submission factors values between 1 and
2305567963945518424753102147331756070. Attempting to factor values outside @@ -1216,7 +1292,7 @@Our Likes and Dislikes:
This submission factors integers between 1 and
2305567963945518424753102147331756070. Attempting to factor anything else will cause the program to insult your pet fish Eric.The IOCCC judges might not have a pet fish named Eric, so you might want to state:
+The Judges might not have a pet fish named Eric, so you might want to state:
-This submission factors integers between 1 and
2305567963945518424753102147331756070. Attempting to factor anything else @@ -1231,28 +1307,6 @@Our Likes and Dislikes:
program is given enough time and memory. If the value is not a proper integer, the program might insult a fish named Eric.We DISLIKE the use of ASCII tab characters in markdown files, such as in the required
-remarks.mdfile.We don’t mind the use of 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 annoy us when it comes time to -rendering your markdown content as it complicates the process.
-If you do use ASCII tab characters in your non-markdown files, be -aware that some people may use a tab stop that is different than the common 8 -character tab stop.
-PLEASE observe our IOCCC markdown guidelines -when forming your submission’s
-remarks.mdfile. And if your submission -contains additional markdown files, please follow those same guidelines for -those files. See also -Rule 4 - Required files, -and the -FAQ on “markdown”.We LIKE reading
-remarks.mdfiles, 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.mdfile: it is a required file for a reason. :-)Try to be even more creative!
Jump to: top
@@ -1281,10 +1335,10 @@Guidelines for the mkiocccentry “for TESTING purposes” in their respective man pages.
Do NOT use
-fnamchk(1)command line options that are labeled “for TESTING purposes” in thefnamchk(1)man page.Do NOT use
chksubmit(1)command line options that are labeled “for the use by the IOCCC judges only” +Do NOT use
+by the Judges only” in thechksubmit(1)command line options that are labeled “for the use by the Judges only” in thechksubmit(1)man page. Similarly do NOT usechkentry(1)command line options marked “for the use -by the IOCCC judges only” in thechkentry(1)man page.chkentry(1)man page.To view mkiocccentry toolkit man pages, while your current directory is the top of the source tree:
man soup/man/man1/mkiocccentry.1 @@ -1426,7 +1480,7 @@Guidelines for the mkiocccentry
See FAQ on “How do I report bugs in an
-mkiocccentrytool?”.See Rule 11 - Legal rule abuse for warnings about ignoring
+mkiocccentry(1)tool warnings.See Rule 11 - Legal rule abuse for warnings about ignoring
mkiocccentry(1)tool warnings.See FAQ on “What is the
fnamchktool?”.See @@ -1446,7 +1500,7 @@
Fun😄damental Guidelines
of the number of the kernel disk pack of one of the judge’s BESM-6.Fun😄damental Guidelines
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 IOCCC judges, as a group, have a history giving wide degree of latitude +
The Judges, as a group, have a history giving wide degree of latitude to reasonable submissions. And recently they have had as much longitudinal variation as it is possible to have on Earth. :-) 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 IOCCC judges, as a group, have a history giving wide degree of latitude +
The Judges, as a group, have a history giving wide degree of latitude to reasonable submissions. And recently they have had as much longitudinal variation as it is possible to have on Earth. :-)
-You are in a maze of twisty guidelines, all different.
There are at least zero IOCCC judges who think that +
There are at least zero Judges who think that Fideism has little -or nothing to do with the IOCCC judging process.
+or nothing to do with the Judging process.@@ -1526,7 +1580,7 @@All generalizations are false, including this one. – Mark Twain
Fun😄damental Guidelines
@@ -1537,7 +1591,7 @@Fun😄damental Guidelines
several mkiocccentry toolkit contributors. in which case it is original! :-) Even so, most of the programs in the toolkit exceed the -Rule 2 - Size +Rule 2 - Size restrictions so they wouldn’t qualify for the contest anyway.Fun😄damental Guidelines
Jump to: top
--For more information
+Further Reading
For questions or comments about the contest, see Contacting the IOCCC.
-Be SURE to review the IOCCC Rules and Guidelines as they -may (and often do) change from year to year.
-PLEASE be sure you have the current IOCCC rules and -IOCCC guidelines prior to submitting to the contest.
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 +
For questions or comments about the contest, see Contacting the IOCCC.
+Be SURE to review the current IOCCC Rules and Guidelines as they +often change year to year. Especially prior to submitting to the contest.
+For the latest IOCCC news, follow the IOCCC on Mastodon. See our FAQ on “Mastodon” -for more information. Please do note that unless -you are mentioned by us you will NOT get a notification from the app so you -should refresh the page even if you do follow us.
-Check out the Official IOCCC winner website in general.
-Consider joining the IOCCC discord community via this link: -https://discord.gg/Wa42Qujwnw
-See the -FAQs on “obtaining, compiling, installing and using the mkiocccentry tools” -and the -FAQ on “how to enter the IOCCC” -as that FAQ has important details on -how to register -as well as -how to upload your submission for the IOCCC.
+for more information. +Also consider joining the IOCCC Discord Server +for the latest news, discussions about The Rules, questions for the Judges, and
Cin general.
Jump to: top
diff --git a/next/guidelines.md b/next/guidelines.md index 09678f22af..ae8daf1b65 100644 --- a/next/guidelines.md +++ b/next/guidelines.md @@ -7,13 +7,13 @@ Copyright © 2025 Leonid A. Broukhis and Landon Curt Noll. All Rights Reserved. Permission for personal, education or non-profit use is granted provided this copyright and notice are included in its entirety and remains unaltered. All other uses must receive prior permission in -writing by [contacting the judges](../contact.html). +writing by [contacting the Judges](../contact.html). # Guidelines Version -Be sure to read the [IOCCC rules](rules.html). +Be sure to read the [Rules](rules.html).@@ -42,7 +42,7 @@ file happens to also be a code for another language. We would prefer if you do not use `#include` statements, especially `#include` statements just to include lots of data, to get around the -[Rule 2 - Size restrictions](rules.html#rule2-size-restrictions) +[Rule 2 - Size restrictions](rules.html#rule2-size) in an excessive way. @@ -50,7 +50,7 @@ in an excessive way. We would prefer if you do not require lots and lots of implicit defines on the C compiler command line (i.e., lots of `-Dfoo`, and `-Dcurds=whey` style command line args to the C compiler) to get around the -[Rule 2 - Size restrictions](rules.html#rule2-size-restrictions) +[Rule 2 - Size restrictions](rules.html#rule2-size) in an excessive way. @@ -61,20 +61,21 @@ Some use of `#include` statements and/or implicit defines on the C compiler comm +Jump to: [top](#) + +-@@ -96,7 +97,7 @@ For example: iocccsize prog.c ``` -The IOCCC size tool algorithm can be summarized as follows: +The `iocccsize(1)` algorithm can 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 bytes as 1 @@ -110,13 +111,12 @@ before the end of file. counted by the IOCCC size tool. In cases where the above summary and the algorithm implemented by -the IOCCC size tool `iocccsize(1)` conflict, the algorithm implemented -by the minimum required version of `iocccsize(1)` is preferred by the [IOCCC -judges](../judges.html). +`iocccsize(1)` conflict, the algorithm implemented +by the minimum required version of `iocccsize(1)` is preferred by the [Judges](../judges.html). Make sure `iocccsize` does not flag any issues with your `prog.c`. -**NOTE**: by default `iocccsize` will only report the rule 2b size, unless the +**NOTE**: by default `iocccsize` will only report the size, unless the code surpasses the limit. There a much less need to `#define` C reserved words in an effort @@ -126,12 +126,18 @@ because of the `iocccsize(1)` algorithm. Yes Virginia, **the previous guideline sentence is an important hint**! +Don't expect the [Rule 2 - Size restrictions](rules.html#rule2-size) to +[change any time soon](../faq.html#size_slow_change). + +See the +FAQ on "[How has the Rule 2 size restrictions rule changed over the years?](../faq.html#size_rule_history)". + Jump to: [top](#)-# Guidelines for [Rule 2 - Size restrictions](rules.html#rule2-size-restrictions) -+# Guidelines for [Rule 2 - Size restrictions](rules.html#rule2-size)-+@@ -139,18 +145,18 @@ Jump to: [top](#) It can take a few days to process your registration and for the server to email your details, therefore make sure to allow yourself ample time to register and submit your entries; **DO NOT WAIT UNTIL THE FINAL DAYS** -to register! The judges are **NOT** responsible for delayed or lost +to register! The Judges are **NOT** responsible for delayed or lost email or for those who wait until the last minute to try to register!# Guidelines for [Rule 3 - Register for the IOCCC](rules.html#rule3-register)-+@@ -207,57 +213,93 @@ Jump to: [top](#)# Guidelines for [Rule 7 - Original Work](rules.html#rule7-original-work)-+-Do **NOT** register more than one account just try and get around the limit on the number of submission slots. +Do **NOT** register more than one account just to try and get around the limit on the number of submission slots. + + +Jump to: [top](#) + + +# Guidelines for [Rule 8 - Submitting requirements](rules.html#rule8-submitting-requirements)++ +Don't forget that the building of your program should be done +**WITHOUT human intervention**. So don't do things such as: + +``` + prog: prog.c + #echo this next line requires data from standard input + cat > prog.c + ${CC} prog.c -o prog +``` + +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 put in their `Makefile`: + +``` + 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 your `remarks.md` file for +alternate / human intervention based building. Jump to: [top](#)+++# Guidelines for [Rule 9 - No interactive compiling allowed](rules.html#rule9-no-interactive) ++--On 2012 July 20, the [IOCCC judges](../judges.html) rescinded the encouragement of +On 2012 July 20, the [Judges](../judges.html) rescinded the encouragement of nested functions. Such constructions, while interesting and sometimes amusing, will have to wait until they are required by a C standard that are actually implemented in **BOTH** `gcc` **AND** `clang`. We **DISLIKE** submissions that require the use of `-fnested-functions`. + ++-We do realize that there are holes in the [IOCCC rules](rules.html), and invite +We do realize that there are holes in the [Rules](rules.html), and invite submitters to attempt to apply creative rule interpretation. A rule abuse though, even if not rewarded, may result in a subsequent rule change for future contests. We sometime award '**Best abuse of the rules**' or '**Worst abuse of the rules**', or some variation, to a submission that creatively attempts to exploit a holes in the -[IOCCC rules](rules.html). +[Rules](rules.html). -When we do need to plug a hole in the [IOCCC rules](rules.html) -or [IOCCC guidelines](guidelines.html), we will attempt to use a very small plug, +When we do need to plug a hole in the [Rules](rules.html) +or [Guidelines](guidelines.html), we will attempt to use a very small plug, if not smaller. Or, maybe not. :-) Legal rule abuse may involve, but is not limited to, doing things that are -technically allowed by the [IOCCC rules](rules.html) and yet do not fit the spirit of what +technically allowed by the [Rules](rules.html) and yet do not fit the spirit of what we intended to be submitted. -Legal abuse of the [IOCCC rules](rules.html) is **NOT** an invitation to violate -the [IOCCC rules](rules.html) (especially [Rule 17 - +Legal abuse of the [Rules](rules.html) is **NOT** an invitation to violate +the [Rules](rules.html) (especially [Rule 17 - Use mkiocccentry](./rules.html#rule17-mkiocccentry)). A submission that violates the -[rules](rules.html) in the opinion of the [IOCCC judges](../judges.html), +[rules](rules.html) in the opinion of the [Judges](../judges.html), **WILL** be disqualified. **_RULE ABUSE CARRIES A CERTAIN LEVEL OF RISK!_** -If you intend to abuse the [IOCCC rules](rules.html), +If you intend to abuse the [Rules](rules.html), indicate so in your `remarks.md` file. You **MUST** try to justify, plead, beg, why you consider your rule abuse to be allowed under the -[IOCCC rules](rules.html). Humor or creativity help plead a case. +[Rules](rules.html). Humor or creativity help plead a case. As there is no guarantee that you will succeed, you might consider submitting an -alternate version that conforms to the [IOCCC rules](rules.html), if it might -otherwise be interesting; one that does not abuse the [IOCCC rules](rules.html) +alternate version that conforms to the [Rules](rules.html), if it might +otherwise be interesting; one that does not abuse the [Rules](rules.html) and one that does, making sure to note in the one that does not abuse the rules -that this is another version, so that the judges do not assume you uploaded it +that this is another version, so that the Judges do not assume you uploaded it by mistake. If you do bypass the `mkiocccentry(1)` warnings about @@ -265,45 +307,81 @@ If you do bypass the `mkiocccentry(1)` warnings about and/or about [Rule 2b - Net Size](rules.html#rule2b-net-size) or any other -rule and submit a submission anyway, you **MUST** try to justify why the IOCCC -[IOCCC judges](../judges.html) should not reject your submission due to a rule +rule and submit a submission anyway, you **MUST** try to justify why the +[Judges](../judges.html) should not reject your submission due to a rule violation, and you would be wise to do this towards the top of your `remarks.md` -file. +file so as not to be overlooked. -We are often asked why the contest [IOCCC rules](rules.html) and [IOCCC -guidelines](guidelines.html) seem strange or contain mistakes, flaws, or +We are often asked why the contest [Rules](rules.html) and [Guidelines](guidelines.html) seem strange or contain mistakes, flaws, or grammatical errors. One reason is that we sometimes make genuine mistakes, but in many cases such problems, flaws or areas of confusion are deliberate. -Changes to [IOCCC rules](rules.html) and [IOCCC guidelines](guidelines.html) in +Changes to [Rules](rules.html) and [Guidelines](guidelines.html) 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 can continue. A clever author should be able to read and "drive a -truck through the holes" in the [IOCCC rules](rules.html) and [IOCCC -guidelines](guidelines.html). +truck through the holes" in the [Rules](rules.html) and [Guidelines](guidelines.html). At the risk of stating the obvious, this contest is a parody of the software -development process. The [IOCCC rules](rules.html) and [IOCCC guidelines](guidelines.html) +development process. The [Rules](rules.html) and [Guidelines](guidelines.html) are only part of the overall contest. Even so, one might think the -contest [IOCCC rules](rules.html) and [IOCCC guidelines](guidelines.html) process as a parody +contest [Rules](rules.html) and [Guidelines](guidelines.html) process as a parody of the sometimes tragic mismatch between what a customer (or marketing) wants and what engineering delivers. Real programmers must face obfuscated and sometimes conflicting, ballooning specifications, and requirements from marketing, sales, product management and even from customers themselves on an all too regular basis. -This is one of the reasons why the [IOCCC rules](rules.html) and -[IOCCC guidelines](guidelines.html) are written in obfuscated form. +This is one of the reasons why the [Rules](rules.html) and +[Guidelines](guidelines.html) are written in obfuscated form. + + +Jump to: [top](#) + + +# Guidelines for [Rule 11 - Legal rule abuse](rules.html#rule11-legal-rule-abuse)++ +The IOCCC no longer discourages the use of multibyte UTF-8 characters in `C` code. + + ++# Guidelines for [Rule 12 - UTF-8](rules.html#rule12-utf8) ++++ +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 MS Visual C and MS Visual C++ +leave trailing control-M's on lines. Users of such tools should strip +off such control-M's before submitting their submissions. In some cases +tools have a "Save As" option that will prevent such trailing control-M's +being added. + + + + Jump to: [top](#)+# Guidelines for [Rule 13 - No carriage returns in prog.c](rules.html#rule13-nocr) ++-Submissions will be judged in an environment that has no **IDE**. Any submission that fails to compile/build because it requires @@ -318,8 +396,8 @@ in the building and compiling of your submission. @@ -331,13 +409,10 @@ Jump to: [top](#)-# Guidelines for [Rule 15 - GNU Makefile](rules.html#rule15-gnu-makefile)---# Guidelines for [Rule 17 - Use mkiocccentry](rules.html#rule17-mkiocccentry)+# General Guidelines+++These [Guidelines](guidelines.html) are **hints** and **suggestions**, **NOT** [Rules](rules.html). -These [guideline](guidelines.html) are **hints** and **suggestions**, **NOT** [IOCCC rules](rules.html). - -While submissions that violate [guideline](guidelines.html) are allowed, -submissions that remain within the [IOCCC guidelines](guidelines.html) are preferred. +While submissions that violate the [Guidelines](guidelines.html) are allowed, +submissions that remain within the [Guidelines](guidelines.html) are preferred. You are encouraged to review the following [FAQs](../faq.html): @@ -471,10 +550,8 @@ The **official locale** of the **IOCCC** is **C**. You are **encouraged** to examine the [winners of previous contests](../years.html). -Because [rules](rules.html) change from year to year, some [past winning entries](../years.html) -may be rejected this year. - -What was _was_ unique and novel one year _might be 'old' the next year_. +Because the [Rules](rules.html) change from year to year, some [past winning entries](../years.html) +may be rejected this year. What was _was_ unique and novel one year _might be 'old' the next year_. A submission is usually examined in a number of ways. We typically apply a number of tests to a submission: @@ -543,13 +620,13 @@ Jump to: [top](#)## Overall Guidelines+We **VERY MUCH LIKE** submissions that use an edited variant of the -example Makefile, as described and linked to in the [Makefile section](#makefile), -renamed as `Makefile` of course. This makes it easier for the [IOCCC judges](../judges.html) +example `Makefile`, as described and linked to in the [Makefile section](#makefile), +renamed as `Makefile` of course. This makes it easier for the [Judges](../judges.html) to test your submission. And if your submissions wins, it makes it easier to integrate it into the [Official IOCCC winner website](https://www.ioccc.org/index.html). @@ -599,6 +676,14 @@ If you do include a `try.alt.sh` then **PLEASE** remove the `try.alt` rule in th If you don't have a prog.alt.c, then **PLEASE** remove the `try.alt` rule as well. + +Jump to: [top](#) + + +-## Our Likes and Dislikes: +## Our Likes and Dislikes+### About C preprocessor ++ Doing masses of `#define`s to obscure the source has become 'old'. We tend to 'see thru' masses of `#define`s due to our pre-processor tests that we apply. Simply abusing `#define`s or `-Dfoo=bar` won't go as far @@ -626,6 +711,18 @@ and **NOT** like this: this_is_not; /* <-- Try to avoid implicit type declarations */ ``` +We really **DISLIKE** submissions that make blatant use of `#include` of +large data files to get around the source code size limit. This does not mean +`#include` of standard header files, just data files you provide. + +On 28 January 2007, the Judges rescinded the requirement that the +`#` in a C preprocessor directive must be the 1st non-whitespace byte. + + ++### About compilers ++ We tend to **like _less_** a submission that requires either `gcc` **OR** `clang`. **We _prefer_ submissions** that can compile under **BOTH** `gcc` **AND** `clang`. **Hint!** @@ -637,7 +734,13 @@ We **DISLIKE** the use of obscure compiler flags, especially 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: @@ -649,15 +752,19 @@ of nested functions such as: | please_dont_submit_this(); } ``` -+### About nested functions +++### About variadic functions ++ If your submission uses functions that have a variable number of arguments, **be careful**. Systems implement `va_list` in a wide variety of ways. Because of this, a number of operations using `va_list` **are @@ -674,8 +781,18 @@ In particular, do not treat `va_list` variables as if they were a `char **`. We **DISLIKE** the use of `varargs.h`. Use `stdarg.h` instead. + ++### About I/O ++ We **DISLIKE** the use of `gets(3)`. Use `fgets(3)` instead. + ++### About tarballs ++ We tend to **DISLIKE** the blatant use of tarballs in an attempt to simply get around the extra file number limit. We realize there may be cases where a tarball containing a number of extra files may be needed. Such a need for a @@ -686,12 +803,19 @@ Using a mass of `goto`s to obfuscate your code has become 'old' and is unlikely to make it through the final rounds, if it even gets that far. -On 28 January 2007, the Judges rescinded the requirement that the -`#` in a C preprocessor directive must be the 1st non-whitespace byte. + ++### About stdlib +The `exit(3)` function returns `void`. Some broken systems have `exit(3)` return `int`; your submission should assume that `exit(3)` returns a `void`. + ++### What it means to be small ++ 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 @@ -702,6 +826,37 @@ One line programs should be short one line programs: say around **80** to **132* bytes long. Going well beyond **132** bytes is a bit too long to be called a one-liner in our vague opinion. +We suggest that you avoid trying for the '**smallest self-replicating**' +source. The smallest, a [zero byte entry](../1994/smr/index.html), won in +[1994](../years.html#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. + +We want to get away from source that is simply a compact blob of +bytes. **REALLY TRY** to be more creative than blob coding. **HINT!** + +Unless you are cramped for space, or unless you are entering the +'**Best one liner**' category, we suggest that you format your program +in a more creative way than simply forming excessively long lines. + +The `Makefile` should not be used to try and get around the size limit. It is +one thing to make use of a several `-D`s on the compile line to help out, but it +is quite another to use many bytes of `-D`s in order to try and squeeze the +source under the size limit. + +Please do not use things like `gzip(1)` to get around the size limit. This was +done years ago; please try to be much more creative. + +Your source code, post-pre-processing, should not exceed the size of +[Microsoft Windows](https://en.wikipedia.org/wiki/Microsoft_Windows). :-) + + ++### About environment ++ We tend to **DISLIKE** programs that: * are very hardware specific @@ -735,23 +890,10 @@ Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) (UNIX-like) environment. Therefore do not assume the system has a [windows.h](https://en.wikipedia.org/wiki/Windows.h) include file: - ``` #include/* we DISLIKE this */ ``` -Unless you are cramped for space, or unless you are entering the -'**Best one liner**' category, we suggest that you format your program -in a more creative way than simply forming excessively long lines. - -The `Makefile` should not be used to try and get around the size limit. It is -one thing to make use of a several `-D`s on the compile line to help out, but it -is quite another to use many bytes of `-D`s in order to try and squeeze the -source under the size limit. - -Your source code, post-pre-processing, should not exceed the size of -[Microsoft Windows](https://en.wikipedia.org/wiki/Microsoft_Windows). :-) - +### About X ++ X client submissions 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. @@ -877,37 +1006,56 @@ X client submissions should try to not to depend on particular items in in the your `remarks.md` file. They should also not depend on any particular window manager. -Try to avoid submissions 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](https://en.wikipedia.org/wiki/Single_UNIX_Specification) -(UNIX-like). ++### About Curses +-You are **well advised** to submit code that conforms to the [Single UNIX -Specification Version 4](https://unix.org/version4/overview.html). +One should restrict libcurses to portable features found on both BSD +and Linux curses. -To quote the [IOCCC judges](../judges.html): + -We **LIKE** programs that: +Jump to: [top](#) -* are as concise and small as they need to be -* do something at least quasi-interesting -* are portable -* are unique or novel in their obfuscation style -* make use of a **NUMBER OF DIFFERENT TYPES OF OBFUSCATIONS!** **<== HINT!!** -* make us laugh and/or throw up :-) (humor really helps!) -* make us want to eat good chocolate -Some types of programs can't excel (anti-tm) in some areas. Your -program doesn't have to excel in all areas, but doing well in several -areas really does help. ++### About ASCII TAB ++ +We **DISLIKE** the use of ASCII tab characters in markdown files, such as in the required `remarks.md` file. + +We don't mind the use of 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 annoy us when it comes time to +rendering your markdown content as it complicates the process. + +If you do use ASCII tab characters in your non-markdown files, be +aware that some people may use a tab stop that is different than the common 8 +character tab stop. + +**PLEASE** observe our [Markdown Guidelines](../markdown.html) +when forming your submission's `remarks.md` file. And if your submission +contains additional markdown files, please follow those same Guidelines for +those files. See also +[Rule 4 - Required files](rules.html#rule4-required-files), +and the +FAQ on "[markdown](../faq.html#markdown)". + + +Jump to: [top](#) + ++### About remarks.md +You are better off explaining what your submission does in your `remarks.md` file section rather than leaving it obscure for the -[IOCCC judges](../judges.html) as we might miss something and/or be too tired to +[Judges](../judges.html) as we might miss something and/or be too tired to notice. We freely admit that interesting, creative or humorous comments in @@ -917,25 +1065,6 @@ We think the readers of the contest winners do as well. We do read your `remarks.md` content during the judging process, so it is worth your while to write a 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 -MS Visual C and MS Visual C++ leave trailing control-M's on lines. -Users of such tools should strip off such control-M's before submitting -their submissions. In some cases tools have a "Save As" option that will -prevent such trailing control-M's being added. - -One should restrict libcurses to portable features found on both BSD -and Linux curses. - - - -[Rule 12 - UTF-8](rules.html#rule12-utf8) -no longer discourages the use of UTF-8 -characters in C code. - 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 has some very subtle obfuscations that we might @@ -954,41 +1083,61 @@ 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**. +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: -While programs that only run in a specific word size are OK, if you have -to pick, choose a 64-bit word size. +We **LIKE** reading `remarks.md` files, especially if they contain +useful, informative, and even humorous content about your submission. Yes, this +is a **hint**. :-) -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, described in [Makefile section](#makefile)). Do not assume a -processor word size without specifying `-arch`. For example: +We **RECOMMEND** you put a reasonable amount effort into the content of the +`remarks.md` file: it is a required file for a reason. :-) -``` - ARCH= -m64 -``` +Try to be even more creative! -Note, however, that some platforms will not necessarily support some -architectures. For instance, more recent versions of `macOS` do **NOT** support -32-bit, and more than zero judges use it! +Jump to: [top](#) -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: + ++### Miscellaneous ++ +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](https://en.wikipedia.org/wiki/Single_UNIX_Specification) +(UNIX-like). + +You are **well advised** to submit code that conforms to the [Single UNIX +Specification Version 4](https://unix.org/version4/overview.html). + +To quote the [Judges](../judges.html): + +We **LIKE** programs that: + +* are as concise and small as they need to be +* do something at least quasi-interesting +* are portable +* are unique or novel in their obfuscation style +* make use of a **NUMBER OF DIFFERENT TYPES OF OBFUSCATIONS!** **<== HINT!!** +* make us laugh and/or throw up :-) (humor really helps!) +* make us want to eat good chocolate + +Some types of programs can't excel (anti-tm) in some areas. Your +program doesn't have to excel in all areas, but doing well in several +areas really does help. > This submission factors values up `2305567963945518424753102147331756070`. Attempting to factor larger values will produce unpredictable results. -The [IOCCC judges](../judges.html) might try to factor the value -5, so you want to might state: +The [Judges](../judges.html) might try to factor the value -5, so you want to might state: > This submission factors positive values up `2305567963945518424753102147331756070`. Attempting to factor large values will produce unpredictable results. -However the [IOCCC judges](../judges.html) might try to also factor 0, so you want to might state: +However the [Judges](../judges.html) might try to also factor 0, so you might want to state: > This submission factors values between 1 and `2305567963945518424753102147331756070`. Attempting to factor values outside @@ -1006,7 +1155,7 @@ and doing something interesting. So you might want to code accordingly and stat > This submission factors integers between 1 and `2305567963945518424753102147331756070`. > Attempting to factor anything else will cause the program to insult your pet fish Eric. -The [IOCCC judges](../judges.html) might not have a pet fish named Eric, so you might want to state: +The [Judges](../judges.html) might not have a pet fish named Eric, so you might want to state: > This submission factors integers between 1 and `2305567963945518424753102147331756070`. Attempting to factor anything else @@ -1021,36 +1170,6 @@ and state: program is given enough time and memory. If the value is not a proper integer, the program might insult a fish named Eric. -We **DISLIKE** the use of ASCII tab characters in markdown files, such as in the required `remarks.md` file. - -We don't mind the use of 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 annoy us when it comes time to -rendering your markdown content as it complicates the process. - -If you do use ASCII tab characters in your non-markdown files, be -aware that some people may use a tab stop that is different than the common 8 -character tab stop. - -**PLEASE** observe our [IOCCC markdown guidelines](../markdown.html) -when forming your submission's `remarks.md` file. And if your submission -contains additional markdown files, please follow those same guidelines for -those files. See also -[Rule 4 - Required files](rules.html#rule4-required-files), -and the -FAQ on "[markdown](../faq.html#markdown)". - -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 file for a reason. :-) - -Try to be even more creative! - - Jump to: [top](#) @@ -1086,10 +1205,10 @@ Do **NOT** use `txzchk(1)` or `fnamchk(1)` command line options that are labeled Do **NOT** use `fnamchk(1)` command line options that are labeled "**for TESTING purposes**" in the `fnamchk(1)` man page. -Do **NOT** use `chksubmit(1)` command line options that are labeled "**for the use by the IOCCC judges only**" +Do **NOT** use `chksubmit(1)` command line options that are labeled "**for the use by the Judges only**" in the `chksubmit(1)` man page. Similarly do **NOT** use `chkentry(1)` command line options marked "**for the use -by the IOCCC judges only**" in the `chkentry(1)` man page. +by the Judges only**" in the `chkentry(1)` man page. To view [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) man pages, while your current directory is the top of the source tree: @@ -1273,7 +1392,7 @@ tool to abort with a **fatal error**. See FAQ on "[How do I report bugs in an `mkiocccentry` tool?](../faq.html#mkiocccentry_bugs)". -See [Rule 11 - Legal rule abuse](rules.html#rule11-legal-rulea-abuse) for warnings about ignoring `mkiocccentry(1)` tool warnings. +See [Rule 11 - Legal rule abuse](rules.html#rule11-legal-rule-abuse) for warnings about ignoring `mkiocccentry(1)` tool warnings. See FAQ on "[What is the `fnamchk` tool?](../faq.html#fnamchk)". @@ -1288,7 +1407,6 @@ FAQ on "[What is the mkiocccentry tool, how do I obtain it and how do I use it]( Jump to: [top](#) -## Fun😄damental Guidelines@@ -1305,7 +1423,7 @@ of the number of the kernel disk pack of one of the judge's [BESM-6](https://en. @@ -1415,7 +1533,7 @@ is not an original work, unless you one of the [several mkiocccentry toolkit contributors](https://github.com/ioccc-src/mkiocccentry/graphs/contributors). in which case it is original! :-) Even so, most of the programs in the toolkit exceed the -[Rule 2 - Size](rules.html#rule2-size) +[Rule 2 - Size restrictions](rules.html#rule2-size) so they wouldn't qualify for the contest anyway. @@ -1440,43 +1558,23 @@ Jump to: [top](#)-For questions or comments about the contest, see [Contacting the IOCCC](../contact.html). - -**Be SURE** to review the [IOCCC Rules and Guidelines](index.html) as they -may (and **often do**) change from year to year. - -**PLEASE** be sure you have the current [IOCCC rules](rules.html) and -[IOCCC guidelines](guidelines.html) prior to submitting to the contest. - See the [Official IOCCC website news](../news.html) for additional information. -For the updates and breaking IOCCC news, you are encouraged to follow -the [IOCCC on Mastodon](https://fosstodon.org/@ioccc). See our -FAQ on "[Mastodon](../faq.html#try_mastodon)" -for more information. Please do note that unless -you are mentioned by us you will **NOT** get a notification from the app _so you -should refresh the page **even if you do follow us**_. - -Check out the [Official IOCCC winner website](https://www.ioccc.org/index.html) in general. +For questions or comments about the contest, see [Contacting the IOCCC](../contact.html). -Consider joining the IOCCC discord community via this link: -[https://discord.gg/Wa42Qujwnw](https://discord.gg/Wa42Qujwnw) +**Be SURE** to review the current [IOCCC Rules and Guidelines](index.html) as they +often change year to year. Especially prior to submitting to the contest. -See the -FAQs on "[obtaining, compiling, installing and using the mkiocccentry tools](../faq.html#mkiocccentry)" -and the -FAQ on "[how to enter the IOCCC](../quick-start.html#enter)" -as that FAQ has important details on -[how to register](../next/register.html) -as well as -[how to upload your submission](../next/submit.html) for the IOCCC. +For the latest IOCCC news, follow the [IOCCC on Mastodon](https://fosstodon.org/@ioccc). See our +FAQ on "[Mastodon](../faq.html#try_mastodon)" +for more information. +Also consider joining the [IOCCC Discord Server](https://discord.com/invite/Wa42Qujwnw) +for the latest news, discussions about The Rules, questions for the Judges, and `C` in general.-# For more information +# Further Reading
- - Jump to: [top](#) diff --git a/next/rules.html b/next/rules.html index ccc6d61fd9..953d2fbefa 100644 --- a/next/rules.html +++ b/next/rules.html @@ -480,7 +480,7 @@29th Internat and remains unaltered. All other uses MUST receive prior permission in writing by contacting the judges.
Rules Version
-These IOCCC Rules are version 29.12 2025-12-01.
+These IOCCC Rules are version 29.13 2025-12-01.
@@ -521,46 +521,40 @@Rule 1 - C program
-See the Guidelines for Rule 1 - C program.
+See the Guidelines for Rule 1 - C program.
--Rule 2 - Size restrictions
Rule 2requires that your submission satisfy BOTH Rule 2a (Gross Size) and Rule 2b (Net Size). During development this can be checked usingiocccsize(1):-iocccsize prog.cSee the Guidelines for Rule 2 - Size restrictions.
+See the Guidelines for Rule 2 - Size restrictions.
--Rule 2a - Gross Size
The overall maximum size of your
prog.cprogram source MUST NOT exceed 4993 bytes.See Entering the IOCCC: the bare minimum you need to know.
--Rule 2b - Net Size
When the filename of your program source (i.e.,
-prog.c) is given as a command line argument to the latest version of the official IOCCC size tool (hereby referred to asiocccsize(1)), the value printed MUST NOT exceed 2503.NOTE:
+iocccsizedoes NOT calculate the filename length. See Rule 17 - -Use mkiocccentry.NOTE:
+iocccsizedoes NOT calculate the filename length.See Rule 17 - Use mkiocccentry.
Rule 3 - Register for the IOCCC
@@ -572,7 +566,7 @@Rule 3 - Register for the IOCCC
temporary password, which you MUST change within 14 days.See How to register for the IOCCC.
See Entering the IOCCC: the bare minimum you need to know.
-See Guidelines for Rule 3 - Register for the IOCCC.
+See Guidelines for Rule 3 - Register for the IOCCC.
Rule 4 - Required files
@@ -645,9 +639,9 @@Rule 4 - Required files
See Rule 17 - Use mkiocccentry.
See the FAQ on “What permissions may my files be and what if I need different permissions?”.
-See the Guidelines on the mkiocccentry toolkit.
See the FAQ on “What are the detailed recommendations for a submission Makefile?”.
+See the Guidelines on the mkiocccentry toolkit.
Rule 5 - Do NOT modify submitted files or filenames or parent directories
@@ -678,7 +672,7 @@Rule 6 - Free Rule
-while (!(ioccc(rule(you(are(number(6)))))) { ha(); ha(); ha(); }See Rule 19 - Prime.
+See Rule 19 - Prime.
Rule 7 - Original Work
@@ -696,7 +690,7 @@Rule 7 - Original Work
See Rule 16 - Anonymous Judging, and -Guidelines for Rule 7 - Original Work.
+Guidelines for Rule 7 - Original Work.Rule 8 - Submitting requirements
@@ -720,9 +714,12 @@Rule 8 - Submitting requirements
Rule 15 - GNU Makefile, and Rule 17 - Use mkiocccentry. +See Guidelines for Rule 8 - Submitting requirements.
++Rule 9 - No interactive compiling allowed
Entries requiring human interaction to be initially compiled are NOT permitted. However, see the guidelines. Each entry MUST automate the build process using
bash,gmake,gccand/orclangand other commonly @@ -734,6 +731,7 @@Rule 9 - No interactive compi
NOTE: it is better and more portable to NOT modify the
+${CC}variable in the Makefile.See Guidelines for Rule 9 - No interactive compiling allowed.
@@ -772,7 +770,7 @@Rule 10 - Program file permissions
Rule 11 - Legal rule abuse
version, PLEASE indicate that in yourremarks.mdfile of your non-rule abusing version so that the Judges don’t think you uploaded a duplicate into a wrong slot by mistake. -See Guidelines for Rule 11 - Legal rule abuse.
+See Guidelines for Rule 11 - Legal rule abuse.
Rule 12 - UTF-8
@@ -780,9 +778,12 @@Rule 12 - UTF-8
Use of UTF-8 is supported by
+C89standard and its updates and so too by the IOCCC.See Guidelines for Rule 12 - UTF-8.
++Rule 13 - No carriage returns in prog.c
Any C source that fails to compile because lines contain carriage-returns (CTRL+M,
\r) in particular as part of DOS/Windows style newlines might be rejected. Please do NOT put trailing CTRL+M inprog.c,Makefile, @@ -795,6 +796,7 @@Rule 13 - No carriage returns i need to do this, please document that in your
remarks.mdfile and if your compiler complains about this, document this too and update yourMakefileto account for this. +See Guidelines for Rule 13 - No carriage returns in prog.c.
@@ -839,7 +841,7 @@Rule 14 - Resubmitting lost submissions
Rule 15 - GNU Makefile
See FAQ on “What are the detailed recommendations for a submission Makefile?”.
-See Guidelines for Rule 15 - GNU Makefile.
+See Guidelines for Rule 15 - GNU Makefile.
Rule 16 - Anonymous judging
@@ -900,7 +902,7 @@Rule 17 - Use
for testing and the IOCCC judges.mkiocccentryRule 17 - Use
mkiocccentrySee the FAQ on “What is the mkiocccentry tool, how do I obtain it and how do I use it?”.
-See the Guidelines for Rule 17 - Use mkiocccentry.
+See the Guidelines for Rule 17 - Use mkiocccentry.
Rule 18 - Submission license
The entirety of your submission MUST be submitted under the following license:
CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0 International
- ++-See the [Guidelines for Rule 1 - C program](guidelines.html#guidelines-for-rule-1---c-program). +See the [Guidelines for Rule 1 - C program](guidelines.html#guideline1-c).+Rule 19 - Prime
`Rule 2` requires that your submission satisfy **BOTH** [Rule 2a (Gross Size)](rules.html#rule2a) @@ -120,16 +118,14 @@ During development this can be checked using `iocccsize(1)`: iocccsize prog.c ``` -See the [Guidelines for Rule 2 - Size restrictions](guidelines.html#guideline-2---size). +See the [Guidelines for Rule 2 - Size restrictions](guidelines.html#guideline2-size).--## Rule 2 - Size restrictionsThe overall maximum size of your `prog.c` program source **MUST NOT** exceed **4993** bytes. @@ -139,19 +135,18 @@ See [Entering the IOCCC: the bare minimum you need to know](../quick-start.html#--### Rule 2a - Gross SizeWhen the filename of your program source (i.e., `prog.c`) is given as a command line argument to the latest version of the official IOCCC size tool (hereby referred to as `iocccsize(1)`), the value printed **MUST NOT** exceed **2503**. -**NOTE**: `iocccsize` does **NOT** calculate the filename length. See [Rule 17 - -Use mkiocccentry](#rule17-mkiocccentry). +**NOTE**: `iocccsize` does **NOT** calculate the filename length. + +See [Rule 17 - Use mkiocccentry](#rule17-mkiocccentry).--### Rule 2b - Net Size@@ -170,7 +165,7 @@ See [How to register for the IOCCC](register.html). See [Entering the IOCCC: the bare minimum you need to know](../quick-start.html#enter). -See [Guidelines for Rule 3 - Register for the IOCCC](guidelines.html#guideline-3---register). +See [Guidelines for Rule 3 - Register for the IOCCC](guidelines.html#guideline3-register).@@ -265,11 +260,11 @@ See [Rule 17 - Use mkiocccentry](rules.html#rule17-mkiocccentry). See the FAQ on "[What permissions may my files be and what if I need different permissions?](../faq.html#file_perms)". -See the [Guidelines on the mkiocccentry toolkit](guidelines.html#mkiocccentry_toolkit). - See the FAQ on "[What are the detailed recommendations for a submission Makefile?](../faq.html#makefile_details)". +See the [Guidelines on the mkiocccentry toolkit](guidelines.html#mkiocccentry_toolkit). +@@ -311,7 +306,7 @@ I am **NOT** a Rule, I am a `free(void *human);` ‼️ ha(); ha(); ha(); } ``` -See [Rule 19 - Prime](rules.html#rule-19---prime). +See [Rule 19 - Prime](rules.html#rule19-prime).@@ -334,7 +329,7 @@ You are permitted to use tools to write your code. See [Rule 16 - Anonymous Judging](rules.html#rule16-anonymous-judging), and -[Guidelines for Rule 7 - Original Work](guidelines.html#guideline-7---original-work). +[Guidelines for Rule 7 - Original Work](guidelines.html#guideline7-original).@@ -365,10 +360,14 @@ See and [Rule 17 - Use mkiocccentry](rules.html#rule17-mkiocccentry). +See [Guidelines for Rule 8 - Submitting requirements](guidelines.html#guideline8-submitting). ++Entries requiring human interaction to be initially compiled are **NOT** permitted. However, see the guidelines. Each entry **MUST** automate the @@ -386,6 +385,8 @@ in the Makefile. See [Rule 15 - GNU Makefile](rules.html#rule15-gnu-makefile). +See [Guidelines for Rule 9 - No interactive compiling allowed](guidelines.html#guideline9-no-interactive). +## Rule 9 - No interactive compiling allowed+## Rule 10 - Program file permissions @@ -435,7 +436,7 @@ version, **PLEASE** indicate that in your `remarks.md` file of your non-rule abusing version so that the Judges don't think you uploaded a duplicate into a wrong slot by mistake. -See [Guidelines for Rule 11 - Legal rule abuse](guidelines.html#guideline-11---abuse). +See [Guidelines for Rule 11 - Legal rule abuse](guidelines.html#guideline11-abuse).@@ -447,10 +448,14 @@ See [Guidelines for Rule 11 - Legal rule abuse](guidelines.html#guideline-11---a Use of UTF-8 is supported by `C89` standard and its updates and so too by the IOCCC. +See [Guidelines for Rule 12 - UTF-8](guidelines.html#guideline12-utf8). ++Any C source that fails to compile because lines contain carriage-returns (CTRL+M, `\r`) in particular as part of DOS/Windows style newlines might @@ -466,6 +471,8 @@ need to do this, please document that in your `remarks.md` file and if your compiler complains about this, document this too and update your `Makefile` to account for this. +See [Guidelines for Rule 13 - No carriage returns in prog.c](guidelines.html#guideline13-nocr). +## Rule 13 - No carriage returns in prog.c+## Rule 14 - Resubmitting lost submissions @@ -528,7 +535,7 @@ See [Rule 4 - Required files](rules.html#rule4-required-files). See FAQ on "[What are the detailed recommendations for a submission Makefile?](../faq.html#makefile_details)". -See [Guidelines for Rule 15 - GNU Makefile](guidelines.html#guideline-15---building). +See [Guidelines for Rule 15 - GNU Makefile](guidelines.html#guideline15-gnu-makefile).@@ -608,7 +615,7 @@ for testing and the IOCCC judges. @@ -628,7 +635,7 @@ See [Rule 4 - Required files](rules.html#rule4-required-files). See the FAQ on "[What is the mkiocccentry tool, how do I obtain it and how do I use it?](../faq.html#mkiocccentry)". -See the [Guidelines for Rule 17 - Use mkiocccentry](guidelines.html#guideline-17---packaging). +See the [Guidelines for Rule 17 - Use mkiocccentry](guidelines.html#guideline17-mkiocccentry).@@ -639,12 +646,14 @@ The entirety of your submission **MUST** be submitted under the following licens [CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/) -See [Rule 7 - Original Work](rules.html#rule-7---original-work). +See [Rule 7 - Original Work](rules.html#rule7-original-work).+## Rule 19 - Prime+