checkpoint rules version 29.00 2025-11-19.

This is a work in progress towards an improved rule set for **IOCCC29**.

Links to rules elsewhere on the site were modified as needed.
This commit is contained in:
Landon Curt Noll committed 2025-11-19 22:43:00 -08:00
1 parent 1be0e93dbf
commit ea37a9f559
17 files changed
+1068 -1722

No files matched your search

+79 -39
View File
@@ -569,10 +569,13 @@ may change from contest to contest.</p>
<li><a href="../faq.html#using_mkiocccentry">using the mkiocccentry tools</a></li>
</ul>
<p>Uploading a tarball not formed by <code>mkiocccentry(1)</code> puts you at a very big risk of
violating <a href="rules.html#rule17">Rule 17</a>, especially as <code>mkiocccentry(1)</code> does a
violating
<a href="rules.html#rule-17-packaging">Rule 17 Packaging</a>,
especially as <code>mkiocccentry(1)</code> does a
great number of things that are required, and it also runs many checks, and if
any of those checks fail, you are at a very great risk of having your submission
rejected for violating <a href="rules.html#rule17">Rule 17</a>.</p>
rejected for violating
<a href="rules.html#rule-17-packaging">Rule 17 Packaging</a>.</p>
<p>We <strong>STRONGLY</strong> recommend you <strong>do</strong> install the
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>.</p>
<p><strong>IMPORTANT NOTE</strong>: the tools that require other tools, <code>mkiocccentry(1)</code> and
@@ -608,13 +611,13 @@ option. See the
FAQ on “<a href="../faq.html#uuid">how to avoid re-entering your UUID</a>”
for more details. Note that the <code>-i answers</code> option cannot be used with the UUID
options as the answers file includes the UUID.</p>
<p>The overall size limit (see <a href="rules.html#rule2a">Rule 2a</a>) on <code>prog.c</code> has been
<p>The overall size limit (see Rule 2a Gross Size](rules.html#rule-2a-gross-size)) on <code>prog.c</code> has been
<strong>increased from 4096 to 4993</strong> bytes.
The <a href="rules.html#rule2a">Rule 2a</a> size was changed from
The <a href="rules.html#rule-2b-net-size">Rule 2b Next Size</a>size was changed from
<strong>4096</strong> to <strong>4993</strong> to keep the “2b to 2a” size ratio to a
value similar to the <a href="../faq.html#size_rule2001-2012">2001-2012</a> and
<a href="../faq.html#size_rule2013-2020">2013-2020</a> IOCCC eras.</p>
<p>The <a href="rules.html#rule2b">Rule 2b</a> size has <strong>increased from 2053 to 2503</strong>
<p>The <a href="rules.html#rule-2b-net-size">Rule 2b Next Size</a> size has <strong>increased from 2053 to 2503</strong>
bytes.</p>
<p class="leftbar">
However, you should pay especial attention to our remarks in the <a href="../2024/index.html">IOCCC28
@@ -623,14 +626,19 @@ index.html</a>:
<p class="leftbar">
<blockquote>
<p><strong>IMPORTANT HINT</strong>: Only 3 of the 23 <strong>IOCCC28 winners</strong> came close to the
<a href="../next/rules.html#rule2">Rule 2 size limit</a>. Large code size isn’t
<a href="rules.html#rule-2-size">Rule 2 Size</a> limit.
Large code size isn’t
everything. :-) Those submitting to future contents should <strong>take a careful
note</strong> of that fact.</p>
</blockquote>
</p>
<p>Your submission must satisfy <strong>BOTH</strong> the maximum size
<a href="rules.html#rule2a">Rule 2a</a> <strong>AND</strong> the IOCCC size <a href="rules.html#rule2b">Rule 2b</a>.</p>
<p>To check your code against <a href="rules.html#rule2">Rule 2</a>, use the <code>iocccentry(1)</code> tool.
<a href="rules.html#rule-2a-gross-size">Rule 2a Gross Size</a>
<strong>AND</strong>
the IOCCC size
<a href="rules.html#rule-2b-net-size">Rule 2b Next Size</a>.</p>
<p>To check your code against
<a href="rules.html#rule-2-size">Rule 2 Size</a>, use the <code>iocccentry(1)</code> tool.
For example:</p>
<pre><code> iocccsize prog.c</code></pre>
<p>The IOCCC size tool algorithm can be summarized as follows:</p>
@@ -657,7 +665,8 @@ if you are <a href="https://t5k.org/curios/page.php/2503.html">“Curios!” abo
BESM-6, and 2503 is a decimal anagram of 2053.</p>
<p>Take note that this secondary limit imposed by the IOCCC size tool
obviates some of the need to <code>#define</code> C reserved words in an effort
to get around the size limits of <a href="rules.html#rule2">Rule 2</a>.</p>
to get around the size limits of
<a href="rules.html#rule-2-size">Rule 2 Size</a>.</p>
<p>Yes Virginia, <strong>that is a hint</strong>!</p>
<p>The <strong>official locale</strong> of the <strong>IOCCC</strong> is <strong>C</strong>.</p>
<p class="leftbar">
@@ -765,7 +774,8 @@ misleading comments and variable names might be a <strong>VERY GOOD START</stron
to a great submission!</p>
<p>Jump to: <a href="#">top</a></p>
<h1 id="mkiocccentry"><code>mkiocccentry</code></h1>
<p><a href="rules.html#rule17">Rule 17</a> (the <code>mkiocccentry(1)</code> rule) states that
<p><a href="rules.html#rule-17-packaging">Rule 17 Packaging</a>
(the <code>mkiocccentry(1)</code> rule) states that
you <strong>REALLY SHOULD</strong> use the <code>mkiocccentry(1)</code> tool to package your submission tarball.</p>
<p>See the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a>
for the <code>mkiocccentry(1)</code> tool and below for more details.</p>
@@ -814,7 +824,9 @@ then you will have to specify the options (such as paths) for the tools that are
<code>chksubmit(1)</code>, <code>txzchk(1)</code> and <code>fnamchk(1)</code>.</p>
<p>Make sure you have
the latest version of of the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>
so that you do not violate <a href="rules.html#rule17">Rule 17</a> by mistake.</p>
so that you do not violate
<a href="rules.html#rule-17-packaging">Rule 17 Packaging</a>
by mistake.</p>
<p>Jump to: <a href="#">top</a></p>
<div id="mkiocccentry-synopsis">
<h2 id="mkiocccentry1-synopsis"><code>mkiocccentry(1)</code> synopsis</h2>
@@ -841,7 +853,7 @@ for even more information.</p>
execute one or more additional tools.</p>
<h2 id="iocccsize"><code>iocccsize</code></h2>
<p><code>mkiocccentry(1)</code> will use code from <code>iocccsize(1)</code> which detects a number of
issues (such as <a href="rules.html#rule2">Rule 2</a>) that you may ignore, if you wish, as
issues (such as <a href="rules.html#rule-2-size">Rule 2 Size</a>) that you may ignore, if you wish, as
noted above.</p>
<p>In other words, you no longer need to run <code>iocccsize</code> manually. However, the
checks described above are still made but through the <code>mkiocccentry(1)</code> tool itself.</p>
@@ -921,8 +933,8 @@ installed separately, in order to use the tools in <code>mkiocccentry</code>.</p
do install</em> the libraries from their respective repos, it/they will <strong>not be
used</strong> when compiling the <code>mkiocccentry</code> tools. This is important to
make sure that you’re using the correct versions, which is also verified by
<code>chksubmit</code> (in the JSON files created by <code>mkiocccentry(1)</code>). See <a href="rules.html#rule17">Rule
17</a>!</p>
<code>chksubmit</code> (in the JSON files created by <code>mkiocccentry(1)</code>). See
<a href="rules.html#rule-17-packaging">Rule 17 Packaging</a>!</p>
<p class="leftbar">
We <strong>HIGHLY</strong> recommend you install the <code>mkiocccentry</code> toolkit, however.
</p>
@@ -955,7 +967,8 @@ code</a> or the man
page. You might just find a fun option if you do either of these!</p>
<p>Of course, as <code>txzchk</code> does not extract the tarball, it is possible that if you
manually package your submission tarball and/or find and exploit a missing
check, you could still be violating <a href="rules.html#rule17">Rule 17</a>.</p>
check, you could still be violating
<a href="rules.html#rule-17-packaging">Rule 17 Packaging</a>.</p>
<div id="extra-files">
<h2 id="including-optional-and-extra-files">Including optional and extra files</h2>
</div>
@@ -970,7 +983,9 @@ file</em>. The non-extra files are considered <em>free files</em>.
</p>
<p class="leftbar">
Of course any dot file that is not <code>.auth.json</code> and <code>.info.json</code> will result in
a violation of <a href="rules.html#rule17">Rule 17</a>, regardless of its depth.
a violation of
<a href="rules.html#rule-17-packaging">Rule 17 Packaging</a>,
regardless of its depth.
</p>
<p>If you use an optional filename for something other than their intended use
in order to get past the file limit, we will consider that an
@@ -1000,10 +1015,13 @@ said tarball(s), the make <code>clobber</code> rule <strong>MUST</strong> remove
The <code>mkiocccentry(1)</code> tool creates a v7 format tarball to prevent this. You can
do the same like:</p>
<pre><code> tar --format=v7 -cJf foo.txz directory</code></pre>
<p>See <a href="rules.html#rule17">Rule 17</a> and also the
<p>See
<a href="rules.html#rule-17-packaging">Rule 17 Packaging</a>
and also the
FAQ on “<a href="../faq.html#max-files">maximum number of files</a>”.</p>
<p>If you do not follow these points, you
are at a great risk of violating <a href="rules.html#rule17">Rule 17</a>!</p>
are at a great risk of violating
<a href="rules.html#rule-17-packaging">Rule 17 Packaging</a>!</p>
<p><strong>NOTE</strong>: if you want to include a test-suite that requires a lot of files,
please suggest this in your <code>remarks.md</code> and if your submission wins it can
be done. In other words you should NOT use a tarball for a test-suite unless you
@@ -1018,14 +1036,16 @@ FAQ on “<a href="../faq.html#txzchk">txzchk</a>”.</p>
<p>As an important part of its algorithm, <a href="#txzchk">txzchk(1)</a> directly executes
<code>fnamchk(1)</code>. If the filename is invalid (or the filename does not match the
directory name of the tarball) then it is an <strong>error</strong> and you risk violating
<a href="rules.html#rule17">Rule 17</a>. Nevertheless, you can run the tool manually,
<a href="rules.html#rule-17-packaging">Rule 17 Packaging</a>.
Nevertheless, you can run the tool manually,
should you wish to.</p>
<p>For more information on <code>fnamchk</code> and how to manually validate your submission
tarball filename, see the
FAQ on “<a href="../faq.html#fnamchk">fnamchk</a>”.</p>
<p>It is extremely unlikely that <code>fnamchk(1)</code> reporting an invalid filename is a
bug in <code>fnamchk(1)</code> and as such, ignoring such an issue risks violating <a href="rules.html#rule17">Rule
17</a> which is a big risk. Of course, using <code>mkiocccentry(1)</code>
bug in <code>fnamchk(1)</code> and as such, ignoring such an issue risks violating
<a href="rules.html#rule-17-packaging">Rule 17 Packaging</a>
which is a big risk. Of course, using <code>mkiocccentry(1)</code>
would prevent this from happening as it would not create such a file anyway. If
<code>mkiocccentry(1)</code> was used it would rather suggest a bug in one of the tools and
you should <a href="https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&amp;labels=bug&amp;projects=&amp;template=bug_report.yml&amp;title=%5BBug%5D+%3Ctitle%3E">report it as a bug at the mkiocccentry issues
@@ -1037,7 +1057,9 @@ the risk of stating the obvious, you run <strong>A VERY BIG RISK</strong> of hav
your submission rejected if you package your own tarball, and there are <strong>ANY
problems</strong>. For instance, if <code>chksubmit(1)</code> found a problem in your <code>.info.json</code>
file, the <code>mkiocccentry(1)</code> tool would not package it. But if you were to package
it manually, you would be violating <a href="rules.html#rule17">Rule 17</a>. But even if
it manually, you would be violating
<a href="rules.html#rule-17-packaging">Rule 17 Packaging</a>.
But even if
everything checks out OK you should <strong>NOT</strong> assume that everything <strong>IS</strong> OK.</p>
<div id="bugs">
<h1 id="problems-andor-bugs-in-the-mkiocccentry-toolkit">Problems and/or bugs in the mkiocccentry toolkit</h1>
@@ -1252,7 +1274,8 @@ the <code>mkiocccentry(1)</code> tool.</p>
somehow, <code>txzchk(1)</code> will flag it as an error. When the judges run <code>txzchk(1)</code>
on the uploaded submission compressed tarball, if anything is wrong, for
instance if you “sneak in” any dot files or dot directories, the submission
<strong>WILL BE REJECTED</strong> for violating <a href="rules.html#rule17">Rule 17</a>!</p>
<strong>WILL BE REJECTED</strong> for violating
<a href="rules.html#rule-17-packaging">Rule 17 Packaging</a>!</p>
<p>You may use whatever tools you need to develop your submission, including the
use of <code>git(1)</code> or <code>gh(1)</code>, just be sure that your submission code and your
submission Makefile don’t depend on such tools.</p>
@@ -1499,8 +1522,9 @@ Please try to be much more creative.</p>
large data files to get around the source code size limit.</p>
<p class="leftbar">
We do not recommend submitting <a href="https://systemd.io">systemd</a> source code to the IOCCC,
if nothing else because that code is likely to exceed <a href="rules.html#rule2">the source code
size limit</a>. This isn’t to say that another highly compact and obfuscated
if nothing else because that code is likely to exceed
<a href="rules.html#rule-2-size">Rule 2 Size</a>.
This isn’t to say that another highly compact and obfuscated
replacement of <code>init(8)</code> would not be an interesting submission.
</p>
<p>Did we remember to indicate that programs that blatantly use
@@ -1514,8 +1538,10 @@ 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 <a href="rules.html">IOCCC
rules</a> for details (in particular, <a href="rules.html#rule9">Rule 9</a>).</p>
Remember, you can submit more than one submission. See the
<a href="rules.html">IOCCC rules</a>
for details (in particular,
<a href="rules.html#rule-8-submission">Rule 8 Submission</a>).</p>
<p>We suggest that you avoid trying for the ‘<strong>smallest self-replicating</strong>’
source. The smallest, a <a href="../1994/smr/index.html">zero byte entry</a>, won in
<a href="../years.html#1994">1994</a>.</p>
@@ -1623,7 +1649,8 @@ or Linux curses.</p>
If you do <code>#include &lt;curses.h&gt;</code> make <strong>CERTAIN</strong> you link in curses (i.e.
<code>-lcurses</code>) and not ncurses (i.e. <code>-lncurses</code>).
</p>
<p><a href="rules.html#rule13">Rule 13</a> no longer discourages the use of UTF-8
<p><a href="rules.html#rule-13-newlines">Rule 13 Newlines</a>
no longer discourages the use of UTF-8
characters in C code.</p>
<p>It is a very good idea to, in your <code>remarks.md</code> file, tell us why you
think your submission is obfuscated. This is particularly true if
@@ -1653,13 +1680,15 @@ Howe</a>, in which case it is original! :-)
Submitting source code that uses the contents of
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/iocccsize.c">iocccsize.c</a>,
<em>unless</em> you are <a href="../authors.html#Anthony_C_Howe">Anthony C Howe</a>, might run the
risk of violating <a href="rules.html#rule7">Rule 7</a>.</p>
risk of violating
<a href="rules.html#rule-7-original-work">Rule 7 Original Work</a>.</p>
<p>The IOCCC submission tarball validator source is not an original work,
unless you are <a href="../authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a>, in
which case it is original! :-) Submitting source code that uses the contents of
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/txzchk.c">txzchk.c</a>,
<em>unless</em> you are <a href="../authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a>, might
run the risk of violating <a href="rules.html#rule7">Rule 7</a>.</p>
run the risk of violating
<a href="rules.html#rule-7-original-work">Rule 7 Original Work</a>.</p>
<p>In addition to the above tools, none of the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
tools</a>, <em>including, <strong>but not
limited</strong></em> to
@@ -1682,15 +1711,17 @@ are original! :-) Submitting source code that uses the content of any of these t
library, <em>unless</em> you are <a href="../authors.html#Cody_Boone_Ferguson">Cody Boone
Ferguson</a> or <a href="http://www.isthe.com/chongo/index.html">Landon Curt
Noll</a>, might run the risk of violating
<a href="rules.html#rule7">Rule 7</a>.</p>
<a href="rules.html#rule-7-original-work">Rule 7 Original Work</a>.</p>
<p>And unless you are <a href="https://en.wikipedia.org/wiki/Landon_Curt_Noll">Landon Curt Noll</a>,
the code in
<a href="https://github.com/ioccc-src/mkiocccentry/tree/master/dbg">dbg</a> and
<a href="https://github.com/ioccc-src/mkiocccentry/tree/master/dyn_array">dyn_array</a> are
not original works. Submitting source code that uses the contents of those
libraries, <em>unless</em> you <a href="https://en.wikipedia.org/wiki/Landon_Curt_Noll">Landon Curt Noll</a>,
might run the risk of violating <a href="rules.html#rule7">Rule 7</a>.</p>
<p><a href="rules.html#rule7">Rule 7</a> does not prohibit you from writing your own
might run the risk of violating
<a href="rules.html#rule-7-original-work">Rule 7 Original Work</a>.</p>
<p><a href="rules.html#rule-7-original-work">Rule 7 Original Work</a>
does not prohibit you from writing your own
obfuscated versions of these tools, unless of course you are <a href="http://www.isthe.com/chongo/index.html">Landon Curt
Noll</a>, in which case you <em>probably</em>
won’t win since <a href="../judges.html">IOCCC judges</a> should not enter the IOCCC! :-)
@@ -1698,14 +1729,17 @@ However, <strong><em>if</em></strong> you do write your own version, you <strong
<strong><em>more</em> interesting</strong> than simply implementing the <a href="../index.html">IOCCC</a>
tools’ algorithms.</p>
<p>Even so, we do not recommend you try and submit a JSON parser due to
the fact it will likely exceed <a href="rules.html#rule2">the source code size limit</a>
the fact it will likely exceed
<a href="rules.html#rule-2-size">Rule 2 Size</a>
and because you likely can’t beat <a href="https://github.com/westes/flex">flex</a> and
<a href="https://www.gnu.org/software/bison/">bison</a> in obfuscation. This isn’t to
say that <a href="https://github.com/xexyl/jparse/blob/master/json_README.md#so-called-json-spec">the so-called JSON spec</a> is not
obfuscated, but unless you have some really clever way to compact and
obfuscate a JSON parser more than <a href="https://github.com/westes/flex">flex</a> and
<a href="https://www.gnu.org/software/bison/">bison</a> you will likely not win, either
because of the <a href="rules.html#rule2">source code size limit</a> or because it is not
because of the
<a href="rules.html#rule-2-size">Rule 2 Size</a>
or because it is not
as obfuscated as the <a href="https://github.com/westes/flex">flex</a> and <a href="https://www.gnu.org/software/bison/">bison</a>
generated code of
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/jparse">jparse</a>.</p>
@@ -1785,7 +1819,9 @@ character tab stop.</p>
<p><strong>PLEASE</strong> observe our <a href="../markdown.html">IOCCC markdown guidelines</a>
when forming your submission’s <code>remarks.md</code> file. And if your submission
contains additional markdown files, please follow those same guidelines for
those files. See also <a href="rules.html#rule19">Rule 19</a> and our
those files. See also
<a href="rules.html#rule-4-files">Rule 4 Files</a>,
and the
FAQ on “<a href="../faq.html#markdown">markdown</a>”.</p>
<p>We <strong>LIKE</strong> reading <code>remarks.md</code> files, especially if they contain
useful, informative, and even humorous content about your submission. Yes, this
@@ -1821,8 +1857,11 @@ your submission is valid. Humor and/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
<a href="rules.html">IOCCC rules</a>.</p>
<p>If you do bypass the <code>mkiocccentry(1)</code> warnings about <a href="rules.html#rule2a">Rule
2a</a> and/or about <a href="rules.html#rule2b">Rule 2b</a> or any other
<p>If you do bypass the <code>mkiocccentry(1)</code> warnings about
<a href="rules.html#rule-2a-gross-size">Rule 2a Gross Size</a>
and/or about
<a href="rules.html#rule-2b-net-size">Rule 2b Next Size</a>
or any other
rule and submit a submission anyway, you <strong>MUST</strong> try to justify why the IOCCC
<a href="../judges.html">IOCCC judges</a> should not reject your submission due to a rule
violation, and you would be wise to do this towards the top of your <code>remarks.md</code>
@@ -2001,7 +2040,8 @@ strange/creative layout submission. We sometimes also select a
submission that abuses the <a href="guidelines.html">IOCCC guidelines</a> in an interesting way,
or that stretches the contest <a href="rules.html">rules</a> that while legal, it
nevertheless goes against the <strong>intent</strong> of the <a href="rules.html">rules</a>.</p>
<p>Nevertheless, see <a href="rules.html#rule12">Rule 12</a>.</p>
<p>Nevertheless, see
<a href="rules.html#rule-10-privileges">Rule 10 Privileges</a>.</p>
<p>In the end, we traditionally pick one submission as ‘<strong>best</strong>’. Sometimes such
a submission simply far exceeds any of the other submissions. More often, the
‘<strong>best</strong>’ is picked because it does well in a number of categories.</p>