update rules & guidelines

Improved Rule 1.

Added Guidelines for Rule 1.

Improved Rule 3.

Added missing Guidelines for Rule 3.

Reordered guidelines sections under the "General Guidelines".

Set level 2 for "General Guidelines" subsections.

Changed IOCCC Rules to version **29.11 2025-11-30**.
Changed IOCCC Guidelines to version **29.03 2025-11-30**.

Ran `make quick_www` to perform the above.
This commit is contained in:
Landon Curt Noll committed 2025-12-01 01:19:49 -08:00
1 parent e43fdbe9f3
commit eda2531e4d
5 files changed
+559 -415

No files matched your search

+221 -159
View File
@@ -462,7 +462,7 @@ and remains unaltered. All other uses must receive prior permission in
writing by <a href="../contact.html">contacting the judges</a>.</p>
<h1 id="guidelines-version">Guidelines Version</h1>
<p class="leftbar">
These IOCCC guidelines are version <strong>29.02 2025-11-30</strong>.
These IOCCC guidelines are version <strong>29.03 2025-11-30</strong>.
</p>
<p class="leftbar">
The <span style="font-size:28px;"><b>|</b></span> symbol indicates an <strong>change</strong> from the previous IOCCC.
@@ -471,6 +471,41 @@ The <span style="font-size:28px;"><b>|</b></span> symbol indicates an <strong>ch
Because the <strong>IOCCC29</strong> guidelines was a substantial rewrite, only <strong>important changes</strong> from <strong>IOCCC28</strong> have been marked.
</p>
<p>Be sure to read the <a href="rules.html">IOCCC rules</a>.</p>
<div id="guideline1">
<div id="guideline1-c">
<h1 id="guidelines-for-rule-1---c-program">Guidelines for <a href="rules.html#rule1-c">Rule 1 - C program</a></h1>
</div>
</div>
<p class="leftbar">
While you submission <strong>MUST</strong> be a C program, there is nothing wrong if your <code>prog.c</code>
file happens to also be a code for another language.
</p>
<p class="leftbar">
We would prefer if you do not use <code>#include</code> statements,
especially <code>#include</code> statements just to include lots of data,
to get around the
<a href="rules.html#rule2-size-restrictions">Rule 2 - Size restrictions</a>
in an excessive way.
</p>
<p class="leftbar">
We would prefer if you do not require lots and lots of implicit defines on the C compiler command line
(i.e., lots of <code>-Dfoo</code>, and <code>-Dcurds=whey</code> style command line args to the C compiler)
to get around the
<a href="rules.html#rule2-size-restrictions">Rule 2 - Size restrictions</a>
in an excessive way.
</p>
<p class="leftbar">
Some use of <code>#include</code> statements and/or implicit defines on the C compiler command line is perfectly reasonable.
</p>
<p class="leftbar">
As a guide, consider the level of <code>#include</code> statements and/or implicit defines on the C compiler command line
that are found in
<a href="https://www.ioccc.org/years.html">winning IOCCC entries</a>, and try to <strong>NOT</strong> set a new record.
</p>
<p class="leftbar">
If you believe you need to significantly abuse <code>#include</code> statements and/or implicit defines on the C compiler command line,
then try to make a case for why in your submission’s <code>remarks.md</code> file: maybe the judges won’t reject your submission.
</p>
<div id="guideline2">
<div id="guideline-2---size">
<div id="guideline2-size">
@@ -506,12 +541,38 @@ the IOCCC size tool <code>iocccsize(1)</code> conflict, the algorithm implemente
by the minimum required version of <code>iocccsize(1)</code> is preferred by the <a href="../judges.html">IOCCC
judges</a>.</p>
<p>Make sure <code>iocccsize</code> does not flag any issues with your <code>prog.c</code>.</p>
<p><strong>NOTE</strong>: by default <code>iocccsize</code> will only report the rule 2b size, unless the
code surpasses the limit.</p>
<p>There a much less need to <code>#define</code> C reserved words in an effort
to get around the size limits of
<a href="rules.html#rule2-size">Rule 2 - Size restrictions</a>
because of the <code>iocccsize(1)</code> algorithm.</p>
<p>Yes Virginia, <strong>the previous guideline sentence is an important hint</strong>!</p>
<p>Jump to: <a href="#">top</a></p>
<div id="guideline3">
<div id="guideline-3---register">
<h1 id="guidelines-for-rule-3---register-for-the-ioccc">Guidelines for <a href="rules.html#rule3-register">Rule 3 - Register for the IOCCC</a></h1>
</div>
</div>
<p>If a group of people work on a submission, then they should
<a href="../quick-start.html#enter">register for the IOCCC</a>
using either a group email address, or an email address for one of the authors.</p>
<p>Processing your registration is an activity overseen by an IOCCC judge.
Please be <strong>patient</strong> while an IOCCC judge processes your registration.</p>
<p>It can take a few days to process your registration and for the server to
email your details, therefore make sure to allow yourself ample time to
register and submit your entries; <strong>DO NOT WAIT UNTIL THE FINAL DAYS</strong>
to register! The judges are <strong>NOT</strong> responsible for delayed or lost
email or for those who wait until the last minute to try to register!</p>
<p>If after a few days you believe your registration hasn’t been process, then
<a href="../contact.html">contact the Judges</a>.</p>
<p>After your UUID and initial password are emailed to you, you have
up to fortnight (<strong>14 days</strong>) to login and change your temporary password.
If you fail to change your temporary password by that deadline, then you’ll need to
<a href="../contact.html">contact the Judges</a> by email to request a reset.</p>
<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>Jump to: <a href="#">top</a></p>
<div id="guideline7">
<div id="guideline-7---original-work">
<h1 id="guidelines-for-rule-7---original-work">Guidelines for <a href="rules.html#rule7-original-work">Rule 7 - Original Work</a></h1>
@@ -536,6 +597,13 @@ describe how you used such tools</strong> in your <code>remarks.md</code> file.<
<p>See the
FAQ on “<a href="../faq.html#ai">May I use AI, LLM, Virtual coding assistants, or similar tools to write my submission?</a>”.</p>
<p>Jump to: <a href="#">top</a></p>
<div id="guideline8">
<div id="guideline-8---submitting-requirements">
<h1 id="guidelines-for-rule-8---submitting-requirements">Guidelines for <a href="rules.html#rule8-submitting-requirements">Rule 8 - Submitting requirements</a></h1>
</div>
</div>
<p>Do <strong>NOT</strong> register more than one account just try and get around the limit on the number of submission slots.</p>
<p>Jump to: <a href="#">top</a></p>
<div id="guideline11">
<div id="guideline-11---abuse">
<h1 id="guidelines-for-rule-11---legal-rule-abuse">Guidelines for <a href="rules.html#rule11-legal-rule-abuse">Rule 11 - Legal rule abuse</a></h1>
@@ -680,154 +748,12 @@ FAQ on “<a href="../faq.html#makefile_details">What are the detailed recommend
<p>See the
FAQ on “<a href="../faq.html#rule17">What are the details behind Rule 17 - Use mkiocccentry?</a>”.</p>
<p>Jump to: <a href="#">top</a></p>
<div id="mkiocccentry">
</div>
<div id="mkiocccentry_toolkit">
</div>
<h1 id="guidelines-for-the-mkiocccentry-toolkit">Guidelines for the mkiocccentry toolkit</h1>
<p>The <a href="https://submit.ioccc.org">IOCCC submit server</a>, and related services
use the <strong>most recent version</strong> of the
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>:
submissions that package using older versions of the
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>
are <strong>LIKELY</strong> to be <strong>REJECTED</strong>!</p>
<p>You <strong>REALLY SHOULD</strong> use the latest <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
toolkit</a> to package your submission
as submissions that use an older version are <strong>LIKELY</strong> to be <strong>REJECTED</strong>!</p>
<p>The <code>mkiocccentry(1)</code> tool runs a number of checks by way of these
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a> tools:</p>
<ul>
<li>iocccsize(1)</li>
<li>txzchk(1)</li>
<li>fnamchk(1)</li>
<li>chksubmit(1)</li>
<li>chkentry(1)</li>
</ul>
<p>Do <strong>NOT</strong> use <code>txzchk(1)</code> or <code>fnamchk(1)</code> command line options that are labeled
“<strong>for TESTING purposes</strong>” in their respective man pages.</p>
<p>Do <strong>NOT</strong> use <code>fnamchk(1)</code> command line options that are labeled “<strong>for TESTING purposes</strong>”
in the <code>fnamchk(1)</code> man page.</p>
<p>Do <strong>NOT</strong> use <code>chksubmit(1)</code> command line options that are labeled “<strong>for the use by the IOCCC judges only</strong>”
in the <code>chksubmit(1)</code> man page.
Similarly do <strong>NOT</strong> use <code>chkentry(1)</code> command line options marked “<strong>for the use
by the IOCCC judges only</strong>” in the <code>chkentry(1)</code> man page.</p>
<p>To view <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a> man pages,
while your current directory is the top of the source tree:</p>
<pre><code> man soup/man/man1/mkiocccentry.1
man soup/man/man1/iocccsize.1
man soup/man/man1/txzchk.1
man test_ioccc/man/man1/fnamchk.1
man soup/man/man1/chksubmit.1
man soup/man/man1/chkentry.1</code></pre>
<p>The above <code>man(1)</code> commands will show the toolkit man pages without having to install them first.</p>
<p>So that you do not have to repeatedly answer all the <code>mkiocccentry(1)</code> questions,
use <code>mkiocccentry -a answers ...</code> to create a file containing the answers you first give,
so later enter <code>mkiocccentry -i answers ...</code> to reuse those same answers.</p>
<p>The <code>mkiocccentry -A answers ...</code> does the same thing except that the <strong>answers file will be overwritten</strong>.</p>
<p>The <code>mkiocccentry -i answers ...</code> will still be required to confirm “<em>Yes/No</em>” questions.</p>
<p>Use <code>mkiocccentry -Y -i answers ..</code> to force a yes answers with <strong>great caution</strong>
because it might force a yes answer to something you do <strong>NOT</strong> want, such as a
change in your code that violates a detected rule.
The <code>mkiocccentry -i answers ..</code> will still be required to confirm “<em>Yes/No</em>” questions.
While <code>mkiocccentry -Y -i answers ..</code> will force yes answers, use with <strong>great caution</strong>,
because it might force a yes answer to something you do <strong>NOT</strong> want.</p>
<p>To help with not having to repeatedly enter a UUID, put your UUID into a file and use
<code>mkiocccentry -u uuidfile ...</code>, or use <code>mkiocccentry -U UUID ...</code> to give the <code>UUID</code>
on the command line.</p>
<p>If you wish to <strong>test</strong> that your submission passes the <code>mkiocccentry(1)</code> tests
without having to type in answers each time, you can use the <code>-d</code> or <code>-s seed</code>
option to <code>mkiocccentry</code> for the tool to pseudo-randomly create answers for you.
For example:</p>
<pre><code> mkiocccentry -d workdir topdir</code></pre>
<p>Do <strong>NOT</strong> submit a tarball formed by <code>mkiocccentry -d ..</code> <strong>OR</strong> by
<code>mkiocccentry -s seed ..</code> <strong>OR</strong> by using the <code>test</code> UUID!</p>
<p>The <code>mkiocccentry(1)</code> tool creates an <code>xz(1)</code> compressed <strong>v7 format</strong> tarball using a <code>tar(1)</code>
command of the form:</p>
<pre><code> cd workdir/UUID-slot_num &amp;&amp; tar --format=v7 -cJf submit.UUID-slot_num.timestamp.txz UUID-slot_num</code></pre>
<p>In many places the <code>mkiocccentry(1)</code> tool will prompt you to verify what you input, allowing you to
correct details as you go along.</p>
<p>Pressing the “<em>enter key</em>” at the <code>mkiocccentry(1)</code> tool prompts will allow you
to proceed with a default, however make sure the default is the <strong>CORRECT</strong>
answer.</p>
<p>The <code>mkiocccentry(1)</code> tool will use code from <code>iocccsize(1)</code> which detects a number of
issues (such as <a href="rules.html#rule2-size">Rule 2 - Size restrictions</a>) that you may ignore,
however ignoring such issues <strong>comes with a SIGNIFICANT level of risk!</strong></p>
<p>Once the tarball is packaged it will
run <code>txzchk(1)</code>, which will also run <code>fnamchk(1)</code>, as part of its algorithm.</p>
<p>The use of <code>mkiocccentry -W ....</code> is <strong>highly discouraged</strong> as this may ignore
warnings about a problem that may cause your submission to be <strong>REJECTED!</strong>”</p>
<p>The same can be said of the <code>-Y</code> option, and to a lesser extent <code>-y</code>: the <code>-y</code>
is mostly for the test script and the <code>-Y</code> is like <code>-y</code> but even more
aggressive.</p>
<p>If <code>mkiocccentry</code> encounters an <strong>error</strong>, the program will exit and the xz
compressed tarball <strong>will NOT be generated</strong>: this is a <strong>feature, not a bug</strong>!</p>
<p>If you encounter a <strong>bug</strong> with the
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>
<strong>PLEASE run the <code>bug_report.sh</code> script to help us out here!</strong></p>
<p>While you don’t have to install the
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>,
if you don’t, in order to run a tool outside the repo directory
you will have to specify <code>mkiocccentry(1)</code> command line options to locate required tools
such as <code>chkentry(1)</code> (<code>mkiocccentry -C chkentry ..</code>), <code>txzchk(1)</code> (<code>mkiocccentry -T txzchk ..</code>),
and <code>fnamchk(1)</code> (<code>mkiocccentry -F fnamchk ..</code>).</p>
<p>The <code>mkiocccentry(1)</code> tool will ignore any filename or directory that begins with a period (<code>.</code>).</p>
<p>The <code>mkiocccentry(1)</code> tool will ignore all files that begin with <code>COPYING</code>, <code>COPYRIGHT</code>, and <code>LICENSE</code>, regardless
of filename case.</p>
<p>The <code>mkiocccentry(1)</code> tool will reject any of the following files if they are found directly under
the top level directory (<code>topdir</code>):</p>
<ul>
<li>README.md</li>
<li>index.html</li>
<li>prog</li>
<li>prog.alt</li>
<li>prog.alt.o</li>
<li>prog.orig.c</li>
<li>filenames matching the <code>[0-9][0-9][0-9][0-9]_*.tar.bz2</code> file glob</li>
</ul>
<p>The files listed in the above list are allowed to exist in sub-directories: just <strong>NOT</strong> directly under
the top level directory (<code>topdir</code>).</p>
<p>The <code>mkiocccentry(1)</code> tool evaluates all filenames and directory names in a case
independent way: thus <code>FOO</code>, <code>Foo</code>, and <code>foo</code> are considered the <strong>SAME</strong> file
even if your filesystem doesn’t do the same.</p>
<p>Having two or more filenames that differ only by case <strong>WILL</strong> lead to problems
because of the previous statement.</p>
<p>When the <code>mkiocccentry(1)</code> tool ignores a file, that file is <strong>NOT</strong> included as
part of your submission.</p>
<p>When the <code>mkiocccentry(1)</code> tool ignores a directory, that directory,
and everything under that directory is <strong>NOT</strong> included as part of
your submission.</p>
<p>The <code>mkiocccentry(1)</code> tool will ignore all symlinks.</p>
<p>Creating a directory directly under the top level directory (<code>topdir</code>)
that is normally considered to be a regular file, such as a directory
named <code>Makefile</code>, <code>prog.alt.c</code>, <code>prog.c</code>, <code>remarks.md</code>, <code>try.alt.sh</code>,
or <code>try.sh</code> is <strong>NOT</strong> a good idea and will likely cause the
<code>mkiocccentry(1)</code> tool to abort with a <strong>fatal error</strong>.</p>
<p>The required <code>Makefile</code> and <code>remarks.md</code> files may <strong>NOT</strong> be empty. This
does not mean just 0 bytes but also that it <strong>MUST</strong> have <strong>content</strong>, and
content that is relevant (e.g. a Makefile with just comments is <strong>NOT</strong>
allowed). However, with the exception of the <code>Makefile</code>, the <code>mkiocccentry(1)</code>
tool will <strong>ONLY</strong> check file size.</p>
<p>If the optional file <code>try.alt.sh</code>, or <code>try.sh</code> exists and is an empty file,
the <code>mkiocccentry(1)</code> tool will abort with a <strong>fatal error</strong>.</p>
<p>If the <code>mkiocccentry(1)</code> tool encounters anything that isn’t a file, isn’t a
directory, and isn’t a symlink (which the tool ignores), the <code>mkiocccentry(1)</code>
tool to abort with a <strong>fatal error</strong>.</p>
<p>See
FAQ on “<a href="../faq.html#mkiocccentry_bugs">How do I report bugs in an <code>mkiocccentry</code> tool?</a>”.</p>
<p>See <a href="rules.html#rule11-legal-rulea-abuse">Rule 11 - Legal rule abuse</a> for warnings about ignoring <code>mkiocccentry(1)</code> tool warnings.</p>
<p>See
FAQ on “<a href="../faq.html#fnamchk">What is the <code>fnamchk</code> tool?</a>”.</p>
<p>See
FAQ on “<a href="../faq.html#about_mkiocccentry">What is mkiocccentry in simple terms?</a>”.</p>
<p>See
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>
<p>Jump to: <a href="#">top</a></p>
<div id="general">
<h1 id="general-guidelines">General Guidelines</h1>
</div>
<h1 id="general-overall-guidelines">General Overall Guidelines</h1>
<div id="general-overall-guidelines">
<h2 id="overall-guidelines">Overall Guidelines</h2>
</div>
<p>These <a href="guidelines.html">guideline</a> are <strong>hints</strong> and <strong>suggestions</strong>, <strong>NOT</strong> <a href="rules.html">IOCCC rules</a>.</p>
<p>While submissions that violate <a href="guidelines.html">guideline</a> are allowed,
submissions that remain within the <a href="guidelines.html">IOCCC guidelines</a> are preferred.</p>
@@ -898,12 +824,10 @@ an appropriate level of obfuscation.</p>
<strong>VERY GOOD START</strong> to a great submission!</p>
<p>Jump to: <a href="#">top</a></p>
<div id="likes">
</div>
<div id="dislikes">
<h2 id="our-likes-and-dislikes">Our Likes and Dislikes:</h2>
</div>
</div>
<h1 id="our-likes-and-dislikes">OUR LIKES AND DISLIKES:</h1>
<p>We <strong>VERY MUCH LIKE</strong> submissions that use an edited variant of the
example Makefile, as described and linked to in the <a href="#makefile">Makefile section</a>,
renamed as <code>Makefile</code> of course. This makes it easier for the <a href="../judges.html">IOCCC judges</a>
@@ -1126,8 +1050,7 @@ sort of code will work:</p>
adapt to a wide collection of environments will be favored. For
example, don’t depend on a particular type or size of display.
Don’t assume the use of a particular browser. Instead assume a
generic browser that forms to a widely used <a href="https://www.w3.org/standards/">W3C
standard</a>.
generic browser that forms to a widely used <a href="https://www.w3.org/standards/">W3C standard</a>.
Don’t assume a particular sound sub-system or video driver is installed
in the OS. Instead, make use of a well known and widely available open
source program (one that actually works) to display audio/visual data.</p>
@@ -1290,10 +1213,151 @@ is a <strong>hint</strong>. :-)</p>
<code>remarks.md</code> file: it is a required file for a reason. :-)</p>
<p>Try to be even more creative!</p>
<p>Jump to: <a href="#">top</a></p>
<div id="fun">
<div id="mkiocccentry">
<div id="mkiocccentry_toolkit">
<h2 id="guidelines-for-the-mkiocccentry-toolkit">Guidelines for the mkiocccentry toolkit</h2>
</div>
</div>
<p>The <a href="https://submit.ioccc.org">IOCCC submit server</a>, and related services
use the <strong>most recent version</strong> of the
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>:
submissions that package using older versions of the
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>
are <strong>LIKELY</strong> to be <strong>REJECTED</strong>!</p>
<p>You <strong>REALLY SHOULD</strong> use the latest <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
toolkit</a> to package your submission
as submissions that use an older version are <strong>LIKELY</strong> to be <strong>REJECTED</strong>!</p>
<p>The <code>mkiocccentry(1)</code> tool runs a number of checks by way of these
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a> tools:</p>
<ul>
<li>iocccsize(1)</li>
<li>txzchk(1)</li>
<li>fnamchk(1)</li>
<li>chksubmit(1)</li>
<li>chkentry(1)</li>
</ul>
<p>Do <strong>NOT</strong> use <code>txzchk(1)</code> or <code>fnamchk(1)</code> command line options that are labeled
“<strong>for TESTING purposes</strong>” in their respective man pages.</p>
<p>Do <strong>NOT</strong> use <code>fnamchk(1)</code> command line options that are labeled “<strong>for TESTING purposes</strong>”
in the <code>fnamchk(1)</code> man page.</p>
<p>Do <strong>NOT</strong> use <code>chksubmit(1)</code> command line options that are labeled “<strong>for the use by the IOCCC judges only</strong>”
in the <code>chksubmit(1)</code> man page.
Similarly do <strong>NOT</strong> use <code>chkentry(1)</code> command line options marked “<strong>for the use
by the IOCCC judges only</strong>” in the <code>chkentry(1)</code> man page.</p>
<p>To view <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a> man pages,
while your current directory is the top of the source tree:</p>
<pre><code> man soup/man/man1/mkiocccentry.1
man soup/man/man1/iocccsize.1
man soup/man/man1/txzchk.1
man test_ioccc/man/man1/fnamchk.1
man soup/man/man1/chksubmit.1
man soup/man/man1/chkentry.1</code></pre>
<p>The above <code>man(1)</code> commands will show the toolkit man pages without having to install them first.</p>
<p>So that you do not have to repeatedly answer all the <code>mkiocccentry(1)</code> questions,
use <code>mkiocccentry -a answers ...</code> to create a file containing the answers you first give,
so later enter <code>mkiocccentry -i answers ...</code> to reuse those same answers.</p>
<p>The <code>mkiocccentry -A answers ...</code> does the same thing except that the <strong>answers file will be overwritten</strong>.</p>
<p>The <code>mkiocccentry -i answers ...</code> will still be required to confirm “<em>Yes/No</em>” questions.</p>
<p>Use <code>mkiocccentry -Y -i answers ..</code> to force a yes answers with <strong>great caution</strong>
because it might force a yes answer to something you do <strong>NOT</strong> want, such as a
change in your code that violates a detected rule.
The <code>mkiocccentry -i answers ..</code> will still be required to confirm “<em>Yes/No</em>” questions.
While <code>mkiocccentry -Y -i answers ..</code> will force yes answers, use with <strong>great caution</strong>,
because it might force a yes answer to something you do <strong>NOT</strong> want.</p>
<p>To help with not having to repeatedly enter a UUID, put your UUID into a file and use
<code>mkiocccentry -u uuidfile ...</code>, or use <code>mkiocccentry -U UUID ...</code> to give the <code>UUID</code>
on the command line.</p>
<p>If you wish to <strong>test</strong> that your submission passes the <code>mkiocccentry(1)</code> tests
without having to type in answers each time, you can use the <code>-d</code> or <code>-s seed</code>
option to <code>mkiocccentry</code> for the tool to pseudo-randomly create answers for you.
For example:</p>
<pre><code> mkiocccentry -d workdir topdir</code></pre>
<p>Do <strong>NOT</strong> submit a tarball formed by <code>mkiocccentry -d ..</code> <strong>OR</strong> by
<code>mkiocccentry -s seed ..</code> <strong>OR</strong> by using the <code>test</code> UUID!</p>
<p>The <code>mkiocccentry(1)</code> tool creates an <code>xz(1)</code> compressed <strong>v7 format</strong> tarball using a <code>tar(1)</code>
command of the form:</p>
<pre><code> cd workdir/UUID-slot_num &amp;&amp; tar --format=v7 -cJf submit.UUID-slot_num.timestamp.txz UUID-slot_num</code></pre>
<p>In many places the <code>mkiocccentry(1)</code> tool will prompt you to verify what you input, allowing you to
correct details as you go along.</p>
<p>Pressing the “<em>enter key</em>” at the <code>mkiocccentry(1)</code> tool prompts will allow you
to proceed with a default, however make sure the default is the <strong>CORRECT</strong>
answer.</p>
<p>The <code>mkiocccentry(1)</code> tool will use code from <code>iocccsize(1)</code> which detects a number of
issues (such as <a href="rules.html#rule2-size">Rule 2 - Size restrictions</a>) that you may ignore,
however ignoring such issues <strong>comes with a SIGNIFICANT level of risk!</strong></p>
<p>Once the tarball is packaged it will
run <code>txzchk(1)</code>, which will also run <code>fnamchk(1)</code>, as part of its algorithm.</p>
<p>The use of <code>mkiocccentry -W ....</code> is <strong>highly discouraged</strong> as this may ignore
warnings about a problem that may cause your submission to be <strong>REJECTED!</strong>”</p>
<p>The same can be said of the <code>-Y</code> option, and to a lesser extent <code>-y</code>: the <code>-y</code>
is mostly for the test script and the <code>-Y</code> is like <code>-y</code> but even more
aggressive.</p>
<p>If <code>mkiocccentry</code> encounters an <strong>error</strong>, the program will exit and the xz
compressed tarball <strong>will NOT be generated</strong>: this is a <strong>feature, not a bug</strong>!</p>
<p>If you encounter a <strong>bug</strong> with the
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>
<strong>PLEASE run the <code>bug_report.sh</code> script to help us out here!</strong></p>
<p>While you don’t have to install the
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>,
if you don’t, in order to run a tool outside the repo directory
you will have to specify <code>mkiocccentry(1)</code> command line options to locate required tools
such as <code>chkentry(1)</code> (<code>mkiocccentry -C chkentry ..</code>), <code>txzchk(1)</code> (<code>mkiocccentry -T txzchk ..</code>),
and <code>fnamchk(1)</code> (<code>mkiocccentry -F fnamchk ..</code>).</p>
<p>The <code>mkiocccentry(1)</code> tool will ignore any filename or directory that begins with a period (<code>.</code>).</p>
<p>The <code>mkiocccentry(1)</code> tool will ignore all files that begin with <code>COPYING</code>, <code>COPYRIGHT</code>, and <code>LICENSE</code>, regardless
of filename case.</p>
<p>The <code>mkiocccentry(1)</code> tool will reject any of the following files if they are found directly under
the top level directory (<code>topdir</code>):</p>
<ul>
<li>README.md</li>
<li>index.html</li>
<li>prog</li>
<li>prog.alt</li>
<li>prog.alt.o</li>
<li>prog.orig.c</li>
<li>filenames matching the <code>[0-9][0-9][0-9][0-9]_*.tar.bz2</code> file glob</li>
</ul>
<p>The files listed in the above list are allowed to exist in sub-directories: just <strong>NOT</strong> directly under
the top level directory (<code>topdir</code>).</p>
<p>The <code>mkiocccentry(1)</code> tool evaluates all filenames and directory names in a case
independent way: thus <code>FOO</code>, <code>Foo</code>, and <code>foo</code> are considered the <strong>SAME</strong> file
even if your filesystem doesn’t do the same.</p>
<p>Having two or more filenames that differ only by case <strong>WILL</strong> lead to problems
because of the previous statement.</p>
<p>When the <code>mkiocccentry(1)</code> tool ignores a file, that file is <strong>NOT</strong> included as
part of your submission.</p>
<p>When the <code>mkiocccentry(1)</code> tool ignores a directory, that directory,
and everything under that directory is <strong>NOT</strong> included as part of
your submission.</p>
<p>The <code>mkiocccentry(1)</code> tool will ignore all symlinks.</p>
<p>Creating a directory directly under the top level directory (<code>topdir</code>)
that is normally considered to be a regular file, such as a directory
named <code>Makefile</code>, <code>prog.alt.c</code>, <code>prog.c</code>, <code>remarks.md</code>, <code>try.alt.sh</code>,
or <code>try.sh</code> is <strong>NOT</strong> a good idea and will likely cause the
<code>mkiocccentry(1)</code> tool to abort with a <strong>fatal error</strong>.</p>
<p>The required <code>Makefile</code> and <code>remarks.md</code> files may <strong>NOT</strong> be empty. This
does not mean just 0 bytes but also that it <strong>MUST</strong> have <strong>content</strong>, and
content that is relevant (e.g. a Makefile with just comments is <strong>NOT</strong>
allowed). However, with the exception of the <code>Makefile</code>, the <code>mkiocccentry(1)</code>
tool will <strong>ONLY</strong> check file size.</p>
<p>If the optional file <code>try.alt.sh</code>, or <code>try.sh</code> exists and is an empty file,
the <code>mkiocccentry(1)</code> tool will abort with a <strong>fatal error</strong>.</p>
<p>If the <code>mkiocccentry(1)</code> tool encounters anything that isn’t a file, isn’t a
directory, and isn’t a symlink (which the tool ignores), the <code>mkiocccentry(1)</code>
tool to abort with a <strong>fatal error</strong>.</p>
<p>See
FAQ on “<a href="../faq.html#mkiocccentry_bugs">How do I report bugs in an <code>mkiocccentry</code> tool?</a>”.</p>
<p>See <a href="rules.html#rule11-legal-rulea-abuse">Rule 11 - Legal rule abuse</a> for warnings about ignoring <code>mkiocccentry(1)</code> tool warnings.</p>
<p>See
FAQ on “<a href="../faq.html#fnamchk">What is the <code>fnamchk</code> tool?</a>”.</p>
<p>See
FAQ on “<a href="../faq.html#about_mkiocccentry">What is mkiocccentry in simple terms?</a>”.</p>
<p>See
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>
<p>Jump to: <a href="#">top</a></p>
<div id="fun">
<h2 id="fundamental-guidelines">Fun😄damental Guidelines</h2>
</div>
<h1 id="fundamental-guidelines">Fun😄damental Guidelines</h1>
<p>The reason for the times of day are so that key IOCCC events are <strong>calculated</strong>
to be a <strong>fun</strong>ctional UTC time. :-)</p>
<p>At least 2 of several reasons for selecting the prime, 2503, for
@@ -1404,12 +1468,10 @@ it? :-)</p>
<p>With respect to <a href="#nested-functions">nested functions</a>, try <code>chkentry -b</code>.</p>
<p>Jump to: <a href="#">top</a></p>
<div id="more-information">
</div>
<div id="information">
<h1 id="for-more-information">For more information</h1>
</div>
</div>
<h1 id="for-more-information">FOR MORE INFORMATION:</h1>
<p>For questions or comments about the contest, see <a href="../contact.html">Contacting the IOCCC</a>.</p>
<p><strong>Be SURE</strong> to review the <a href="index.html">IOCCC Rules and Guidelines</a> as they
may (and <strong>often do</strong>) change from year to year.</p>
+308 -209
View File
@@ -13,7 +13,7 @@ writing by [contacting the judges](../contact.html).
# Guidelines Version
<p class="leftbar">
These IOCCC guidelines are version **29.02 2025-11-30**.
These IOCCC guidelines are version **29.03 2025-11-30**.
</p>
<p class="leftbar">
@@ -27,6 +27,49 @@ Because the **IOCCC29** guidelines was a substantial rewrite, only **important c
Be sure to read the [IOCCC rules](rules.html).
<div id="guideline1">
<div id="guideline1-c">
# Guidelines for [Rule 1 - C program](rules.html#rule1-c)
</div>
</div>
<p class="leftbar">
While you submission **MUST** be a C program, there is nothing wrong if your `prog.c`
file happens to also be a code for another language.
</p>
<p class="leftbar">
We would prefer if you do not use `#include` statements,
especially `#include` statements just to include lots of data,
to get around the
[Rule 2 - Size restrictions](rules.html#rule2-size-restrictions)
in an excessive way.
</p>
<p class="leftbar">
We would prefer if you do not require lots and lots of implicit defines on the C compiler command line
(i.e., lots of `-Dfoo`, and `-Dcurds=whey` style command line args to the C compiler)
to get around the
[Rule 2 - Size restrictions](rules.html#rule2-size-restrictions)
in an excessive way.
</p>
<p class="leftbar">
Some use of `#include` statements and/or implicit defines on the C compiler command line is perfectly reasonable.
</p>
<p class="leftbar">
As a guide, consider the level of `#include` statements and/or implicit defines on the C compiler command line
that are found in
[winning IOCCC entries](https://www.ioccc.org/years.html), and try to **NOT** set a new record.
</p>
<p class="leftbar">
If you believe you need to significantly abuse `#include` statements and/or implicit defines on the C compiler command line,
then try to make a case for why in your submission's `remarks.md` file: maybe the judges won't reject your submission.
</p>
<div id="guideline2">
<div id="guideline-2---size">
<div id="guideline2-size">
@@ -73,6 +116,9 @@ judges](../judges.html).
Make sure `iocccsize` does not flag any issues with your `prog.c`.
**NOTE**: by default `iocccsize` will only report the rule 2b size, unless the
code surpasses the limit.
There a much less need to `#define` C reserved words in an effort
to get around the size limits of
[Rule 2 - Size restrictions](rules.html#rule2-size)
@@ -84,6 +130,40 @@ Yes Virginia, **the previous guideline sentence is an important hint**!
Jump to: [top](#)
<div id="guideline3">
<div id="guideline-3---register">
# Guidelines for [Rule 3 - Register for the IOCCC](rules.html#rule3-register)
</div>
</div>
If a group of people work on a submission, then they should
[register for the IOCCC](../quick-start.html#enter)
using either a group email address, or an email address for one of the authors.
Processing your registration is an activity overseen by an IOCCC judge.
Please be **patient** while an IOCCC judge processes your registration.
It can take a few days to process your registration and for the server to
email your details, therefore make sure to allow yourself ample time to
register and submit your entries; **DO NOT WAIT UNTIL THE FINAL DAYS**
to register! The judges are **NOT** responsible for delayed or lost
email or for those who wait until the last minute to try to register!
If after a few days you believe your registration hasn't been process, then
[contact the Judges](../contact.html).
After your UUID and initial password are emailed to you, you have
up to fortnight (**14 days**) to login and change your temporary password.
If you fail to change your temporary password by that deadline, then you'll need to
[contact the Judges](../contact.html) by email to request a reset.
See [How to register for the IOCCC](register.html).
See [Entering the IOCCC: the bare minimum you need to know](../quick-start.html#enter).
Jump to: [top](#)
<div id="guideline7">
<div id="guideline-7---original-work">
@@ -116,6 +196,18 @@ FAQ on "[May I use AI, LLM, Virtual coding assistants, or similar tools to write
Jump to: [top](#)
<div id="guideline8">
<div id="guideline-8---submitting-requirements">
# Guidelines for [Rule 8 - Submitting requirements](rules.html#rule8-submitting-requirements)
</div>
</div>
Do **NOT** register more than one account just try and get around the limit on the number of submission slots.
Jump to: [top](#)
<div id="guideline11">
<div id="guideline-11---abuse">
# Guidelines for [Rule 11 - Legal rule abuse](rules.html#rule11-legal-rule-abuse)
@@ -307,206 +399,15 @@ FAQ on "[What are the details behind Rule 17 - Use mkiocccentry?](../faq.html#ru
Jump to: [top](#)
<div id="mkiocccentry"></div>
<div id="mkiocccentry_toolkit"></div>
# Guidelines for the mkiocccentry toolkit
The [IOCCC submit server](https://submit.ioccc.org), and related services
use the **most recent version** of the
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry):
submissions that package using older versions of the
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry)
are **LIKELY** to be **REJECTED**!
You **REALLY SHOULD** use the latest [mkiocccentry
toolkit](https://github.com/ioccc-src/mkiocccentry) to package your submission
as submissions that use an older version are **LIKELY** to be **REJECTED**!
The `mkiocccentry(1)` tool runs a number of checks by way of these
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) tools:
* iocccsize(1)
* txzchk(1)
* fnamchk(1)
* chksubmit(1)
* chkentry(1)
Do **NOT** use `txzchk(1)` or `fnamchk(1)` command line options that are labeled
"**for TESTING purposes**" in their respective man pages.
Do **NOT** use `fnamchk(1)` command line options that are labeled "**for TESTING purposes**"
in the `fnamchk(1)` man page.
Do **NOT** use `chksubmit(1)` command line options that are labeled "**for the use by the IOCCC judges only**"
in the `chksubmit(1)` man page.
Similarly do **NOT** use `chkentry(1)` command line options marked "**for the use
by the IOCCC judges only**" in the `chkentry(1)` man page.
To view [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) man pages,
while your current directory is the top of the source tree:
``` <!---sh-->
man soup/man/man1/mkiocccentry.1
man soup/man/man1/iocccsize.1
man soup/man/man1/txzchk.1
man test_ioccc/man/man1/fnamchk.1
man soup/man/man1/chksubmit.1
man soup/man/man1/chkentry.1
```
The above `man(1)` commands will show the toolkit man pages without having to install them first.
So that you do not have to repeatedly answer all the `mkiocccentry(1)` questions,
use `mkiocccentry -a answers ...` to create a file containing the answers you first give,
so later enter `mkiocccentry -i answers ...` to reuse those same answers.
The `mkiocccentry -A answers ...` does the same thing except that the **answers file will be overwritten**.
The `mkiocccentry -i answers ...` will still be required to confirm "_Yes/No_" questions.
Use `mkiocccentry -Y -i answers ..` to force a yes answers with **great caution**
because it might force a yes answer to something you do **NOT** want, such as a
change in your code that violates a detected rule.
The `mkiocccentry -i answers ..` will still be required to confirm "_Yes/No_" questions.
While `mkiocccentry -Y -i answers ..` will force yes answers, use with **great caution**,
because it might force a yes answer to something you do **NOT** want.
To help with not having to repeatedly enter a UUID, put your UUID into a file and use
`mkiocccentry -u uuidfile ...`, or use `mkiocccentry -U UUID ...` to give the `UUID`
on the command line.
If you wish to **test** that your submission passes the `mkiocccentry(1)` tests
without having to type in answers each time, you can use the `-d` or `-s seed`
option to `mkiocccentry` for the tool to pseudo-randomly create answers for you.
For example:
``` <!---sh-->
mkiocccentry -d workdir topdir
```
Do **NOT** submit a tarball formed by `mkiocccentry -d ..` **OR** by
`mkiocccentry -s seed ..` **OR** by using the `test` UUID!
The `mkiocccentry(1)` tool creates an `xz(1)` compressed **v7 format** tarball using a `tar(1)`
command of the form:
``` <!---sh-->
cd workdir/UUID-slot_num && tar --format=v7 -cJf submit.UUID-slot_num.timestamp.txz UUID-slot_num
```
In many places the `mkiocccentry(1)` tool will prompt you to verify what you input, allowing you to
correct details as you go along.
Pressing the "_enter key_" at the `mkiocccentry(1)` tool prompts will allow you
to proceed with a default, however make sure the default is the **CORRECT**
answer.
The `mkiocccentry(1)` tool will use code from `iocccsize(1)` which detects a number of
issues (such as [Rule 2 - Size restrictions](rules.html#rule2-size)) that you may ignore,
however ignoring such issues **comes with a SIGNIFICANT level of risk!**
Once the tarball is packaged it will
run `txzchk(1)`, which will also run `fnamchk(1)`, as part of its algorithm.
The use of `mkiocccentry -W ....` is **highly discouraged** as this may ignore
warnings about a problem that may cause your submission to be **REJECTED!**"
The same can be said of the `-Y` option, and to a lesser extent `-y`: the `-y`
is mostly for the test script and the `-Y` is like `-y` but even more
aggressive.
If `mkiocccentry` encounters an **error**, the program will exit and the xz
compressed tarball **will NOT be generated**: this is a **feature, not a bug**!
If you encounter a **bug** with the
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry)
**PLEASE run the `bug_report.sh` script to help us out here!**
While you don't have to install the
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry),
if you don't, in order to run a tool outside the repo directory
you will have to specify `mkiocccentry(1)` command line options to locate required tools
such as `chkentry(1)` (`mkiocccentry -C chkentry ..`), `txzchk(1)` (`mkiocccentry -T txzchk ..`),
and `fnamchk(1)` (`mkiocccentry -F fnamchk ..`).
The `mkiocccentry(1)` tool will ignore any filename or directory that begins with a period (`.`).
The `mkiocccentry(1)` tool will ignore all files that begin with `COPYING`, `COPYRIGHT`, and `LICENSE`, regardless
of filename case.
The `mkiocccentry(1)` tool will reject any of the following files if they are found directly under
the top level directory (`topdir`):
* README.md
* index.html
* prog
* prog.alt
* prog.alt.o
* prog.orig.c
* filenames matching the `[0-9][0-9][0-9][0-9]_*.tar.bz2` file glob
The files listed in the above list are allowed to exist in sub-directories: just **NOT** directly under
the top level directory (`topdir`).
The `mkiocccentry(1)` tool evaluates all filenames and directory names in a case
independent way: thus `FOO`, `Foo`, and `foo` are considered the **SAME** file
even if your filesystem doesn't do the same.
Having two or more filenames that differ only by case **WILL** lead to problems
because of the previous statement.
When the `mkiocccentry(1)` tool ignores a file, that file is **NOT** included as
part of your submission.
When the `mkiocccentry(1)` tool ignores a directory, that directory,
and everything under that directory is **NOT** included as part of
your submission.
The `mkiocccentry(1)` tool will ignore all symlinks.
Creating a directory directly under the top level directory (`topdir`)
that is normally considered to be a regular file, such as a directory
named `Makefile`, `prog.alt.c`, `prog.c`, `remarks.md`, `try.alt.sh`,
or `try.sh` is **NOT** a good idea and will likely cause the
`mkiocccentry(1)` tool to abort with a **fatal error**.
The required `Makefile` and `remarks.md` files may **NOT** be empty. This
does not mean just 0 bytes but also that it **MUST** have **content**, and
content that is relevant (e.g. a Makefile with just comments is **NOT**
allowed). However, with the exception of the `Makefile`, the `mkiocccentry(1)`
tool will **ONLY** check file size.
If the optional file `try.alt.sh`, or `try.sh` exists and is an empty file,
the `mkiocccentry(1)` tool will abort with a **fatal error**.
If the `mkiocccentry(1)` tool encounters anything that isn't a file, isn't a
directory, and isn't a symlink (which the tool ignores), the `mkiocccentry(1)`
tool to abort with a **fatal error**.
See
FAQ on "[How do I report bugs in an `mkiocccentry` tool?](../faq.html#mkiocccentry_bugs)".
See [Rule 11 - Legal rule abuse](rules.html#rule11-legal-rulea-abuse) for warnings about ignoring `mkiocccentry(1)` tool warnings.
See
FAQ on "[What is the `fnamchk` tool?](../faq.html#fnamchk)".
See
FAQ on "[What is mkiocccentry in simple terms?](../faq.html#about_mkiocccentry)".
See
FAQ on "[What is the mkiocccentry tool, how do I obtain it and how do I use it](../faq.html#mkiocccentry)".
Jump to: [top](#)
<div id="general">
# General Guidelines
</div>
# General Overall Guidelines
<div id="general-overall-guidelines">
## Overall Guidelines
</div>
These [guideline](guidelines.html) are **hints** and **suggestions**, **NOT** [IOCCC rules](rules.html).
@@ -601,10 +502,11 @@ A clean looking program with misleading comments and variable names might be a
Jump to: [top](#)
<div id="likes"></div>
<div id="dislikes"></div>
# OUR LIKES AND DISLIKES:
<div id="likes">
<div id="dislikes">
## Our Likes and Dislikes:
</div>
</div>
We **VERY MUCH LIKE** submissions that use an edited variant of the
example Makefile, as described and linked to in the [Makefile section](#makefile),
@@ -911,8 +813,7 @@ X client submissions should be as portable as possible. Submissions that
adapt to a wide collection of environments will be favored. For
example, don't depend on a particular type or size of display.
Don't assume the use of a particular browser. Instead assume a
generic browser that forms to a widely used [W3C
standard](https://www.w3.org/standards/).
generic browser that forms to a widely used [W3C standard](https://www.w3.org/standards/).
Don't assume a particular sound sub-system or video driver is installed
in the OS. Instead, make use of a well known and widely available open
source program (one that actually works) to display audio/visual data.
@@ -1111,9 +1012,206 @@ Try to be even more creative!
Jump to: [top](#)
<div id="fun"></div>
<div id="mkiocccentry">
<div id="mkiocccentry_toolkit">
## Guidelines for the mkiocccentry toolkit
</div>
</div>
# Fun😄damental Guidelines
The [IOCCC submit server](https://submit.ioccc.org), and related services
use the **most recent version** of the
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry):
submissions that package using older versions of the
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry)
are **LIKELY** to be **REJECTED**!
You **REALLY SHOULD** use the latest [mkiocccentry
toolkit](https://github.com/ioccc-src/mkiocccentry) to package your submission
as submissions that use an older version are **LIKELY** to be **REJECTED**!
The `mkiocccentry(1)` tool runs a number of checks by way of these
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) tools:
* iocccsize(1)
* txzchk(1)
* fnamchk(1)
* chksubmit(1)
* chkentry(1)
Do **NOT** use `txzchk(1)` or `fnamchk(1)` command line options that are labeled
"**for TESTING purposes**" in their respective man pages.
Do **NOT** use `fnamchk(1)` command line options that are labeled "**for TESTING purposes**"
in the `fnamchk(1)` man page.
Do **NOT** use `chksubmit(1)` command line options that are labeled "**for the use by the IOCCC judges only**"
in the `chksubmit(1)` man page.
Similarly do **NOT** use `chkentry(1)` command line options marked "**for the use
by the IOCCC judges only**" in the `chkentry(1)` man page.
To view [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) man pages,
while your current directory is the top of the source tree:
``` <!---sh-->
man soup/man/man1/mkiocccentry.1
man soup/man/man1/iocccsize.1
man soup/man/man1/txzchk.1
man test_ioccc/man/man1/fnamchk.1
man soup/man/man1/chksubmit.1
man soup/man/man1/chkentry.1
```
The above `man(1)` commands will show the toolkit man pages without having to install them first.
So that you do not have to repeatedly answer all the `mkiocccentry(1)` questions,
use `mkiocccentry -a answers ...` to create a file containing the answers you first give,
so later enter `mkiocccentry -i answers ...` to reuse those same answers.
The `mkiocccentry -A answers ...` does the same thing except that the **answers file will be overwritten**.
The `mkiocccentry -i answers ...` will still be required to confirm "_Yes/No_" questions.
Use `mkiocccentry -Y -i answers ..` to force a yes answers with **great caution**
because it might force a yes answer to something you do **NOT** want, such as a
change in your code that violates a detected rule.
The `mkiocccentry -i answers ..` will still be required to confirm "_Yes/No_" questions.
While `mkiocccentry -Y -i answers ..` will force yes answers, use with **great caution**,
because it might force a yes answer to something you do **NOT** want.
To help with not having to repeatedly enter a UUID, put your UUID into a file and use
`mkiocccentry -u uuidfile ...`, or use `mkiocccentry -U UUID ...` to give the `UUID`
on the command line.
If you wish to **test** that your submission passes the `mkiocccentry(1)` tests
without having to type in answers each time, you can use the `-d` or `-s seed`
option to `mkiocccentry` for the tool to pseudo-randomly create answers for you.
For example:
``` <!---sh-->
mkiocccentry -d workdir topdir
```
Do **NOT** submit a tarball formed by `mkiocccentry -d ..` **OR** by
`mkiocccentry -s seed ..` **OR** by using the `test` UUID!
The `mkiocccentry(1)` tool creates an `xz(1)` compressed **v7 format** tarball using a `tar(1)`
command of the form:
``` <!---sh-->
cd workdir/UUID-slot_num && tar --format=v7 -cJf submit.UUID-slot_num.timestamp.txz UUID-slot_num
```
In many places the `mkiocccentry(1)` tool will prompt you to verify what you input, allowing you to
correct details as you go along.
Pressing the "_enter key_" at the `mkiocccentry(1)` tool prompts will allow you
to proceed with a default, however make sure the default is the **CORRECT**
answer.
The `mkiocccentry(1)` tool will use code from `iocccsize(1)` which detects a number of
issues (such as [Rule 2 - Size restrictions](rules.html#rule2-size)) that you may ignore,
however ignoring such issues **comes with a SIGNIFICANT level of risk!**
Once the tarball is packaged it will
run `txzchk(1)`, which will also run `fnamchk(1)`, as part of its algorithm.
The use of `mkiocccentry -W ....` is **highly discouraged** as this may ignore
warnings about a problem that may cause your submission to be **REJECTED!**"
The same can be said of the `-Y` option, and to a lesser extent `-y`: the `-y`
is mostly for the test script and the `-Y` is like `-y` but even more
aggressive.
If `mkiocccentry` encounters an **error**, the program will exit and the xz
compressed tarball **will NOT be generated**: this is a **feature, not a bug**!
If you encounter a **bug** with the
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry)
**PLEASE run the `bug_report.sh` script to help us out here!**
While you don't have to install the
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry),
if you don't, in order to run a tool outside the repo directory
you will have to specify `mkiocccentry(1)` command line options to locate required tools
such as `chkentry(1)` (`mkiocccentry -C chkentry ..`), `txzchk(1)` (`mkiocccentry -T txzchk ..`),
and `fnamchk(1)` (`mkiocccentry -F fnamchk ..`).
The `mkiocccentry(1)` tool will ignore any filename or directory that begins with a period (`.`).
The `mkiocccentry(1)` tool will ignore all files that begin with `COPYING`, `COPYRIGHT`, and `LICENSE`, regardless
of filename case.
The `mkiocccentry(1)` tool will reject any of the following files if they are found directly under
the top level directory (`topdir`):
* README.md
* index.html
* prog
* prog.alt
* prog.alt.o
* prog.orig.c
* filenames matching the `[0-9][0-9][0-9][0-9]_*.tar.bz2` file glob
The files listed in the above list are allowed to exist in sub-directories: just **NOT** directly under
the top level directory (`topdir`).
The `mkiocccentry(1)` tool evaluates all filenames and directory names in a case
independent way: thus `FOO`, `Foo`, and `foo` are considered the **SAME** file
even if your filesystem doesn't do the same.
Having two or more filenames that differ only by case **WILL** lead to problems
because of the previous statement.
When the `mkiocccentry(1)` tool ignores a file, that file is **NOT** included as
part of your submission.
When the `mkiocccentry(1)` tool ignores a directory, that directory,
and everything under that directory is **NOT** included as part of
your submission.
The `mkiocccentry(1)` tool will ignore all symlinks.
Creating a directory directly under the top level directory (`topdir`)
that is normally considered to be a regular file, such as a directory
named `Makefile`, `prog.alt.c`, `prog.c`, `remarks.md`, `try.alt.sh`,
or `try.sh` is **NOT** a good idea and will likely cause the
`mkiocccentry(1)` tool to abort with a **fatal error**.
The required `Makefile` and `remarks.md` files may **NOT** be empty. This
does not mean just 0 bytes but also that it **MUST** have **content**, and
content that is relevant (e.g. a Makefile with just comments is **NOT**
allowed). However, with the exception of the `Makefile`, the `mkiocccentry(1)`
tool will **ONLY** check file size.
If the optional file `try.alt.sh`, or `try.sh` exists and is an empty file,
the `mkiocccentry(1)` tool will abort with a **fatal error**.
If the `mkiocccentry(1)` tool encounters anything that isn't a file, isn't a
directory, and isn't a symlink (which the tool ignores), the `mkiocccentry(1)`
tool to abort with a **fatal error**.
See
FAQ on "[How do I report bugs in an `mkiocccentry` tool?](../faq.html#mkiocccentry_bugs)".
See [Rule 11 - Legal rule abuse](rules.html#rule11-legal-rulea-abuse) for warnings about ignoring `mkiocccentry(1)` tool warnings.
See
FAQ on "[What is the `fnamchk` tool?](../faq.html#fnamchk)".
See
FAQ on "[What is mkiocccentry in simple terms?](../faq.html#about_mkiocccentry)".
See
FAQ on "[What is the mkiocccentry tool, how do I obtain it and how do I use it](../faq.html#mkiocccentry)".
Jump to: [top](#)
<div id="fun">
## Fun😄damental Guidelines
</div>
The reason for the times of day are so that key IOCCC events are **calculated**
to be a **fun**ctional UTC time. :-)
@@ -1254,10 +1352,11 @@ With respect to [nested functions](#nested-functions), try `chkentry -b`.
Jump to: [top](#)
<div id="more-information"></div>
<div id="information"></div>
# FOR MORE INFORMATION:
<div id="more-information">
<div id="information">
# For more information
</div>
</div>
For questions or comments about the contest, see [Contacting the IOCCC](../contact.html).
+12 -19
View File
@@ -480,7 +480,7 @@ granted provided this copyright and notice are included in its entirety
and remains unaltered. All other uses <strong>MUST</strong> receive prior permission in
writing by <a href="../contact.html">contacting the judges</a>.</p>
<h2 id="rules-version">Rules Version</h2>
<p>These IOCCC Rules are version <strong>29.10 2025-11-30</strong>.</p>
<p>These IOCCC Rules are version <strong>29.11 2025-11-30</strong>.</p>
<p>Reminder: be SURE to read the <a href="guidelines.html">IOCCC guidelines</a>.</p>
<div id="rule0">
<h2 id="rule-0---dates">Rule 0 - Dates</h2>
@@ -494,13 +494,16 @@ allowing people to <a href="submit.html">upload submissions</a>.</p>
when people will no longer be allowed to upload submissions.</p>
<p>The above <strong>dates and times may change <em>AT ANY TIME</em></strong> until the <a href="../status.html">contest status</a> is <strong>open</strong>.</p>
<p>The above timestamps are in “<em>YYYY-MM-DD HH:MM:SS.micros UTC</em>” format.</p>
<p>See <a href="../quick-start.html#enter">entering the IOCCC</a>.</p>
<p>See <a href="../quick-start.html#enter">Entering the IOCCC: the bare minimum you need to know</a>.</p>
<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>
<div id="rule1">
<div id="rule1-c">
<h2 id="rule-1---c-program">Rule 1 - C program</h2>
</div>
<p>Your submission <strong>MUST</strong> be a C program that does NOT <code>#include</code> data files.</p>
</div>
<p>Your submission <strong>MUST</strong> be a C program.</p>
<p>See the <a href="guidelines.html#guidelines-for-rule-1---c-program">Guidelines for Rule 1 - C program</a>.</p>
<div id="rule2">
<div id="rule2-size-restrictions">
<div id="rule2-size">
@@ -526,8 +529,6 @@ During development this can be checked using <code>iocccsize(1)</code>:</p>
</div>
<p>The overall maximum size of your <code>prog.c</code> program source <strong>MUST NOT</strong>
exceed <strong>4993</strong> bytes.</p>
<p><strong>NOTE</strong>: by default <code>iocccsize</code> will only report the rule 2b size, unless the
code surpasses the limit.</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-net-size">
@@ -550,16 +551,9 @@ Use mkiocccentry</a>.</p>
<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>
<p>A few days after registering, you’ll receive your UUID username and
temporary password, which you <strong>MUST</strong> change within 14 days. If you
fail to change it in a timely manner, you’ll need to
<a href="../contact.html">contact the Judges</a> by email to request a reset.</p>
<p>It can take a few days to process your registration and for the server to
email your details, therefore make sure to allow yourself ample time to
register and submit your entries; <strong>DO NOT WAIT UNTIL THE FINAL DAYS</strong>
to register! The judges are <strong>NOT</strong> responsible for delayed or lost
email or for those who wait until the last minute to try to register!</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="../quick-start.html#enter">Entering the IOCCC: the bare minimum you need to know</a>.</p>
<p>See <a href="rules.html#rule8">Rule 8 - Submitting requirements</a>.</p>
<p>See <a href="guidelines.html#guideline-3---register">Guidelines for Rule 3 - Register for the IOCCC</a>.</p>
<div id="rule4">
<div id="rule4-required-files">
@@ -664,8 +658,9 @@ owner(s) to its use. If you submit <strong>ANY</strong> content that is owned by
<strong>MUST</strong> detail that ownership, i.e., who owns what, and document the permission
you obtained from them in your <code>remarks.md</code> file.</p>
<p>You are permitted to use tools to write your code.</p>
<p>See <a href="rules.html#rule16-anonymous-judging">Rule 16 - Anonymous Judging</a>.</p>
<p>See <a href="guidelines.html#guideline-7---original-work">Guidelines for Rule 7 - Original Work</a>.</p>
<p>See <a href="rules.html#rule16-anonymous-judging">Rule 16 - Anonymous Judging</a>,
and
<a href="guidelines.html#guideline-7---original-work">Guidelines for Rule 7 - Original Work</a>.</p>
<div id="rule8">
<div id="rule8-submitting-requirements">
<h2 id="rule-8---submitting-requirements">Rule 8 - Submitting requirements</h2>
@@ -682,7 +677,6 @@ and resubmit. In order to avoid potential packaging errors, it is <strong>highly
recommended</strong> to use <code>mkiocccentry(1)</code>, <strong>AND</strong> to check from time to time the
status on the submit server, to see if any tests run by the server failed to
validate your submission.</p>
<p>Do <strong>NOT</strong> register more than one account!</p>
<p>See
<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>,
@@ -740,8 +734,7 @@ is rejected.</p>
version, <strong>PLEASE</strong> indicate that in your <code>remarks.md</code> file of your non-rule
abusing version so that the Judges don’t think you uploaded a duplicate into a
wrong slot by mistake.</p>
<p>See <a href="guidelines.html#guideline-11---abuse">Guidelines for Rule 11 - Legal rule
abuse</a>.</p>
<p>See <a href="guidelines.html#guideline-11---abuse">Guidelines for Rule 11 - Legal rule abuse</a>.</p>
<div id="rule12">
<div id="rule12-utf8">
<h2 id="rule-12---utf-8">Rule 12 - UTF-8</h2>
+13 -23
View File
@@ -39,7 +39,7 @@ writing by [contacting the judges](../contact.html).
## Rules Version
These IOCCC Rules are version **29.10 2025-11-30**.
These IOCCC Rules are version **29.11 2025-11-30**.
Reminder: be SURE to read the [IOCCC guidelines](guidelines.html).
@@ -63,17 +63,21 @@ The above **dates and times may change _AT ANY TIME_** until the [contest status
The above timestamps are in "_YYYY-MM-DD HH:MM:SS.micros UTC_" format.
See [entering the IOCCC](../quick-start.html#enter).
See [Entering the IOCCC: the bare minimum you need to know](../quick-start.html#enter).
See
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-c">
## Rule 1 - C program
</div>
</div>
Your submission **MUST** be a C program that does NOT `#include` data files.
Your submission **MUST** be a C program.
See the [Guidelines for Rule 1 - C program](guidelines.html#guidelines-for-rule-1---c-program).
<div id="rule2">
@@ -110,9 +114,6 @@ See the [Guidelines for Rule 2 - Size restrictions](guidelines.html#guideline-2-
The overall maximum size of your `prog.c` program source **MUST NOT**
exceed **4993** bytes.
**NOTE**: by default `iocccsize` will only report the rule 2b size, unless the
code surpasses the limit.
See [Entering the IOCCC: the bare minimum you need to know](../quick-start.html#enter).
@@ -143,20 +144,12 @@ 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**.
A few days after registering, you'll receive your UUID username and
temporary password, which you **MUST** change within 14 days. If you
fail to change it in a timely manner, you'll need to
[contact the Judges](../contact.html) by email to request a reset.
temporary password, which you **MUST** change within 14 days.
It can take a few days to process your registration and for the server to
email your details, therefore make sure to allow yourself ample time to
register and submit your entries; **DO NOT WAIT UNTIL THE FINAL DAYS**
to register! The judges are **NOT** responsible for delayed or lost
email or for those who wait until the last minute to try to register!
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 [Rule 8 - Submitting requirements](rules.html#rule8).
See [Guidelines for Rule 3 - Register for the IOCCC](guidelines.html#guideline-3---register).
@@ -300,9 +293,9 @@ you obtained from them in your `remarks.md` file.
You are permitted to use tools to write your code.
See [Rule 16 - Anonymous Judging](rules.html#rule16-anonymous-judging).
See [Guidelines for Rule 7 - Original Work](guidelines.html#guideline-7---original-work).
See [Rule 16 - Anonymous Judging](rules.html#rule16-anonymous-judging),
and
[Guidelines for Rule 7 - Original Work](guidelines.html#guideline-7---original-work).
<div id="rule8">
@@ -325,8 +318,6 @@ 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.
Do **NOT** register more than one account!
See
[Rule 3 - Registering for the IOCCC](rules.html#rule3-register),
[Rule 15 - GNU Makefile](rules.html#rule15-gnu-makefile),
@@ -403,8 +394,7 @@ version, **PLEASE** indicate that in your `remarks.md` file of your non-rule
abusing version so that the Judges don't think you uploaded a duplicate into a
wrong slot by mistake.
See [Guidelines for Rule 11 - Legal rule
abuse](guidelines.html#guideline-11---abuse).
See [Guidelines for Rule 11 - Legal rule abuse](guidelines.html#guideline-11---abuse).
<div id="rule12">
+5 -5
View File
@@ -16826,11 +16826,11 @@
</url>
<url>
<loc>https://www.ioccc.org/next/guidelines.html</loc>
<lastmod>2025-12-01T05:53:50+00:00</lastmod>
<lastmod>2025-12-01T09:13:14+00:00</lastmod>
</url>
<url>
<loc>https://www.ioccc.org/next/guidelines.md</loc>
<lastmod>2025-12-01T05:53:50+00:00</lastmod>
<lastmod>2025-12-01T09:13:08+00:00</lastmod>
</url>
<url>
<loc>https://www.ioccc.org/next/index.html</loc>
@@ -16870,11 +16870,11 @@
</url>
<url>
<loc>https://www.ioccc.org/next/rules.html</loc>
<lastmod>2025-12-01T05:53:50+00:00</lastmod>
<lastmod>2025-12-01T09:04:25+00:00</lastmod>
</url>
<url>
<loc>https://www.ioccc.org/next/rules.md</loc>
<lastmod>2025-12-01T05:53:50+00:00</lastmod>
<lastmod>2025-12-01T09:06:35+00:00</lastmod>
</url>
<url>
<loc>https://www.ioccc.org/next/submit.html</loc>
@@ -16938,7 +16938,7 @@
</url>
<url>
<loc>https://www.ioccc.org/status.html</loc>
<lastmod>2025-12-01T06:08:29+00:00</lastmod>
<lastmod>2025-12-01T09:18:23+00:00</lastmod>
</url>
<url>
<loc>https://www.ioccc.org/status.json</loc>