Merge pull request #247 from xexyl/fixes

This commit is contained in:
Landon Curt Noll authored and GitHub committed 2025-12-02 08:19:22 -08:00
commit e70b02f022
6 files changed
+2098 -1667

No files matched your search

+2
View File
@@ -73,7 +73,9 @@ submitting to the IOCCC have become more adept in obfuscation and have
become more skilled in the programming in the C language. become more skilled in the programming in the C language.
<div id="rule2">
### Code size and Rule 2 ### Code size and Rule 2
</div>
We were pleased to observe that while the [IOCCC size limit](../faq.html#size_rule_history) We were pleased to observe that while the [IOCCC size limit](../faq.html#size_rule_history)
increased by about 21%, we received many submissions that were well under the new increased by about 21%, we received many submissions that were well under the new
+2
View File
@@ -510,7 +510,9 @@ eclipsing the record of 15 winners!</p>
people extra time to improve their submissions, we also believe that people people extra time to improve their submissions, we also believe that people
submitting to the IOCCC have become more adept in obfuscation and have submitting to the IOCCC have become more adept in obfuscation and have
become more skilled in the programming in the C language.</p> become more skilled in the programming in the C language.</p>
<div id="rule2">
<h3 id="code-size-and-rule-2">Code size and Rule 2</h3> <h3 id="code-size-and-rule-2">Code size and Rule 2</h3>
</div>
<p>We were pleased to observe that while the <a href="../faq.html#size_rule_history">IOCCC size limit</a> <p>We were pleased to observe that while the <a href="../faq.html#size_rule_history">IOCCC size limit</a>
increased by about 21%, we received many submissions that were well under the new increased by about 21%, we received many submissions that were well under the new
<a href="rules.html#rule2">Rule 2</a> including a fair number of quality <a href="rules.html#rule2">Rule 2</a> including a fair number of quality
+753 -613
View File
File diff suppressed because it is too large. Load diff
+768 -615
View File
File diff suppressed because it is too large. Load diff
+281 -216
View File
@@ -455,22 +455,23 @@
<!-- START: this line starts content from: inc/rules.closed.hdr --> <!-- START: this line starts content from: inc/rules.closed.hdr -->
<h1 id="the-ioccc-is-closed">The IOCCC is closed</h1> <h1 id="the-ioccc-is-closed">The IOCCC is closed</h1>
<p>The IOCCC is <strong>NOT</strong> accepting new submissions at this time. See the <p>The IOCCC is <strong>NOT</strong> accepting new submissions at this time. See the
<a href="../years.html">IOCCC winning entries page</a> for the entries that have won the <a href="../years.html">IOCCC winning entries page</a> for the entries that have
IOCCC in the past.</p> won the IOCCC in the past.</p>
<p>These rules are a <strong>TENTATIVE proposal</strong> for the next IOCCC <p>These rules are a <strong>TENTATIVE proposal</strong> for the next IOCCC and are
and are <strong>likely be to be updated</strong> before the next IOCCC.</p> <strong>likely be to be updated</strong> before the next IOCCC.</p>
<p>See our <p>See our
FAQ on “<a href="../faq.html#feedback">rules, guidelines, tools feedback</a>” FAQ on “<a href="../faq.html#feedback">rules, guidelines, tools feedback</a>”
as well as our as well as our
FAQ on “<a href="../faq.html#question">about asking questions</a>” FAQ on “<a href="../faq.html#question">about asking questions</a>”
about these rules. You might also find the FAQ in general useful, especially the about these rules. You might also find the FAQ in general useful,
especially the
FAQ on “<a href="../quick-start.html#enter">how to enter the IOCCC</a>”.</p> FAQ on “<a href="../quick-start.html#enter">how to enter the IOCCC</a>”.</p>
<p>Watch both <a href="../status.html">the IOCCC status page</a> and the <p>Watch both <a href="../status.html">the IOCCC status page</a> and the <a href="https://fosstodon.org/@ioccc"><span class="citation" data-cites="IOCCC">@IOCCC</span>
<a href="https://fosstodon.org/@ioccc"><span class="citation" data-cites="IOCCC">@IOCCC</span> mastodon feed</a> for information about mastodon feed</a> for information about
future IOCCC openings.</p> future IOCCC openings.</p>
<p><strong>HINT to mastodon users</strong>: You may wish to refresh the <a href="https://fosstodon.org/@ioccc"><span class="citation" data-cites="IOCCC">@IOCCC</span> <p><strong>HINT to mastodon users</strong>: You may wish to refresh the <a href="https://fosstodon.org/@ioccc"><span class="citation" data-cites="IOCCC">@IOCCC</span>
mastodon feed</a> page and/or mastodon mastodon feed</a> page and/or mastodon app
app from time to time to view IOCCC mastodon updates.</p> from time to time to view IOCCC mastodon updates.</p>
<!-- END: the next line ends content from: inc/rules.closed.hdr --> <!-- END: the next line ends content from: inc/rules.closed.hdr -->
<!-- This is the last line modified by the tool: bin/gen-status.sh --> <!-- This is the last line modified by the tool: bin/gen-status.sh -->
<h1 id="th-international-obfuscated-c-code-contest-official-rules">29th International Obfuscated C Code Contest Official Rules</h1> <h1 id="th-international-obfuscated-c-code-contest-official-rules">29th International Obfuscated C Code Contest Official Rules</h1>
@@ -480,12 +481,14 @@ 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.13 2025-12-01</strong>.</p> <p>These IOCCC Rules are version <strong>29.14 2025-12-02</strong>.</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 a <strong>change</strong> from the previous IOCCC.
</p> </p>
<p class="leftbar"> <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. Because the <strong>IOCCC29</strong> rules was a substantial rewrite, only
<strong>important changes</strong> from <strong>IOCCC28</strong> have been marked.
</p> </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">
@@ -495,24 +498,30 @@ Because the <strong>IOCCC29</strong> rules was a substantial rewrite, only <stro
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>. 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>
<p class="leftbar"> <p class="leftbar">
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 contest will enter the <a href="../faq.html#pending">pending state</a> on
allowing people to <a href="register.html">register for the IOCCC</a>. <code>2025-12-03 20:25:12.045045 UTC</code>, allowing people to <a href="register.html">register for the
IOCCC</a>.
</p> </p>
<p class="leftbar"> <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>, This contest will enter the <a href="../faq.html#open">open state</a> on
allowing people to <a href="submit.html">upload submissions</a>. <code>2025-12-15 18:21:24.273033 UTC</code>, allowing people to <a href="submit.html">upload
submissions</a>.
</p> </p>
<p class="leftbar"> <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>, This contest will enter the <a href="../faq.html#judging">judging state</a> on
when people will no longer be allowed to upload submissions. <code>2026-03-13 17:19:23.293137 UTC</code>, when people will no longer be allowed
to upload submissions.
</p> </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 class="leftbar"> <p class="leftbar">
The above timestamps are in “<em>YYYY-MM-DD HH:MM:SS.micros UTC</em>” format. The above timestamps are in “<em>YYYY-MM-DD HH:MM:SS.micros UTC</em>” format.
</p> </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>
<div id="rule1"> <div id="rule1">
<div id="rule1-c"> <div id="rule1-c">
<h2 id="rule-1---c-program">Rule 1 - C program</h2> <h2 id="rule-1---c-program">Rule 1 - C program</h2>
@@ -521,7 +530,8 @@ FAQ on “<a href="../faq.html#feedback">How can I comment or make a suggestion
<p class="leftbar"> <p class="leftbar">
Your submission <strong>MUST</strong> be a C program. Your submission <strong>MUST</strong> be a C program.
</p> </p>
<p>See the <a href="guidelines.html#guideline1-c">Guidelines for Rule 1 - C program</a>.</p> <p>See the <a href="guidelines.html#guideline1-c">Guidelines for Rule 1 - C
program</a>.</p>
<div id="rule2"> <div id="rule2">
<div id="rule2-size-restrictions"> <div id="rule2-size-restrictions">
<div id="rule2-size"> <div id="rule2-size">
@@ -529,13 +539,13 @@ Your submission <strong>MUST</strong> be a C program.
</div> </div>
</div> </div>
</div> </div>
<p><code>Rule 2</code> requires that your submission satisfy <strong>BOTH</strong> <p><code>Rule 2</code> requires that your submission satisfy <strong>BOTH</strong> <a href="rules.html#rule2a">Rule 2a
<a href="rules.html#rule2a">Rule 2a (Gross Size)</a> (Gross Size)</a> and <a href="rules.html#rule2b">Rule 2b (Net
and Size)</a>.</p>
<a href="rules.html#rule2b">Rule 2b (Net Size)</a>. <p>During development this can be checked using <code>iocccsize(1)</code>:</p>
During development this can be checked using <code>iocccsize(1)</code>:</p>
<pre><code> iocccsize prog.c</code></pre> <pre><code> iocccsize prog.c</code></pre>
<p>See the <a href="guidelines.html#guideline2-size">Guidelines for Rule 2 - Size restrictions</a>.</p> <p>See the <a href="guidelines.html#guideline2-size">Guidelines for Rule 2 - Size
restrictions</a>.</p>
<div id="rule2a"> <div id="rule2a">
<div id="rule2a-gross-size"> <div id="rule2a-gross-size">
<h3 id="rule-2a---gross-size">Rule 2a - Gross Size</h3> <h3 id="rule-2a---gross-size">Rule 2a - Gross Size</h3>
@@ -543,17 +553,15 @@ During development this can be checked using <code>iocccsize(1)</code>:</p>
</div> </div>
<p>The overall maximum size of your <code>prog.c</code> program source <strong>MUST NOT</strong> <p>The overall maximum size of your <code>prog.c</code> program source <strong>MUST NOT</strong>
exceed <strong>4993</strong> bytes.</p> exceed <strong>4993</strong> bytes.</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>
<div id="rule2b"> <div id="rule2b">
<div id="rule2b-net-size"> <div id="rule2b-net-size">
<h3 id="rule-2b---net-size">Rule 2b - Net Size</h3> <h3 id="rule-2b---net-size">Rule 2b - Net Size</h3>
</div> </div>
</div> </div>
<p>When the filename of your program source (i.e., <code>prog.c</code>) is given as a <p>Check your source code using the latest official IOCCC size tool,
command line argument to the latest version of the official IOCCC size <code>iocccsize(1)</code>. The value printed <strong>MUST NOT</strong> exceed <strong>2503</strong>.</p>
tool (hereby referred to as <code>iocccsize(1)</code>), the value printed <strong>MUST
NOT</strong> exceed <strong>2503</strong>.</p>
<p><strong>NOTE</strong>: <code>iocccsize</code> does <strong>NOT</strong> calculate the filename length.</p>
<p>See <a href="#rule17-mkiocccentry">Rule 17 - Use mkiocccentry</a>.</p> <p>See <a href="#rule17-mkiocccentry">Rule 17 - Use mkiocccentry</a>.</p>
<div id="rule3"> <div id="rule3">
<div id="rule3-register"> <div id="rule3-register">
@@ -561,107 +569,120 @@ NOT</strong> exceed <strong>2503</strong>.</p>
</div> </div>
</div> </div>
<p>You <strong>MUST</strong> register, using a valid email address, in order to submit <p>You <strong>MUST</strong> register, using a valid email address, in order to submit
to the IOCCC. You may register while the contest is <strong>pending</strong> or <strong>open</strong>.</p> to the IOCCC. You may register while the contest is <strong>pending</strong> or
<strong>open</strong>.</p>
<p>A few days after registering, you’ll receive your UUID username and <p>A few days after registering, you’ll receive your UUID username and
temporary password, which you <strong>MUST</strong> change within 14 days.</p> temporary password, which you <strong>MUST</strong> change within 14 days.</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
<p>See <a href="guidelines.html#guideline3-register">Guidelines for Rule 3 - Register for the IOCCC</a>.</p> know</a>.</p>
<p>See <a href="guidelines.html#guideline3-register">Guidelines for Rule 3 - Register for the
IOCCC</a>.</p>
<div id="rule4"> <div id="rule4">
<div id="rule4-required-files"> <div id="rule4-required-files">
<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 class="leftbar"> <p class="leftbar">
Your submission <strong>MUST</strong> include at least these files: <code>Makefile</code>, <code>prog.c</code>, Your submission <strong>MUST</strong> include at least these files: <code>Makefile</code>,
<code>remarks.md</code>,<code>.info.json</code>, and <code>.auth.json</code>, the latter two of which are <code>prog.c</code>, <code>remarks.md</code>,<code>.info.json</code>, and <code>.auth.json</code>, the latter two
generated by <code>mkiocccentry(1)</code>. See <a href="#rule17-mkiocccentry">Rule 17 - of which are generated by <code>mkiocccentry(1)</code>. See <a href="#rule17-mkiocccentry">Rule 17 - Use
Use mkiocccentry</a>. mkiocccentry</a>.
</p> </p>
<p class="leftbar"> <p class="leftbar">
At a <strong>minimum</strong> the following requirements apply. Additional requirements At a <strong>minimum</strong> the following requirements apply. Additional
may be imposed by <code>mkiocccentry(1)</code> updates that have yet to be listed requirements may be imposed by <code>mkiocccentry(1)</code> updates that have yet
below: to be listed below:
</p> </p>
<p><span style="font-size:28px;"><b>|</b></span>   <p><span style="font-size:28px;"><b>|</b></span>  
* <code>.info.json</code> and <code>.auth.json</code> <strong>MUST</strong> be generated by <code>mkiocccenty(1)</code> * <code>.info.json</code> and <code>.auth.json</code> <strong>MUST</strong> be generated by
when packing a submission. When <code>chksubmit(1)</code> is run on the submission <code>mkiocccenty(1)</code> when packing a submission. When <code>chksubmit(1)</code> is run
directory <strong>ALL</strong> tests must pass and if there is <strong>ANY</strong> problem with these on the submission directory <strong>ALL</strong> tests must pass and if there is
JSON files or if either is missing it will fail. See <a href="#rule17-mkiocccentry">Rule 17 - use <strong>ANY</strong> problem with these JSON files or if either is missing it will
mkiocccentry</a>.</p> fail. See <a href="#rule17-mkiocccentry">Rule 17 - use mkiocccentry</a>.</p>
<p><span style="font-size:28px;"><b>|</b></span>   <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> * 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
<code>mkiocccentry(1)</code> will check for file <strong>size</strong> but will <strong>NOT</strong> check for that <code>mkiocccentry(1)</code> will check for file <strong>size</strong> but will <strong>NOT</strong>
content.</p> check for content.</p>
<p><span style="font-size:28px;"><b>|</b></span>   <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> * Your submitted source code <strong>MUST</strong> be called <code>prog.c</code>. When the
compiles your code, the executable (if applicable) <strong>MUST</strong> be called <code>prog</code>. <code>Makefile</code> compiles your code, the executable (if applicable) <strong>MUST</strong>
The <code>Makefile</code> may compile your source code into other filenames as well, if you want.</p> be called <code>prog</code>. The <code>Makefile</code> may compile your source code into
other filenames as well, if you want.</p>
<p><span style="font-size:28px;"><b>|</b></span>   <p><span style="font-size:28px;"><b>|</b></span>  
* 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> directory.</p> <code>Makefile</code>, your submission <strong>MUST NOT</strong> include those files in your
<strong>top</strong> directory.</p>
<p><span style="font-size:28px;"><b>|</b></span>   <p><span style="font-size:28px;"><b>|</b></span>  
* 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> <code>COPYRIGHT</code>, or <code>LICENSE</code> as those files are reserved by IOCCC.</p>
<p><span style="font-size:28px;"><b>|</b></span>   <p><span style="font-size:28px;"><b>|</b></span>  
* Your submission may <strong>NOT</strong> have in the <strong>top</strong> directory: <code>prog.orig.c</code>, * Your submission may <strong>NOT</strong> have in the <strong>top</strong> directory:
<code>README.md</code> or <code>index.html</code> as those files are reserved by the IOCCC.</p> <code>prog.orig.c</code>, <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>   <p><span style="font-size:28px;"><b>|</b></span>  
* Your submission may <strong>NOT</strong> have in the <strong>top</strong> directory any file * 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> as those files are reserved by IOCCC.</p>
<p><span style="font-size:28px;"><b>|</b></span>   <p><span style="font-size:28px;"><b>|</b></span>  
* Your submission may <strong>ONLY</strong> contain files and directories. Other file * Your submission may <strong>ONLY</strong> contain files and directories. Other
types such as symlinks, sockets etc. are <strong>NOT</strong> allowed.</p> file types such as symlinks, sockets etc. are <strong>NOT</strong> allowed.</p>
<p><span style="font-size:28px;"><b>|</b></span>   <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>All</strong> directories <strong>MUST</strong> have permission mode of <strong>0755</strong>. All
<strong>MUST</strong> have the file mode of <strong>0444</strong>, EXCEPT for files that files <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> end in <code>.sh</code> which must have a mode of <strong>0555</strong>.</p>
<p><span style="font-size:28px;"><b>|</b></span>   <p><span style="font-size:28px;"><b>|</b></span>  
* All files that end in <code>.md</code> <strong>MUST</strong> be in markdown format.</p> * All files that end in <code>.md</code> <strong>MUST</strong> be in markdown format.</p>
<p><span style="font-size:28px;"><b>|</b></span>   <p><span style="font-size:28px;"><b>|</b></span>  
* All filenames are treated as case insensitive. For example, <code>REMARKS.MD</code>, * All filenames are treated as case insensitive. For example,
and <code>Remarks.md</code>, and <code>remarks.md</code> are considered by <code>mkiocccenty(1)</code> <code>REMARKS.MD</code>, and <code>Remarks.md</code>, and <code>remarks.md</code> are considered by
to be the <strong>SAME</strong> file. When preparing a submission on a case <code>mkiocccenty(1)</code> to be the <strong>SAME</strong> file. When preparing a submission
sensitive filesystem, ensure that the submission will work on on a case sensitive filesystem, ensure that the submission will work on
a case insensitive filesystem.</p> a case insensitive filesystem.</p>
<p class="leftbar"> <p class="leftbar">
<strong>NOTE</strong>: by ‘top directory’ we mean the directory with <code>prog.c</code>, <code>Makefile</code>, <strong>NOTE</strong>: by ‘top directory’ we mean the directory with <code>prog.c</code>,
<code>remarks.md</code> and the <code>mkiocccentry(1)</code> generated files <code>.auth.json</code> and <code>Makefile</code>, <code>remarks.md</code> and the <code>mkiocccentry(1)</code> generated files
<code>.info.json</code> and <strong>NOT</strong> the <code>topdir</code> arg to <code>mkiocccentry(1)</code>. <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>
<p class="leftbar"> <p class="leftbar">
<strong>NOTE</strong>: <code>mkiocccentry(1)</code> will reject any directory which has prohibited files. <strong>NOTE</strong>: <code>mkiocccentry(1)</code> will reject any directory which has
prohibited files.
</p> </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
<a href="guidelines.html">Guidelines</a>.</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>
<p>See the <p>See the
FAQ on “<a href="../faq.html#file_perms">What permissions may my files be and what if I need different permissions?</a>”.</p> FAQ on “<a href="../faq.html#file_perms">What permissions may my files be and what if I need different
permissions?</a>”.</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
<p>See the <a href="guidelines.html#mkiocccentry_toolkit">Guidelines on the mkiocccentry toolkit</a>.</p> Makefile?</a>”.</p>
<p>See the <a href="guidelines.html#mkiocccentry_toolkit">Guidelines on the mkiocccentry
toolkit</a>.</p>
<div id="rule5"> <div id="rule5">
<div id="rule5-modifying-files"> <div id="rule5-modifying-files">
<h2 id="rule-5---do-not-modify-submitted-files-or-filenames-or-parent-directories">Rule 5 - Do NOT modify submitted files or filenames or parent directories</h2> <h2 id="rule-5---do-not-modify-submitted-files-filenames-or-parent-directories">Rule 5 - Do NOT modify submitted files, filenames or parent directories</h2>
</div> </div>
</div> </div>
<p>Your submission <strong>MUST NOT</strong> modify the filenames or content of any of your <p>Your submission <strong>MUST NOT</strong> modify the filenames or content of any of
original submission, such as <code>prog.c</code>, <code>Makefile</code>, or <strong>ANY</strong> other supplied your original submission, such as <code>prog.c</code>, <code>Makefile</code>, or <strong>ANY</strong>
files. To modify files, your program can make a copy or you can use the other supplied files. To modify files, your program can make a copy or
<code>Makefile</code> to setup working copies. Any working copies <strong>MUST</strong> be cleaned up you can use the <code>Makefile</code> to setup working copies. Any working copies
by the <code>Makefile</code> <code>clobber</code> target, so as to restore the directory to its <strong>MUST</strong> be cleaned up by the <code>Makefile</code> <code>clobber</code> target, so as to
original state.</p> restore the directory to its original state.</p>
<p>Your submission <strong>MUST NOT</strong> create or modify directories and files <p>With the exception of the <code>/tmp</code> and the <code>/var/tmp</code> directories,
ABOVE the current directory (with the exception of the <code>/tmp</code> and the <code>/var/tmp</code> assuming the directory name or filename does <strong>NOT</strong> start with a <code>.</code>
directories and as long as the directory name or filename does <strong>NOT</strong> start (dot), your submission <strong>MUST NOT</strong> create or modify directories and
with a <code>.</code> (dot)).</p> files ABOVE the current directory.</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 class="leftbar"> <p class="leftbar">
Your code should be able to run under a Your code should be able to run under a <a href="https://pubs.opengroup.org/onlinepubs/9799919799/">SUS
<a href="https://pubs.opengroup.org/onlinepubs/9799919799/">SUS environment</a>. environment</a>.
</p> </p>
<div id="rule6"> <div id="rule6">
<div id="rule6-free-rule"> <div id="rule6-free-rule">
@@ -679,72 +700,88 @@ Your code should be able to run under a
</div> </div>
</div> </div>
<p class="leftbar"> <p class="leftbar">
You, the author(s), <strong>MUST</strong> own the contents of your submission, <strong>OR</strong>, IF you You, the author(s), <strong>MUST</strong> own the contents of your submission,
do <strong>NOT</strong> own the work, then you <strong>MUST</strong> have permission from the original <strong>OR</strong>, IF you do <strong>NOT</strong> own the work, then you <strong>MUST</strong> have
owner(s) to its use. If you submit <strong>ANY</strong> content that is owned by others, you permission from the original owner(s) to its use. If you submit
<strong>MUST</strong> detail that ownership, i.e., who owns what, and document the permission <strong>ANY</strong> content that is owned by others, you <strong>MUST</strong> detail that
you obtained from them in your <code>remarks.md</code> file. ownership, i.e., who owns what, and document the permission you
obtained from them in your <code>remarks.md</code> file.
</p> </p>
<p class="leftbar"> <p class="leftbar">
You are permitted to use tools to write your code. You are permitted to use tools to write your code.
</p> </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#guideline7-original">Guidelines for Rule 7 - Original Work</a>.</p> <a href="guidelines.html#guideline7-original">Guidelines for Rule 7 - Original
Work</a>.</p>
<div id="rule8"> <div id="rule8">
<div id="rule8-submitting-requirements"> <div id="rule8-submitting-requirements">
<h2 id="rule-8---submitting-requirements">Rule 8 - Submitting requirements</h2> <h2 id="rule-8---submitting-requirements">Rule 8 - Submitting requirements</h2>
</div> </div>
</div> </div>
<p>The submit server will accept submissions <strong>ONLY</strong> from those who have <p>The submit server will accept submissions <strong>ONLY</strong> from those who have
registered and <strong>ONLY</strong> while the contest is open.</p> registered and <strong>ONLY</strong> while the contest is open and <strong>ONLY</strong> after
<p>The submit server places a total size limit of <strong>3999971</strong> bytes <strong>PER</strong> you have changed your initial password.</p>
submission.</p> <p>The submit server places a total size limit of <strong>3999971</strong> bytes
<strong>PER</strong> submission.</p>
<p class="leftbar"> <p class="leftbar">
Each account has ten (<strong>10.000</strong>) submission slots (<strong>0..9)</strong>. Each submission Each account has ten (<strong>10.000</strong>) submission slots (<strong>0..9)</strong>.
slot should be annotated by the server as to whether its was received, </p>
processed, malformed, etc. Please take note of any errors, rectify, <p class="leftbar">
and resubmit. In order to avoid potential packaging errors, it is <strong>highly Each submission slot should be annotated by the server as to whether it
recommended</strong> to use <code>mkiocccentry(1)</code>, <strong>AND</strong> to check from time to time the was received, processed, malformed, etc. Please take note of any
status on the submit server, to see if any tests run by the server failed to errors, rectify, and resubmit.
validate your submission. </p>
<p class="leftbar">
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 status on the submit server, to see if any tests run by the
server failed to validate your submission.
</p> </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>,
and and
<a href="rules.html#rule17-mkiocccentry">Rule 17 - Use mkiocccentry</a>.</p> <a href="rules.html#rule17-mkiocccentry">Rule 17 - Use mkiocccentry</a>.</p>
<p>See <a href="guidelines.html#guideline8-submitting">Guidelines for Rule 8 - Submitting requirements</a>.</p> <p>See <a href="guidelines.html#guideline8-submitting">Guidelines for Rule 8 - Submitting
requirements</a>.</p>
<div id="rule9"> <div id="rule9">
<div id="rule9-no-interactive"> <div id="rule9-no-interactive">
<h2 id="rule-9---no-interactive-compiling-allowed">Rule 9 - No interactive compiling allowed</h2> <h2 id="rule-9---no-interactive-compiling-allowed">Rule 9 - No interactive compiling allowed</h2>
</div> </div>
</div> </div>
<p>Entries requiring human interaction to be initially compiled are <strong>NOT</strong> <p>Entries requiring human interaction to be initially compiled are <strong>NOT</strong>
permitted. However, see the guidelines. Each entry <strong>MUST</strong> automate the permitted. However, see the <a href="guidelines.html#guideline9-no-interactive">guidelines on rule
build process using <code>bash</code>, <code>gmake</code>, <code>gcc</code> and/or <code>clang</code> and other commonly 9</a> as you
available tools under an <a href="https://pubs.opengroup.org/onlinepubs/9799919799/">SUS <strong>may</strong> suggest alternative compilation steps to do something fun or
cute.</p>
<p>Each entry <strong>MUST</strong> automate the build process using <code>bash</code>, <code>gmake</code>,
<code>gcc</code> and/or <code>clang</code> and other commonly available tools under an <a href="https://pubs.opengroup.org/onlinepubs/9799919799/">SUS
environment</a>.</p> environment</a>.</p>
<p><strong>NOTE</strong>: The references to <code>gmake(1)</code> can be any GNU Make compatible tool.</p> <p><strong>NOTE</strong>: any reference to <code>gmake(1)</code> can be any GNU Make compatible
<p><strong>NOTE</strong>: it is better to use the <code>${MAKE}</code> variable as then one may override tool.</p>
the make command.</p> <p><strong>NOTE</strong>: it is better to use the <code>${MAKE}</code> variable as then one may
<p><strong>NOTE</strong>: it is better and more portable to <strong>NOT</strong> modify the <code>${CC}</code> variable override the <code>make</code> command.</p>
in the Makefile.</p> <p><strong>NOTE</strong>: it is better to <strong>NOT</strong> modify <code>${CC}</code> in your Makefile as
this makes your program more portable.</p>
<p>See <a href="rules.html#rule15-gnu-makefile">Rule 15 - GNU Makefile</a>.</p> <p>See <a href="rules.html#rule15-gnu-makefile">Rule 15 - GNU Makefile</a>.</p>
<p>See <a href="guidelines.html#guideline9-no-interactive">Guidelines for Rule 9 - No interactive compiling allowed</a>.</p> <p>See <a href="guidelines.html#guideline9-no-interactive">Guidelines for Rule 9 - No interactive compiling
allowed</a>.</p>
<div id="rule10"> <div id="rule10">
<h2 id="rule-10---program-file-permissions">Rule 10 - Program file permissions</h2> <h2 id="rule-10---program-file-permissions">Rule 10 - Program file permissions</h2>
</div> </div>
<p>Programs that require special privileges (<code>setuid(2)</code>, <code>setgid(2)</code>, <p>Programs that require special privileges (<code>setuid(2)</code>, <code>setgid(2)</code>,
super-user, special owner, special group, etc.) are <strong>HIGHLY DISCOURAGED</strong>. super-user, special owner, special group, etc.) are <strong>HIGHLY
We do <strong>NOT</strong> guarantee these functions will behave as you expect on our DISCOURAGED</strong>. We do <strong>NOT</strong> guarantee these functions will behave as
test platforms. If your program needs special permissions you <strong>MUST</strong> you expect on our test platforms.</p>
document this fact and explain why it is needed in your submission’s <p>If your program needs special permissions you <strong>MUST</strong> document this
<code>remarks.md</code> file, preferably close to the top.</p> fact and explain why it is needed in your submission’s <code>remarks.md</code>
file, preferably close to the top, because <code>mkiocccentry(1)</code> will
<strong>NOT</strong> set those modes.</p>
<p>Furthermore, if you need a supplementary program that you include to <p>Furthermore, if you need a supplementary program that you include to
have these permissions, you will also have to explain this as well, because these have these permissions, you will also have to explain this as well,
bits are <strong>NOT</strong> allowed in submissions and those bits will <strong>NOT</strong> be copied by because these bits are <strong>NOT</strong> allowed in submissions and those bits
<code>mkiocccentry(1)</code>.</p> will <strong>NOT</strong> be copied by <code>mkiocccentry(1)</code> either.</p>
<p>See <a href="rules.html#rule4-required-files">Rule 4 - Required files</a>, <p>See <a href="rules.html#rule4-required-files">Rule 4 - Required files</a>,
and and
<a href="rules.html#rule5-modifying-files">Rule 5 - Do NOT modify files</a>.</p> <a href="rules.html#rule5-modifying-files">Rule 5 - Do NOT modify files</a>.</p>
@@ -753,95 +790,111 @@ and
<h2 id="rule-11---legal-rule-abuse">Rule 11 - Legal rule abuse</h2> <h2 id="rule-11---legal-rule-abuse">Rule 11 - Legal rule abuse</h2>
</div> </div>
</div> </div>
<p>Legal abuse of the rules is <strong>somewhat</strong> encouraged, but comes with risks. <p>Legal abuse of the rules is <strong>somewhat</strong> encouraged, but comes with
A submission that, in the opinion of the Judges, <strong>violates</strong> the rules <strong>WILL risks. A submission that, in the opinion of the Judges, <strong>violates</strong>
BE DISQUALIFIED</strong>. Submissions that plan to abuse the rules <strong>MUST</strong> justify the rules <strong>WILL BE DISQUALIFIED</strong>. Submissions that plan to abuse the
why their rule abuse is legal (or interesting) in the <code>remarks.md</code> file.</p> rules <strong>MUST</strong> justify why their rule abuse is legal (or interesting)
in the <code>remarks.md</code> file.</p>
<p>Submission packaging abuse will <strong>NOT</strong> be tolerated and for this reason, <p>Submission packaging abuse will <strong>NOT</strong> be tolerated and for this reason,
amongst many others, it is recommended that you use <code>mkiocccentry(1)</code>. During amongst many other reasons, it is recommended that you use
development you can check your <code>prog.c</code> size limits using <code>iocccsize(1)</code>, e.g., <code>mkiocccentry(1)</code>. See also <a href="#rule17-mkiocccentry">Rule 17 - use
<code>iocccsize -v1 prog.c</code>. Overriding problems detected by any of the IOCCC tools mkiocccentry</a>.</p>
risks that the submission will be rejected.</p> <p>During development you can check your <code>prog.c</code> size limits using
<code>iocccsize(1)</code>, e.g., <code>iocccsize -v1 prog.c</code>. Overriding problems
detected by any of the IOCCC tools risks that the submission will be
rejected.</p>
<p>If you do submit a rule abusing or violating submission, then consider <p>If you do submit a rule abusing or violating submission, then consider
also submitting an alternate version in a different submission server also submitting an alternate version in a different submission server
slot that does <strong>NOT</strong> violate the rules in case your rule abuse excuse slot that does <strong>NOT</strong> violate the rules in case your rule abuse excuse
is rejected.</p> is rejected.</p>
<p><strong>IMPORTANT</strong>: If you do submit such an alternate non-rule abusing <p><strong>IMPORTANT</strong>: If you do submit such an alternate non-rule abusing
version, <strong>PLEASE</strong> indicate that in your <code>remarks.md</code> file of your non-rule version, <strong>PLEASE</strong> indicate that in your <code>remarks.md</code> file of your
abusing version so that the Judges don’t think you uploaded a duplicate into a non-rule abusing version so that the Judges don’t think you uploaded a
wrong slot by mistake.</p> duplicate into a wrong slot by mistake.</p>
<p>See <a href="guidelines.html#guideline11-abuse">Guidelines for Rule 11 - Legal rule abuse</a>.</p> <p>See <a href="guidelines.html#guideline11-abuse">Guidelines for Rule 11 - Legal rule
abuse</a>.</p>
<div id="rule12"> <div id="rule12">
<div id="rule12-utf8"> <div id="rule12-utf8">
<h2 id="rule-12---utf-8">Rule 12 - UTF-8</h2> <h2 id="rule-12---utf-8">Rule 12 - UTF-8</h2>
</div> </div>
</div> </div>
<p>Use of UTF-8 is supported by <code>C89</code> standard and its updates and so too by the <p>Use of UTF-8 is supported by <code>C89</code> standard and its updates and so too
IOCCC.</p> by the IOCCC.</p>
<p>See <a href="guidelines.html#guideline12-utf8">Guidelines for Rule 12 - UTF-8</a>.</p> <p>See <a href="guidelines.html#guideline12-utf8">Guidelines for Rule 12 - UTF-8</a>.</p>
<div id="rule13"> <div id="rule13">
<div id="rule13-nocr"> <div id="rule13-nocr">
<h2 id="rule-13---no-carriage-returns-in-prog.c">Rule 13 - No carriage returns in prog.c</h2> <h2 id="rule-13---no-carriage-returns-in-prog.c">Rule 13 - No carriage returns in prog.c</h2>
</div> </div>
</div> </div>
<p>Any C source that fails to compile because lines contain carriage-returns <p>Any C source that fails to compile because lines contain
(CTRL+M, <code>\r</code>) in particular as part of DOS/Windows style newlines might carriage-returns (CTRL+M, <code>\r</code>) in particular as part of DOS/Windows
be rejected. Please do <strong>NOT</strong> put trailing CTRL+M in <code>prog.c</code>, <code>Makefile</code>, style newlines might be rejected. Please do <strong>NOT</strong> put trailing
or <code>remarks.md</code> files, but instead end lines with Unix newline (line-feed, CTRL+M in <code>prog.c</code>, <code>Makefile</code>, or <code>remarks.md</code> files, but instead end
CTRL+J, <code>\n</code>).</p> lines with Unix newline (line-feed, CTRL+J, <code>\n</code>).</p>
<p>You are permitted, in order to try and squeeze your <code>prog.c</code> under a <p>You are permitted, in order to try and squeeze your <code>prog.c</code> under a
<a href="rules.html#rule2a-gross-size">Rule 2a Gross Size</a> and/or <a href="rules.html#rule2a-gross-size">Rule 2a Gross Size</a> and/or <a href="rules.html#rule2b-net-size">Rule 2b Net
<a href="rules.html#rule2b-net-size">Rule 2b Net Size</a> Size</a> limits, to <strong>NOT</strong> end source with a
limits, to <strong>NOT</strong> end source with a newline. If you newline. If you need to do this, please document that in your
need to do this, please document that in your <code>remarks.md</code> file and if <code>remarks.md</code> file and if your compiler complains about this, document
your compiler complains about this, document this too and update your this too and update your <code>Makefile</code> to account for this.</p>
<code>Makefile</code> to account for this.</p> <p>See <a href="guidelines.html#guideline13-nocr">Guidelines for Rule 13 - No carriage returns in
<p>See <a href="guidelines.html#guideline13-nocr">Guidelines for Rule 13 - No carriage returns in prog.c</a>.</p> prog.c</a>.</p>
<div id="rule14"> <div id="rule14">
<h2 id="rule-14---resubmitting-lost-submissions">Rule 14 - Resubmitting lost submissions</h2> <h2 id="rule-14---resubmitting-lost-submissions">Rule 14 - Resubmitting lost submissions</h2>
</div> </div>
<p>Submissions that are substantially similar to previous winning IOCCC <p>Submissions that are substantially similar to previous winning IOCCC
entries are discouraged.</p> entries are discouraged. See the
<p>You are allowed to resubmit to a later contest, a submission that didn’t win the FAQ on “<a href="../faq.html#frequent-themes">What types of entries have been frequently submitted to the
IOCCC. If you do so, then you would be <strong>WELL ADVISED</strong> to try and enhance and IOCCC?</a>.</p>
improve your submission. If you do resubmit something that didn’t previously <p>You are allowed to resubmit to a later contest, a submission that
win, then you are encouraged to mention this in your <code>remarks.md</code> file as this didn’t win the IOCCC. If you do so, then you would be <strong>WELL ADVISED</strong>
<strong>sometimes</strong> helps.</p> to try and enhance and improve your submission. If you do resubmit
something that didn’t previously win, then you are encouraged to
mention this in your <code>remarks.md</code> file as this <strong>sometimes</strong> helps.</p>
<div id="rule15"> <div id="rule15">
<div id="rule15-gnu-makefile"> <div id="rule15-gnu-makefile">
<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 class="leftbar"> <p class="leftbar">
The <code>Makefile</code> <strong>MUST</strong> adhere to GNU Makefile syntax. It’s highly recommended The <code>Makefile</code> <strong>MUST</strong> adhere to GNU Makefile syntax. It’s highly
that you copy the <a href="Makefile.example">Makefile.example</a> as a template, renaming recommended that you copy the <a href="Makefile.example">Makefile.example</a> as a
it to <code>Makefile</code>. The primary target of the <code>Makefile</code> <strong>MUST</strong> be <code>prog</code> and template, renaming it to <code>Makefile</code>. The primary target of the
the source file is <code>prog.c</code>. The C compiler and preprocessor <strong>MUST</strong> be <code>Makefile</code> <strong>MUST</strong> be <code>prog</code> and the source file is <code>prog.c</code>. The C
invoked using <code>${CC}</code> and <code>${CPP}</code> macros respectively. compiler and preprocessor <strong>MUST</strong> be invoked using <code>${CC}</code> and
<code>${CPP}</code> macros respectively.
</p> </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
its original state, such as removing temporary files or any modified data files. directory tree to its original state, such as removing temporary 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 or any modified data files. Don’t assume that <code>git</code> tool chain is
can cause problems in the winner repo!</p> 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 <strong>WILL</strong> cause problems
in the winner repo!</p>
<p class="leftbar"> <p class="leftbar">
The <code>Makefile</code> <strong>MUST</strong> use a syntax that is compatible with The <code>Makefile</code> <strong>MUST</strong> use a syntax that is compatible with <code>bash(1)</code>
<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 and GNU <code>make(1)</code>. You are encouraged to use <code>SHELL= bash</code> in your
the value such as: <code>Makefile</code>; please add a space between the <code>=</code> and the value such as:
</p> </p>
<pre><code> SHELL= bash</code></pre> <pre><code> SHELL= bash</code></pre>
<p class="leftbar"> <p class="leftbar">
Assume that commands commonly found in <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX 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>.
</p>
<p class="leftbar">
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>. GNU long name options (such as <code>--example</code>) or extensions like <code>grep -P</code>.
</p> </p>
<p>Do <strong>NOT</strong> assume that <code>.</code> (current directory) is in the <code>$PATH</code> environment 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
<p>See <a href="guidelines.html#guideline15-gnu-makefile">Guidelines for Rule 15 - GNU Makefile</a>.</p> Makefile?</a>”.</p>
<p>See <a href="guidelines.html#guideline15-gnu-makefile">Guidelines for Rule 15 - GNU
Makefile</a>.</p>
<div id="rule16"> <div id="rule16">
<div id="rule16-anonymous-judging"> <div id="rule16-anonymous-judging">
<h2 id="rule-16---anonymous-judging">Rule 16 - Anonymous judging</h2> <h2 id="rule-16---anonymous-judging">Rule 16 - Anonymous judging</h2>
@@ -850,79 +903,88 @@ FAQ on “<a href="../faq.html#makefile_details">What are the detailed recommend
<p>Your source code, data files, remarks, and program output <strong>MUST NOT</strong> <p>Your source code, data files, remarks, and program output <strong>MUST NOT</strong>
identify the author(s) of your code (unless you are <strong>Peter Honeyman</strong> identify the author(s) of your code (unless you are <strong>Peter Honeyman</strong>
or pretending to be <strong>Peter Honeyman</strong>). In order to be impartial the or pretending to be <strong>Peter Honeyman</strong>). In order to be impartial the
<a href="https://www.ioccc.org/judges.html">Judges</a> do <strong>NOT</strong> know who is submitting <a href="https://www.ioccc.org/judges.html">Judges</a> do <strong>NOT</strong> know who is
programs to the IOCCC until final selection is made, and <strong>only</strong> submissions submitting programs to the IOCCC until final selection is made, and
that won.</p> <strong>only</strong> submissions that won.</p>
<p>Even if you are a past winner, you <strong>MUST NOT</strong> reveal your identity <p>Even if you are a past winner, you <strong>MUST NOT</strong> reveal your identity
deliberately or by accident anywhere in your submission. <strong><em>Failure to comply deliberately or by accident anywhere in your submission. <strong><em>Failure to
may result in the submission being disqualified</em></strong>.</p> comply may result in the submission being disqualified</em></strong>.</p>
<div id="rule17"> <div id="rule17">
<div id="rule17-mkiocccentry"> <div id="rule17-mkiocccentry">
<h2 id="rule-17---use-mkiocccentry">Rule 17 - Use <code>mkiocccentry</code></h2> <h2 id="rule-17---use-mkiocccentry">Rule 17 - Use <code>mkiocccentry</code></h2>
</div> </div>
</div> </div>
<p>TL;DR: use <code>mkiocccentry(1)</code> to package your submission.</p> <p>TL;DR: use <code>mkiocccentry(1)</code> to package your submission.</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
<code>mkiocccentry(1)</code>, including but <strong>NOT</strong> limited, to their names, count, path imposed by <code>mkiocccentry(1)</code>, including but <strong>NOT</strong> limited, to their
length, directory tree depth, and permissions.</p> names, count, path length, directory tree depth, and permissions.</p>
<p class="leftbar"> <p class="leftbar">
The submission tree may have at most <strong>13</strong> directories and maximum 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>.info.json</code> and <code>.auth.json</code> is <strong>31</strong>. And the maximum file-path <code>try.alt.sh</code>, <code>.info.json</code> and <code>.auth.json</code> is <strong>31</strong>. And the maximum
component is <strong>38</strong> and maximum path length is <strong>60</strong>. file-path component is <strong>38</strong> and maximum path length is <strong>60</strong>.
</p> </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
as constructed by <code>mkiocccentry(1)</code>, which <strong>MUST</strong> be within <strong>[1..3999971]</strong> bytes in size.</p> compressed by <code>xz(1)</code>) as constructed by <code>mkiocccentry(1)</code>, which
<p>The tarball <strong>MUST</strong> be a <strong>v7 format</strong> tarball, and any supplementary tarballs <strong>MUST</strong> be within <strong>[1..3999971]</strong> bytes in size.</p>
you provide <strong>MUST</strong> also be <strong>v7 format</strong>.</p> <p>The tarball <strong>MUST</strong> be a <strong>v7 format</strong> tarball, and any supplementary
<p>The sum of all file lengths, after unpacking from the tarball, <strong>MUST</strong> be tarballs you provide <strong>MUST</strong> also be <strong>v7 format</strong>.</p>
less than <code>27651*1024</code> (<strong>28314624</strong>) bytes.</p> <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>
<p class="leftbar"> <p class="leftbar">
The submission <strong>MUST</strong> pass all <code>txzchk(1)</code> checks, and the tarball filename The submission <strong>MUST</strong> pass all <code>txzchk(1)</code> checks, and the tarball
<strong>MUST</strong> pass all <code>fnamchk(1)</code> checks as well. filename <strong>MUST</strong> pass all <code>fnamchk(1)</code> checks as well.
</p> </p>
<p class="leftbar"> <p class="leftbar">
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>. 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>
<p class="leftbar"> <p class="leftbar">
The unpacked submission directory <strong>MUST</strong> pass the checks performed by the The unpacked submission directory <strong>MUST</strong> pass the checks performed by
minimum required version of <code>chksubmit(1)</code>. the minimum required version of <code>chksubmit(1)</code>.
</p> </p>
<p class="leftbar"> <p class="leftbar">
Submissions may <strong>NOT</strong> use a <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry 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
are labelled as “<strong>for TESTING purposes</strong>”, <strong>OR</strong> labelled as “<strong>for the use by options that are labelled as “<strong>for TESTING purposes</strong>”, <strong>OR</strong>
the IOCCC judges only</strong>”, in their respective man pages. labelled as “<strong>for the use by the IOCCC judges only</strong>”, in their
respective man pages.
</p> </p>
<p class="leftbar"> <p class="leftbar">
Submissions may <strong>ONLY</strong> use <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry 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
to the command’s <code>-h</code> “<em>print help message</em>”, again notwithstanding the options confirm to the command’s <code>-h</code> “<em>print help message</em>”, again
for testing and the IOCCC judges. notwithstanding the options for testing and the IOCCC judges.
</p> </p>
<p class="leftbar"> <p class="leftbar">
The <code>prog.c</code> file should pass the <a href="rules.html#rule2-size">Rule 2 - Size restrictions</a> The <code>prog.c</code> file should pass the <a href="rules.html#rule2-size">Rule 2 - Size
checks performed by <code>iocccsize(1)</code>. restrictions</a> checks performed by
<code>iocccsize(1)</code>.
</p> </p>
<p class="leftbar"> <p class="leftbar">
The <code>.auth.json</code> and <code>.info.json</code> files <strong>MUST</strong> be compatible with what The <code>.auth.json</code> and <code>.info.json</code> files <strong>MUST</strong> be exactly
<code>mkiocccentry(1)</code> generates. what the minimum required <code>mkiocccentry(1)</code> version generates.
</p> </p>
<p class="leftbar"> <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
version of the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a> required version of the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
<strong>WILL be rejected</strong>! toolkit</a> <strong>WILL be
rejected</strong>!
</p> </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
<p>See the <a href="guidelines.html#guideline17-mkiocccentry">Guidelines for Rule 17 - Use mkiocccentry</a>.</p> use it?</a>”.</p>
<p>See the <a href="guidelines.html#guideline17-mkiocccentry">Guidelines for Rule 17 - Use
mkiocccentry</a>.</p>
<div id="rule18"> <div id="rule18">
<h2 id="rule-18---submission-license">Rule 18 - Submission license</h2> <h2 id="rule-18---submission-license">Rule 18 - Submission license</h2>
</div> </div>
<p>The entirety of your submission <strong>MUST</strong> be submitted under the following license:</p> <p>The entirety of your submission <strong>MUST</strong> be submitted under the
<p><a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0 International</a></p> following license:</p>
<p><a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0
International</a>.</p>
<p>See <a href="rules.html#rule7-original-work">Rule 7 - Original Work</a>.</p> <p>See <a href="rules.html#rule7-original-work">Rule 7 - Original Work</a>.</p>
<div id="rule19"> <div id="rule19">
<div id="rule19-prime"> <div id="rule19-prime">
@@ -931,19 +993,22 @@ FAQ on “<a href="../faq.html#mkiocccentry">What is the mkiocccentry tool, how
</div> </div>
<p class="leftbar"> <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
below this rule in future contests. rule in future contests.
</p> </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>
<p>Read the <p>Read the
<a href="https://www.ioccc.org/quick-start.html#enter">Entering the IOCCC: the bare minimum you need to know</a> FAQ on “<a href="https://www.ioccc.org/quick-start.html#enter">Entering the IOCCC: the bare minimum you need to
know</a>”
for an overview of how to enter the contest.</p> for an overview of how to enter the contest.</p>
<p>See also the <a href="../faq.html">FAQ</a>.</p> <p>See also the <a href="../faq.html">FAQ</a> in general.</p>
<p>And now <a href="guidelines.html#fun">for something completely different</a>.</p> <p>And now <a href="guidelines.html#fun">for something completely different</a>.</p>
<p>Consider joining the <a href="https://discord.com/invite/Wa42Qujwnw">IOCCC Discord Server</a> <p>Consider joining the <a href="https://discord.com/invite/Wa42Qujwnw">IOCCC Discord
for discussions about The Rules, questions for the Judges, and <code>C</code> in general.</p> Server</a> for discussions about
The Rules, questions for the Judges, and <code>C</code> in general.</p>
<p>Leonid A. Broukhis <p>Leonid A. Broukhis
chongo (Landon Curt Noll) /\cc/\ chongo (Landon Curt Noll) /\cc/\
<!-- AFTER: last line of markdown file: next/rules.md --></p> <!-- AFTER: last line of markdown file: next/rules.md --></p>
+292 -223
View File
@@ -3,26 +3,27 @@
# The IOCCC is closed # The IOCCC is closed
The IOCCC is **NOT** accepting new submissions at this time. See the The IOCCC is **NOT** accepting new submissions at this time. See the
[IOCCC winning entries page](../years.html) for the entries that have won the [IOCCC winning entries page](../years.html) for the entries that have
IOCCC in the past. won the IOCCC in the past.
These rules are a **TENTATIVE proposal** for the next IOCCC These rules are a **TENTATIVE proposal** for the next IOCCC and are
and are **likely be to be updated** before the next IOCCC. **likely be to be updated** before the next IOCCC.
See our See our
FAQ on "[rules, guidelines, tools feedback](../faq.html#feedback)" FAQ on "[rules, guidelines, tools feedback](../faq.html#feedback)"
as well as our as well as our
FAQ on "[about asking questions](../faq.html#question)" FAQ on "[about asking questions](../faq.html#question)"
about these rules. You might also find the FAQ in general useful, especially the about these rules. You might also find the FAQ in general useful,
especially the
FAQ on "[how to enter the IOCCC](../quick-start.html#enter)". FAQ on "[how to enter the IOCCC](../quick-start.html#enter)".
Watch both [the IOCCC status page](../status.html) and the Watch both [the IOCCC status page](../status.html) and the [@IOCCC
[@IOCCC mastodon feed](https://fosstodon.org/@ioccc) for information about mastodon feed](https://fosstodon.org/@ioccc) for information about
future IOCCC openings. future IOCCC openings.
**HINT to mastodon users**: You may wish to refresh the [@IOCCC **HINT to mastodon users**: You may wish to refresh the [@IOCCC
mastodon feed](https://fosstodon.org/@ioccc) page and/or mastodon mastodon feed](https://fosstodon.org/@ioccc) page and/or mastodon app
app from time to time to view IOCCC mastodon updates. from time to time to view IOCCC mastodon updates.
<!-- END: the next line ends content from: inc/rules.closed.hdr --> <!-- END: the next line ends content from: inc/rules.closed.hdr -->
<!-- This is the last line modified by the tool: bin/gen-status.sh --> <!-- This is the last line modified by the tool: bin/gen-status.sh -->
@@ -39,14 +40,16 @@ writing by [contacting the judges](../contact.html).
## Rules Version ## Rules Version
These IOCCC Rules are version **29.13 2025-12-01**. These IOCCC Rules are version **29.14 2025-12-02**.
<p class="leftbar"> <p class="leftbar">
The <span style='font-size:28px;'><b>&verbar;</b></span> symbol indicates an **change** from the previous IOCCC. The <span style='font-size:28px;'><b>&verbar;</b></span> symbol
indicates a **change** from the previous IOCCC.
</p> </p>
<p class="leftbar"> <p class="leftbar">
Because the **IOCCC29** rules was a substantial rewrite, only **important changes** from **IOCCC28** have been marked. Because the **IOCCC29** rules was a substantial rewrite, only
**important changes** from **IOCCC28** have been marked.
</p> </p>
Reminder: be SURE to read the [IOCCC guidelines](guidelines.html). Reminder: be SURE to read the [IOCCC guidelines](guidelines.html).
@@ -57,34 +60,41 @@ Reminder: be SURE to read the [IOCCC guidelines](guidelines.html).
</div> </div>
<p class="leftbar"> <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>
<p class="leftbar"> <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
allowing people to [register for the IOCCC](register.html). `2025-12-03 20:25:12.045045 UTC`, allowing people to [register for the
IOCCC](register.html).
</p> </p>
<p class="leftbar"> <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
allowing people to [upload submissions](submit.html). `2025-12-15 18:21:24.273033 UTC`, allowing people to [upload
submissions](submit.html).
</p> </p>
<p class="leftbar"> <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
when people will no longer be allowed to upload submissions. `2026-03-13 17:19:23.293137 UTC`, when people will no longer be allowed
to upload submissions.
</p> </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"> <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> </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).
See See
FAQ on "[How can I comment or make a suggestion on IOCCC rules, guidelines and tools?](../faq.html#feedback)". FAQ on "[How can I comment or make a suggestion on IOCCC rules,
guidelines and tools?](../faq.html#feedback)".
<div id="rule1"> <div id="rule1">
@@ -97,7 +107,8 @@ FAQ on "[How can I comment or make a suggestion on IOCCC rules, guidelines and t
Your submission **MUST** be a C program. Your submission **MUST** be a C program.
</p> </p>
See the [Guidelines for Rule 1 - C program](guidelines.html#guideline1-c). See the [Guidelines for Rule 1 - C
program](guidelines.html#guideline1-c).
<div id="rule2"> <div id="rule2">
@@ -108,17 +119,18 @@ See the [Guidelines for Rule 1 - C program](guidelines.html#guideline1-c).
</div> </div>
</div> </div>
`Rule 2` requires that your submission satisfy **BOTH** `Rule 2` requires that your submission satisfy **BOTH** [Rule 2a
[Rule 2a &lpar;Gross Size&rpar;](rules.html#rule2a) &lpar;Gross Size&rpar;](rules.html#rule2a) and [Rule 2b &lpar;Net
and Size&rpar;](rules.html#rule2b).
[Rule 2b &lpar;Net Size&rpar;](rules.html#rule2b).
During development this can be checked using `iocccsize(1)`: During development this can be checked using `iocccsize(1)`:
``` <!---sh--> ``` <!---sh-->
iocccsize prog.c iocccsize prog.c
``` ```
See the [Guidelines for Rule 2 - Size restrictions](guidelines.html#guideline2-size). See the [Guidelines for Rule 2 - Size
restrictions](guidelines.html#guideline2-size).
<div id="rule2a"> <div id="rule2a">
@@ -130,7 +142,8 @@ See the [Guidelines for Rule 2 - Size restrictions](guidelines.html#guideline2-s
The overall maximum size of your `prog.c` program source **MUST NOT** The overall maximum size of your `prog.c` program source **MUST NOT**
exceed **4993** bytes. exceed **4993** bytes.
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).
<div id="rule2b"> <div id="rule2b">
@@ -139,12 +152,8 @@ See [Entering the IOCCC: the bare minimum you need to know](../quick-start.html#
</div> </div>
</div> </div>
When the filename of your program source (i.e., `prog.c`) is given as a Check your source code using the latest official IOCCC size tool,
command line argument to the latest version of the official IOCCC size `iocccsize(1)`. The value printed **MUST NOT** exceed **2503**.
tool (hereby referred to as `iocccsize(1)`), the value printed **MUST
NOT** exceed **2503**.
**NOTE**: `iocccsize` does **NOT** calculate the filename length.
See [Rule 17 - Use mkiocccentry](#rule17-mkiocccentry). See [Rule 17 - Use mkiocccentry](#rule17-mkiocccentry).
@@ -156,16 +165,19 @@ See [Rule 17 - Use mkiocccentry](#rule17-mkiocccentry).
</div> </div>
You **MUST** register, using a valid email address, in order to submit You **MUST** register, using a valid email address, in order to submit
to the IOCCC. You may register while the contest is **pending** or **open**. to the IOCCC. You may register while the contest is **pending** or
**open**.
A few days after registering, you'll receive your UUID username and A few days after registering, you'll receive your UUID username and
temporary password, which you **MUST** change within 14 days. temporary password, which you **MUST** change within 14 days.
See [How to register for the IOCCC](register.html). See [How to register for the IOCCC](register.html).
See [Entering the IOCCC: the bare minimum you need to know](../quick-start.html#enter). See [Entering the IOCCC: the bare minimum you need to
know](../quick-start.html#enter).
See [Guidelines for Rule 3 - Register for the IOCCC](guidelines.html#guideline3-register). See [Guidelines for Rule 3 - Register for the
IOCCC](guidelines.html#guideline3-register).
<div id="rule4"> <div id="rule4">
@@ -175,47 +187,50 @@ See [Guidelines for Rule 3 - Register for the IOCCC](guidelines.html#guideline3-
</div> </div>
<p class="leftbar"> <p class="leftbar">
Your submission **MUST** include at least these files: `Makefile`, `prog.c`, Your submission **MUST** include at least these files: `Makefile`,
`remarks.md`,`.info.json`, and `.auth.json`, the latter two of which are `prog.c`, `remarks.md`,`.info.json`, and `.auth.json`, the latter two
generated by `mkiocccentry(1)`. See [Rule 17 - of which are generated by `mkiocccentry(1)`. See [Rule 17 - Use
Use mkiocccentry](#rule17-mkiocccentry). mkiocccentry](#rule17-mkiocccentry).
</p> </p>
<p class="leftbar"> <p class="leftbar">
At a **minimum** the following requirements apply. Additional requirements At a **minimum** the following requirements apply. Additional
may be imposed by `mkiocccentry(1)` updates that have yet to be listed requirements may be imposed by `mkiocccentry(1)` updates that have yet
below: to be listed below:
</p> </p>
<span style='font-size:28px;'><b>&verbar;</b></span>&nbsp;&nbsp; <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
when packing a submission. When `chksubmit(1)` is run on the submission `mkiocccenty(1)` when packing a submission. When `chksubmit(1)` is run
directory **ALL** tests must pass and if there is **ANY** problem with these on the submission directory **ALL** tests must pass and if there is
JSON files or if either is missing it will fail. See [Rule 17 - use **ANY** problem with these JSON files or if either is missing it will
mkiocccentry](#rule17-mkiocccentry). fail. See [Rule 17 - use mkiocccentry](#rule17-mkiocccentry).
<span style='font-size:28px;'><b>&verbar;</b></span>&nbsp;&nbsp; <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
`mkiocccentry(1)` will check for file **size** but will **NOT** check for that `mkiocccentry(1)` will check for file **size** but will **NOT**
content. check for content.
<span style='font-size:28px;'><b>&verbar;</b></span>&nbsp;&nbsp; <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
compiles your code, the executable (if applicable) **MUST** be called `prog`. `Makefile` compiles your code, the executable (if applicable) **MUST**
The `Makefile` may compile your source code into other filenames as well, if you want. be called `prog`. The `Makefile` may compile your source code into
other filenames as well, if you want.
<span style='font-size:28px;'><b>&verbar;</b></span>&nbsp;&nbsp; <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** directory. `Makefile`, your submission **MUST NOT** include those files in your
**top** directory.
<span style='font-size:28px;'><b>&verbar;</b></span>&nbsp;&nbsp; <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; <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:
`README.md` or `index.html` as those files are reserved by the IOCCC. `prog.orig.c`, `README.md` or `index.html` as those files are reserved
by the IOCCC.
<span style='font-size:28px;'><b>&verbar;</b></span>&nbsp;&nbsp; <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
@@ -223,73 +238,80 @@ 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; <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
types such as symlinks, sockets etc. are **NOT** allowed. file types such as symlinks, sockets etc. are **NOT** allowed.
<span style='font-size:28px;'><b>&verbar;</b></span>&nbsp;&nbsp; <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
**MUST** have the file mode of **0444**, EXCEPT for files that files **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; <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.
<span style='font-size:28px;'><b>&verbar;</b></span>&nbsp;&nbsp; <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,
and `Remarks.md`, and `remarks.md` are considered by `mkiocccenty(1)` `REMARKS.MD`, and `Remarks.md`, and `remarks.md` are considered by
to be the **SAME** file. When preparing a submission on a case `mkiocccenty(1)` to be the **SAME** file. When preparing a submission
sensitive filesystem, ensure that the submission will work on on a case sensitive filesystem, ensure that the submission will work on
a case insensitive filesystem. a case insensitive filesystem.
<p class="leftbar"> <p class="leftbar">
**NOTE**: by 'top directory' we mean the directory with `prog.c`, `Makefile`, **NOTE**: by 'top directory' we mean the directory with `prog.c`,
`remarks.md` and the `mkiocccentry(1)` generated files `.auth.json` and `Makefile`, `remarks.md` and the `mkiocccentry(1)` generated files
`.info.json` and **NOT** the `topdir` arg to `mkiocccentry(1)`. `.auth.json` and `.info.json` and **NOT** the `topdir` arg to
`mkiocccentry(1)`.
</p> </p>
<p class="leftbar"> <p class="leftbar">
**NOTE**: `mkiocccentry(1)` will reject any directory which has prohibited files. **NOTE**: `mkiocccentry(1)` will reject any directory which has
prohibited files.
</p> </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](guidelines.html).
See [IOCCC markdown guidelines](../markdown.html). See [IOCCC markdown guidelines](../markdown.html).
See [Rule 17 - Use mkiocccentry](rules.html#rule17-mkiocccentry). See [Rule 17 - Use mkiocccentry](rules.html#rule17-mkiocccentry).
See the See the
FAQ on "[What permissions may my files be and what if I need different permissions?](../faq.html#file_perms)". FAQ on "[What permissions may my files be and what if I need different
permissions?](../faq.html#file_perms)".
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)".
See the [Guidelines on the mkiocccentry toolkit](guidelines.html#mkiocccentry_toolkit). See the [Guidelines on the mkiocccentry
toolkit](guidelines.html#mkiocccentry_toolkit).
<div id="rule5"> <div id="rule5">
<div id="rule5-modifying-files"> <div id="rule5-modifying-files">
## Rule 5 - Do NOT modify submitted files or filenames or parent directories ## Rule 5 - Do NOT modify submitted files, filenames or parent directories
</div> </div>
</div> </div>
Your submission **MUST NOT** modify the filenames or content of any of your Your submission **MUST NOT** modify the filenames or content of any of
original submission, such as `prog.c`, `Makefile`, or **ANY** other supplied your original submission, such as `prog.c`, `Makefile`, or **ANY**
files. To modify files, your program can make a copy or you can use the other supplied files. To modify files, your program can make a copy or
`Makefile` to setup working copies. Any working copies **MUST** be cleaned up you can use the `Makefile` to setup working copies. Any working copies
by the `Makefile` `clobber` target, so as to restore the directory to its **MUST** be cleaned up by the `Makefile` `clobber` target, so as to
original state. restore the directory to its original state.
Your submission **MUST NOT** create or modify directories and files With the exception of the `/tmp` and the `/var/tmp` directories,
ABOVE the current directory (with the exception of the `/tmp` and the `/var/tmp` assuming the directory name or filename does **NOT** start with a `.`
directories and as long as the directory name or filename does **NOT** start (dot), your submission **MUST NOT** create or modify directories and
with a `.` (dot)). files ABOVE the current directory.
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"> <p class="leftbar">
Your code should be able to run under a Your code should be able to run under a [SUS
[SUS environment](https://pubs.opengroup.org/onlinepubs/9799919799/). environment](https://pubs.opengroup.org/onlinepubs/9799919799/).
</p> </p>
@@ -316,11 +338,12 @@ See [Rule 19 - Prime](rules.html#rule19-prime).
</div> </div>
<p class="leftbar"> <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,
do **NOT** own the work, then you **MUST** have permission from the original **OR**, IF you do **NOT** own the work, then you **MUST** have
owner(s) to its use. If you submit **ANY** content that is owned by others, you permission from the original owner(s) to its use. If you submit
**MUST** detail that ownership, i.e., who owns what, and document the permission **ANY** content that is owned by others, you **MUST** detail that
you obtained from them in your `remarks.md` file. ownership, i.e., who owns what, and document the permission you
obtained from them in your `remarks.md` file.
</p> </p>
<p class="leftbar"> <p class="leftbar">
@@ -329,7 +352,8 @@ You are permitted to use tools to write your code.
See [Rule 16 - Anonymous Judging](rules.html#rule16-anonymous-judging), See [Rule 16 - Anonymous Judging](rules.html#rule16-anonymous-judging),
and and
[Guidelines for Rule 7 - Original Work](guidelines.html#guideline7-original). [Guidelines for Rule 7 - Original
Work](guidelines.html#guideline7-original).
<div id="rule8"> <div id="rule8">
@@ -339,19 +363,27 @@ and
</div> </div>
The submit server will accept submissions **ONLY** from those who have The submit server will accept submissions **ONLY** from those who have
registered and **ONLY** while the contest is open. registered and **ONLY** while the contest is open and **ONLY** after
you have changed your initial password.
The submit server places a total size limit of **3999971** bytes **PER** The submit server places a total size limit of **3999971** bytes
submission. **PER** submission.
<p class="leftbar"> <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)**.
slot should be annotated by the server as to whether its was received, </p>
processed, malformed, etc. Please take note of any errors, rectify,
and resubmit. In order to avoid potential packaging errors, it is **highly <p class="leftbar">
recommended** to use `mkiocccentry(1)`, **AND** to check from time to time the Each submission slot should be annotated by the server as to whether it
status on the submit server, to see if any tests run by the server failed to was received, processed, malformed, etc. Please take note of any
validate your submission. errors, rectify, and resubmit.
</p>
<p class="leftbar">
In order to avoid potential packaging errors, it is **highly
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 validate your submission.
</p> </p>
See See
@@ -360,7 +392,8 @@ See
and and
[Rule 17 - Use mkiocccentry](rules.html#rule17-mkiocccentry). [Rule 17 - Use mkiocccentry](rules.html#rule17-mkiocccentry).
See [Guidelines for Rule 8 - Submitting requirements](guidelines.html#guideline8-submitting). See [Guidelines for Rule 8 - Submitting
requirements](guidelines.html#guideline8-submitting).
<div id="rule9"> <div id="rule9">
@@ -370,22 +403,28 @@ See [Guidelines for Rule 8 - Submitting requirements](guidelines.html#guideline8
</div> </div>
Entries requiring human interaction to be initially compiled are **NOT** Entries requiring human interaction to be initially compiled are **NOT**
permitted. However, see the guidelines. Each entry **MUST** automate the permitted. However, see the [guidelines on rule
build process using `bash`, `gmake`, `gcc` and/or `clang` and other commonly 9](guidelines.html#guideline9-no-interactive) as you
available tools under an [SUS **may** suggest alternative compilation steps to do something fun or
cute.
Each entry **MUST** automate the build process using `bash`, `gmake`,
`gcc` and/or `clang` and other commonly available tools under an [SUS
environment](https://pubs.opengroup.org/onlinepubs/9799919799/). environment](https://pubs.opengroup.org/onlinepubs/9799919799/).
**NOTE**: The references to `gmake(1)` can be any GNU Make compatible tool. **NOTE**: any reference to `gmake(1)` can be any GNU Make compatible
tool.
**NOTE**: it is better to use the `${MAKE}` variable as then one may override **NOTE**: it is better to use the `${MAKE}` variable as then one may
the make command. override the `make` command.
**NOTE**: it is better and more portable to **NOT** modify the `${CC}` variable **NOTE**: it is better to **NOT** modify `${CC}` in your Makefile as
in the Makefile. this makes your program more portable.
See [Rule 15 - GNU Makefile](rules.html#rule15-gnu-makefile). See [Rule 15 - GNU Makefile](rules.html#rule15-gnu-makefile).
See [Guidelines for Rule 9 - No interactive compiling allowed](guidelines.html#guideline9-no-interactive). See [Guidelines for Rule 9 - No interactive compiling
allowed](guidelines.html#guideline9-no-interactive).
<div id="rule10"> <div id="rule10">
@@ -393,16 +432,19 @@ See [Guidelines for Rule 9 - No interactive compiling allowed](guidelines.html#g
</div> </div>
Programs that require special privileges (`setuid(2)`, `setgid(2)`, Programs that require special privileges (`setuid(2)`, `setgid(2)`,
super-user, special owner, special group, etc.) are **HIGHLY DISCOURAGED**. super-user, special owner, special group, etc.) are **HIGHLY
We do **NOT** guarantee these functions will behave as you expect on our DISCOURAGED**. We do **NOT** guarantee these functions will behave as
test platforms. If your program needs special permissions you **MUST** you expect on our test platforms.
document this fact and explain why it is needed in your submission’s
`remarks.md` file, preferably close to the top. If your program needs special permissions you **MUST** document this
fact and explain why it is needed in your submission’s `remarks.md`
file, preferably close to the top, because `mkiocccentry(1)` will
**NOT** set those modes.
Furthermore, if you need a supplementary program that you include to Furthermore, if you need a supplementary program that you include to
have these permissions, you will also have to explain this as well, because these have these permissions, you will also have to explain this as well,
bits are **NOT** allowed in submissions and those bits will **NOT** be copied by because these bits are **NOT** allowed in submissions and those bits
`mkiocccentry(1)`. will **NOT** be copied by `mkiocccentry(1)` either.
See [Rule 4 - Required files](rules.html#rule4-required-files), See [Rule 4 - Required files](rules.html#rule4-required-files),
and and
@@ -415,16 +457,21 @@ and
</div> </div>
</div> </div>
Legal abuse of the rules is **somewhat** encouraged, but comes with risks. Legal abuse of the rules is **somewhat** encouraged, but comes with
A submission that, in the opinion of the Judges, **violates** the rules **WILL risks. A submission that, in the opinion of the Judges, **violates**
BE DISQUALIFIED**. Submissions that plan to abuse the rules **MUST** justify the rules **WILL BE DISQUALIFIED**. Submissions that plan to abuse the
why their rule abuse is legal (or interesting) in the `remarks.md` file. rules **MUST** justify why their rule abuse is legal (or interesting)
in the `remarks.md` file.
Submission packaging abuse will **NOT** be tolerated and for this reason, Submission packaging abuse will **NOT** be tolerated and for this reason,
amongst many others, it is recommended that you use `mkiocccentry(1)`. During amongst many other reasons, it is recommended that you use
development you can check your `prog.c` size limits using `iocccsize(1)`, e.g., `mkiocccentry(1)`. See also [Rule 17 - use
`iocccsize -v1 prog.c`. Overriding problems detected by any of the IOCCC tools mkiocccentry](#rule17-mkiocccentry).
risks that the submission will be rejected.
During development you can check your `prog.c` size limits using
`iocccsize(1)`, e.g., `iocccsize -v1 prog.c`. Overriding problems
detected by any of the IOCCC tools risks that the submission will be
rejected.
If you do submit a rule abusing or violating submission, then consider If you do submit a rule abusing or violating submission, then consider
also submitting an alternate version in a different submission server also submitting an alternate version in a different submission server
@@ -432,11 +479,12 @@ slot that does **NOT** violate the rules in case your rule abuse excuse
is rejected. is rejected.
**IMPORTANT**: If you do submit such an alternate non-rule abusing **IMPORTANT**: If you do submit such an alternate non-rule abusing
version, **PLEASE** indicate that in your `remarks.md` file of your non-rule version, **PLEASE** indicate that in your `remarks.md` file of your
abusing version so that the Judges don't think you uploaded a duplicate into a non-rule abusing version so that the Judges don't think you uploaded a
wrong slot by mistake. duplicate into a wrong slot by mistake.
See [Guidelines for Rule 11 - Legal rule abuse](guidelines.html#guideline11-abuse). See [Guidelines for Rule 11 - Legal rule
abuse](guidelines.html#guideline11-abuse).
<div id="rule12"> <div id="rule12">
@@ -445,8 +493,8 @@ See [Guidelines for Rule 11 - Legal rule abuse](guidelines.html#guideline11-abus
</div> </div>
</div> </div>
Use of UTF-8 is supported by `C89` standard and its updates and so too by the Use of UTF-8 is supported by `C89` standard and its updates and so too
IOCCC. by the IOCCC.
See [Guidelines for Rule 12 - UTF-8](guidelines.html#guideline12-utf8). See [Guidelines for Rule 12 - UTF-8](guidelines.html#guideline12-utf8).
@@ -457,21 +505,21 @@ See [Guidelines for Rule 12 - UTF-8](guidelines.html#guideline12-utf8).
</div> </div>
</div> </div>
Any C source that fails to compile because lines contain carriage-returns Any C source that fails to compile because lines contain
(CTRL+M, `\r`) in particular as part of DOS/Windows style newlines might carriage-returns (CTRL+M, `\r`) in particular as part of DOS/Windows
be rejected. Please do **NOT** put trailing CTRL+M in `prog.c`, `Makefile`, style newlines might be rejected. Please do **NOT** put trailing
or `remarks.md` files, but instead end lines with Unix newline (line-feed, CTRL+M in `prog.c`, `Makefile`, or `remarks.md` files, but instead end
CTRL+J, `\n`). lines with Unix newline (line-feed, CTRL+J, `\n`).
You are permitted, in order to try and squeeze your `prog.c` under a You are permitted, in order to try and squeeze your `prog.c` under a
[Rule 2a Gross Size](rules.html#rule2a-gross-size) and/or [Rule 2a Gross Size](rules.html#rule2a-gross-size) and/or [Rule 2b Net
[Rule 2b Net Size](rules.html#rule2b-net-size) Size](rules.html#rule2b-net-size) limits, to **NOT** end source with a
limits, to **NOT** end source with a newline. If you newline. If you need to do this, please document that in your
need to do this, please document that in your `remarks.md` file and if `remarks.md` file and if your compiler complains about this, document
your compiler complains about this, document this too and update your this too and update your `Makefile` to account for this.
`Makefile` to account for this.
See [Guidelines for Rule 13 - No carriage returns in prog.c](guidelines.html#guideline13-nocr). See [Guidelines for Rule 13 - No carriage returns in
prog.c](guidelines.html#guideline13-nocr).
<div id="rule14"> <div id="rule14">
@@ -479,14 +527,15 @@ See [Guidelines for Rule 13 - No carriage returns in prog.c](guidelines.html#gui
</div> </div>
Submissions that are substantially similar to previous winning IOCCC Submissions that are substantially similar to previous winning IOCCC
entries are discouraged. entries are discouraged. See the
FAQ on "[What types of entries have been frequently submitted to the
You are allowed to resubmit to a later contest, a submission that didn't win the IOCCC?](../faq.html#frequent-themes).
IOCCC. If you do so, then you would be **WELL ADVISED** to try and enhance and
improve your submission. If you do resubmit something that didn't previously
win, then you are encouraged to mention this in your `remarks.md` file as this
**sometimes** helps.
You are allowed to resubmit to a later contest, a submission that
didn't win the IOCCC. If you do so, then you would be **WELL ADVISED**
to try and enhance and improve your submission. If you do resubmit
something that didn't previously win, then you are encouraged to
mention this in your `remarks.md` file as this **sometimes** helps.
<div id="rule15"> <div id="rule15">
<div id="rule15-gnu-makefile"> <div id="rule15-gnu-makefile">
@@ -495,24 +544,25 @@ win, then you are encouraged to mention this in your `remarks.md` file as this
</div> </div>
<p class="leftbar"> <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
that you copy the [Makefile.example](Makefile.example) as a template, renaming recommended that you copy the [Makefile.example](Makefile.example) as a
it to `Makefile`. The primary target of the `Makefile` **MUST** be `prog` and template, renaming it to `Makefile`. The primary target of the
the source file is `prog.c`. The C compiler and preprocessor **MUST** be `Makefile` **MUST** be `prog` and the source file is `prog.c`. The C
invoked using `${CC}` and `${CPP}` macros respectively. compiler and preprocessor **MUST** be invoked using `${CC}` and
`${CPP}` macros respectively.
</p> </p>
The `clobber` target **MUST** clean and restore the submission directory tree to The `clobber` target **MUST** clean and restore the submission
its original state, such as removing temporary files or any modified data files. directory tree to its original state, such as removing temporary files
Don't assume that `git` tool chain is installed, i.e. do **NOT** expect `git or any modified data files. Don't assume that `git` tool chain is
clean -f` to work. To be clear: do **NOT** use `git` to clean out files as this installed, i.e. do **NOT** expect `git clean -f` to work. To be clear:
can cause problems in the winner repo! do **NOT** use `git` to clean out files as this **WILL** cause problems
in the winner repo!
<p class="leftbar"> <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)`
`bash(1)` and GNU `make(1)`. You are encouraged to use `SHELL= and GNU `make(1)`. You are encouraged to use `SHELL= bash` in your
bash` in your `Makefile`; please add a space between the `=` and `Makefile`; please add a space between the `=` and the value such as:
the value such as:
</p> </p>
``` <!---makefile--> ``` <!---makefile-->
@@ -523,19 +573,27 @@ the value such as:
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`.
[SUS](https://en.wikipedia.org/wiki/Single_UNIX_Specification), such as
GNU long name options (such as `--example`) or extensions like `grep -P`.
</p> </p>
Do **NOT** assume that `.` (current directory) is in the `$PATH` environment variable. <p class="leftbar">
Avoid command options that aren't part of
[SUS](https://en.wikipedia.org/wiki/Single_UNIX_Specification), such as
GNU long name options (such as `--example`) or extensions like `grep
-P`.
</p>
Do **NOT** assume that `.` (current directory) is in the `$PATH`
environment variable.
See [Rule 4 - Required files](rules.html#rule4-required-files). See [Rule 4 - Required files](rules.html#rule4-required-files).
See See
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)".
See [Guidelines for Rule 15 - GNU Makefile](guidelines.html#guideline15-gnu-makefile). See [Guidelines for Rule 15 - GNU
Makefile](guidelines.html#guideline15-gnu-makefile).
<div id="rule16"> <div id="rule16">
@@ -547,13 +605,13 @@ See [Guidelines for Rule 15 - GNU Makefile](guidelines.html#guideline15-gnu-make
Your source code, data files, remarks, and program output **MUST NOT** Your source code, data files, remarks, and program output **MUST NOT**
identify the author(s) of your code (unless you are **Peter Honeyman** identify the author(s) of your code (unless you are **Peter Honeyman**
or pretending to be **Peter Honeyman**). In order to be impartial the or pretending to be **Peter Honeyman**). In order to be impartial the
[Judges](https://www.ioccc.org/judges.html) do **NOT** know who is submitting [Judges](https://www.ioccc.org/judges.html) do **NOT** know who is
programs to the IOCCC until final selection is made, and **only** submissions submitting programs to the IOCCC until final selection is made, and
that won. **only** submissions that won.
Even if you are a past winner, you **MUST NOT** reveal your identity Even if you are a past winner, you **MUST NOT** reveal your identity
deliberately or by accident anywhere in your submission. **_Failure to comply deliberately or by accident anywhere in your submission. **_Failure to
may result in the submission being disqualified_**. comply may result in the submission being disqualified_**.
<div id="rule17"> <div id="rule17">
@@ -564,87 +622,95 @@ may result in the submission being disqualified_**.
TL;DR: use `mkiocccentry(1)` to package your submission. TL;DR: use `mkiocccentry(1)` to package your submission.
The files, directories, and paths **MUST** conform to the limits imposed by The files, directories, and paths **MUST** conform to the limits
`mkiocccentry(1)`, including but **NOT** limited, to their names, count, path imposed by `mkiocccentry(1)`, including but **NOT** limited, to their
length, directory tree depth, and permissions. names, count, path length, directory tree depth, and permissions.
<p class="leftbar"> <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`,
`.info.json` and `.auth.json` is **31**. And the maximum file-path `try.alt.sh`, `.info.json` and `.auth.json` is **31**. And the maximum
component is **38** and maximum path length is **60**. file-path component is **38** and maximum path length is **60**.
</p> </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
as constructed by `mkiocccentry(1)`, which **MUST** be within **[1..3999971]** bytes in size. compressed by `xz(1)`) as constructed by `mkiocccentry(1)`, which
**MUST** be within **[1..3999971]** bytes in size.
The tarball **MUST** be a **v7 format** tarball, and any supplementary tarballs The tarball **MUST** be a **v7 format** tarball, and any supplementary
you provide **MUST** also be **v7 format**. tarballs 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**
less than `27651*1024` (**28314624**) bytes. be less than `27651*1024` (**28314624**) bytes.
<p class="leftbar"> <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
**MUST** pass all `fnamchk(1)` checks as well. filename **MUST** pass all `fnamchk(1)` checks as well.
</p> </p>
<p class="leftbar"> <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
seed` options of `mkiocccentry(1)`. the `-s seed` options of `mkiocccentry(1)`.
</p> </p>
<p class="leftbar"> <p class="leftbar">
The unpacked submission directory **MUST** pass the checks performed by the The unpacked submission directory **MUST** pass the checks performed by
minimum required version of `chksubmit(1)`. the minimum required version of `chksubmit(1)`.
</p> </p>
<p class="leftbar"> <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
are labelled as "**for TESTING purposes**", **OR** labelled as "**for the use by options that are labelled as "**for TESTING purposes**", **OR**
the IOCCC judges only**", in their respective man pages. labelled as "**for the use by the IOCCC judges only**", in their
respective man pages.
</p> </p>
<p class="leftbar"> <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
to the command's `-h` "_print help message_", again notwithstanding the options confirm to the command's `-h` "_print help message_", again
for testing and the IOCCC judges. notwithstanding the options for testing and the IOCCC judges.
</p> </p>
<p class="leftbar"> <p class="leftbar">
The `prog.c` file should pass the [Rule 2 - Size restrictions](rules.html#rule2-size) The `prog.c` file should pass the [Rule 2 - Size
checks performed by `iocccsize(1)`. restrictions](rules.html#rule2-size) checks performed by
`iocccsize(1)`.
</p> </p>
<p class="leftbar"> <p class="leftbar">
The `.auth.json` and `.info.json` files **MUST** be compatible with what The `.auth.json` and `.info.json` files **MUST** be exactly
`mkiocccentry(1)` generates. what the minimum required `mkiocccentry(1)` version generates.
</p> </p>
<p class="leftbar"> <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
version of the [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) required version of the [mkiocccentry
**WILL be rejected**! toolkit](https://github.com/ioccc-src/mkiocccentry) **WILL be
rejected**!
</p> </p>
See [Rule 4 - Required files](rules.html#rule4-required-files). See [Rule 4 - Required files](rules.html#rule4-required-files).
See the See the
FAQ on "[What is the mkiocccentry tool, how do I obtain it and how do I use it?](../faq.html#mkiocccentry)". FAQ on "[What is the mkiocccentry tool, how do I obtain it and how do I
use it?](../faq.html#mkiocccentry)".
See the [Guidelines for Rule 17 - Use mkiocccentry](guidelines.html#guideline17-mkiocccentry). See the [Guidelines for Rule 17 - Use
mkiocccentry](guidelines.html#guideline17-mkiocccentry).
<div id="rule18"> <div id="rule18">
## Rule 18 - Submission license ## Rule 18 - Submission license
</div> </div>
The entirety of your submission **MUST** be submitted under the following license: The entirety of your submission **MUST** be submitted under the
following license:
[CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/) [CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0
International](https://creativecommons.org/licenses/by-sa/4.0/).
See [Rule 7 - Original Work](rules.html#rule7-original-work). See [Rule 7 - Original Work](rules.html#rule7-original-work).
@@ -657,8 +723,8 @@ See [Rule 7 - Original Work](rules.html#rule7-original-work).
<p class="leftbar"> <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
below this rule in future contests. rule in future contests.
</p> </p>
See [Rule 6 - Free Rule](rules.html#rule6-free-rule). See [Rule 6 - Free Rule](rules.html#rule6-free-rule).
@@ -666,18 +732,21 @@ See [Rule 6 - Free Rule](rules.html#rule6-free-rule).
## Further Reading ## Further Reading
Please read the [Guidelines](guidelines.html) next for further commentary on these rules. Please read the [Guidelines](guidelines.html) next for further
commentary on these rules.
Read the Read the
[Entering the IOCCC: the bare minimum you need to know](https://www.ioccc.org/quick-start.html#enter) FAQ on "[Entering the IOCCC: the bare minimum you need to
know](https://www.ioccc.org/quick-start.html#enter)"
for an overview of how to enter the contest. for an overview of how to enter the contest.
See also the [FAQ](../faq.html). See also the [FAQ](../faq.html) in general.
And now [for something completely different](guidelines.html#fun). And now [for something completely different](guidelines.html#fun).
Consider joining the [IOCCC Discord Server](https://discord.com/invite/Wa42Qujwnw) Consider joining the [IOCCC Discord
for discussions about The Rules, questions for the Judges, and `C` in general. Server](https://discord.com/invite/Wa42Qujwnw) for discussions about
The Rules, questions for the Judges, and `C` in general.
Leonid A. Broukhis Leonid A. Broukhis
chongo (Landon Curt Noll) /\\cc/\\ chongo (Landon Curt Noll) /\\cc/\\