improve rules & guidelines

Added a number of change bars to the rules & guidelines.

Recommend recommend that all markdown files in your submission observe
[IOCCC markdown guidelines](../markdown.html).

Made use of "_..._" consistent in the rules & guidelines.

Updated some the fun guidelines.

Performed some whitespace cleanup in the rules & guidelines.

Changed IOCCC Rules to version **29.12 2025-12-01**.
Changed IOCCC Guidelines to version **29.04 2025-12-01**

Ran `make quick_www` to perform the above.
This commit is contained in:
Landon Curt Noll committed 2025-12-01 02:27:06 -08:00
1 parent eda2531e4d
commit 75387360d0
5 files changed
+524 -224

No files matched your search

+178 -93
View File
@@ -462,7 +462,7 @@ and remains unaltered. All other uses must receive prior permission in
writing by <a href="../contact.html">contacting the judges</a>.</p> writing by <a href="../contact.html">contacting the judges</a>.</p>
<h1 id="guidelines-version">Guidelines Version</h1> <h1 id="guidelines-version">Guidelines Version</h1>
<p class="leftbar"> <p class="leftbar">
These IOCCC guidelines are version <strong>29.03 2025-11-30</strong>. These IOCCC guidelines are version <strong>29.04 2025-12-01</strong>.
</p> </p>
<p class="leftbar"> <p class="leftbar">
The <span style="font-size:28px;"><b>|</b></span> symbol indicates an <strong>change</strong> from the previous IOCCC. The <span style="font-size:28px;"><b>|</b></span> symbol indicates an <strong>change</strong> from the previous IOCCC.
@@ -554,22 +554,30 @@ because of the <code>iocccsize(1)</code> algorithm.</p>
<h1 id="guidelines-for-rule-3---register-for-the-ioccc">Guidelines for <a href="rules.html#rule3-register">Rule 3 - Register for the IOCCC</a></h1> <h1 id="guidelines-for-rule-3---register-for-the-ioccc">Guidelines for <a href="rules.html#rule3-register">Rule 3 - Register for the IOCCC</a></h1>
</div> </div>
</div> </div>
<p>If a group of people work on a submission, then they should <p class="leftbar">
If a group of people work on a submission, then they should
<a href="../quick-start.html#enter">register for the IOCCC</a> <a href="../quick-start.html#enter">register for the IOCCC</a>
using either a group email address, or an email address for one of the authors.</p> using either a group email address, or an email address for one of the authors.
<p>Processing your registration is an activity overseen by an IOCCC judge. </p>
Please be <strong>patient</strong> while an IOCCC judge processes your registration.</p> <p class="leftbar">
Processing your registration is an activity overseen by an IOCCC judge.
Please be <strong>patient</strong> while an IOCCC judge processes your registration.
</p>
<p>It can take a few days to process your registration and for the server to <p>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 email your details, therefore make sure to allow yourself ample time to
register and submit your entries; <strong>DO NOT WAIT UNTIL THE FINAL DAYS</strong> register and submit your entries; <strong>DO NOT WAIT UNTIL THE FINAL DAYS</strong>
to register! The judges are <strong>NOT</strong> responsible for delayed or lost to register! The judges are <strong>NOT</strong> responsible for delayed or lost
email or for those who wait until the last minute to try to register!</p> email or for those who wait until the last minute to try to register!</p>
<p>If after a few days you believe your registration hasn’t been process, then <p class="leftbar">
<a href="../contact.html">contact the Judges</a>.</p> If after a few days you believe your registration hasn’t been process, then
<p>After your UUID and initial password are emailed to you, you have <a href="../contact.html">contact the Judges</a>.
</p>
<p class="leftbar">
After your UUID and initial password are emailed to you, you have
up to fortnight (<strong>14 days</strong>) to login and change your temporary password. up to fortnight (<strong>14 days</strong>) to login and change your temporary password.
If you fail to change your temporary password by that deadline, then you’ll need to If you fail to change your temporary password by that deadline, then you’ll need to
<a href="../contact.html">contact the Judges</a> by email to request a reset.</p> <a href="../contact.html">contact the Judges</a> by email to request a reset.
</p>
<p>See <a href="register.html">How to register for the IOCCC</a>.</p> <p>See <a href="register.html">How to register for the IOCCC</a>.</p>
<p>See <a href="../quick-start.html#enter">Entering the IOCCC: the bare minimum you need to know</a>.</p> <p>See <a href="../quick-start.html#enter">Entering the IOCCC: the bare minimum you need to know</a>.</p>
<p>Jump to: <a href="#">top</a></p> <p>Jump to: <a href="#">top</a></p>
@@ -593,7 +601,9 @@ If you fail to change your temporary password by that deadline, then you’ll ne
authors who skillfully employed various techniques to develop their code. authors who skillfully employed various techniques to develop their code.
If you do make use of such tools or services, then we <strong>ENCOURAGE you to If you do make use of such tools or services, then we <strong>ENCOURAGE you to
describe how you used such tools</strong> in your <code>remarks.md</code> file.</p> describe how you used such tools</strong> in your <code>remarks.md</code> file.</p>
<p>In short: You created it, you own it, its an original work, or you have explicit permission to the work.</p> <p class="leftbar">
In short: You created it, you own it, its an original work, or you have explicit permission to the work.
</p>
<p>See the <p>See the
FAQ on “<a href="../faq.html#ai">May I use AI, LLM, Virtual coding assistants, or similar tools to write my submission?</a>”.</p> FAQ on “<a href="../faq.html#ai">May I use AI, LLM, Virtual coding assistants, or similar tools to write my submission?</a>”.</p>
<p>Jump to: <a href="#">top</a></p> <p>Jump to: <a href="#">top</a></p>
@@ -677,14 +687,18 @@ This is one of the reasons why the <a href="rules.html">IOCCC rules</a> and
<p>Submissions will be judged in an environment that has no <strong>IDE</strong>. <p>Submissions will be judged in an environment that has no <strong>IDE</strong>.
Any submission that fails to compile/build because it requires Any submission that fails to compile/build because it requires
an <strong>IDE</strong> will be rejected.</p> an <strong>IDE</strong> will be rejected.</p>
<p>We will use the GNU <code>make(1)</code> tool, your <code>Makefile</code>, as well as tools found in the <p class="leftbar">
We will use the GNU <code>make(1)</code> tool, your <code>Makefile</code>, as well as tools found in the
<a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX Specification</a> <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX Specification</a>
environments, and commonly found on systems that reasonably conform to the environments, and commonly found on systems that reasonably conform to the
<a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX Specification</a> <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX Specification</a>
in the building and compiling of your submission.</p> in the building and compiling of your submission.
<p>Your Makefile <strong>MUST</strong> be compatible with GNU <code>make</code> and we suggest you use </p>
<p class="leftbar">
Your Makefile <strong>MUST</strong> be compatible with GNU <code>make</code> and we suggest you use
<a href="Makefile.example">Makefile.example</a> as a template, renamed as Makefile of <a href="Makefile.example">Makefile.example</a> as a template, renamed as Makefile of
course.</p> course.
</p>
<p>See the <p>See the
FAQ on “<a href="../faq.html#makefile_details">What are the detailed recommendations for a submission Makefile?</a>”.</p> FAQ on “<a href="../faq.html#makefile_details">What are the detailed recommendations for a submission Makefile?</a>”.</p>
<p>Jump to: <a href="#">top</a></p> <p>Jump to: <a href="#">top</a></p>
@@ -695,13 +709,19 @@ FAQ on “<a href="../faq.html#makefile_details">What are the detailed recommend
</div> </div>
</div> </div>
</div> </div>
<p>We <strong>STRONGLY</strong> recommend you <strong>do</strong> install the most recent release of <p class="leftbar">
We <strong>STRONGLY</strong> recommend you <strong>do</strong> install the most recent release of
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a> <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>
because use of older versions of the mkiocccentry toolkit are <strong>HIGHLY LIKELY</strong> to be <strong>REJECTED</strong>!</p> because use of older versions of the mkiocccentry toolkit are <strong>HIGHLY LIKELY</strong> to be <strong>REJECTED</strong>!
<p>If you submit your own JSON files (<strong>OTHER THAN</strong> <code>.auth.json</code> and </p>
<code>.info.json</code>) then they do <strong>NOT</strong> have to be valid JSON.</p> <p class="leftbar">
<p>However, if you do provide invalid JSON files, <strong>PLEASE</strong> If you submit your own JSON files (<strong>OTHER THAN</strong> <code>.auth.json</code> and
document and <strong>clearly explain</strong> this in your <code>remarks.md</code> file.</p> <code>.info.json</code>) then they do <strong>NOT</strong> have to be valid JSON.
</p>
<p class="leftbar">
However, if you do provide invalid JSON files, <strong>PLEASE</strong>
document and <strong>clearly explain</strong> this in your <code>remarks.md</code> file.
</p>
<p class="leftbar"> <p class="leftbar">
An <em>extra file</em> is defined as a file that is not <code>prog.c</code>, <code>prog.alt.c</code>, An <em>extra file</em> is defined as a file that is not <code>prog.c</code>, <code>prog.alt.c</code>,
<code>try.sh</code>, <code>try.alt.sh</code>, <code>remarks.md</code>, <code>Makefile</code>, <code>.auth.json</code> and <code>.info.json</code>: <code>try.sh</code>, <code>try.alt.sh</code>, <code>remarks.md</code>, <code>Makefile</code>, <code>.auth.json</code> and <code>.info.json</code>:
@@ -715,24 +735,40 @@ are considered <em>free files</em>, and do not count towards the
<a href="rules.html#rule17-mkiocccentry">Rule 17 - Use mkiocccentry</a> <a href="rules.html#rule17-mkiocccentry">Rule 17 - Use mkiocccentry</a>
limit of <strong>31</strong> <em>extra files</em>. limit of <strong>31</strong> <em>extra files</em>.
</p> </p>
<p>If you use an optional filename for something other than their intended use <p class="leftbar">
in order to get past the file limit, we will consider that an abuse of rules.</p> If you use an optional filename for something other than their intended use
<p>The <code>mkiocccentry</code> generated tarball does <strong>NOT</strong> reveal who you are! For this in order to get past the file limit, we will consider that an abuse of rules.
reason, the tarball <strong>MUST</strong> be a <strong>v7 format</strong> tarball.</p> </p>
<p>You should NOT use a tarball as an <em>extra file</em> for a test-suite unless you <p class="leftbar">
The <code>mkiocccentry</code> generated tarball does <strong>NOT</strong> reveal who you are! For this
reason, the tarball <strong>MUST</strong> be a <strong>v7 format</strong> tarball.
</p>
<p class="leftbar">
You should NOT use a tarball as an <em>extra file</em> for a test-suite unless you
have a very good reason for this: if you do include a tarball as an <em>extra file</em>, have a very good reason for this: if you do include a tarball as an <em>extra file</em>,
then you <strong>MUST</strong> specify why in your <code>remarks.md</code> file.</p> then you <strong>MUST</strong> specify why in your <code>remarks.md</code> file.
<p>If you <strong>DO</strong> include a tarball as an <em>extra file</em>, and the build process or the </p>
<p class="leftbar">
If you <strong>DO</strong> include a tarball as an <em>extra file</em>, and the build process or the
program extracts said tarball(s), the make <code>clobber</code> rule <strong>MUST</strong> remove the program extracts said tarball(s), the make <code>clobber</code> rule <strong>MUST</strong> remove the
extracted files.</p> extracted files.
<p>Instead of including a large test-suite that requires a lot of files as part of </p>
<p class="leftbar">
Instead of including a large test-suite that requires a lot of files as part of
your submission, if your submission doesn’t require the test-suite to be your submission, if your submission doesn’t require the test-suite to be
available to run, then in your <code>remarks.md</code> you could include URL where such a available to run, then in your <code>remarks.md</code> you could include URL where such a
test-suite may be downloaded from and how to use the test-suite to test your test-suite may be downloaded from and how to use the test-suite to test your
submission, assuming it is not reveal who you are.</p> submission, assuming it is not reveal who you are.
<p>If you <strong>DO</strong> include a tarball then make sure it uses the v7 format. See the </p>
<p class="leftbar">
If you <strong>DO</strong> include a tarball then make sure it uses the v7 format. See the
FAQ on “<a href="../faq.html#extra-files">extra files</a>” FAQ on “<a href="../faq.html#extra-files">extra files</a>”
for details on how to make a v7 tarball.</p> for details on how to make a v7 tarball.
</p>
<p class="leftbar">
We recommend that all markdown files in your submission observe our
<a href="../markdown.html">IOCCC markdown guidelines</a>.
</p>
<p>See the <p>See the
FAQ on “<a href="../faq.html#try_scripts">What should I do with the <code>try.sh</code> and <code>try.alt.sh</code> scripts?</a>”.</p> FAQ on “<a href="../faq.html#try_scripts">What should I do with the <code>try.sh</code> and <code>try.alt.sh</code> scripts?</a>”.</p>
<p>See the <p>See the
@@ -768,7 +804,9 @@ previously uploaded submission by rebuilding your submission with the
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>, <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>,
and then re-uploading it to <strong>the same slot number</strong> on the and then re-uploading it to <strong>the same slot number</strong> on the
<a href="https://submit.ioccc.org">submit server</a>.</p> <a href="https://submit.ioccc.org">submit server</a>.</p>
<p>The <strong>official locale</strong> of the <strong>IOCCC</strong> is <strong>C</strong>.</p> <p class="leftbar">
The <strong>official locale</strong> of the <strong>IOCCC</strong> is <strong>C</strong>.
</p>
<p>You are <strong>encouraged</strong> to examine the <a href="../years.html">winners of previous contests</a>.</p> <p>You are <strong>encouraged</strong> to examine the <a href="../years.html">winners of previous contests</a>.</p>
<p>Because <a href="rules.html">rules</a> change from year to year, some <a href="../years.html">past winning entries</a> <p>Because <a href="rules.html">rules</a> change from year to year, some <a href="../years.html">past winning entries</a>
may be rejected this year.</p> may be rejected this year.</p>
@@ -982,11 +1020,13 @@ is quite another to use many bytes of <code>-D</code>s in order to try and squee
source under the size limit.</p> source under the size limit.</p>
<p>Your source code, post-pre-processing, should not exceed the size of <p>Your source code, post-pre-processing, should not exceed the size of
<a href="https://en.wikipedia.org/wiki/Microsoft_Windows">Microsoft Windows</a>. :-)</p> <a href="https://en.wikipedia.org/wiki/Microsoft_Windows">Microsoft Windows</a>. :-)</p>
<p>You should try to restrict commands used in the build file to commands found in <p class="leftbar">
You should try to restrict commands used in the build file to commands found in
<a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX
Specification</a> Specification</a>
environments and systems that conform to the <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX environments and systems that conform to the <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX
Specification</a>.</p> Specification</a>.
</p>
<p>You may compile and use your own programs. If you do, try to build and execute <p>You may compile and use your own programs. If you do, try to build and execute
from the current directory. This restriction is not a hard and from the current directory. This restriction is not a hard and
absolute one. The intent is to ensure that the building of your absolute one. The intent is to ensure that the building of your
@@ -1272,42 +1312,59 @@ without having to type in answers each time, you can use the <code>-d</code> or
option to <code>mkiocccentry</code> for the tool to pseudo-randomly create answers for you. option to <code>mkiocccentry</code> for the tool to pseudo-randomly create answers for you.
For example:</p> For example:</p>
<pre><code> mkiocccentry -d workdir topdir</code></pre> <pre><code> mkiocccentry -d workdir topdir</code></pre>
<p>Do <strong>NOT</strong> submit a tarball formed by <code>mkiocccentry -d ..</code> <strong>OR</strong> by <p class="leftbar">
<code>mkiocccentry -s seed ..</code> <strong>OR</strong> by using the <code>test</code> UUID!</p> Do <strong>NOT</strong> submit a tarball formed by <code>mkiocccentry -d ...</code> <strong>OR</strong> by
<p>The <code>mkiocccentry(1)</code> tool creates an <code>xz(1)</code> compressed <strong>v7 format</strong> tarball using a <code>tar(1)</code> <code>mkiocccentry -s seed ...</code> <strong>OR</strong> by using the <code>test</code> UUID!
command of the form:</p> </p>
<p class="leftbar">
The <code>mkiocccentry(1)</code> tool creates an <code>xz(1)</code> compressed <strong>v7 format</strong> tarball using a <code>tar(1)</code>
command of the form:
</p>
<pre><code> cd workdir/UUID-slot_num &amp;&amp; tar --format=v7 -cJf submit.UUID-slot_num.timestamp.txz UUID-slot_num</code></pre> <pre><code> cd workdir/UUID-slot_num &amp;&amp; tar --format=v7 -cJf submit.UUID-slot_num.timestamp.txz UUID-slot_num</code></pre>
<p>In many places the <code>mkiocccentry(1)</code> tool will prompt you to verify what you input, allowing you to <p>In many places the <code>mkiocccentry(1)</code> tool will prompt you to verify what you input, allowing you to
correct details as you go along.</p> correct details as you go along.</p>
<p>Pressing the “<em>enter key</em>” at the <code>mkiocccentry(1)</code> tool prompts will allow you <p class="leftbar">
to proceed with a default, however make sure the default is the <strong>CORRECT</strong> Pressing the “<em>enter key</em>” at the <code>mkiocccentry(1)</code> tool prompts will allow you
answer.</p> to proceed with a default, however make sure the default is the <strong>CORRECT</strong> answer.
</p>
<p>The <code>mkiocccentry(1)</code> tool will use code from <code>iocccsize(1)</code> which detects a number of <p>The <code>mkiocccentry(1)</code> tool will use code from <code>iocccsize(1)</code> which detects a number of
issues (such as <a href="rules.html#rule2-size">Rule 2 - Size restrictions</a>) that you may ignore, issues (such as <a href="rules.html#rule2-size">Rule 2 - Size restrictions</a>) that you may ignore,
however ignoring such issues <strong>comes with a SIGNIFICANT level of risk!</strong></p> however ignoring such issues <strong>comes with a SIGNIFICANT level of risk!</strong></p>
<p>Once the tarball is packaged it will <p>Once the tarball is packaged it will
run <code>txzchk(1)</code>, which will also run <code>fnamchk(1)</code>, as part of its algorithm.</p> run <code>txzchk(1)</code>, which will also run <code>fnamchk(1)</code>, as part of its algorithm.</p>
<p>The use of <code>mkiocccentry -W ....</code> is <strong>highly discouraged</strong> as this may ignore <p class="leftbar">
warnings about a problem that may cause your submission to be <strong>REJECTED!</strong>”</p> The use of <code>mkiocccentry -W ...</code> is <strong>highly discouraged</strong> as this may ignore
<p>The same can be said of the <code>-Y</code> option, and to a lesser extent <code>-y</code>: the <code>-y</code> warnings about a problem that may cause your submission to be <strong>REJECTED!</strong>”
is mostly for the test script and the <code>-Y</code> is like <code>-y</code> but even more </p>
aggressive.</p> <p class="leftbar">
The same can be said of <code>mkiocccentry -Y ...</code> , and to a lesser extent <code>mkiocccentry -y ...</code>:
the <code>-y</code> is mostly for the test script and the <code>-Y</code> is like <code>-y</code> but even more aggressive.
</p>
<p>If <code>mkiocccentry</code> encounters an <strong>error</strong>, the program will exit and the xz <p>If <code>mkiocccentry</code> encounters an <strong>error</strong>, the program will exit and the xz
compressed tarball <strong>will NOT be generated</strong>: this is a <strong>feature, not a bug</strong>!</p> compressed tarball <strong>will NOT be generated</strong>: this is a <strong>feature, not a bug</strong>!</p>
<p>If you encounter a <strong>bug</strong> with the <p>If you encounter a <strong>bug</strong> with the
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a> <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>
<strong>PLEASE run the <code>bug_report.sh</code> script to help us out here!</strong></p> <strong>PLEASE run the <code>bug_report.sh</code> script to help us out here!</strong></p>
<p>While you don’t have to install the <p class="leftbar">
While you don’t have to install the
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>, <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>,
if you don’t, in order to run a tool outside the repo directory if you don’t, in order to run a tool outside the repo directory
you will have to specify <code>mkiocccentry(1)</code> command line options to locate required tools you will have to specify <code>mkiocccentry(1)</code> command line options to locate required tools
such as <code>chkentry(1)</code> (<code>mkiocccentry -C chkentry ..</code>), <code>txzchk(1)</code> (<code>mkiocccentry -T txzchk ..</code>), such as <code>chkentry(1)</code> (<code>mkiocccentry -C chkentry ...</code>), <code>txzchk(1)</code> (<code>mkiocccentry -T txzchk ...</code>),
and <code>fnamchk(1)</code> (<code>mkiocccentry -F fnamchk ..</code>).</p> and <code>fnamchk(1)</code> (<code>mkiocccentry -F fnamchk ...</code>).
<p>The <code>mkiocccentry(1)</code> tool will ignore any filename or directory that begins with a period (<code>.</code>).</p> </p>
<p>The <code>mkiocccentry(1)</code> tool will ignore all files that begin with <code>COPYING</code>, <code>COPYRIGHT</code>, and <code>LICENSE</code>, regardless <p class="leftbar">
of filename case.</p> The <code>mkiocccentry(1)</code> tool will ignore any filename or directory that begins with a period (<code>.</code>).
<p>The <code>mkiocccentry(1)</code> tool will reject any of the following files if they are found directly under </p>
the top level directory (<code>topdir</code>):</p> <p class="leftbar">
The <code>mkiocccentry(1)</code> tool will ignore all files that begin with <code>COPYING</code>, <code>COPYRIGHT</code>, and <code>LICENSE</code>, regardless
of filename case.
</p>
<p class="leftbar">
The <code>mkiocccentry(1)</code> tool will reject any of the following files if they are found directly under
the top level directory (<code>topdir</code>):
</p>
<p class="leftbar">
<ul> <ul>
<li>README.md</li> <li>README.md</li>
<li>index.html</li> <li>index.html</li>
@@ -1317,34 +1374,55 @@ the top level directory (<code>topdir</code>):</p>
<li>prog.orig.c</li> <li>prog.orig.c</li>
<li>filenames matching the <code>[0-9][0-9][0-9][0-9]_*.tar.bz2</code> file glob</li> <li>filenames matching the <code>[0-9][0-9][0-9][0-9]_*.tar.bz2</code> file glob</li>
</ul> </ul>
<p>The files listed in the above list are allowed to exist in sub-directories: just <strong>NOT</strong> directly under </p>
the top level directory (<code>topdir</code>).</p> <p class="leftbar">
<p>The <code>mkiocccentry(1)</code> tool evaluates all filenames and directory names in a case The files listed in the above list are allowed to exist in sub-directories: just <strong>NOT</strong> directly under
the top level directory (<code>topdir</code>).
</p>
<p class="leftbar">
The <code>mkiocccentry(1)</code> tool evaluates all filenames and directory names in a case
independent way: thus <code>FOO</code>, <code>Foo</code>, and <code>foo</code> are considered the <strong>SAME</strong> file independent way: thus <code>FOO</code>, <code>Foo</code>, and <code>foo</code> are considered the <strong>SAME</strong> file
even if your filesystem doesn’t do the same.</p> even if your filesystem doesn’t do the same.
<p>Having two or more filenames that differ only by case <strong>WILL</strong> lead to problems </p>
because of the previous statement.</p> <p class="leftbar">
<p>When the <code>mkiocccentry(1)</code> tool ignores a file, that file is <strong>NOT</strong> included as Having two or more filenames that differ only by case <strong>WILL</strong> lead to problems
part of your submission.</p> because of the previous statement.
<p>When the <code>mkiocccentry(1)</code> tool ignores a directory, that directory, </p>
<p class="leftbar">
When the <code>mkiocccentry(1)</code> tool ignores a file, that file is <strong>NOT</strong> included as
part of your submission.
</p>
<p class="leftbar">
When the <code>mkiocccentry(1)</code> tool ignores a directory, that directory,
and everything under that directory is <strong>NOT</strong> included as part of and everything under that directory is <strong>NOT</strong> included as part of
your submission.</p> your submission.
<p>The <code>mkiocccentry(1)</code> tool will ignore all symlinks.</p> </p>
<p>Creating a directory directly under the top level directory (<code>topdir</code>) <p class="leftbar">
The <code>mkiocccentry(1)</code> tool will ignore all symlinks.
</p>
<p class="leftbar">
Creating a directory directly under the top level directory (<code>topdir</code>)
that is normally considered to be a regular file, such as a directory that is normally considered to be a regular file, such as a directory
named <code>Makefile</code>, <code>prog.alt.c</code>, <code>prog.c</code>, <code>remarks.md</code>, <code>try.alt.sh</code>, named <code>Makefile</code>, <code>prog.alt.c</code>, <code>prog.c</code>, <code>remarks.md</code>, <code>try.alt.sh</code>,
or <code>try.sh</code> is <strong>NOT</strong> a good idea and will likely cause the or <code>try.sh</code> is <strong>NOT</strong> a good idea and will likely cause the
<code>mkiocccentry(1)</code> tool to abort with a <strong>fatal error</strong>.</p> <code>mkiocccentry(1)</code> tool to abort with a <strong>fatal error</strong>.
<p>The required <code>Makefile</code> and <code>remarks.md</code> files may <strong>NOT</strong> be empty. This </p>
<p class="leftbar">
The required <code>Makefile</code> and <code>remarks.md</code> files may <strong>NOT</strong> be empty. This
does not mean just 0 bytes but also that it <strong>MUST</strong> have <strong>content</strong>, and does not mean just 0 bytes but also that it <strong>MUST</strong> have <strong>content</strong>, and
content that is relevant (e.g. a Makefile with just comments is <strong>NOT</strong> content that is relevant (e.g. a Makefile with just comments is <strong>NOT</strong>
allowed). However, with the exception of the <code>Makefile</code>, the <code>mkiocccentry(1)</code> allowed). However, with the exception of the <code>Makefile</code>, the <code>mkiocccentry(1)</code>
tool will <strong>ONLY</strong> check file size.</p> tool will <strong>ONLY</strong> check file size.
<p>If the optional file <code>try.alt.sh</code>, or <code>try.sh</code> exists and is an empty file, </p>
the <code>mkiocccentry(1)</code> tool will abort with a <strong>fatal error</strong>.</p> <p class="leftbar">
<p>If the <code>mkiocccentry(1)</code> tool encounters anything that isn’t a file, isn’t a If the optional file <code>try.alt.sh</code>, or <code>try.sh</code> exists and is an empty file,
the <code>mkiocccentry(1)</code> tool will abort with a <strong>fatal error</strong>.
</p>
<p class="leftbar">
If the <code>mkiocccentry(1)</code> tool encounters anything that isn’t a file, isn’t a
directory, and isn’t a symlink (which the tool ignores), the <code>mkiocccentry(1)</code> directory, and isn’t a symlink (which the tool ignores), the <code>mkiocccentry(1)</code>
tool to abort with a <strong>fatal error</strong>.</p> tool to abort with a <strong>fatal error</strong>.
</p>
<p>See <p>See
FAQ on “<a href="../faq.html#mkiocccentry_bugs">How do I report bugs in an <code>mkiocccentry</code> tool?</a>”.</p> FAQ on “<a href="../faq.html#mkiocccentry_bugs">How do I report bugs in an <code>mkiocccentry</code> tool?</a>”.</p>
<p>See <a href="rules.html#rule11-legal-rulea-abuse">Rule 11 - Legal rule abuse</a> for warnings about ignoring <code>mkiocccentry(1)</code> tool warnings.</p> <p>See <a href="rules.html#rule11-legal-rulea-abuse">Rule 11 - Legal rule abuse</a> for warnings about ignoring <code>mkiocccentry(1)</code> tool warnings.</p>
@@ -1365,12 +1443,17 @@ to be a <strong>fun</strong>ctional UTC time. :-)</p>
may be found on the <a href="https://t5k.org/curios/page.php/2503.html">“Curios!” about 2503</a>.</p> may be found on the <a href="https://t5k.org/curios/page.php/2503.html">“Curios!” about 2503</a>.</p>
<p>The 2503 value for <a href="rules.html#rule2b-net-size">Rule 2b - Net Size</a> is a decimal anagram <p>The 2503 value for <a href="rules.html#rule2b-net-size">Rule 2b - Net Size</a> is a decimal anagram
of the number of the kernel disk pack of one of the judge’s <a href="https://en.wikipedia.org/wiki/BESM-6">BESM-6</a>.</p> of the number of the kernel disk pack of one of the judge’s <a href="https://en.wikipedia.org/wiki/BESM-6">BESM-6</a>.</p>
<p>There may or may not be fewer than 2^7+1 reasons why these <a href="guidelines.html">IOCCC <p class="leftbar">
guidelines</a> seem obfuscated.</p> There may or may not be fewer than 2^7+1 reasons why these
<p>Excessively “<em>dotty”</em> use of the <code>chksubmit(1)</code> or <code>chkentry(1)</code> commands suggests that <a href="guidelines.html">IOCCC guidelines</a> seem obfuscated.
either you like silly things, or that you”<em>RTFS</em>” with some level of care.</p> </p>
<p class="leftbar">
Excessively “<em>dotty”</em> use of the <code>chksubmit(1)</code> or <code>chkentry(1)</code> commands suggests that
either you like silly things, or that you <a href="https://en.wikipedia.org/wiki/RTFM">RTFS</a>
with some level of care.
</p>
<p>Some people might question what actually constitutes a valid JSON file, given <p>Some people might question what actually constitutes a valid JSON file, given
the state of the “<em>so-called</em>” JSON spec.. :-)</p> the state of the “<em>so-called</em>” JSON spec. :-)</p>
<p>We prefer programs that do not require a fish license: crayons and <p>We prefer programs that do not require a fish license: crayons and
cat detector vans not withstanding.</p> cat detector vans not withstanding.</p>
<p class="leftbar"> <p class="leftbar">
@@ -1423,7 +1506,7 @@ unless you count this one, in which case there are 3. :-)</p>
<p class="leftbar"> <p class="leftbar">
You very well might not be completely prohibited from failing to not partly You very well might not be completely prohibited from failing to not partly
misunderstand this particular <em>guideline</em>, but of course, we could not possibly misunderstand this particular <em>guideline</em>, but of course, we could not possibly
comment! :-) Nevertheless, you are neither prohibited, nor are you fully or partly comment! Nevertheless, you are neither prohibited, nor are you fully or partly
required to determine that this or the previous sentence is either false and/or required to determine that this or the previous sentence is either false and/or
perhaps misleading. Therefore, it might be wise for you to not fail to consider perhaps misleading. Therefore, it might be wise for you to not fail to consider
to not do so, accordingly. Thank you very much (allegedly). to not do so, accordingly. Thank you very much (allegedly).
@@ -1432,7 +1515,7 @@ to not do so, accordingly. Thank you very much (allegedly).
Speaker of the House of Commons, or to the speaker of your national Speaker of the House of Commons, or to the speaker of your national
parliament should you have one.</p> parliament should you have one.</p>
<p class="leftbar"> <p class="leftbar">
Please try to avoid this specific individual <em>guideline</em>, if it at all possible. Please try to avoid this specific individual <em>guideline</em>, if it is at all possible.
</p> </p>
<p>We believe that Mark Twain’s quote:</p> <p>We believe that Mark Twain’s quote:</p>
<blockquote> <blockquote>
@@ -1447,25 +1530,27 @@ This isn’t to say that another highly compact and obfuscated
replacement of <code>init(8)</code> would not be an interesting submission. replacement of <code>init(8)</code> would not be an interesting submission.
</p> </p>
<p class="leftbar"> <p class="leftbar">
The IOCCC size tool The
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/iocccsize.c">iocccsize</a> <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>
is not an original work, unless you are <a href="../authors.html#Anthony_C_Howe">Anthony C is not an original work, unless you one of the
Howe</a>, in which it is original! :-) <a href="https://github.com/ioccc-src/mkiocccentry/graphs/contributors">several mkiocccentry toolkit contributors</a>.
in which case it is original! :-)
Even so, most of the programs in the toolkit exceed the
<a href="rules.html#rule2-size">Rule 2 - Size</a>
so they wouldn’t quality anyway.
</p> </p>
<p class="leftbar"> <p class="leftbar">
The IOCCC tarball validator If the <a href="../judges.html">IOCCC judges</a> are feeling like it, they
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/txzchk.c">txzchk</a> 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! :-)
</p>
<p>If the <a href="../judges.html">IOCCC judges</a> are feeling ornery we
might choose to compile your program for running on an Arduino or might choose to compile your program for running on an Arduino or
a PDP-11. Heck, should we ever find an emulator of 60-bit CDC Cyber a PDP-11. Heck, should we ever find an emulator of 60-bit CDC Cyber
CPU, we might just try your submission on that emulator as well :-)</p> CPU, we might just try your submission on that emulator as well :-)
</p>
<p>Do not fear if you’re not 100% sure of the significance of <p>Do not fear if you’re not 100% sure of the significance of
<code>2305567963945518424753102147331756070</code> as it is not of prime importance: or is <code>2305567963945518424753102147331756070</code> as it is not of prime importance: or is
it? :-)</p> it? :-)</p>
<p>With respect to <a href="#nested-functions">nested functions</a>, try <code>chkentry -b</code>.</p> <p class="leftbar">
With respect to <a href="#nested-functions">nested functions</a>, try <code>chkentry -b</code>.
</p>
<p>Jump to: <a href="#">top</a></p> <p>Jump to: <a href="#">top</a></p>
<div id="more-information"> <div id="more-information">
<div id="information"> <div id="information">
+113 -28
View File
@@ -13,7 +13,7 @@ writing by [contacting the judges](../contact.html).
# Guidelines Version # Guidelines Version
<p class="leftbar"> <p class="leftbar">
These IOCCC guidelines are version **29.03 2025-11-30**. These IOCCC guidelines are version **29.04 2025-12-01**.
</p> </p>
<p class="leftbar"> <p class="leftbar">
@@ -136,12 +136,16 @@ Jump to: [top](#)
</div> </div>
</div> </div>
<p class="leftbar">
If a group of people work on a submission, then they should If a group of people work on a submission, then they should
[register for the IOCCC](../quick-start.html#enter) [register for the IOCCC](../quick-start.html#enter)
using either a group email address, or an email address for one of the authors. using either a group email address, or an email address for one of the authors.
</p>
<p class="leftbar">
Processing your registration is an activity overseen by an IOCCC judge. Processing your registration is an activity overseen by an IOCCC judge.
Please be **patient** while an IOCCC judge processes your registration. Please be **patient** while an IOCCC judge processes your registration.
</p>
It can take a few days to process your registration and for the server to 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 email your details, therefore make sure to allow yourself ample time to
@@ -149,13 +153,17 @@ 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! email or for those who wait until the last minute to try to register!
<p class="leftbar">
If after a few days you believe your registration hasn't been process, then If after a few days you believe your registration hasn't been process, then
[contact the Judges](../contact.html). [contact the Judges](../contact.html).
</p>
<p class="leftbar">
After your UUID and initial password are emailed to you, you have After your UUID and initial password are emailed to you, you have
up to fortnight (**14 days**) to login and change your temporary password. up to fortnight (**14 days**) to login and change your temporary password.
If you fail to change your temporary password by that deadline, then you'll need to If you fail to change your temporary password by that deadline, then you'll need to
[contact the Judges](../contact.html) by email to request a reset. [contact the Judges](../contact.html) by email to request a reset.
</p>
See [How to register for the IOCCC](register.html). See [How to register for the IOCCC](register.html).
@@ -187,7 +195,9 @@ authors who skillfully employed various techniques to develop their code.
If you do make use of such tools or services, then we **ENCOURAGE you to If you do make use of such tools or services, then we **ENCOURAGE you to
describe how you used such tools** in your `remarks.md` file. describe how you used such tools** in your `remarks.md` file.
<p class="leftbar">
In short: You created it, you own it, its an original work, or you have explicit permission to the work. In short: You created it, you own it, its an original work, or you have explicit permission to the work.
</p>
See the See the
FAQ on "[May I use AI, LLM, Virtual coding assistants, or similar tools to write my submission?](../faq.html#ai)". FAQ on "[May I use AI, LLM, Virtual coding assistants, or similar tools to write my submission?](../faq.html#ai)".
@@ -299,15 +309,19 @@ Submissions will be judged in an environment that has no **IDE**.
Any submission that fails to compile/build because it requires Any submission that fails to compile/build because it requires
an **IDE** will be rejected. an **IDE** will be rejected.
<p class="leftbar">
We will use the GNU `make(1)` tool, your `Makefile`, as well as tools found in the We will use the GNU `make(1)` tool, your `Makefile`, as well as tools found in the
[Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) [Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification)
environments, and commonly found on systems that reasonably conform to the environments, and commonly found on systems that reasonably conform to the
[Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) [Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification)
in the building and compiling of your submission. in the building and compiling of your submission.
</p>
<p class="leftbar">
Your Makefile **MUST** be compatible with GNU `make` and we suggest you use Your Makefile **MUST** be compatible with GNU `make` and we suggest you use
[Makefile.example](Makefile.example) as a template, renamed as Makefile of [Makefile.example](Makefile.example) as a template, renamed as Makefile of
course. course.
</p>
See the See the
FAQ on "[What are the detailed recommendations for a submission Makefile?](../faq.html#makefile_details)". FAQ on "[What are the detailed recommendations for a submission Makefile?](../faq.html#makefile_details)".
@@ -325,15 +339,21 @@ Jump to: [top](#)
</div> </div>
<p class="leftbar">
We **STRONGLY** recommend you **do** install the most recent release of We **STRONGLY** recommend you **do** install the most recent release of
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry)
because use of older versions of the mkiocccentry toolkit are **HIGHLY LIKELY** to be **REJECTED**! because use of older versions of the mkiocccentry toolkit are **HIGHLY LIKELY** to be **REJECTED**!
</p>
<p class="leftbar">
If you submit your own JSON files (**OTHER THAN** `.auth.json` and If you submit your own JSON files (**OTHER THAN** `.auth.json` and
`.info.json`) then they do **NOT** have to be valid JSON. `.info.json`) then they do **NOT** have to be valid JSON.
</p>
<p class="leftbar">
However, if you do provide invalid JSON files, **PLEASE** However, if you do provide invalid JSON files, **PLEASE**
document and **clearly explain** this in your `remarks.md` file. document and **clearly explain** this in your `remarks.md` file.
</p>
<p class="leftbar"> <p class="leftbar">
An _extra file_ is defined as a file that is not `prog.c`, `prog.alt.c`, An _extra file_ is defined as a file that is not `prog.c`, `prog.alt.c`,
@@ -350,29 +370,46 @@ are considered _free files_, and do not count towards the
limit of **31** _extra files_. limit of **31** _extra files_.
</p> </p>
<p class="leftbar">
If you use an optional filename for something other than their intended use 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 abuse of rules. in order to get past the file limit, we will consider that an abuse of rules.
</p>
<p class="leftbar">
The `mkiocccentry` generated tarball does **NOT** reveal who you are! For this The `mkiocccentry` generated tarball does **NOT** reveal who you are! For this
reason, the tarball **MUST** be a **v7 format** tarball. reason, the tarball **MUST** be a **v7 format** tarball.
</p>
<p class="leftbar">
You should NOT use a tarball as an _extra file_ for a test-suite unless you You should NOT use a tarball as an _extra file_ for a test-suite unless you
have a very good reason for this: if you do include a tarball as an _extra file_, have a very good reason for this: if you do include a tarball as an _extra file_,
then you **MUST** specify why in your `remarks.md` file. then you **MUST** specify why in your `remarks.md` file.
</p>
<p class="leftbar">
If you **DO** include a tarball as an _extra file_, and the build process or the If you **DO** include a tarball as an _extra file_, and the build process or the
program extracts said tarball(s), the make `clobber` rule **MUST** remove the program extracts said tarball(s), the make `clobber` rule **MUST** remove the
extracted files. extracted files.
</p>
<p class="leftbar">
Instead of including a large test-suite that requires a lot of files as part of Instead of including a large test-suite that requires a lot of files as part of
your submission, if your submission doesn't require the test-suite to be your submission, if your submission doesn't require the test-suite to be
available to run, then in your `remarks.md` you could include URL where such a available to run, then in your `remarks.md` you could include URL where such a
test-suite may be downloaded from and how to use the test-suite to test your test-suite may be downloaded from and how to use the test-suite to test your
submission, assuming it is not reveal who you are. submission, assuming it is not reveal who you are.
</p>
<p class="leftbar">
If you **DO** include a tarball then make sure it uses the v7 format. See the If you **DO** include a tarball then make sure it uses the v7 format. See the
FAQ on "[extra files](../faq.html#extra-files)" FAQ on "[extra files](../faq.html#extra-files)"
for details on how to make a v7 tarball. for details on how to make a v7 tarball.
</p>
<p class="leftbar">
We recommend that all markdown files in your submission observe our
[IOCCC markdown guidelines](../markdown.html).
</p>
See the See the
FAQ on "[What should I do with the `try.sh` and `try.alt.sh` scripts?](../faq.html#try_scripts)". FAQ on "[What should I do with the `try.sh` and `try.alt.sh` scripts?](../faq.html#try_scripts)".
@@ -428,7 +465,9 @@ previously uploaded submission by rebuilding your submission with the
and then re-uploading it to **the same slot number** on the and then re-uploading it to **the same slot number** on the
[submit server](https://submit.ioccc.org). [submit server](https://submit.ioccc.org).
<p class="leftbar">
The **official locale** of the **IOCCC** is **C**. The **official locale** of the **IOCCC** is **C**.
</p>
You are **encouraged** to examine the [winners of previous contests](../years.html). You are **encouraged** to examine the [winners of previous contests](../years.html).
@@ -713,11 +752,13 @@ source under the size limit.
Your source code, post-pre-processing, should not exceed the size of Your source code, post-pre-processing, should not exceed the size of
[Microsoft Windows](https://en.wikipedia.org/wiki/Microsoft_Windows). :-) [Microsoft Windows](https://en.wikipedia.org/wiki/Microsoft_Windows). :-)
<p class="leftbar">
You should try to restrict commands used in the build file to commands found in You should try to restrict commands used in the build file to commands found in
[Single UNIX [Single UNIX
Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification)
environments and systems that conform to the [Single UNIX environments and systems that conform to the [Single UNIX
Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification). Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification).
</p>
You may compile and use your own programs. If you do, try to build and execute You may compile and use your own programs. If you do, try to build and execute
from the current directory. This restriction is not a hard and from the current directory. This restriction is not a hard and
@@ -1091,11 +1132,15 @@ For example:
mkiocccentry -d workdir topdir mkiocccentry -d workdir topdir
``` ```
Do **NOT** submit a tarball formed by `mkiocccentry -d ..` **OR** by <p class="leftbar">
`mkiocccentry -s seed ..` **OR** by using the `test` UUID! Do **NOT** submit a tarball formed by `mkiocccentry -d ...` **OR** by
`mkiocccentry -s seed ...` **OR** by using the `test` UUID!
</p>
<p class="leftbar">
The `mkiocccentry(1)` tool creates an `xz(1)` compressed **v7 format** tarball using a `tar(1)` The `mkiocccentry(1)` tool creates an `xz(1)` compressed **v7 format** tarball using a `tar(1)`
command of the form: command of the form:
</p>
``` <!---sh--> ``` <!---sh-->
cd workdir/UUID-slot_num && tar --format=v7 -cJf submit.UUID-slot_num.timestamp.txz UUID-slot_num cd workdir/UUID-slot_num && tar --format=v7 -cJf submit.UUID-slot_num.timestamp.txz UUID-slot_num
@@ -1104,9 +1149,10 @@ command of the form:
In many places the `mkiocccentry(1)` tool will prompt you to verify what you input, allowing you to In many places the `mkiocccentry(1)` tool will prompt you to verify what you input, allowing you to
correct details as you go along. correct details as you go along.
<p class="leftbar">
Pressing the "_enter key_" at the `mkiocccentry(1)` tool prompts will allow you Pressing the "_enter key_" at the `mkiocccentry(1)` tool prompts will allow you
to proceed with a default, however make sure the default is the **CORRECT** to proceed with a default, however make sure the default is the **CORRECT** answer.
answer. </p>
The `mkiocccentry(1)` tool will use code from `iocccsize(1)` which detects a number of The `mkiocccentry(1)` tool will use code from `iocccsize(1)` which detects a number of
issues (such as [Rule 2 - Size restrictions](rules.html#rule2-size)) that you may ignore, issues (such as [Rule 2 - Size restrictions](rules.html#rule2-size)) that you may ignore,
@@ -1115,12 +1161,15 @@ however ignoring such issues **comes with a SIGNIFICANT level of risk!**
Once the tarball is packaged it will Once the tarball is packaged it will
run `txzchk(1)`, which will also run `fnamchk(1)`, as part of its algorithm. run `txzchk(1)`, which will also run `fnamchk(1)`, as part of its algorithm.
The use of `mkiocccentry -W ....` is **highly discouraged** as this may ignore <p class="leftbar">
The use of `mkiocccentry -W ...` is **highly discouraged** as this may ignore
warnings about a problem that may cause your submission to be **REJECTED!**" warnings about a problem that may cause your submission to be **REJECTED!**"
</p>
The same can be said of the `-Y` option, and to a lesser extent `-y`: the `-y` <p class="leftbar">
is mostly for the test script and the `-Y` is like `-y` but even more The same can be said of `mkiocccentry -Y ...` , and to a lesser extent `mkiocccentry -y ...`:
aggressive. the `-y` is mostly for the test script and the `-Y` is like `-y` but even more aggressive.
</p>
If `mkiocccentry` encounters an **error**, the program will exit and the xz If `mkiocccentry` encounters an **error**, the program will exit and the xz
compressed tarball **will NOT be generated**: this is a **feature, not a bug**! compressed tarball **will NOT be generated**: this is a **feature, not a bug**!
@@ -1129,21 +1178,30 @@ If you encounter a **bug** with the
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry)
**PLEASE run the `bug_report.sh` script to help us out here!** **PLEASE run the `bug_report.sh` script to help us out here!**
<p class="leftbar">
While you don't have to install the While you don't have to install the
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry), [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry),
if you don't, in order to run a tool outside the repo directory if you don't, in order to run a tool outside the repo directory
you will have to specify `mkiocccentry(1)` command line options to locate required tools you will have to specify `mkiocccentry(1)` command line options to locate required tools
such as `chkentry(1)` (`mkiocccentry -C chkentry ..`), `txzchk(1)` (`mkiocccentry -T txzchk ..`), such as `chkentry(1)` (`mkiocccentry -C chkentry ...`), `txzchk(1)` (`mkiocccentry -T txzchk ...`),
and `fnamchk(1)` (`mkiocccentry -F fnamchk ..`). and `fnamchk(1)` (`mkiocccentry -F fnamchk ...`).
</p>
<p class="leftbar">
The `mkiocccentry(1)` tool will ignore any filename or directory that begins with a period (`.`). The `mkiocccentry(1)` tool will ignore any filename or directory that begins with a period (`.`).
</p>
<p class="leftbar">
The `mkiocccentry(1)` tool will ignore all files that begin with `COPYING`, `COPYRIGHT`, and `LICENSE`, regardless The `mkiocccentry(1)` tool will ignore all files that begin with `COPYING`, `COPYRIGHT`, and `LICENSE`, regardless
of filename case. of filename case.
</p>
<p class="leftbar">
The `mkiocccentry(1)` tool will reject any of the following files if they are found directly under The `mkiocccentry(1)` tool will reject any of the following files if they are found directly under
the top level directory (`topdir`): the top level directory (`topdir`):
</p>
<p class="leftbar">
* README.md * README.md
* index.html * index.html
* prog * prog
@@ -1151,44 +1209,65 @@ the top level directory (`topdir`):
* prog.alt.o * prog.alt.o
* prog.orig.c * prog.orig.c
* filenames matching the `[0-9][0-9][0-9][0-9]_*.tar.bz2` file glob * filenames matching the `[0-9][0-9][0-9][0-9]_*.tar.bz2` file glob
</p>
<p class="leftbar">
The files listed in the above list are allowed to exist in sub-directories: just **NOT** directly under The files listed in the above list are allowed to exist in sub-directories: just **NOT** directly under
the top level directory (`topdir`). the top level directory (`topdir`).
</p>
<p class="leftbar">
The `mkiocccentry(1)` tool evaluates all filenames and directory names in a case The `mkiocccentry(1)` tool evaluates all filenames and directory names in a case
independent way: thus `FOO`, `Foo`, and `foo` are considered the **SAME** file independent way: thus `FOO`, `Foo`, and `foo` are considered the **SAME** file
even if your filesystem doesn't do the same. even if your filesystem doesn't do the same.
</p>
<p class="leftbar">
Having two or more filenames that differ only by case **WILL** lead to problems Having two or more filenames that differ only by case **WILL** lead to problems
because of the previous statement. because of the previous statement.
</p>
<p class="leftbar">
When the `mkiocccentry(1)` tool ignores a file, that file is **NOT** included as When the `mkiocccentry(1)` tool ignores a file, that file is **NOT** included as
part of your submission. part of your submission.
</p>
<p class="leftbar">
When the `mkiocccentry(1)` tool ignores a directory, that directory, When the `mkiocccentry(1)` tool ignores a directory, that directory,
and everything under that directory is **NOT** included as part of and everything under that directory is **NOT** included as part of
your submission. your submission.
</p>
<p class="leftbar">
The `mkiocccentry(1)` tool will ignore all symlinks. The `mkiocccentry(1)` tool will ignore all symlinks.
</p>
<p class="leftbar">
Creating a directory directly under the top level directory (`topdir`) Creating a directory directly under the top level directory (`topdir`)
that is normally considered to be a regular file, such as a directory that is normally considered to be a regular file, such as a directory
named `Makefile`, `prog.alt.c`, `prog.c`, `remarks.md`, `try.alt.sh`, named `Makefile`, `prog.alt.c`, `prog.c`, `remarks.md`, `try.alt.sh`,
or `try.sh` is **NOT** a good idea and will likely cause the or `try.sh` is **NOT** a good idea and will likely cause the
`mkiocccentry(1)` tool to abort with a **fatal error**. `mkiocccentry(1)` tool to abort with a **fatal error**.
</p>
<p class="leftbar">
The required `Makefile` and `remarks.md` files may **NOT** be empty. This The required `Makefile` and `remarks.md` files may **NOT** be empty. This
does not mean just 0 bytes but also that it **MUST** have **content**, and does not mean just 0 bytes but also that it **MUST** have **content**, and
content that is relevant (e.g. a Makefile with just comments is **NOT** content that is relevant (e.g. a Makefile with just comments is **NOT**
allowed). However, with the exception of the `Makefile`, the `mkiocccentry(1)` allowed). However, with the exception of the `Makefile`, the `mkiocccentry(1)`
tool will **ONLY** check file size. tool will **ONLY** check file size.
</p>
<p class="leftbar">
If the optional file `try.alt.sh`, or `try.sh` exists and is an empty file, If the optional file `try.alt.sh`, or `try.sh` exists and is an empty file,
the `mkiocccentry(1)` tool will abort with a **fatal error**. the `mkiocccentry(1)` tool will abort with a **fatal error**.
</p>
<p class="leftbar">
If the `mkiocccentry(1)` tool encounters anything that isn't a file, isn't a If the `mkiocccentry(1)` tool encounters anything that isn't a file, isn't a
directory, and isn't a symlink (which the tool ignores), the `mkiocccentry(1)` directory, and isn't a symlink (which the tool ignores), the `mkiocccentry(1)`
tool to abort with a **fatal error**. tool to abort with a **fatal error**.
</p>
See See
FAQ on "[How do I report bugs in an `mkiocccentry` tool?](../faq.html#mkiocccentry_bugs)". FAQ on "[How do I report bugs in an `mkiocccentry` tool?](../faq.html#mkiocccentry_bugs)".
@@ -1223,14 +1302,19 @@ may be found on the ["Curios!" about 2503](https://t5k.org/curios/page.php/2503.
The 2503 value for [Rule 2b - Net Size](rules.html#rule2b-net-size) is a decimal anagram The 2503 value for [Rule 2b - Net Size](rules.html#rule2b-net-size) is a decimal anagram
of the number of the kernel disk pack of one of the judge's [BESM-6](https://en.wikipedia.org/wiki/BESM-6). of the number of the kernel disk pack of one of the judge's [BESM-6](https://en.wikipedia.org/wiki/BESM-6).
There may or may not be fewer than 2^7+1 reasons why these [IOCCC <p class="leftbar">
guidelines](guidelines.html) seem obfuscated. There may or may not be fewer than 2^7+1 reasons why these
[IOCCC guidelines](guidelines.html) seem obfuscated.
</p>
<p class="leftbar">
Excessively "_dotty"_ use of the `chksubmit(1)` or `chkentry(1)` commands suggests that Excessively "_dotty"_ use of the `chksubmit(1)` or `chkentry(1)` commands suggests that
either you like silly things, or that you "_RTFS_" with some level of care. either you like silly things, or that you [RTFS](https://en.wikipedia.org/wiki/RTFM)
with some level of care.
</p>
Some people might question what actually constitutes a valid JSON file, given Some people might question what actually constitutes a valid JSON file, given
the state of the "_so-called_" JSON spec.. :-) the state of the "_so-called_" JSON spec. :-)
We prefer programs that do not require a fish license: crayons and We prefer programs that do not require a fish license: crayons and
cat detector vans not withstanding. cat detector vans not withstanding.
@@ -1295,7 +1379,7 @@ unless you count this one, in which case there are 3. :-)
<p class="leftbar"> <p class="leftbar">
You very well might not be completely prohibited from failing to not partly You very well might not be completely prohibited from failing to not partly
misunderstand this particular _guideline_, but of course, we could not possibly misunderstand this particular _guideline_, but of course, we could not possibly
comment! :-) Nevertheless, you are neither prohibited, nor are you fully or partly comment! Nevertheless, you are neither prohibited, nor are you fully or partly
required to determine that this or the previous sentence is either false and/or required to determine that this or the previous sentence is either false and/or
perhaps misleading. Therefore, it might be wise for you to not fail to consider perhaps misleading. Therefore, it might be wise for you to not fail to consider
to not do so, accordingly. Thank you very much (allegedly). to not do so, accordingly. Thank you very much (allegedly).
@@ -1306,7 +1390,7 @@ Speaker of the House of Commons, or to the speaker of your national
parliament should you have one. parliament should you have one.
<p class="leftbar"> <p class="leftbar">
Please try to avoid this specific individual _guideline_, if it at all possible. Please try to avoid this specific individual _guideline_, if it is at all possible.
</p> </p>
We believe that Mark Twain's quote: We believe that Mark Twain's quote:
@@ -1324,29 +1408,30 @@ replacement of `init(8)` would not be an interesting submission.
</p> </p>
<p class="leftbar"> <p class="leftbar">
The IOCCC size tool The
[iocccsize](https://github.com/ioccc-src/mkiocccentry/blob/master/iocccsize.c) [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry)
is not an original work, unless you are [Anthony C is not an original work, unless you one of the
Howe](../authors.html#Anthony_C_Howe), in which it is original! :-) [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)
so they wouldn't quality anyway.
</p> </p>
<p class="leftbar"> <p class="leftbar">
The IOCCC tarball validator If the [IOCCC judges](../judges.html) are feeling like it, they
[txzchk](https://github.com/ioccc-src/mkiocccentry/blob/master/txzchk.c) is not
an original work, unless you are [Cody Boone
Ferguson](../authors.html#Cody_Boone_Ferguson), in which case it is original! :-)
</p>
If the [IOCCC judges](../judges.html) are feeling ornery we
might choose to compile your program for running on an Arduino or might choose to compile your program for running on an Arduino or
a PDP-11. Heck, should we ever find an emulator of 60-bit CDC Cyber a PDP-11. Heck, should we ever find an emulator of 60-bit CDC Cyber
CPU, we might just try your submission on that emulator as well :-) CPU, we might just try your submission on that emulator as well :-)
</p>
Do not fear if you're not 100% sure of the significance of Do not fear if you're not 100% sure of the significance of
`2305567963945518424753102147331756070` as it is not of prime importance: or is `2305567963945518424753102147331756070` as it is not of prime importance: or is
it? :-) it? :-)
<p class="leftbar">
With respect to [nested functions](#nested-functions), try `chkentry -b`. With respect to [nested functions](#nested-functions), try `chkentry -b`.
</p>
Jump to: [top](#) Jump to: [top](#)
+143 -80
View File
@@ -480,20 +480,36 @@ granted provided this copyright and notice are included in its entirety
and remains unaltered. All other uses <strong>MUST</strong> receive prior permission in and remains unaltered. All other uses <strong>MUST</strong> receive prior permission in
writing by <a href="../contact.html">contacting the judges</a>.</p> writing by <a href="../contact.html">contacting the judges</a>.</p>
<h2 id="rules-version">Rules Version</h2> <h2 id="rules-version">Rules Version</h2>
<p>These IOCCC Rules are version <strong>29.11 2025-11-30</strong>.</p> <p>These IOCCC Rules are version <strong>29.12 2025-12-01</strong>.</p>
<p class="leftbar">
The <span style="font-size:28px;"><b>|</b></span> symbol indicates an <strong>change</strong> from the previous IOCCC.
</p>
<p class="leftbar">
Because the <strong>IOCCC29</strong> rules was a substantial rewrite, only <strong>important changes</strong> from <strong>IOCCC28</strong> have been marked.
</p>
<p>Reminder: be SURE to read the <a href="guidelines.html">IOCCC guidelines</a>.</p> <p>Reminder: be SURE to read the <a href="guidelines.html">IOCCC guidelines</a>.</p>
<div id="rule0"> <div id="rule0">
<h2 id="rule-0---dates">Rule 0 - Dates</h2> <h2 id="rule-0---dates">Rule 0 - Dates</h2>
</div> </div>
<p>This IOCCC runs from <code>2025-12-03 20:25:12.045045 UTC</code> to <code>2026-03-13 17:19:23.293137 UTC</code>.</p> <p class="leftbar">
<p>This contest will enter the <a href="../faq.html#pending">pending state</a> on <code>2025-12-03 20:25:12.045045 UTC</code>, This IOCCC runs from <code>2025-12-03 20:25:12.045045 UTC</code> to <code>2026-03-13 17:19:23.293137 UTC</code>.
allowing people to <a href="register.html">register for the IOCCC</a>.</p> </p>
<p>This contest will enter the <a href="../faq.html#open">open state</a> on <code>2025-12-15 18:21:24.273033 UTC</code>, <p class="leftbar">
allowing people to <a href="submit.html">upload submissions</a>.</p> This contest will enter the <a href="../faq.html#pending">pending state</a> on <code>2025-12-03 20:25:12.045045 UTC</code>,
<p>This contest will enter the <a href="../faq.html#judging">judging state</a> on <code>2026-03-13 17:19:23.293137 UTC</code>, allowing people to <a href="register.html">register for the IOCCC</a>.
when people will no longer be allowed to upload submissions.</p> </p>
<p class="leftbar">
This contest will enter the <a href="../faq.html#open">open state</a> on <code>2025-12-15 18:21:24.273033 UTC</code>,
allowing people to <a href="submit.html">upload submissions</a>.
</p>
<p class="leftbar">
This contest will enter the <a href="../faq.html#judging">judging state</a> on <code>2026-03-13 17:19:23.293137 UTC</code>,
when people will no longer be allowed to upload submissions.
</p>
<p>The above <strong>dates and times may change <em>AT ANY TIME</em></strong> until the <a href="../status.html">contest status</a> is <strong>open</strong>.</p> <p>The above <strong>dates and times may change <em>AT ANY TIME</em></strong> until the <a href="../status.html">contest status</a> is <strong>open</strong>.</p>
<p>The above timestamps are in “<em>YYYY-MM-DD HH:MM:SS.micros UTC</em>” format.</p> <p class="leftbar">
The above timestamps are in “<em>YYYY-MM-DD HH:MM:SS.micros UTC</em>” format.
</p>
<p>See <a href="../quick-start.html#enter">Entering the IOCCC: the bare minimum you need to know</a>.</p> <p>See <a href="../quick-start.html#enter">Entering the IOCCC: the bare minimum you need to know</a>.</p>
<p>See <p>See
FAQ on “<a href="../faq.html#feedback">How can I comment or make a suggestion on IOCCC rules, guidelines and tools?</a>”.</p> FAQ on “<a href="../faq.html#feedback">How can I comment or make a suggestion on IOCCC rules, guidelines and tools?</a>”.</p>
@@ -502,7 +518,9 @@ FAQ on “<a href="../faq.html#feedback">How can I comment or make a suggestion
<h2 id="rule-1---c-program">Rule 1 - C program</h2> <h2 id="rule-1---c-program">Rule 1 - C program</h2>
</div> </div>
</div> </div>
<p>Your submission <strong>MUST</strong> be a C program.</p> <p class="leftbar">
Your submission <strong>MUST</strong> be a C program.
</p>
<p>See the <a href="guidelines.html#guidelines-for-rule-1---c-program">Guidelines for Rule 1 - C program</a>.</p> <p>See the <a href="guidelines.html#guidelines-for-rule-1---c-program">Guidelines for Rule 1 - C program</a>.</p>
<div id="rule2"> <div id="rule2">
<div id="rule2-size-restrictions"> <div id="rule2-size-restrictions">
@@ -560,56 +578,68 @@ temporary password, which you <strong>MUST</strong> change within 14 days.</p>
<h2 id="rule-4---required-files">Rule 4 - Required files</h2> <h2 id="rule-4---required-files">Rule 4 - Required files</h2>
</div> </div>
</div> </div>
<p>Your submission <strong>MUST</strong> include at least these files: <code>Makefile</code>, <code>prog.c</code>, <p class="leftbar">
Your submission <strong>MUST</strong> include at least these files: <code>Makefile</code>, <code>prog.c</code>,
<code>remarks.md</code>,<code>.info.json</code>, and <code>.auth.json</code>, the latter two of which are <code>remarks.md</code>,<code>.info.json</code>, and <code>.auth.json</code>, the latter two of which are
generated by <code>mkiocccentry(1)</code>. See <a href="#rule17-mkiocccentry">Rule 17 - generated by <code>mkiocccentry(1)</code>. See <a href="#rule17-mkiocccentry">Rule 17 -
Use mkiocccentry</a>.</p> Use mkiocccentry</a>.
<p>At a <strong>minimum</strong> the following requirements apply. Additional requirements </p>
<p class="leftbar">
At a <strong>minimum</strong> the following requirements apply. Additional requirements
may be imposed by <code>mkiocccentry(1)</code> updates that have yet to be listed may be imposed by <code>mkiocccentry(1)</code> updates that have yet to be listed
below.</p> below:
<p><strong>NOTE</strong>: <code>mkiocccentry(1)</code> will reject any directory which has prohibited </p>
files.</p> <p><span style="font-size:28px;"><b>|</b></span>  
<p><strong>NOTE</strong>: by ‘top directory’ we mean the directory with <code>prog.c</code>, <code>Makefile</code>, * <code>.info.json</code> and <code>.auth.json</code> <strong>MUST</strong> be generated by <code>mkiocccenty(1)</code>
<code>remarks.md</code> and the <code>mkiocccentry(1)</code> generated files <code>.auth.json</code> and
<code>.info.json</code> and <strong>NOT</strong> the <code>topdir</code> arg to <code>mkiocccentry(1)</code>.</p>
<ul>
<li><p><code>.info.json</code> and <code>.auth.json</code> <strong>MUST</strong> be generated by <code>mkiocccenty(1)</code>
when packing a submission. When <code>chksubmit(1)</code> is run on the submission when packing a submission. When <code>chksubmit(1)</code> is run on the submission
directory <strong>ALL</strong> tests must pass and if there is <strong>ANY</strong> problem with these directory <strong>ALL</strong> tests must pass and if there is <strong>ANY</strong> problem with these
JSON files or if either is missing it will fail. See <a href="#rule17-mkiocccentry">Rule 17 - use JSON files or if either is missing it will fail. See <a href="#rule17-mkiocccentry">Rule 17 - use
mkiocccentry</a>.</p></li> mkiocccentry</a>.</p>
<li><p>The <code>Makefile</code>, <code>remarks.md</code>,<code>.info.json</code>, and <code>.auth.json</code> <strong>MUST</strong> <p><span style="font-size:28px;"><b>|</b></span>  
* The <code>Makefile</code>, <code>remarks.md</code>,<code>.info.json</code>, and <code>.auth.json</code> <strong>MUST</strong>
have a file size <strong>greater than 0</strong> and <strong>MUST</strong> have content. Note that have a file size <strong>greater than 0</strong> and <strong>MUST</strong> have content. Note that
<code>mkiocccentry(1)</code> will check for file <strong>size</strong> but will <strong>NOT</strong> check for <code>mkiocccentry(1)</code> will check for file <strong>size</strong> but will <strong>NOT</strong> check for
content.</p></li> content.</p>
<li><p>Your submitted source code <strong>MUST</strong> be called <code>prog.c</code>. When the <code>Makefile</code> <p><span style="font-size:28px;"><b>|</b></span>  
* Your submitted source code <strong>MUST</strong> be called <code>prog.c</code>. When the <code>Makefile</code>
compiles your code, the executable (if applicable) <strong>MUST</strong> be called <code>prog</code>. compiles your code, the executable (if applicable) <strong>MUST</strong> be called <code>prog</code>.
The <code>Makefile</code> may compile your source code into other filenames as well, if you The <code>Makefile</code> may compile your source code into other filenames as well, if you want.</p>
want.</p></li> <p><span style="font-size:28px;"><b>|</b></span>  
<li><p>As <code>prog</code>, <code>prog.alt</code>, <code>prog.alt.o</code>, <code>prog.o</code> may be created by your * As <code>prog</code>, <code>prog.alt</code>, <code>prog.alt.o</code>, <code>prog.o</code> may be created by your
<code>Makefile</code>, your submission <strong>MUST NOT</strong> include those files in your <strong>top</strong> <code>Makefile</code>, your submission <strong>MUST NOT</strong> include those files in your <strong>top</strong> directory.</p>
directory.</p></li> <p><span style="font-size:28px;"><b>|</b></span>  
<li><p>Your submission may <strong>NOT</strong> have any file that starts with <code>COPYING</code>, * Your submission may <strong>NOT</strong> have any file that starts with <code>COPYING</code>,
<code>COPYRIGHT</code>, or <code>LICENSE</code> as those files are reserved by IOCCC.</p></li> <code>COPYRIGHT</code>, or <code>LICENSE</code> as those files are reserved by IOCCC.</p>
<li><p>Your submission may <strong>NOT</strong> have in the <strong>top</strong> directory: <code>prog.orig.c</code>, <p><span style="font-size:28px;"><b>|</b></span>  
<code>README.md</code> or <code>index.html</code> as those files are reserved by the IOCCC.</p></li> * Your submission may <strong>NOT</strong> have in the <strong>top</strong> directory: <code>prog.orig.c</code>,
<li><p>Your submission may <strong>NOT</strong> have in the <strong>top</strong> directory any file <code>README.md</code> or <code>index.html</code> as those files are reserved by the IOCCC.</p>
<p><span style="font-size:28px;"><b>|</b></span>  
* Your submission may <strong>NOT</strong> have in the <strong>top</strong> directory any file
that matches a file glob pattern form <code>[0-9][0-9][0-9][0-9]_*.tar.bz2</code> that matches a file glob pattern form <code>[0-9][0-9][0-9][0-9]_*.tar.bz2</code>
as those files are reserved by IOCCC.</p></li> as those files are reserved by IOCCC.</p>
<li><p>Your submission may <strong>ONLY</strong> contain files and directories. Other file <p><span style="font-size:28px;"><b>|</b></span>  
types such as symlinks, sockets etc. are <strong>NOT</strong> allowed.</p></li> * Your submission may <strong>ONLY</strong> contain files and directories. Other file
<li><p><strong>All</strong> directories <strong>MUST</strong> have permission mode of <strong>0755</strong>. All files types such as symlinks, sockets etc. are <strong>NOT</strong> allowed.</p>
<p><span style="font-size:28px;"><b>|</b></span>  
* <strong>All</strong> directories <strong>MUST</strong> have permission mode of <strong>0755</strong>. All files
<strong>MUST</strong> have the file mode of <strong>0444</strong>, EXCEPT for files that <strong>MUST</strong> have the file mode of <strong>0444</strong>, EXCEPT for files that
end in <code>.sh</code> which must have a mode of <strong>0555</strong>.</p></li> end in <code>.sh</code> which must have a mode of <strong>0555</strong>.</p>
<li><p>All files that end in <code>.md</code> <strong>MUST</strong> be in markdown format. <p><span style="font-size:28px;"><b>|</b></span>  
We recommend that markdown files observe our * All files that end in <code>.md</code> <strong>MUST</strong> be in markdown format.</p>
<a href="../markdown.html">IOCCC markdown guidelines</a>.</p></li> <p><span style="font-size:28px;"><b>|</b></span>  
<li><p>All filenames are treated as case insensitive. For example, <code>REMARKS.MD</code>, * All filenames are treated as case insensitive. For example, <code>REMARKS.MD</code>,
and <code>Remarks.md</code>, and <code>remarks.md</code> are considered by <code>mkiocccenty(1)</code> and <code>Remarks.md</code>, and <code>remarks.md</code> are considered by <code>mkiocccenty(1)</code>
to be the <strong>SAME</strong> file. When preparing a submission on a case to be the <strong>SAME</strong> file. When preparing a submission on a case
sensitive filesystem, ensure that the submission will work on sensitive filesystem, ensure that the submission will work on
a case insensitive filesystem.</p></li> a case insensitive filesystem.</p>
</ul> <p class="leftbar">
<strong>NOTE</strong>: by ‘top directory’ we mean the directory with <code>prog.c</code>, <code>Makefile</code>,
<code>remarks.md</code> and the <code>mkiocccentry(1)</code> generated files <code>.auth.json</code> and
<code>.info.json</code> and <strong>NOT</strong> the <code>topdir</code> arg to <code>mkiocccentry(1)</code>.
</p>
<p class="leftbar">
<strong>NOTE</strong>: <code>mkiocccentry(1)</code> will reject any directory which has prohibited files.
</p>
<p>The <code>remarks.md</code> and <code>Makefile</code> are explained in more detail in the Guidelines.</p> <p>The <code>remarks.md</code> and <code>Makefile</code> are explained in more detail in the Guidelines.</p>
<p>See <a href="../markdown.html">IOCCC markdown guidelines</a>.</p> <p>See <a href="../markdown.html">IOCCC markdown guidelines</a>.</p>
<p>See <a href="rules.html#rule17-mkiocccentry">Rule 17 - Use mkiocccentry</a>.</p> <p>See <a href="rules.html#rule17-mkiocccentry">Rule 17 - Use mkiocccentry</a>.</p>
@@ -635,8 +665,10 @@ directories and as long as the directory name or filename does <strong>NOT</stro
with a <code>.</code> (dot)).</p> with a <code>.</code> (dot)).</p>
<p>The <code>Makefile</code> <code>clobber</code> target <strong>MUST</strong> restore your submission to its <p>The <code>Makefile</code> <code>clobber</code> target <strong>MUST</strong> restore your submission to its
original form, including the removal of any created files and directories.</p> original form, including the removal of any created files and directories.</p>
<p>Your code should be able to run under a <p class="leftbar">
<a href="https://pubs.opengroup.org/onlinepubs/9799919799/">SUS environment</a>.</p> Your code should be able to run under a
<a href="https://pubs.opengroup.org/onlinepubs/9799919799/">SUS environment</a>.
</p>
<div id="rule6"> <div id="rule6">
<div id="rule6-free-rule"> <div id="rule6-free-rule">
<h2 id="rule-6---free-rule">Rule 6 - Free Rule</h2> <h2 id="rule-6---free-rule">Rule 6 - Free Rule</h2>
@@ -652,12 +684,16 @@ original form, including the removal of any created files and directories.</p>
<h2 id="rule-7---original-work">Rule 7 - Original Work</h2> <h2 id="rule-7---original-work">Rule 7 - Original Work</h2>
</div> </div>
</div> </div>
<p>You, the author(s), <strong>MUST</strong> own the contents of your submission, <strong>OR</strong>, IF you <p class="leftbar">
You, the author(s), <strong>MUST</strong> own the contents of your submission, <strong>OR</strong>, IF you
do <strong>NOT</strong> own the work, then you <strong>MUST</strong> have permission from the original do <strong>NOT</strong> own the work, then you <strong>MUST</strong> have permission from the original
owner(s) to its use. If you submit <strong>ANY</strong> content that is owned by others, you owner(s) to its use. If you submit <strong>ANY</strong> content that is owned by others, you
<strong>MUST</strong> detail that ownership, i.e., who owns what, and document the permission <strong>MUST</strong> detail that ownership, i.e., who owns what, and document the permission
you obtained from them in your <code>remarks.md</code> file.</p> you obtained from them in your <code>remarks.md</code> file.
<p>You are permitted to use tools to write your code.</p> </p>
<p class="leftbar">
You are permitted to use tools to write your code.
</p>
<p>See <a href="rules.html#rule16-anonymous-judging">Rule 16 - Anonymous Judging</a>, <p>See <a href="rules.html#rule16-anonymous-judging">Rule 16 - Anonymous Judging</a>,
and and
<a href="guidelines.html#guideline-7---original-work">Guidelines for Rule 7 - Original Work</a>.</p> <a href="guidelines.html#guideline-7---original-work">Guidelines for Rule 7 - Original Work</a>.</p>
@@ -670,13 +706,15 @@ and
registered and <strong>ONLY</strong> while the contest is open.</p> registered and <strong>ONLY</strong> while the contest is open.</p>
<p>The submit server places a total size limit of <strong>3999971</strong> bytes <strong>PER</strong> <p>The submit server places a total size limit of <strong>3999971</strong> bytes <strong>PER</strong>
submission.</p> submission.</p>
<p>Each account has ten (<strong>10.000</strong>) submission slots (<strong>0..9)</strong>. Each submission <p class="leftbar">
Each account has ten (<strong>10.000</strong>) submission slots (<strong>0..9)</strong>. Each submission
slot should be annotated by the server as to whether its was received, slot should be annotated by the server as to whether its was received,
processed, malformed, etc. Please take note of any errors, rectify, processed, malformed, etc. Please take note of any errors, rectify,
and resubmit. In order to avoid potential packaging errors, it is <strong>highly and resubmit. In order to avoid potential packaging errors, it is <strong>highly
recommended</strong> to use <code>mkiocccentry(1)</code>, <strong>AND</strong> to check from time to time the recommended</strong> to use <code>mkiocccentry(1)</code>, <strong>AND</strong> to check from time to time the
status on the submit server, to see if any tests run by the server failed to status on the submit server, to see if any tests run by the server failed to
validate your submission.</p> validate your submission.
</p>
<p>See <p>See
<a href="rules.html#rule3-register">Rule 3 - Registering for the IOCCC</a>, <a href="rules.html#rule3-register">Rule 3 - Registering for the IOCCC</a>,
<a href="rules.html#rule15-gnu-makefile">Rule 15 - GNU Makefile</a>, <a href="rules.html#rule15-gnu-makefile">Rule 15 - GNU Makefile</a>,
@@ -772,27 +810,32 @@ win, then you are encouraged to mention this in your <code>remarks.md</code> fil
<h2 id="rule-15---gnu-makefile">Rule 15 - GNU Makefile</h2> <h2 id="rule-15---gnu-makefile">Rule 15 - GNU Makefile</h2>
</div> </div>
</div> </div>
<p>The <code>Makefile</code> <strong>MUST</strong> adhere to GNU Makefile syntax. It’s highly recommended <p class="leftbar">
The <code>Makefile</code> <strong>MUST</strong> adhere to GNU Makefile syntax. It’s highly recommended
that you copy the <a href="Makefile.example">Makefile.example</a> as a template, renaming that you copy the <a href="Makefile.example">Makefile.example</a> as a template, renaming
it to <code>Makefile</code>. The primary target of the <code>Makefile</code> <strong>MUST</strong> be <code>prog</code> and it to <code>Makefile</code>. The primary target of the <code>Makefile</code> <strong>MUST</strong> be <code>prog</code> and
the source file is <code>prog.c</code>. The C compiler and preprocessor <strong>MUST</strong> be the source file is <code>prog.c</code>. The C compiler and preprocessor <strong>MUST</strong> be
invoked using <code>${CC}</code> and <code>${CPP}</code> macros respectively.</p> invoked using <code>${CC}</code> and <code>${CPP}</code> macros respectively.
</p>
<p>The <code>clobber</code> target <strong>MUST</strong> clean and restore the submission directory tree to <p>The <code>clobber</code> target <strong>MUST</strong> clean and restore the submission directory tree to
its original state, such as removing temporary files or any modified data files. its original state, such as removing temporary files or any modified data files.
Don’t assume that <code>git</code> tool chain is installed, i.e. do <strong>NOT</strong> expect <code>git clean -f</code> to work. To be clear: do <strong>NOT</strong> use <code>git</code> to clean out files as this Don’t assume that <code>git</code> tool chain is installed, i.e. do <strong>NOT</strong> expect <code>git clean -f</code> to work. To be clear: do <strong>NOT</strong> use <code>git</code> to clean out files as this
can cause problems in the winner repo!</p> can cause problems in the winner repo!</p>
<p>The <code>Makefile</code> <strong>MUST</strong> use a syntax that is compatible with <p class="leftbar">
The <code>Makefile</code> <strong>MUST</strong> use a syntax that is compatible with
<code>bash(1)</code> and GNU <code>make(1)</code>. You are encouraged to use <code>SHELL= bash</code> in your <code>Makefile</code>; please add a space between the <code>=</code> and <code>bash(1)</code> and GNU <code>make(1)</code>. You are encouraged to use <code>SHELL= bash</code> in your <code>Makefile</code>; please add a space between the <code>=</code> and
the value such as:</p> the value such as:
</p>
<pre><code> SHELL= bash</code></pre> <pre><code> SHELL= bash</code></pre>
<p>Assume that commands commonly found in <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX <p class="leftbar">
Assume that commands commonly found in <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX
Specification</a> Specification</a>
environments and systems are available in the search environments and systems are available in the search
<code>$PATH</code>. Avoid command options that aren’t part of <code>$PATH</code>. Avoid command options that aren’t part of
<a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">SUS</a>, such as <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">SUS</a>, such as
GNU long name options (such as <code>--example</code>) or extensions like <code>grep -P</code>.</p> GNU long name options (such as <code>--example</code>) or extensions like <code>grep -P</code>.
<p>Do <strong>NOT</strong> assume that <code>.</code> (current directory) is in the <code>$PATH</code> environment </p>
variable.</p> <p>Do <strong>NOT</strong> assume that <code>.</code> (current directory) is in the <code>$PATH</code> environment variable.</p>
<p>See <a href="rules.html#rule4-required-files">Rule 4 - Required files</a>.</p> <p>See <a href="rules.html#rule4-required-files">Rule 4 - Required files</a>.</p>
<p>See <p>See
FAQ on “<a href="../faq.html#makefile_details">What are the detailed recommendations for a submission Makefile?</a>”.</p> FAQ on “<a href="../faq.html#makefile_details">What are the detailed recommendations for a submission Makefile?</a>”.</p>
@@ -820,37 +863,55 @@ may result in the submission being disqualified</em></strong>.</p>
<p>The files, directories, and paths <strong>MUST</strong> conform to the limits imposed by <p>The files, directories, and paths <strong>MUST</strong> conform to the limits imposed by
<code>mkiocccentry(1)</code>, including but <strong>NOT</strong> limited, to their names, count, path <code>mkiocccentry(1)</code>, including but <strong>NOT</strong> limited, to their names, count, path
length, directory tree depth, and permissions.</p> length, directory tree depth, and permissions.</p>
<p>The submission tree may have at most <strong>13</strong> directories and maximum <p class="leftbar">
The submission tree may have at most <strong>13</strong> directories and maximum
directory depths of <strong>4</strong>. The maximum number of files, excluding directory depths of <strong>4</strong>. The maximum number of files, excluding
<code>prog.c</code>, <code>remarks.md</code>, <code>Makefile</code>, <code>prog.alt.c</code>, <code>try.sh</code>, <code>try.alt.sh</code>, <code>prog.c</code>, <code>remarks.md</code>, <code>Makefile</code>, <code>prog.alt.c</code>, <code>try.sh</code>, <code>try.alt.sh</code>,
<code>.info.json</code> and <code>.auth.json</code> is <strong>31</strong>. And the maximum file-path <code>.info.json</code> and <code>.auth.json</code> is <strong>31</strong>. And the maximum file-path
component is <strong>38</strong> and maximum path length is <strong>60</strong>.</p> component is <strong>38</strong> and maximum path length is <strong>60</strong>.
</p>
<p>The submission <strong>MUST</strong> be a <code>.txz</code> compressed tarball (i.e., tarball compressed by <code>xz(1)</code>) <p>The submission <strong>MUST</strong> be a <code>.txz</code> compressed tarball (i.e., tarball compressed by <code>xz(1)</code>)
as constructed by <code>mkiocccentry(1)</code>, which <strong>MUST</strong> be within <strong>[1..3999971]</strong> bytes in size.</p> as constructed by <code>mkiocccentry(1)</code>, which <strong>MUST</strong> be within <strong>[1..3999971]</strong> bytes in size.</p>
<p>The tarball <strong>MUST</strong> be a <strong>v7 format</strong> tarball, and any supplementary tarballs <p>The tarball <strong>MUST</strong> be a <strong>v7 format</strong> tarball, and any supplementary tarballs
you provide <strong>MUST</strong> also be <strong>v7 format</strong>.</p> you provide <strong>MUST</strong> also be <strong>v7 format</strong>.</p>
<p>The sum of all file lengths, after unpacking from the tarball, <strong>MUST</strong> be <p>The sum of all file lengths, after unpacking from the tarball, <strong>MUST</strong> be
less than <code>27651*1024</code> (<strong>28314624</strong>) bytes.</p> less than <code>27651*1024</code> (<strong>28314624</strong>) bytes.</p>
<p>The submission <strong>MUST</strong> pass all <code>txzchk(1)</code> checks, and the tarball filename <p class="leftbar">
<strong>MUST</strong> pass all <code>fnamchk(1)</code> checks as well.</p> The submission <strong>MUST</strong> pass all <code>txzchk(1)</code> checks, and the tarball filename
<p>You may <strong>NOT</strong> submit a tarball created by the <code>-d</code>, <code>-e</code> <strong>OR</strong> by the <code>-s seed</code> options of <code>mkiocccentry(1)</code>.</p> <strong>MUST</strong> pass all <code>fnamchk(1)</code> checks as well.
<p>The unpacked submission directory <strong>MUST</strong> pass the checks performed by the </p>
minimum required version of <code>chksubmit(1)</code>.</p> <p class="leftbar">
<p>Submissions may <strong>NOT</strong> use a <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry You may <strong>NOT</strong> submit a tarball created by the <code>-d</code>, <code>-e</code> <strong>OR</strong> by the <code>-s seed</code> options of <code>mkiocccentry(1)</code>.
</p>
<p class="leftbar">
The unpacked submission directory <strong>MUST</strong> pass the checks performed by the
minimum required version of <code>chksubmit(1)</code>.
</p>
<p class="leftbar">
Submissions may <strong>NOT</strong> use a <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
toolkit</a> command line options that toolkit</a> command line options that
are labelled as “<strong>for TESTING purposes</strong>”, <strong>OR</strong> labelled as “<strong>for the use by are labelled as “<strong>for TESTING purposes</strong>”, <strong>OR</strong> labelled as “<strong>for the use by
the IOCCC judges only</strong>”, in their respective man pages.</p> the IOCCC judges only</strong>”, in their respective man pages.
<p>Submissions may <strong>ONLY</strong> use <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry </p>
<p class="leftbar">
Submissions may <strong>ONLY</strong> use <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
toolkit</a> command lines that confirm toolkit</a> command lines that confirm
to the command’s <code>-h</code> “<em>print help message</em>”, again notwithstanding the options to the command’s <code>-h</code> “<em>print help message</em>”, again notwithstanding the options
for testing and the IOCCC judges.</p> for testing and the IOCCC judges.
<p>The <code>prog.c</code> file <strong>MUST</strong> pass the <a href="rules.html#rule2-size">Rule 2 - Size</a> </p>
checks performed by <code>iocccsize(1)</code>.</p> <p class="leftbar">
<p>The <code>.auth.json</code> and <code>.info.json</code> files <strong>MUST</strong> be compatible with what The <code>prog.c</code> file should pass the <a href="rules.html#rule2-size">Rule 2 - Size</a>
<code>mkiocccentry(1)</code> generates.</p> checks performed by <code>iocccsize(1)</code>.
<p>Any submission that fails to pass the checks performed by the minimum required </p>
<p class="leftbar">
The <code>.auth.json</code> and <code>.info.json</code> files <strong>MUST</strong> be compatible with what
<code>mkiocccentry(1)</code> generates.
</p>
<p class="leftbar">
Any submission that fails to pass the checks performed by the minimum required
version of the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a> version of the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>
<strong>WILL be rejected</strong>!</p> <strong>WILL be rejected</strong>!
</p>
<p>See <a href="rules.html#rule4-required-files">Rule 4 - Required files</a>.</p> <p>See <a href="rules.html#rule4-required-files">Rule 4 - Required files</a>.</p>
<p>See the <p>See the
FAQ on “<a href="../faq.html#mkiocccentry">What is the mkiocccentry tool, how do I obtain it and how do I use it?</a>”.</p> FAQ on “<a href="../faq.html#mkiocccentry">What is the mkiocccentry tool, how do I obtain it and how do I use it?</a>”.</p>
@@ -864,9 +925,11 @@ FAQ on “<a href="../faq.html#mkiocccentry">What is the mkiocccentry tool, how
<div id="rule19"> <div id="rule19">
<h2 id="rule-19---prime">Rule 19 - Prime</h2> <h2 id="rule-19---prime">Rule 19 - Prime</h2>
</div> </div>
<p>This 19th rule, while prime, is reserved for future abuse 😁. <p class="leftbar">
This 19th rule, while prime, is reserved for future abuse 😁.
Additional rules, both humorous and otherwise, may be added Additional rules, both humorous and otherwise, may be added
below this rule in future contests.</p> below this rule in future contests.
</p>
<p>See <a href="rules.html#rule6-free-rule">Rule 6 - Free Rule</a>.</p> <p>See <a href="rules.html#rule6-free-rule">Rule 6 - Free Rule</a>.</p>
<h2 id="further-reading">Further Reading</h2> <h2 id="further-reading">Further Reading</h2>
<p>Please read the <a href="guidelines.html">Guidelines</a> next for further commentary on these rules.</p> <p>Please read the <a href="guidelines.html">Guidelines</a> next for further commentary on these rules.</p>
+86 -19
View File
@@ -39,7 +39,15 @@ writing by [contacting the judges](../contact.html).
## Rules Version ## Rules Version
These IOCCC Rules are version **29.11 2025-11-30**. These IOCCC Rules are version **29.12 2025-12-01**.
<p class="leftbar">
The <span style='font-size:28px;'><b>&verbar;</b></span> symbol indicates an **change** from the previous IOCCC.
</p>
<p class="leftbar">
Because the **IOCCC29** rules was a substantial rewrite, only **important changes** from **IOCCC28** have been marked.
</p>
Reminder: be SURE to read the [IOCCC guidelines](guidelines.html). Reminder: be SURE to read the [IOCCC guidelines](guidelines.html).
@@ -48,20 +56,30 @@ Reminder: be SURE to read the [IOCCC guidelines](guidelines.html).
## Rule 0 - Dates ## Rule 0 - Dates
</div> </div>
<p class="leftbar">
This IOCCC runs from `2025-12-03 20:25:12.045045 UTC` to `2026-03-13 17:19:23.293137 UTC`. This IOCCC runs from `2025-12-03 20:25:12.045045 UTC` to `2026-03-13 17:19:23.293137 UTC`.
</p>
<p class="leftbar">
This contest will enter the [pending state](../faq.html#pending) on `2025-12-03 20:25:12.045045 UTC`, This contest will enter the [pending state](../faq.html#pending) on `2025-12-03 20:25:12.045045 UTC`,
allowing people to [register for the IOCCC](register.html). allowing people to [register for the IOCCC](register.html).
</p>
<p class="leftbar">
This contest will enter the [open state](../faq.html#open) on `2025-12-15 18:21:24.273033 UTC`, This contest will enter the [open state](../faq.html#open) on `2025-12-15 18:21:24.273033 UTC`,
allowing people to [upload submissions](submit.html). allowing people to [upload submissions](submit.html).
</p>
<p class="leftbar">
This contest will enter the [judging state](../faq.html#judging) on `2026-03-13 17:19:23.293137 UTC`, This contest will enter the [judging state](../faq.html#judging) on `2026-03-13 17:19:23.293137 UTC`,
when people will no longer be allowed to upload submissions. when people will no longer be allowed to upload submissions.
</p>
The above **dates and times may change _AT ANY TIME_** until the [contest status](../status.html) is **open**. The above **dates and times may change _AT ANY TIME_** until the [contest status](../status.html) is **open**.
<p class="leftbar">
The above timestamps are in "_YYYY-MM-DD HH:MM:SS.micros UTC_" format. The above timestamps are in "_YYYY-MM-DD HH:MM:SS.micros UTC_" format.
</p>
See [Entering the IOCCC: the bare minimum you need to know](../quick-start.html#enter). See [Entering the IOCCC: the bare minimum you need to know](../quick-start.html#enter).
@@ -75,7 +93,9 @@ FAQ on "[How can I comment or make a suggestion on IOCCC rules, guidelines and t
</div> </div>
</div> </div>
<p class="leftbar">
Your submission **MUST** be a C program. Your submission **MUST** be a C program.
</p>
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#guidelines-for-rule-1---c-program).
@@ -159,70 +179,83 @@ See [Guidelines for Rule 3 - Register for the IOCCC](guidelines.html#guideline-3
</div> </div>
</div> </div>
<p class="leftbar">
Your submission **MUST** include at least these files: `Makefile`, `prog.c`, Your submission **MUST** include at least these files: `Makefile`, `prog.c`,
`remarks.md`,`.info.json`, and `.auth.json`, the latter two of which are `remarks.md`,`.info.json`, and `.auth.json`, the latter two of which are
generated by `mkiocccentry(1)`. See [Rule 17 - generated by `mkiocccentry(1)`. See [Rule 17 -
Use mkiocccentry](#rule17-mkiocccentry). Use mkiocccentry](#rule17-mkiocccentry).
</p>
<p class="leftbar">
At a **minimum** the following requirements apply. Additional requirements At a **minimum** the following requirements apply. Additional requirements
may be imposed by `mkiocccentry(1)` updates that have yet to be listed may be imposed by `mkiocccentry(1)` updates that have yet to be listed
below. below:
</p>
**NOTE**: `mkiocccentry(1)` will reject any directory which has prohibited
files.
**NOTE**: by 'top directory' we mean the directory with `prog.c`, `Makefile`,
`remarks.md` and the `mkiocccentry(1)` generated files `.auth.json` and
`.info.json` and **NOT** the `topdir` arg to `mkiocccentry(1)`.
<span style='font-size:28px;'><b>&verbar;</b></span>&nbsp;&nbsp;
* `.info.json` and `.auth.json` **MUST** be generated by `mkiocccenty(1)` * `.info.json` and `.auth.json` **MUST** be generated by `mkiocccenty(1)`
when packing a submission. When `chksubmit(1)` is run on the submission when packing a submission. When `chksubmit(1)` is run on the submission
directory **ALL** tests must pass and if there is **ANY** problem with these directory **ALL** tests must pass and if there is **ANY** problem with these
JSON files or if either is missing it will fail. See [Rule 17 - use JSON files or if either is missing it will fail. See [Rule 17 - use
mkiocccentry](#rule17-mkiocccentry). mkiocccentry](#rule17-mkiocccentry).
<span style='font-size:28px;'><b>&verbar;</b></span>&nbsp;&nbsp;
* The `Makefile`, `remarks.md`,`.info.json`, and `.auth.json` **MUST** * The `Makefile`, `remarks.md`,`.info.json`, and `.auth.json` **MUST**
have a file size **greater than 0** and **MUST** have content. Note that have a file size **greater than 0** and **MUST** have content. Note that
`mkiocccentry(1)` will check for file **size** but will **NOT** check for `mkiocccentry(1)` will check for file **size** but will **NOT** check for
content. content.
<span style='font-size:28px;'><b>&verbar;</b></span>&nbsp;&nbsp;
* Your submitted source code **MUST** be called `prog.c`. When the `Makefile` * Your submitted source code **MUST** be called `prog.c`. When the `Makefile`
compiles your code, the executable (if applicable) **MUST** be called `prog`. compiles your code, the executable (if applicable) **MUST** be called `prog`.
The `Makefile` may compile your source code into other filenames as well, if you The `Makefile` may compile your source code into other filenames as well, if you want.
want.
<span style='font-size:28px;'><b>&verbar;</b></span>&nbsp;&nbsp;
* As `prog`, `prog.alt`, `prog.alt.o`, `prog.o` may be created by your * As `prog`, `prog.alt`, `prog.alt.o`, `prog.o` may be created by your
`Makefile`, your submission **MUST NOT** include those files in your **top** `Makefile`, your submission **MUST NOT** include those files in your **top** directory.
directory.
<span style='font-size:28px;'><b>&verbar;</b></span>&nbsp;&nbsp;
* Your submission may **NOT** have any file that starts with `COPYING`, * Your submission may **NOT** have any file that starts with `COPYING`,
`COPYRIGHT`, or `LICENSE` as those files are reserved by IOCCC. `COPYRIGHT`, or `LICENSE` as those files are reserved by IOCCC.
<span style='font-size:28px;'><b>&verbar;</b></span>&nbsp;&nbsp;
* Your submission may **NOT** have in the **top** directory: `prog.orig.c`, * Your submission may **NOT** have in the **top** directory: `prog.orig.c`,
`README.md` or `index.html` as those files are reserved by the IOCCC. `README.md` or `index.html` as those files are reserved by the IOCCC.
<span style='font-size:28px;'><b>&verbar;</b></span>&nbsp;&nbsp;
* Your submission may **NOT** have in the **top** directory any file * Your submission may **NOT** have in the **top** directory any file
that matches a file glob pattern form `[0-9][0-9][0-9][0-9]_*.tar.bz2` that matches a file glob pattern form `[0-9][0-9][0-9][0-9]_*.tar.bz2`
as those files are reserved by IOCCC. as those files are reserved by IOCCC.
<span style='font-size:28px;'><b>&verbar;</b></span>&nbsp;&nbsp;
* Your submission may **ONLY** contain files and directories. Other file * Your submission may **ONLY** contain files and directories. Other file
types such as symlinks, sockets etc. are **NOT** allowed. types such as symlinks, sockets etc. are **NOT** allowed.
<span style='font-size:28px;'><b>&verbar;</b></span>&nbsp;&nbsp;
* **All** directories **MUST** have permission mode of **0755**. All files * **All** directories **MUST** have permission mode of **0755**. All files
**MUST** have the file mode of **0444**, EXCEPT for files that **MUST** have the file mode of **0444**, EXCEPT for files that
end in `.sh` which must have a mode of **0555**. end in `.sh` which must have a mode of **0555**.
<span style='font-size:28px;'><b>&verbar;</b></span>&nbsp;&nbsp;
* All files that end in `.md` **MUST** be in markdown format. * All files that end in `.md` **MUST** be in markdown format.
We recommend that markdown files observe our
[IOCCC markdown guidelines](../markdown.html).
<span style='font-size:28px;'><b>&verbar;</b></span>&nbsp;&nbsp;
* All filenames are treated as case insensitive. For example, `REMARKS.MD`, * All filenames are treated as case insensitive. For example, `REMARKS.MD`,
and `Remarks.md`, and `remarks.md` are considered by `mkiocccenty(1)` and `Remarks.md`, and `remarks.md` are considered by `mkiocccenty(1)`
to be the **SAME** file. When preparing a submission on a case to be the **SAME** file. When preparing a submission on a case
sensitive filesystem, ensure that the submission will work on sensitive filesystem, ensure that the submission will work on
a case insensitive filesystem. a case insensitive filesystem.
<p class="leftbar">
**NOTE**: by 'top directory' we mean the directory with `prog.c`, `Makefile`,
`remarks.md` and the `mkiocccentry(1)` generated files `.auth.json` and
`.info.json` and **NOT** the `topdir` arg to `mkiocccentry(1)`.
</p>
<p class="leftbar">
**NOTE**: `mkiocccentry(1)` will reject any directory which has prohibited files.
</p>
The `remarks.md` and `Makefile` are explained in more detail in the Guidelines. The `remarks.md` and `Makefile` are explained in more detail in the Guidelines.
See [IOCCC markdown guidelines](../markdown.html). See [IOCCC markdown guidelines](../markdown.html).
@@ -259,8 +292,10 @@ with a `.` (dot)).
The `Makefile` `clobber` target **MUST** restore your submission to its The `Makefile` `clobber` target **MUST** restore your submission to its
original form, including the removal of any created files and directories. original form, including the removal of any created files and directories.
<p class="leftbar">
Your code should be able to run under a Your code should be able to run under a
[SUS environment](https://pubs.opengroup.org/onlinepubs/9799919799/). [SUS environment](https://pubs.opengroup.org/onlinepubs/9799919799/).
</p>
<div id="rule6"> <div id="rule6">
@@ -285,13 +320,17 @@ See [Rule 19 - Prime](rules.html#rule-19---prime).
</div> </div>
</div> </div>
<p class="leftbar">
You, the author(s), **MUST** own the contents of your submission, **OR**, IF you You, the author(s), **MUST** own the contents of your submission, **OR**, IF you
do **NOT** own the work, then you **MUST** have permission from the original do **NOT** own the work, then you **MUST** have permission from the original
owner(s) to its use. If you submit **ANY** content that is owned by others, you owner(s) to its use. If you submit **ANY** content that is owned by others, you
**MUST** detail that ownership, i.e., who owns what, and document the permission **MUST** detail that ownership, i.e., who owns what, and document the permission
you obtained from them in your `remarks.md` file. you obtained from them in your `remarks.md` file.
</p>
<p class="leftbar">
You are permitted to use tools to write your code. You are permitted to use tools to write your code.
</p>
See [Rule 16 - Anonymous Judging](rules.html#rule16-anonymous-judging), See [Rule 16 - Anonymous Judging](rules.html#rule16-anonymous-judging),
and and
@@ -310,6 +349,7 @@ registered and **ONLY** while the contest is open.
The submit server places a total size limit of **3999971** bytes **PER** The submit server places a total size limit of **3999971** bytes **PER**
submission. submission.
<p class="leftbar">
Each account has ten (**10.000**) submission slots (**0..9)**. Each submission Each account has ten (**10.000**) submission slots (**0..9)**. Each submission
slot should be annotated by the server as to whether its was received, slot should be annotated by the server as to whether its was received,
processed, malformed, etc. Please take note of any errors, rectify, processed, malformed, etc. Please take note of any errors, rectify,
@@ -317,6 +357,7 @@ and resubmit. In order to avoid potential packaging errors, it is **highly
recommended** to use `mkiocccentry(1)`, **AND** to check from time to time the recommended** to use `mkiocccentry(1)`, **AND** to check from time to time the
status on the submit server, to see if any tests run by the server failed to status on the submit server, to see if any tests run by the server failed to
validate your submission. validate your submission.
</p>
See See
[Rule 3 - Registering for the IOCCC](rules.html#rule3-register), [Rule 3 - Registering for the IOCCC](rules.html#rule3-register),
@@ -446,11 +487,13 @@ win, then you are encouraged to mention this in your `remarks.md` file as this
</div> </div>
</div> </div>
<p class="leftbar">
The `Makefile` **MUST** adhere to GNU Makefile syntax. It's highly recommended The `Makefile` **MUST** adhere to GNU Makefile syntax. It's highly recommended
that you copy the [Makefile.example](Makefile.example) as a template, renaming that you copy the [Makefile.example](Makefile.example) as a template, renaming
it to `Makefile`. The primary target of the `Makefile` **MUST** be `prog` and it to `Makefile`. The primary target of the `Makefile` **MUST** be `prog` and
the source file is `prog.c`. The C compiler and preprocessor **MUST** be the source file is `prog.c`. The C compiler and preprocessor **MUST** be
invoked using `${CC}` and `${CPP}` macros respectively. invoked using `${CC}` and `${CPP}` macros respectively.
</p>
The `clobber` target **MUST** clean and restore the submission directory tree to The `clobber` target **MUST** clean and restore the submission directory tree to
its original state, such as removing temporary files or any modified data files. its original state, such as removing temporary files or any modified data files.
@@ -458,23 +501,27 @@ Don't assume that `git` tool chain is installed, i.e. do **NOT** expect `git
clean -f` to work. To be clear: do **NOT** use `git` to clean out files as this clean -f` to work. To be clear: do **NOT** use `git` to clean out files as this
can cause problems in the winner repo! can cause problems in the winner repo!
<p class="leftbar">
The `Makefile` **MUST** use a syntax that is compatible with The `Makefile` **MUST** use a syntax that is compatible with
`bash(1)` and GNU `make(1)`. You are encouraged to use `SHELL= `bash(1)` and GNU `make(1)`. You are encouraged to use `SHELL=
bash` in your `Makefile`; please add a space between the `=` and bash` in your `Makefile`; please add a space between the `=` and
the value such as: the value such as:
</p>
``` <!---makefile--> ``` <!---makefile-->
SHELL= bash SHELL= bash
``` ```
<p class="leftbar">
Assume that commands commonly found in [Single UNIX Assume that commands commonly found in [Single UNIX
Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification)
environments and systems are available in the search environments and systems are available in the search
`$PATH`. Avoid command options that aren't part of `$PATH`. Avoid command options that aren't part of
[SUS](https://en.wikipedia.org/wiki/Single_UNIX_Specification), such as [SUS](https://en.wikipedia.org/wiki/Single_UNIX_Specification), such as
GNU long name options (such as `--example`) or extensions like `grep -P`. GNU long name options (such as `--example`) or extensions like `grep -P`.
</p>
Do **NOT** assume that `.` (current directory) is in the `$PATH` environment Do **NOT** assume that `.` (current directory) is in the `$PATH` environment variable.
variable.
See [Rule 4 - Required files](rules.html#rule4-required-files). See [Rule 4 - Required files](rules.html#rule4-required-files).
@@ -514,11 +561,13 @@ The files, directories, and paths **MUST** conform to the limits imposed by
`mkiocccentry(1)`, including but **NOT** limited, to their names, count, path `mkiocccentry(1)`, including but **NOT** limited, to their names, count, path
length, directory tree depth, and permissions. length, directory tree depth, and permissions.
<p class="leftbar">
The submission tree may have at most **13** directories and maximum The submission tree may have at most **13** directories and maximum
directory depths of **4**. The maximum number of files, excluding directory depths of **4**. The maximum number of files, excluding
`prog.c`, `remarks.md`, `Makefile`, `prog.alt.c`, `try.sh`, `try.alt.sh`, `prog.c`, `remarks.md`, `Makefile`, `prog.alt.c`, `try.sh`, `try.alt.sh`,
`.info.json` and `.auth.json` is **31**. And the maximum file-path `.info.json` and `.auth.json` is **31**. And the maximum file-path
component is **38** and maximum path length is **60**. component is **38** and maximum path length is **60**.
</p>
The submission **MUST** be a `.txz` compressed tarball (i.e., tarball compressed by `xz(1)`) The submission **MUST** be a `.txz` compressed tarball (i.e., tarball compressed by `xz(1)`)
as constructed by `mkiocccentry(1)`, which **MUST** be within **[1..3999971]** bytes in size. as constructed by `mkiocccentry(1)`, which **MUST** be within **[1..3999971]** bytes in size.
@@ -529,34 +578,50 @@ you provide **MUST** also be **v7 format**.
The sum of all file lengths, after unpacking from the tarball, **MUST** be The sum of all file lengths, after unpacking from the tarball, **MUST** be
less than `27651*1024` (**28314624**) bytes. less than `27651*1024` (**28314624**) bytes.
<p class="leftbar">
The submission **MUST** pass all `txzchk(1)` checks, and the tarball filename The submission **MUST** pass all `txzchk(1)` checks, and the tarball filename
**MUST** pass all `fnamchk(1)` checks as well. **MUST** pass all `fnamchk(1)` checks as well.
</p>
<p class="leftbar">
You may **NOT** submit a tarball created by the `-d`, `-e` **OR** by the `-s You may **NOT** submit a tarball created by the `-d`, `-e` **OR** by the `-s
seed` options of `mkiocccentry(1)`. seed` options of `mkiocccentry(1)`.
</p>
<p class="leftbar">
The unpacked submission directory **MUST** pass the checks performed by the The unpacked submission directory **MUST** pass the checks performed by the
minimum required version of `chksubmit(1)`. minimum required version of `chksubmit(1)`.
</p>
<p class="leftbar">
Submissions may **NOT** use a [mkiocccentry Submissions may **NOT** use a [mkiocccentry
toolkit](https://github.com/ioccc-src/mkiocccentry) command line options that toolkit](https://github.com/ioccc-src/mkiocccentry) command line options that
are labelled as "**for TESTING purposes**", **OR** labelled as "**for the use by are labelled as "**for TESTING purposes**", **OR** labelled as "**for the use by
the IOCCC judges only**", in their respective man pages. the IOCCC judges only**", in their respective man pages.
</p>
<p class="leftbar">
Submissions may **ONLY** use [mkiocccentry Submissions may **ONLY** use [mkiocccentry
toolkit](https://github.com/ioccc-src/mkiocccentry) command lines that confirm toolkit](https://github.com/ioccc-src/mkiocccentry) command lines that confirm
to the command's `-h` "_print help message_", again notwithstanding the options to the command's `-h` "_print help message_", again notwithstanding the options
for testing and the IOCCC judges. for testing and the IOCCC judges.
</p>
The `prog.c` file **MUST** pass the [Rule 2 - Size](rules.html#rule2-size) <p class="leftbar">
The `prog.c` file should pass the [Rule 2 - Size](rules.html#rule2-size)
checks performed by `iocccsize(1)`. checks performed by `iocccsize(1)`.
</p>
<p class="leftbar">
The `.auth.json` and `.info.json` files **MUST** be compatible with what The `.auth.json` and `.info.json` files **MUST** be compatible with what
`mkiocccentry(1)` generates. `mkiocccentry(1)` generates.
</p>
<p class="leftbar">
Any submission that fails to pass the checks performed by the minimum required Any submission that fails to pass the checks performed by the minimum required
version of the [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) version of the [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry)
**WILL be rejected**! **WILL be rejected**!
</p>
See [Rule 4 - Required files](rules.html#rule4-required-files). See [Rule 4 - Required files](rules.html#rule4-required-files).
@@ -581,9 +646,11 @@ See [Rule 7 - Original Work](rules.html#rule-7---original-work).
## Rule 19 - Prime ## Rule 19 - Prime
</div> </div>
<p class="leftbar">
This 19th rule, while prime, is reserved for future abuse 😁. This 19th rule, while prime, is reserved for future abuse 😁.
Additional rules, both humorous and otherwise, may be added Additional rules, both humorous and otherwise, may be added
below this rule in future contests. below this rule in future contests.
</p>
See [Rule 6 - Free Rule](rules.html#rule6-free-rule). See [Rule 6 - Free Rule](rules.html#rule6-free-rule).
+4 -4
View File
@@ -16826,11 +16826,11 @@
</url> </url>
<url> <url>
<loc>https://www.ioccc.org/next/guidelines.html</loc> <loc>https://www.ioccc.org/next/guidelines.html</loc>
<lastmod>2025-12-01T09:13:14+00:00</lastmod> <lastmod>2025-12-01T10:26:00+00:00</lastmod>
</url> </url>
<url> <url>
<loc>https://www.ioccc.org/next/guidelines.md</loc> <loc>https://www.ioccc.org/next/guidelines.md</loc>
<lastmod>2025-12-01T09:13:08+00:00</lastmod> <lastmod>2025-12-01T10:20:36+00:00</lastmod>
</url> </url>
<url> <url>
<loc>https://www.ioccc.org/next/index.html</loc> <loc>https://www.ioccc.org/next/index.html</loc>
@@ -16870,11 +16870,11 @@
</url> </url>
<url> <url>
<loc>https://www.ioccc.org/next/rules.html</loc> <loc>https://www.ioccc.org/next/rules.html</loc>
<lastmod>2025-12-01T09:04:25+00:00</lastmod> <lastmod>2025-12-01T10:26:00+00:00</lastmod>
</url> </url>
<url> <url>
<loc>https://www.ioccc.org/next/rules.md</loc> <loc>https://www.ioccc.org/next/rules.md</loc>
<lastmod>2025-12-01T09:06:35+00:00</lastmod> <lastmod>2025-12-01T10:21:01+00:00</lastmod>
</url> </url>
<url> <url>
<loc>https://www.ioccc.org/next/submit.html</loc> <loc>https://www.ioccc.org/next/submit.html</loc>