checkpoint rules version 29.00 2025-11-19.
This is a work in progress towards an improved rule set for **IOCCC29**. Links to rules elsewhere on the site were modified as needed.
This commit is contained in:
1 parent
1be0e93dbf
commit
ea37a9f559
17 files changed
+1068
-1722
No files matched your search
+255
-622
@@ -473,633 +473,266 @@ mastodon feed</a> page and/or mastodon
|
||||
app from time to time to view IOCCC mastodon updates.</p>
|
||||
<!-- END: the next line ends content from: inc/rules.closed.hdr -->
|
||||
<!-- This is the last line modified by the tool: bin/gen-status.sh -->
|
||||
<h1 id="th-international-obfuscated-c-code-contest-official-rules">28th International Obfuscated C Code Contest Official Rules</h1>
|
||||
<p class="leftbar">
|
||||
Copyright © 2024-2025 Leonid A. Broukhis and Landon Curt Noll.
|
||||
</p>
|
||||
<h2 id="th-international-obfuscated-c-code-contest-official-rules">29th International Obfuscated C Code Contest Official Rules</h2>
|
||||
<p>Copyright © 2024-2025 Leonid A. Broukhis and Landon Curt Noll.</p>
|
||||
<p>All Rights Reserved. Permission for personal, education or non-profit use is
|
||||
granted provided this this copyright and notice are included in its entirety
|
||||
and remains unaltered. All other uses must 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>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rules_version">
|
||||
<div id="version">
|
||||
<h2 id="ioccc-rules-version">IOCCC Rules version</h2>
|
||||
</div>
|
||||
</div>
|
||||
<p class="leftbar">
|
||||
These <a href="rules.html">IOCCC rules</a> are version <strong>28.31 2025-11-17</strong>.
|
||||
</p>
|
||||
<p>The markdown form of these rules <a href="rules.md" download="rules.md">is
|
||||
available for download</a>.</p>
|
||||
<p><strong>IMPORTANT</strong>: Be sure to read the <a href="guidelines.html">IOCCC guidelines</a>.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="change_marks">
|
||||
<h3 id="change-marks">Change marks</h3>
|
||||
</div>
|
||||
<p class="leftbar">
|
||||
<strong>← Lines that start with this symbol indicate a change from the previous IOCCC</strong>
|
||||
</p>
|
||||
<p class="leftbar">
|
||||
Most lines that were modified since the previous IOCCC start with a solid
|
||||
4 pixel black left border (or, in the case of a code block or blockquote,
|
||||
just a vertical bar). We say <em>most lines</em> because we sometimes forget
|
||||
to bar modified sections.
|
||||
</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="obfuscate">
|
||||
<h1 id="obfuscate-defined">Obfuscate defined:</h1>
|
||||
</div>
|
||||
<p>tr.v. -cated, -cating, -cates.
|
||||
<br><br>
|
||||
<strong>1a.</strong> To render obscure.<br>
|
||||
<strong>1b.</strong> To darken.
|
||||
<br><br>
|
||||
<strong>2.</strong> To confuse: his emotions obfuscated his judgment.<br>
|
||||
[LLat. obfuscare, to darken : ob(intensive) + Lat. fuscare,<br>
|
||||
to darken < fuscus, dark.] -obfuscation n. obfuscatory adj.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="goals">
|
||||
<h1 id="goals-of-the-ioccc-international-obfuscated-c-code-contest">Goals of the IOCCC (International Obfuscated C Code Contest)</h1>
|
||||
</div>
|
||||
<p class="leftbar">
|
||||
See the <a href="../index.html#goals">IOCCC goals</a>.
|
||||
</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="dates">
|
||||
<h1 id="important-ioccc-dates">Important IOCCC dates</h1>
|
||||
</div>
|
||||
<p class="leftbar">
|
||||
This IOCCC runs from <strong>2024-12-29 23:58:13.213455 UTC</strong> to <strong>2025-06-05 04:03:02.010099 UTC</strong>.
|
||||
This IOCCC marks the <strong>40th anniversary</strong> of the contest!
|
||||
</p>
|
||||
<p class="leftbar">
|
||||
This contest will enter the <strong><a href="../faq.html#open">open</a></strong> state on <strong>2025-03-05 23:19:17.131107 UTC</strong>.
|
||||
</p>
|
||||
<p class="leftbar">
|
||||
This contest will enter the <strong><a href="../faq.html#judging">judging</a></strong> state on <strong>2025-06-05 04:03:02.010099 UTC</strong>.
|
||||
</p>
|
||||
<p class="leftbar">
|
||||
<strong>IMPORTANT NOTE</strong>: Until the contest enters the <strong><a href="../faq.html#open">open</a></strong> state, any or all
|
||||
of the above <strong>dates and times may change</strong>!
|
||||
</p>
|
||||
<p>See the
|
||||
FAQ on “<a href="../faq.html#mkiocccentry">obtaining and compiling the mkiocccentry tools</a>”
|
||||
and the
|
||||
FAQ on “<a href="../quick-start.html#enter">how to enter the IOCCC</a>”
|
||||
as that FAQ has important details on
|
||||
<a href="../next/register.html">how to register</a>
|
||||
as well as
|
||||
<a href="../next/submit.html">how to upload your submission</a> to the IOCCC.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rules">
|
||||
<h1 id="ioccc-rules">IOCCC RULES</h1>
|
||||
</div>
|
||||
<p>To help us with the volume of submissions, we ask that you follow the rules below.</p>
|
||||
<div id="rule_abuse">
|
||||
<h4 id="a-warning-about-rule-abuse">A warning about rule abuse</h4>
|
||||
</div>
|
||||
<p><strong>WARNING:</strong> Abusing these rules comes with a <strong>fair amount of risk</strong>
|
||||
that your submission will be rejected. If you do plan to abuse the
|
||||
rules, then you <strong>MUST CLEARLY EXPLAIN THE RATIONALE</strong> in your <code>remarks.md</code> file,
|
||||
as to why you think your rule abuse should be allowed, and as to why you think
|
||||
your submission should not be rejected for a rule violation.
|
||||
<strong>Nevertheless, <em>even if you do</em> explain this in your <code>remarks.md</code> file
|
||||
you submission may still be rejected</strong>.</p>
|
||||
<p>If you use the most recently released official IOCCC submission packaging tool
|
||||
(hereby referred to as <code>mkiocccentry(1)</code>), which we <strong>STRONGLY recommend you
|
||||
do</strong>, then the <code>mkiocccentry(1)</code> tool will warn you if there appears to be a
|
||||
violation in certain rules (not all can be detected). The <code>mkiocccentry(1)</code>
|
||||
tool also runs <code>chksubmit(1)</code> and <code>txzchk(1)</code>, the latter of which runs
|
||||
<code>fnamchk(1)</code>. Overriding problems detected by any of these tools comes with a
|
||||
<strong>fair amount of risk</strong> that your submission will be rejected.</p>
|
||||
<p>If you do override a rule violation warning from the <code>mkiocccentry(1)</code> or
|
||||
another related IOCCC tool, or otherwise plan to abuse the rules, then you
|
||||
<strong>MUST CLEARLY EXPLAIN THE RATIONALE</strong> of why you are attempting to abuse the
|
||||
rules in your <code>remarks.md</code> file. <strong><em>Even if you do</em> explain this in your
|
||||
<code>remarks.md</code> file your submission may still be rejected</strong>.</p>
|
||||
<p><strong>HINT:</strong> If you do submit such a rule abusing / rule violating
|
||||
submission, then consider also submitting an alternate version in a
|
||||
<strong>different submission</strong> server slot that does <strong>NOT</strong> violate the rules
|
||||
in case your rule abuse excuse is rejected.</p>
|
||||
<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 abusing
|
||||
version so that the <a href="../judges.html">IOCCC judges</a> do not think you uploaded a
|
||||
duplicate into a wrong slot by mistake.</p>
|
||||
<p>Uploading a tarball not formed by <code>mkiocccentry(1)</code> puts you at a very big risk of
|
||||
violating <a href="rules.html#rule17">Rule 17</a>, especially as <code>mkiocccentry(1)</code> does a
|
||||
great number of things that are required, and it also runs many checks, and if
|
||||
any of those checks fail, you are at a very great risk of having your submission
|
||||
rejected for violating <a href="rules.html#rule17">Rule 17</a>.</p>
|
||||
<p>See also <a href="#rule13">Rule 12</a>.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule0">
|
||||
<h2 id="rule-0">Rule 0</h2>
|
||||
</div>
|
||||
<p>Just as C starts at 0, so the IOCCC starts at <a href="#rule0">Rule 0</a>. :-)</p>
|
||||
<p>The “<a href="#dates">Important IOCCC dates</a>” section above is part of this rule.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule1">
|
||||
<h2 id="rule-1">Rule 1</h2>
|
||||
</div>
|
||||
<p>Your submission must be a C program.</p>
|
||||
<p>You see, the contest is not called the <strong>International Obfuscated JSON Contest</strong>
|
||||
(<strong>IOJSONC</strong>), even if the <a href="https://github.com/xexyl/jparse/blob/master/json_README.md#so-called-json-spec">so-called JSON
|
||||
spec</a> might be called obfuscated
|
||||
by some people. :-)</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule2">
|
||||
<h2 id="rule-2">Rule 2</h2>
|
||||
</div>
|
||||
<p><a href="#rule2">Rule 2</a> requires that your submission satisfy <strong>BOTH</strong> <a href="#rule2a">Rule
|
||||
2a</a> <strong>AND</strong> <a href="#rule2b">Rule 2b</a>.</p>
|
||||
<p>You may check your code with respect to <a href="#rule2a">Rule 2a</a> and <a href="#rule2b">Rule
|
||||
2b</a> prior to submitting your code by giving the filename
|
||||
as a command like argument to the <code>iocccsize(1)</code> tool. For example:</p>
|
||||
<pre><code> iocccsize prog.c</code></pre>
|
||||
<p>The source to <code>iocccsize(1)</code> may be found in the
|
||||
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a>.</p>
|
||||
<p>See also the
|
||||
FAQ on “<a href="../faq.html#mkiocccentry_test">how to further test your submission</a>”
|
||||
for more more thorough testing, including <a href="#rule2">Rule 2</a>.</p>
|
||||
<p>See also <a href="#rule2a">Rule 2a</a>, <a href="#rule2b">Rule 2b</a>, and <a href="#rule17">Rule 17</a>.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule2a">
|
||||
<h2 id="rule-2a">Rule 2a</h2>
|
||||
</div>
|
||||
<p class="leftbar">
|
||||
The size of your program source <strong>MUST NOT exceed 4993 bytes</strong>.
|
||||
</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule2b">
|
||||
<h2 id="rule-2b">Rule 2b</h2>
|
||||
</div>
|
||||
<p>When the filename of your program source is given as a command line argument to
|
||||
the latest version of the official IOCCC size tool (hereby referred to as
|
||||
<code>iocccsize(1)</code>), the value printed <strong>MUST NOT exceed <em>2503</em></strong>.</p>
|
||||
<p>See also <a href="#rule17">Rule 17</a>.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule3">
|
||||
<h2 id="rule-3">Rule 3</h2>
|
||||
</div>
|
||||
<p>You must <a href="../next/register.html">register</a> in order to submit your entry to the IOCCC.
|
||||
You may <a href="../next/register.html">register</a> while the contest is either
|
||||
<strong><a href="../faq.html#pending">pending</a></strong> or <strong><a href="../faq.html#open">open</a></strong>.</p>
|
||||
<p>When the contest is <strong><a href="../faq.html#open">open</a></strong>, the <a href="https://submit.ioccc.org">submit server</a>
|
||||
will email you your <a href="https://submit.ioccc.org">submit server</a>
|
||||
<strong>Username</strong> and <strong>Initial password</strong>. <strong>Please be patient</strong> as it may take some time,
|
||||
perhaps as much as a few days, for your registration to be processed and for that email to be sent.</p>
|
||||
<p>Those who <a href="../next/register.html">register</a> while the contest status is <strong><a href="../faq.html#pending">pending</a></strong>
|
||||
will receive their email (containing their <a href="https://submit.ioccc.org">submit server</a> <strong>Username</strong>
|
||||
and <strong>Initial password</strong>), later: usually a few days around the time when the contest status
|
||||
becomes <strong><a href="../faq.html#open">open</a></strong>.</p>
|
||||
<p>Once that email with your <strong>Username</strong> and <strong>Initial password</strong> is sent, you
|
||||
will have fortnight (<strong>14 days</strong>) to <a href="../next/pw-change.html">change your submit server initial password</a>.</p>
|
||||
<p>If you do not change your <strong>Initial password</strong> in time, you will have to
|
||||
<a href="../contact.md#if-you-really-need-to-send-email-the-ioccc-judges">send email to the IOCCC judges</a>
|
||||
to ask for your password to be reset.</p>
|
||||
<p>Because it takes time (maybe even a few days) to process your registration
|
||||
and for the server to email you your initial login and password, you
|
||||
should <strong>MAKE SURE</strong> you give yourself enough time to register well
|
||||
before the contest closes. In other words, <strong>DO NOT WAIT UNTIL THE FINAL DAYS</strong>
|
||||
of the contest to register! The <a href="../judges.html">IOCCC judges</a>
|
||||
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>See the
|
||||
FAQ on “<a href="../quick-start.html#enter">how to register and submit to the IOCCC</a>”
|
||||
for instructions on registering and participating in the IOCCC, as the process
|
||||
may change from contest to contest.</p>
|
||||
<p>See also <a href="#rule8">Rule 8</a>.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule4">
|
||||
<h2 id="rule-4">Rule 4</h2>
|
||||
</div>
|
||||
<p>If your submission is selected as a winning entry, then your submission may be modified in order
|
||||
to fit into the structure of the <a href="https://www.ioccc.org/index.html">Official IOCCC winner website</a>.</p>
|
||||
<p>For example, your submission’s <code>Makefile</code> will be modified and your <code>remarks.md</code>
|
||||
will become a <code>README.md</code> which will be used to generate an <code>index.html</code> file.</p>
|
||||
<p>Your source code will be the file <code>prog.c</code>. The compiled binary
|
||||
will be called <code>prog</code>. If you submission requires different filenames,
|
||||
then modify your submission’s <code>Makefile</code> to <strong>COPY</strong> (<strong>NOT</strong> move!) the files
|
||||
accordingly.</p>
|
||||
<p>Of course your program may also do this, as long as it works, but you’re welcome
|
||||
to use your <code>Makefile</code> as well.</p>
|
||||
<p>See also <a href="#rule5">Rule 5</a>, <a href="#rule18">Rule 18</a> and <a href="#rule21">Rule 21</a>.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule5">
|
||||
<h2 id="rule-5">Rule 5</h2>
|
||||
</div>
|
||||
<p>Your submission must <strong>NOT</strong> modify the <em>content</em> <strong>OR</strong> <em>filename</em> of <strong>ANY</strong>
|
||||
part of your original submission including, but not limited to <code>prog.c</code>, the
|
||||
<code>Makefile</code> or any data files you submit.</p>
|
||||
<p>If you submission needs (or wishes :-) ) to modify such content, it <strong>MUST</strong>
|
||||
first copy the file to a new filename and then modify that copy.</p>
|
||||
<p>You may use your submission (program) to form a copy, or you can make use of
|
||||
your <code>Makefile</code> to form that copy.</p>
|
||||
<p>If you do make a copy of a submission file, <strong>PLEASE</strong> be sure that
|
||||
the <code>clobber</code> rule of your <code>Makefile</code> removes that copy in order to
|
||||
restore your submission to its original submission state.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule6">
|
||||
<h2 id="rule-6">Rule 6</h2>
|
||||
</div>
|
||||
<p>I am not a rule, I am a <code>free(void *human);</code> ‼️</p>
|
||||
<p> <code>while (!(ioccc(rule(you(are(number(6)))))) {</code><br>
|
||||
<code>ha_ha_ha();</code><br>
|
||||
<code>}</code></p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule7">
|
||||
<h2 id="rule-7">Rule 7</h2>
|
||||
</div>
|
||||
<p>The obfuscated C program must be your own original work.</p>
|
||||
<p>You (the author(s)) <strong>MUST</strong> own the contents of your submission <strong>OR</strong>
|
||||
you <strong>MUST</strong> have permission from the owner(s) to submit their content.</p>
|
||||
<p>If you submit any content that is owned by others, you <strong>MUST
|
||||
detail that ownership</strong> (i.e., who owns what) <strong><em>AND</em> document the
|
||||
permission you obtained from them</strong>, in your <code>remarks.md</code> file.</p>
|
||||
<p>Please note that the tools in <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
|
||||
repo</a> are <strong>NOT</strong> original works,
|
||||
unless of course you’re the original authors, in which case they are original. :-)</p>
|
||||
<p>Nevertheless tools such as those listed are <strong>NOT</strong> obfuscated. If submitted, they
|
||||
would probably violate a number of rules. :-)</p>
|
||||
<ul>
|
||||
<li><a href="https://github.com/ioccc-src/mkiocccentry/blob/master/mkiocccentry.c">mkiocccentry(1)</a></li>
|
||||
<li><a href="https://github.com/ioccc-src/mkiocccentry/blob/master/iocccsize.c">iocccsize(1)</a></li>
|
||||
<li><a href="https://github.com/ioccc-src/mkiocccentry/blob/master/chksubmit.c">chksubmit(1)</a></li>
|
||||
<li><a href="https://github.com/ioccc-src/mkiocccentry/blob/master/txzchk.c">txzchk(1)</a></li>
|
||||
<li><a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/location_main.c">location(1)</a></li>
|
||||
<li><a href="https://github.com/xexyl/jparse">jparse repo as cloned by the mkiocccentry repo</a></li>
|
||||
<li><a href="https://github.com/lcn2/dbg">dbg repo as cloned by the mkiocccentry repo</a></li>
|
||||
<li><a href="https://github.com/lcn2/dyn_array">dyn_array repo as cloned by the mkiocccentry repo</a></li>
|
||||
</ul>
|
||||
<h2 id="rules-version">Rules version</h2>
|
||||
<p>These IOCCC Rules are version <strong>29.00 2025-11-19</strong>.</p>
|
||||
<p>Be sure to read the <a href="guidelines.html">IOCCC guidelines</a>.</p>
|
||||
<h2 id="rule-0-dates">Rule 0 Dates</h2>
|
||||
<p>This IOCCC runs from ${START_DATE_TIME} UTC to ${CLOSE_DATE_TIME} UTC.</p>
|
||||
<p>This contest will enter the open state on ${OPEN_DATE_TIME} UTC.</p>
|
||||
<p>This contest will enter the judging state on ${JUDGMENT_DATE_TIME} UTC.</p>
|
||||
<p>The above dates are subject to change until the contest is officially open.</p>
|
||||
<p><strong>NOTE</strong>: As of this draft, the above dates are TBD (to be determined).</p>
|
||||
<h2 id="rule-1-program">Rule 1 Program</h2>
|
||||
<p>Your submission <strong>MUST</strong> be C program.</p>
|
||||
<h2 id="rule-2-size">Rule 2 Size</h2>
|
||||
<p><code>Rule 2</code> requires that your submission satisfy <strong>BOTH</strong>
|
||||
<a href="rules.html#rule-2a-gross-size">Rule 2a Gross Size</a>
|
||||
and
|
||||
<a href="rules.html#rule-2b-net-size">Rule 2b Next Size</a>.
|
||||
During development this can be checked using <code>iocccsize(1)</code>:</p>
|
||||
<p>iocccsize prog.c</p>
|
||||
<h3 id="rule-2a-gross-size">Rule 2a Gross Size</h3>
|
||||
<p>The overall maximum size of your <code>prog.c</code> program source <strong>MUST NOT</strong>
|
||||
exceed <strong>4993</strong> bytes.</p>
|
||||
<h3 id="rule-2b-net-size">Rule 2b Net Size</h3>
|
||||
<p>When the filename of your program source (i.e., <code>prog.c</code>) is given as a
|
||||
command line argument to the latest version of the official IOCCC size
|
||||
tool (hereby referred to as <code>iocccsize(1)</code>), the value printed <strong>MUST
|
||||
NOT</strong> exceed <strong>2503</strong>.</p>
|
||||
<h2 id="rule-3-register">Rule 3 Register</h2>
|
||||
<p>You <strong>MUST</strong> register, using a valid email address, in order to submit
|
||||
entries 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>
|
||||
<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#rule-8-submission">Rule 8 Submission</a>.</p>
|
||||
<h2 id="rule-4-files">Rule 4 Files</h2>
|
||||
<p>The submission <strong>MUST</strong> include at least these files: <code>Makefile</code>, <code>prog.c</code>,
|
||||
<code>remarks.md</code>,<code>.info.json</code>, and <code>.auth.json</code>. The last two <strong>MUST</strong> be
|
||||
generated by <code>mkiocccenty(1)</code> when packing a submission, and <strong>MUST</strong>
|
||||
pass the <code>chksubmit(1)</code> tests.</p>
|
||||
<p>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>.</p>
|
||||
<p>Your submitted source code <strong>MUST</strong> be called <code>prog.c</code>. When the <code>Makefile</code>
|
||||
compiles your code, the executable (if applicable) <strong>MUST</strong> be called <code>prog</code>.</p>
|
||||
<p>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>
|
||||
<p>Your submission may <strong>NOT</strong> have in the top directory, <code>prog</code>, <code>prog.alt</code>,
|
||||
<code>prog.alt.o</code>, <code>prog.o</code>, <code>prog</code>, <code>prog.orig.c</code>, <code>README.md</code>, nor <code>index.html</code>
|
||||
as those files reserved by IOCCC.</p>
|
||||
<p>Your submission may <strong>NOT</strong> have a file in the top directory that matches
|
||||
a file glob pattern of the form <code>[0-9][0-9][0-9][0-9]_*.tar.bz2</code>
|
||||
as those files are reserved by IOCCC.</p>
|
||||
<p>Your submission may <strong>ONLY</strong> contain files and directories. Other file
|
||||
types such as symlinks, sockets, etc are <strong>NOT</strong> allowed.</p>
|
||||
<p>All directories <strong>MUST</strong> have a file mode of <strong>0755</strong>. All 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>
|
||||
<p>All files that end in <code>.md</code> <strong>MUST</strong> be in markdown format.
|
||||
We recommend that markdown files observe our
|
||||
<a href="../markdown.html">IOCCC markdown guidelines</a>.</p>
|
||||
<p>All filenames are treated as case insensitive. For example, <code>REMARKS.MD</code>,
|
||||
and <code>Remarks.md</code>, and <code>remarks.md</code> are considered by <code>mkiocccenty(1)</code>
|
||||
to be the <strong>SAME</strong> file. If you are preparing your submission on a case
|
||||
sensitive filesystem, ensure that your submission will work on
|
||||
a case insensitive filesystem.</p>
|
||||
<p>The <code>remarks.md</code> and <code>Makefile</code> are explained in more detail in the Guidelines.</p>
|
||||
<p>See <a href="rules.html#rule-17-packaging">Rule 17 Packaging</a>.</p>
|
||||
<h2 id="rule-5-purity">Rule 5 Purity</h2>
|
||||
<p>Your submission <strong>MUST NOT</strong> modify the filenames or content of any of
|
||||
your original submission, such as <code>prog.c</code>, <code>Makefile</code>, or any supplied
|
||||
data files. To modify files, your program can make a copy or you can
|
||||
use the Makefile to setup working copies. Any working copies <strong>MUST</strong> be
|
||||
cleaned up by the <code>Makefile</code> <code>clobber</code> target, so as to restore the
|
||||
directory to its original state.</p>
|
||||
<h2 id="rule-6-free">Rule 6 Free</h2>
|
||||
<p>I am <strong>NOT</strong> a Rule, I am a <code>free(void *human);</code> ‼️</p>
|
||||
<div class="sourceCode" id="cb1"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a> <span class="cf">while</span> <span class="op">(!(</span>ioccc<span class="op">(</span>rule<span class="op">(</span>you<span class="op">(</span>are<span class="op">(</span>number<span class="op">(</span><span class="dv">6</span><span class="op">))))))</span> <span class="op">{</span></span>
|
||||
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a> ha<span class="op">();</span> ha<span class="op">();</span> ha<span class="op">();</span></span>
|
||||
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span></code></pre></div>
|
||||
<p>See <a href="rules.html#rule-19-prime">Rule 19 Prime</a>.</p>
|
||||
<h2 id="rule-7-original-work">Rule 7 Original Work</h2>
|
||||
<p>In short: You wrote it, you own it, and its an original work.</p>
|
||||
<p>You, the author(s), <strong>MUST</strong> own the contents of your submission, or you <strong>MUST</strong>
|
||||
have permission from the original owner(s) to its use. If you submit
|
||||
any content that is owned by others, you <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>The IOCCC has a rich history of remarkable winning entries created by
|
||||
authors who skillfully employed various techniques to develop their code.
|
||||
While it is <strong>NOT</strong> required, you are <em>allowed</em> to use tools to develop
|
||||
and test your submission. These tools may include, but are not limited
|
||||
to code generators, code analysis tools, static code analysis tools,
|
||||
runtime analysis tools, machine learning tools, natural language models,
|
||||
code copilot tools, so-called AI services, large language models (LLMs), etc.
|
||||
If you do make use of such tools or services, then we <strong>ENCOURAGE you to describe
|
||||
what tools and how you used those tools</strong>, in your <code>remarks.md</code> file.</p>
|
||||
<p>See also <a href="#rule5">Rule 5</a>, <a href="#rule18">Rule 18</a> and <a href="#rule21">Rule 21</a>.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule8">
|
||||
<h2 id="rule-8">Rule 8</h2>
|
||||
</div>
|
||||
<p>Submissions may only be uploaded to the <a href="https://submit.ioccc.org">IOCCC submit server</a>
|
||||
while the contest is <strong><a href="../faq.html#open">open</a></strong>.</p>
|
||||
<p>If you have <a href="../next/register.html">registered</a> and received by email your <a href="https://submit.ioccc.org">submit
|
||||
server</a> <strong>Username</strong> and <strong>Initial password</strong> you may
|
||||
upload your submission to the <a href="https://submit.ioccc.org">submit server</a> but
|
||||
<strong>ONLY</strong> while the contest is <strong><a href="../faq.html#open">open</a></strong>.</p>
|
||||
<p>The <a href="https://submit.ioccc.org">submit server</a>, in accordance with <a href="rules.html#rule17">Rule
|
||||
17</a>, places a limit of <strong>3999971</strong> bytes on the size of your
|
||||
upload.</p>
|
||||
<p>Once the contest is in the <strong><a href="../faq.html#judging">judging</a></strong> state (or
|
||||
<strong><a href="../faq.html#closed">closed</a></strong> state), you may <strong>NOT</strong> upload submissions.</p>
|
||||
<p>While the contest is <strong><a href="../faq.html#open">open</a></strong> or in the
|
||||
<strong><a href="../faq.html#judging">judging</a></strong> state, the <a href="../judges.html">IOCCC judges</a>
|
||||
<strong>MAY</strong> (but are not required to) modify the slot comment of your submission to
|
||||
indicate that they have received it. If uploaded submission is malformed, the
|
||||
<a href="../judges.html">IOCCC judges</a> <strong>MAY</strong> (but are not required to) modify the slot
|
||||
comment accordingly.</p>
|
||||
<p>You are <strong>STRONGLY</strong> advised to use the <code>mkiocccentry(1)</code> tool
|
||||
as found in the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a>
|
||||
to form the file to upload to the <a href="https://submit.ioccc.org">submit server</a>.</p>
|
||||
<p>The <a href="https://submit.ioccc.org">submit server</a> will become active when the
|
||||
contest is <strong><a href="../faq.html#open">open</a></strong>. Until the contest status becomes
|
||||
<strong><a href="../faq.html#open">open</a></strong>, the <a href="https://submit.ioccc.org">submit server</a> may
|
||||
be offline and/or unresponsive.</p>
|
||||
<p>See the
|
||||
FAQs on “<a href="../faq.html#mkiocccentry">obtaining, compiling, installing and using the latest release of the mkiocccentry tools</a>”
|
||||
for more information about the <code>mkiocccentry(1)</code> tool.</p>
|
||||
<p>See the “<a href="#dates">Important IOCCC dates</a>” section above for when these contest states are scheduled.</p>
|
||||
<p>See also <a href="#rule3">Rule 3</a> and <a href="#rule17">Rule 17</a>.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule9">
|
||||
<h2 id="rule-9">Rule 9</h2>
|
||||
</div>
|
||||
<p>Each <strong>PERSON</strong> may register <strong>ONLY ONE</strong> account and each account may submit up to
|
||||
and including <strong>10.000000</strong> (ten in base 10) submissions <strong>PER</strong> contest.</p>
|
||||
<p><strong>Each submission <em>must be submitted separately</em></strong>.</p>
|
||||
<p>If this seems unreasonable we suggest you wait until the next contest and in
|
||||
the interim ponder this (modified or not) quote said by Bill Gates:</p>
|
||||
<blockquote>
|
||||
<p>640K submissions ought to be enough for anybody.</p>
|
||||
<p>– Bill Gates s/640K/10/ (allegedly :-) )</p>
|
||||
</blockquote>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule10">
|
||||
<h2 id="rule-10">Rule 10</h2>
|
||||
</div>
|
||||
<p>Entries requiring human interaction to be initially compiled <strong>are not
|
||||
permitted</strong>. However, see the <a href="guidelines.html">guidelines</a>.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule11">
|
||||
<h2 id="rule-11">Rule 11</h2>
|
||||
</div>
|
||||
<p>Programs that require special privileges (<code>setuid(2)</code>, <code>setgid(2)</code>,
|
||||
super-user, special owner, special group, etc.) are still <strong>HIGHLY
|
||||
DISCOURAGED</strong>. We do not guarantee these functions will behave as
|
||||
you expect on our test platforms. If your program needs special
|
||||
permissions you <strong>MUST</strong> document this fact, and explain why
|
||||
it is needed in your submission’s <code>remarks.md</code> file.</p>
|
||||
<p>Furthermore, if you need a supplementary program that you include, to have these
|
||||
permissions, you will also have to explain this, because these bits are not
|
||||
allowed in submissions and those bits will not be copied by <code>mkiocccentry(1)</code>.</p>
|
||||
<p>See also <a href="#rule17">Rule 17</a>.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule12">
|
||||
<h2 id="rule-12">Rule 12</h2>
|
||||
</div>
|
||||
<p><strong>Legal</strong> abuse of the rules is somewhat encouraged. <strong>A submission that, in
|
||||
the opinion of the <a href="../judges.html">judges</a>, violates the rules WILL BE DISQUALIFIED</strong>.
|
||||
Submissions that attempt to abuse the rules <strong>MUST</strong> try to justify why
|
||||
their rule abuse is legal, in the <code>remarks.md</code> file.</p>
|
||||
<p>See also <a href="#rule_abuse">the warning about rule abuse</a>.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule13">
|
||||
<h2 id="rule-13">Rule 13</h2>
|
||||
</div>
|
||||
<p>7 out of 13 UTF-8 characters in C code agree that this rule number is lucky
|
||||
enough to be a prime number.</p>
|
||||
<p>Fun fact: the fear of the number 13 is called <em>triskaidekaphobia</em>.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule14">
|
||||
<h2 id="rule-14">Rule 14</h2>
|
||||
</div>
|
||||
<p>Any C source that fails to compile because of lines with trailing
|
||||
control-M’s (i.e., lines with a trailing byte <code>015</code>) <strong>might</strong> be rejected.</p>
|
||||
<p>Please do <strong>NOT</strong> put trailing control-M’s on <code>prog.c</code>, <code>Makefile</code>, or
|
||||
<code>remarks.md</code> files but instead end lines with a trailing newline (i.e.,
|
||||
byte <code>012</code>) character.</p>
|
||||
<p>As we do <strong>NOT</strong> use DOS, please also be sure that the <code>Makefile</code> and
|
||||
<code>remarks.md</code> files end in final newline (i.e., byte <code>012</code>) character.</p>
|
||||
<p>You are permitted, in order to try and squeeze your <code>prog.c</code> under
|
||||
a <a href="#rule2a">Rule 2a</a> and/or <a href="#rule2b">Rule 2b</a> limit, to <strong>NOT</strong>
|
||||
end your <code>prog.c</code> with a newline (i.e., byte <code>012</code>) character.
|
||||
If you need to do this, <strong>PLEASE</strong> document that in your <code>remarks.md</code> file and
|
||||
if your compiler complains about this, document this too and update your
|
||||
<code>Makefile</code> to account for this.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule15">
|
||||
<h2 id="rule-15">Rule 15</h2>
|
||||
</div>
|
||||
<p>In order to register for the IOCCC, you <strong>MUST</strong> have a valid email address.</p>
|
||||
<p>The <a href="../judges.html">judges</a> <strong>are NOT responsible for delays in email</strong>, so please plan
|
||||
enough time accordingly.</p>
|
||||
<p>See the
|
||||
FAQ on “<a href="../quick-start.html#register">how to register</a>”
|
||||
for details.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule16">
|
||||
<h2 id="rule-16">Rule 16</h2>
|
||||
</div>
|
||||
<p>Submissions that are similar to previous winning IOCCC entries are discouraged.</p>
|
||||
<p>You are allowed to resubmit to a later contest, a submission that
|
||||
did not 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 did not previously win, then
|
||||
you are <strong>encouraged</strong> to mention this in your <code>remarks.md</code> file
|
||||
as this <strong>sometimes</strong> helps.</p>
|
||||
<p>Resubmitting an improved submission that did not become an
|
||||
IOCCC winning entry is a <strong>time honored</strong> tradition of the IOCCC.
|
||||
There are some IOCCC winning entries that were submitted to multiple contests
|
||||
before they were improved enough to “climb over” (as the expression
|
||||
goes) all the other submissions for a given contest.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule17">
|
||||
<h2 id="rule-17">Rule 17</h2>
|
||||
</div>
|
||||
<p>Your submission must be in the form of a <strong>xz compressed tarball</strong> that
|
||||
the <strong>current released version</strong> of the <code>mkiocccentry(1)</code> tool would generate.
|
||||
The files, directories, and paths <strong>MUST</strong> conform to the limits imposed
|
||||
by <code>mkiocccentry(1)</code> including but <strong>NOT LIMITED</strong> to their names, count,
|
||||
path length, directory tree depth and permissions.</p>
|
||||
<p>Your <strong>xz compressed tarball</strong> must be larger than <strong>0</strong> bytes and no larger
|
||||
than <strong>3999971</strong> bytes.</p>
|
||||
<p>The sum of the byte lengths of all files, after the <strong>xz compressed tarball</strong> is untarred,
|
||||
must <strong>NOT</strong> exceed <code>27651*1024</code> bytes.</p>
|
||||
<p>Your <strong>xz compressed tarball</strong> submission <em>file</em> <strong>MUST</strong> pass the tests performed by
|
||||
the current version of <code>txzchk(1)</code>.</p>
|
||||
<p>Your <strong>xz compressed tarball</strong> submission <em>filename</em> <strong>MUST</strong> pass the tests
|
||||
performed by the current version of <code>fnamchk(1)</code>.</p>
|
||||
<p>When your <strong>xz compressed tarball</strong> submission file is untarred, the
|
||||
resulting <em>directory</em> <strong>MUST</strong> pass the checks performed by the current version
|
||||
of <code>chksubmit(1)</code>.</p>
|
||||
<p>The resulting <code>prog.c</code> file <strong>MUST</strong> pass the <a href="#rule2">Rule 2</a> size checks performed by the current
|
||||
version of <code>iocccsize(1)</code>.</p>
|
||||
<p>The <code>.auth.json</code> and <code>.info.json</code> <strong>MUST</strong> be compatible with what the
|
||||
current version of the <code>mkiocccentry(1)</code> tool would produce. They <strong>MUST
|
||||
ALSO</strong> pass the tests performed by the current version of <code>chksubmit(1)</code>.</p>
|
||||
<p>The required <code>Makefile</code> must <strong>NOT</strong> be empty.</p>
|
||||
<p>The required <code>remarks.md</code> must <strong>NOT</strong> be empty.</p>
|
||||
<p>You may <strong>NOT</strong> submit a tarball created by the <code>-d</code> or <code>-s seed</code> option of
|
||||
authors who skilfully employed various techniques to develop their code.
|
||||
While it isn’t required, you are allowed to use tools to develop and
|
||||
test your submission. These tools may include, but aren’t limited to
|
||||
code generators, code analysis tools, static code analysis tools, runtime
|
||||
analysis tools, machine learning tools, natural language models, code
|
||||
copilot tools, so-called AI services, large language models (LLMs), etc.
|
||||
If you do make use of such tools or services, then we encourage you to
|
||||
describe what tools and how you used those tools, in your <code>remarks.md</code> file.</p>
|
||||
<p>See <a href="rules.html#rule-16-anonymous">Rule 16 Anonymous</a>.</p>
|
||||
<h2 id="rule-8-submission">Rule 8 Submission</h2>
|
||||
<p>The Submit Server will only accept submissions from those who have
|
||||
registered and only while the contest is open.</p>
|
||||
<p>The Submit Server places a total submission size limit of <strong>3999971</strong> bytes.</p>
|
||||
<p>Each account has ten (<strong>10.000</strong>) submission slots (<strong>0..9)</strong>. Each submission
|
||||
slot should be annotated by the server as to whether its was received,
|
||||
processed, malformed, etc. Please take note of any errors, rectify,
|
||||
and resubmit. In order to avoid potential packaging errors, it is <strong>highly
|
||||
recommended</strong> to use <code>mkiocccentry(1)</code>.</p>
|
||||
<p>See
|
||||
<a href="rules.html#rule-3-register">Rule 3 Register</a>,
|
||||
<a href="rules.html#rule-15-building">Rule 15 Building</a>,
|
||||
and
|
||||
<a href="rules.html#rule-17-packaging">Rule 17 Packaging</a>.</p>
|
||||
<h2 id="rule-9-no-hands">Rule 9 No hands</h2>
|
||||
<p>Entries requiring human interaction to be initially compiled are <strong>NOT</strong>
|
||||
permitted. However, see the guidelines. Each entry <strong>MUST</strong> automated the
|
||||
its build process using <code>bash</code>, <code>gmake</code>, <code>gcc</code>, <code>clang</code>, under a <a href="https://pubs.opengroup.org/onlinepubs/9799919799/">SUS
|
||||
environment</a>.</p>
|
||||
<p>Note references to <code>gmake</code> can be any GNU Make compatible tool.</p>
|
||||
<p>See <a href="rules.html#rule-17-building">Rule 17 Building</a>.</p>
|
||||
<h2 id="rule-10-privileges">Rule 10 Privileges</h2>
|
||||
<p>Programs that require special privileges (setuid(2), setgid(2),
|
||||
super-user, special owner, special group, etc.) are HIGHLY DISCOURAGED.
|
||||
We do <strong>NOT</strong> guarantee these functions will behave as you expect on our
|
||||
test platforms. If your program needs special permissions you <strong>MUST</strong>
|
||||
document this fact and explain why it is needed in your submission’s
|
||||
<code>remarks.md</code> file.</p>
|
||||
<p>Furthermore, if you need a supplementary program that you include to
|
||||
have these permissions, you will also have to explain this, because these
|
||||
bits are <strong>NOT</strong> allowed in submissions and those bits will <strong>NOT</strong> be copied by
|
||||
<code>mkiocccentry(1)</code>.</p>
|
||||
<p class="leftbar">
|
||||
The maximum number of files your submission tarball may contain, not counting
|
||||
the free files (<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> and the two files generated by <code>mkiocccentry</code>, <code>.info.json</code> and
|
||||
<code>.auth.json</code>) is 31.
|
||||
</p>
|
||||
<p class="leftbar">
|
||||
The maximum number of directories your submission may have is 13 and the maximum
|
||||
depth a path may have is 4.
|
||||
</p>
|
||||
<p class="leftbar">
|
||||
The maximum filename length (a component of a path) is 38 which means the
|
||||
maximum length total of a path is 60 characters.
|
||||
</p>
|
||||
<p>See the
|
||||
FAQ on “<a href="../faq.html#extra-files">what extra files are and how to include more</a>”
|
||||
as well as the <a href="guidelines.html#extra-files">guidelines on extra files</a>
|
||||
for more details.</p>
|
||||
<h3 id="tldr-rule-17---use-mkiocccentry1-to-form-your-submission">TL;DR Rule 17 - Use <code>mkiocccentry(1)</code> to form your submission</h3>
|
||||
<p>Let the current version of the <code>mkiocccentry(1)</code> tool form your <strong>xz
|
||||
compressed tarball</strong> submission file.</p>
|
||||
<h3 id="warning">Warning</h3>
|
||||
<p>Using command line flags or input prompts to override checks and
|
||||
limits made by the above mentioned tools is <strong>NOT</strong> recommended
|
||||
and may result in your submission being rejected by the <a href="https://submit.ioccc.org">IOCCC
|
||||
submit server</a> and/or the <a href="../judges.html">IOCCC Judges</a>.</p>
|
||||
<p>See the
|
||||
FAQ on the “<a href="../faq.html#mkiocccentry">mkiocccentry toolkit</a>
|
||||
for how to obtain and use the above mentioned tools.</p>
|
||||
<p><strong>IMPORTANT</strong>: See the
|
||||
FAQ on “<a href="../faq.html#rule17">Rule 17</a>”
|
||||
for very important details behind this rule.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule18">
|
||||
<h2 id="rule-18">Rule 18</h2>
|
||||
</div>
|
||||
<p>The entirety of your submission must be submitted under the following license:</p>
|
||||
<blockquote>
|
||||
<p><strong><a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0 International</a></strong></p>
|
||||
</blockquote>
|
||||
<p>See also <a href="#rule7">Rule 7</a>.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule19">
|
||||
<h2 id="rule-19">Rule 19</h2>
|
||||
</div>
|
||||
<p>The <code>remarks.md</code> file, a required non-empty file, must be written in
|
||||
<a href="https://www.markdownguide.org/basic-syntax/">Markdown format</a>.</p>
|
||||
<p>We currently use <a href="https://pandoc.org">pandoc(1)</a> to automatically
|
||||
convert markdown to HTML. Please try to avoid submitting an HTML file
|
||||
translation to any markdown file. If you <strong>MUST</strong> submit such an HTML
|
||||
translation, <strong>PLEASE</strong> mention this in your <code>remarks.md</code> file.</p>
|
||||
<p>For any submission that wins the contest, we modify your <code>remarks.md</code> file and
|
||||
rename it as <code>README.md</code> and then use <a href="https://pandoc.org">pandoc(1)</a>
|
||||
to generate the <code>index.html</code> file in the top level directory of your submission.
|
||||
For this reason, <code>mkiocccentry(1)</code> will <strong>NOT</strong> package such files (in the top
|
||||
level submission directory) and both <code>txzchk(1)</code> and <code>chksubmit(1)</code> will flag
|
||||
them as errors (in the top level submission directory) as well, so please do
|
||||
<strong>NOT</strong> try and slip these files in the top level directory where your
|
||||
<code>remarks.md</code> resides.</p>
|
||||
<p>See the <a href="https://www.markdownguide.org/cheat-sheet/">Markdown Cheat Sheet</a>
|
||||
for a handy quick reference to the Markdown syntax.</p>
|
||||
<p>See the <a href="https://www.markdownguide.org">Markdown guide</a>
|
||||
for free and open-source reference guide that explains
|
||||
how to use markdown.</p>
|
||||
<p>See also the <a href="http://daringfireball.net/projects/markdown/basics">Daring Fireball Markdown:
|
||||
Basics</a> for
|
||||
information on the markdown format.</p>
|
||||
<p><strong>PLEASE</strong> see our
|
||||
FAQ on “<a href="../faq.html#remarks_md">remarks.md</a>”
|
||||
<strong>AND</strong> the
|
||||
<a href="../markdown.html">IOCCC markdown guidelines</a> for additional markdown guidance.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule20">
|
||||
<h2 id="rule-20">Rule 20</h2>
|
||||
</div>
|
||||
<p>The how to build instructions must be in GNU Makefile format. See the
|
||||
FAQ about “<a href="../faq.html#make_compatibility">make(1) compatibility the IOCCC supports</a>
|
||||
for more details.</p>
|
||||
<p>You are <strong>ENCOURAGED</strong> to use the
|
||||
Makefile example, renamed as <code>Makefile</code> of course, for help in constructing your
|
||||
<code>Makefile</code>. See the <a href="guidelines.html#makefile">Makefile section</a> in the
|
||||
guidelines for more details.</p>
|
||||
<p>The target of the <code>Makefile</code> must be called <code>prog</code>. The original
|
||||
C source file must be called <code>prog.c</code>.</p>
|
||||
<p>To invoke the C compiler, use <code>${CC}</code>. To invoke the C preprocessor use
|
||||
<code>${CPP}</code>.</p>
|
||||
<p>Do <strong>NOT</strong> assume that <code>.</code> (the current directory) is in the <code>$PATH</code>.</p>
|
||||
<p>When <code>make clobber</code> is invoked, we request that your submission directory be restored
|
||||
to its original submission state. For example, any temporary files
|
||||
created during the build process, or during execution should be
|
||||
removed by the <code>clobber</code> rule.</p>
|
||||
<p>Your <code>Makefile</code> <strong>MUST</strong> use a syntax that is compatible with <code>bash(1)</code>
|
||||
<strong>AND</strong> GNU <code>make(1)</code>. You are <strong>ENCOURAGED</strong> to use <code>SHELL= bash</code> in
|
||||
your <code>Makefile</code>. Please add a space between the <code>=</code> and the value.</p>
|
||||
<p>Assume that commands commonly found in <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX
|
||||
Specification</a>
|
||||
environments and systems that conform to the <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX
|
||||
Specification</a> are
|
||||
available in the <code>$PATH</code> search path.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule21">
|
||||
<h2 id="rule-21">Rule 21</h2>
|
||||
</div>
|
||||
<p>Your submission <strong>MUST NOT</strong> create or modify files <strong>ABOVE</strong> the current directory
|
||||
<em>with the exception of</em> the <code>/tmp</code> and the <code>/var/tmp</code> directories. Your submission
|
||||
<strong>MAY</strong> create subdirectories <strong>below</strong> the submission directory, or in <code>/tmp</code>,
|
||||
or in <code>/var/tmp</code> provided that <code>.</code> is <strong>NOT</strong> the first byte in any
|
||||
directory name or filename you create.</p>
|
||||
<p>If you do create files and directories, <strong>PLEASE</strong> be sure that
|
||||
the <code>clobber</code> rule of your <code>Makefile</code> removes such created files
|
||||
in order to restore your submission to its original submission state.</p>
|
||||
<p>See also <a href="#rule5">Rule 5</a>.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule22">
|
||||
<h2 id="rule-22">Rule 22</h2>
|
||||
</div>
|
||||
<p>Catch 22:</p>
|
||||
<p>Your source code, data files, remarks and program output <strong>MUST NOT</strong>
|
||||
identify the authors of your code. The <a href="../judges.html">judges</a> <strong>STRONGLY PREFER</strong> to
|
||||
<strong>NOT</strong> know who is submitting entries to the IOCCC.</p>
|
||||
<p>Even if you are a previous IOCCC winner, catch 22 still applies.</p>
|
||||
<p>Identifying the author(s) of your submission in an obvious way anywhere
|
||||
within your code, data, remarks or program output (unless you are
|
||||
<strong>Peter Honeyman</strong> or pretending to be <strong>Peter Honeyman</strong>) will be grounds
|
||||
for disqualification of your submission.</p>
|
||||
<p>And don’t assume that we won’t be able to determine your name even if it’s not
|
||||
obvious, because you stand a significant chance of violating this rule if you
|
||||
do.</p>
|
||||
<p>Yes, Virginia, <strong>WE REALLY MEAN IT!</strong></p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule23">
|
||||
<h2 id="rule-23">Rule 23</h2>
|
||||
</div>
|
||||
<p>This prime rule number is reserved for future use.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule24">
|
||||
<h2 id="rule-24">Rule 24</h2>
|
||||
</div>
|
||||
<p>Even though 24 is not prime, you should still see <a href="#rule23">Rule 23</a>.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule25">
|
||||
<h2 id="rule-25">Rule 25</h2>
|
||||
</div>
|
||||
<p class="leftbar">
|
||||
The <a href="rules.html">IOCCC rule set</a> needs more than <code>5^2</code> rules: see <a href="#rule26">Rule 26</a>.
|
||||
</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule26">
|
||||
<h2 id="rule-26">Rule 26</h2>
|
||||
</div>
|
||||
<blockquote>
|
||||
<p>“The quick brown fox jumps over the lazy dog”.<br>
|
||||
“Pack my box with five dozen liquor jugs.”<br>
|
||||
“How vexingly quick daft zebras jump!”<br>
|
||||
“Sphinx of black quartz, judge my vow.”<br>
|
||||
“Waltz, bad nymph, for quick jigs vex.”<br>
|
||||
“Mr. Jock, TV quiz PhD, bags few lynx.”<br>
|
||||
“abcdefg, hijklmnop, qrstu&v, wxy&z.”</p>
|
||||
</blockquote>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule27">
|
||||
<h2 id="rule-27">Rule 27</h2>
|
||||
</div>
|
||||
<p>Unless otherwise needed, <a href="#rule27">Rule 27</a> is reserved for something cubic. :-)</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="rule28">
|
||||
<h2 id="rule-28">Rule 28</h2>
|
||||
</div>
|
||||
<p><a href="#rule28">Rule 28</a> is a perfect way to end the list of <a href="rules.html">IOCCC rules</a>
|
||||
as we do <strong>NOT</strong> plan to have <strong>496</strong> rules. :-)</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<div id="more-information">
|
||||
<div id="information">
|
||||
<h1 id="for-more-information">FOR MORE INFORMATION:</h1>
|
||||
</div>
|
||||
</div>
|
||||
<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>
|
||||
<p><strong>PLEASE</strong> be <strong>SURE</strong> you have the <strong>current</strong> <a href="rules.html">IOCCC rules</a> and
|
||||
<a href="guidelines.html">IOCCC guidelines</a> prior to submitting to the contest.</p>
|
||||
<p>See the <a href="../news.html">Official IOCCC website news</a> for additional information.</p>
|
||||
<p>For the updates and breaking IOCCC news, you are encouraged to follow
|
||||
the <a href="https://fosstodon.org/@ioccc">IOCCC on Mastodon</a> account. See our
|
||||
FAQ on “<a href="../faq.html#try_mastodon">Mastodon</a>”
|
||||
for more information. Please do note that unless
|
||||
you are mentioned by us you will <strong>NOT</strong> get a notification from the app <em>so you
|
||||
should refresh the page <strong>even if you do follow us</strong></em>.</p>
|
||||
<p>Check out the <a href="https://www.ioccc.org/index.html">Official IOCCC winner website</a> in general.</p>
|
||||
<p>Consider joining the IOCCC discord community via this link:
|
||||
<a href="https://discord.gg/Wa42Qujwnw">https://discord.gg/Wa42Qujwnw</a></p>
|
||||
<p>See the
|
||||
FAQ on “<a href="../faq.html#mkiocccentry">obtaining, compiling, installing and using the mkiocccentry tools</a>”
|
||||
and the
|
||||
FAQ on “<a href="../quick-start.html#enter">how to enter the IOCCC</a>”
|
||||
as that FAQ has important details on
|
||||
<a href="../next/register.html">how to register</a>
|
||||
as well as
|
||||
<a href="../next/submit.html">how to upload your submission</a> for the IOCCC.</p>
|
||||
<p>Jump to: <a href="#">top</a></p>
|
||||
<p><strong>Leonid A. Broukhis</strong><br>
|
||||
<strong>chongo (Landon Curt Noll) <code>/\cc/\</code></strong></p>
|
||||
<hr style="width:10%;text-align:left;margin-left:0">
|
||||
<p>Jump to: <a href="#">top</a>
|
||||
<p>See <a href="rules.html#rule-4-files">Rule 4 Files</a>,
|
||||
and
|
||||
<a href="rules.html#rule-5-purity">Rule 5 Purity</a>.</p>
|
||||
<h2 id="rule-11-abuse">Rule 11 Abuse</h2>
|
||||
<p>Legal abuse of the rules is somewhat encouraged, but comes with risks.
|
||||
A submission that, in the opinion of the Judges, violates the rules <strong>WILL
|
||||
BE DISQUALIFIED</strong>. Submissions that plan to abuse the 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
|
||||
its recommended to use <code>mkiocccentry(1)</code>. 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
|
||||
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
|
||||
is rejected.</p>
|
||||
<p><strong>IMPORTANT</strong>: If you do submit such an alternate non-rule abusing
|
||||
version, please 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>
|
||||
<h2 id="rule-12-utf-8">Rule 12 UTF-8</h2>
|
||||
<p>Use of UTF-8 is supported by <code>C89</code> standard and its updates and so too by the IOCCC.</p>
|
||||
<h2 id="rule-13-newlines">Rule 13 Newlines</h2>
|
||||
<p>Any C source that fails to compile because lines contain carriage-returns
|
||||
(CTRL+M, <code>\r</code>) in particular as part of DOS/Windows style newlines might
|
||||
be rejected. Please do <strong>NOT</strong> put trailing CTRL+M in <code>prog.c</code>, <code>Makefile</code>,
|
||||
or <code>remarks.md</code> files, but instead end 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
|
||||
<a href="rules.html#rule-2a-gross-size">Rule 2a Gross Size</a> and/or
|
||||
<a href="rules.html#rule-2b-net-size">Rule 2b Next Size</a>
|
||||
limits, to <strong>NOT</strong> end source with a newline. If you
|
||||
need to do this, please document that in your <code>remarks.md</code> file and if
|
||||
your compiler complains about this, document this too and update your
|
||||
<code>Makefile</code> to account for this.</p>
|
||||
<h2 id="rule-14-resubmit">Rule 14 Resubmit</h2>
|
||||
<p>Submissions that are substantially similar to previous winning IOCCC
|
||||
entries are discouraged.</p>
|
||||
<p>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
|
||||
<code>remarks.md</code> file as this sometimes helps.</p>
|
||||
<h2 id="rule-15-building">Rule 15 Building</h2>
|
||||
<p>The <code>Makefile</code> <strong>MUST</strong> adhere to GNU Make file syntax. Its recommended
|
||||
that you copy and rename the <code>Makefile.example</code> as template. The primary
|
||||
target of the <code>Makefile</code> <strong>MUST</strong> be <code>prog</code> and the source file is <code>prog.c</code>.
|
||||
The C compiler and preprocessor <strong>MUST</strong> be invoked using <code>${CC}</code> and <code>${CPP}</code>
|
||||
macros respectively.</p>
|
||||
<p>The <code>clobber</code> target should clean and restore the submission directory
|
||||
tree to its original state, such as removing temporary files or any
|
||||
modified data files. Don’t assume that <code>git</code> tool chain is installed,
|
||||
i.e., do <strong>NOT</strong> expect <code>git clean -f</code> to work.</p>
|
||||
<p>The <code>Makefile</code> <strong>MUST</strong> use a syntax that is compatible with
|
||||
<code>bash(1)</code> and GNU <code>make(1)</code>. You are encouraged to use <code>SHELL= bash</code> in your <code>Makefile</code>; please add a space between the <code>=</code> and
|
||||
the value. Assume that commands commonly found in
|
||||
<a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX Specification</a>
|
||||
environments and systems are available in the search <code>$PATH</code>.
|
||||
Avoid command options that aren’t part of
|
||||
<a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">SUS</a>,
|
||||
such as GNU long name options <code>--example</code> or extensions like <code>grep -P</code>.</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#rule-4-files">Rule 4 Files</a>.</p>
|
||||
<h2 id="rule-16-anonymous">Rule 16 Anonymous</h2>
|
||||
<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>
|
||||
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
|
||||
entries to the IOCCC until final selection is made. 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 may result
|
||||
in the submission being disqualified.</em></strong></p>
|
||||
<h2 id="rule-17-packaging">Rule 17 Packaging</h2>
|
||||
<p>The files, directories, and paths <strong>MUST</strong> conform to the limits imposed by
|
||||
<code>mkiocccentry(1)</code>, including but <strong>NOT</strong> limited, to their names, count, path
|
||||
length, directory tree depth, and permissions.</p>
|
||||
<p>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
|
||||
<code>prog.c</code>, <code>remarks.md</code>, <code>Makefile</code>, <code>prog.alt.c</code>, <code>try.sh</code>, <code>try.alt.sh</code>,
|
||||
<code>.info.json</code> and <code>.auth.json</code> is <strong>31</strong>. And the maximum file-path
|
||||
component is <strong>38</strong> and maximum path length is <strong>60</strong>.</p>
|
||||
<p>The submission <strong>MUST</strong> be a <code>.txz</code> compressed tarball as constructed by
|
||||
<code>mkiocccentry(1)</code>, which <strong>MUST</strong> be within <strong>[1..3999971]</strong> bytes in size.
|
||||
The sum of all file lengths, after unpacking from the tarball, <strong>MUST</strong> be
|
||||
less than <code>27651*1024</code> bytes.</p>
|
||||
<p>The tarball file <strong>MUST</strong> pass all <code>txzchk(1)</code> checks and the tarball
|
||||
filename <strong>MUST</strong> pass all <code>fnamchk(1)</code> checks. You may <strong>NOT</strong> submit a tarball
|
||||
created by the <code>-d</code> or <code>-s</code> seed options of <code>mkiocccentry(1)</code>.</p>
|
||||
<p>The unpacked submission directory <strong>MUST</strong> pass the checks performed by the
|
||||
current version of <code>chksubmit(1)</code>.</p>
|
||||
<p>The <code>prog.c</code> file <strong>MUST</strong> pass the <a href="rules.html#rule-2-size">Rule 2 Size</a>
|
||||
size checks performed by <code>iocccsize(1)</code>. The <code>Makefile</code> and <code>remarks.md</code> files cannot
|
||||
be empty. The <code>.auth.json</code> and <code>.info.json</code> files <strong>MUST</strong> be compatible with what
|
||||
<code>mkiocccentry(1)</code> generates.</p>
|
||||
<p>Submissions that package using older versions of the mkiocccentry
|
||||
toolkit to are <strong>HIGHLY LIKELY</strong> to be <strong>REJECTED</strong>! Be sure
|
||||
that you are using the latest tools from the
|
||||
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>
|
||||
GitHub repo.</p>
|
||||
<p>In summary it is best to use <code>mkioccentry(1)</code> to package your submission, rather than roll-it-by-hand.</p>
|
||||
<p>See <a href="rules.html#rule-4-files">Rule 4 Files</a>.</p>
|
||||
<h2 id="rule-18-license">Rule 18 License</h2>
|
||||
<p>The entirety of your submission <strong>MUST</strong> be submitted under the 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#rule-7-original-work">Rule 7 Original Work</a>.</p>
|
||||
<h2 id="rule-19-prime">Rule 19 Prime</h2>
|
||||
<p>This 19th rule, while prime, is reserved for future abuse. :-)
|
||||
Additional rules, both humorous and otherwise, may be added
|
||||
below this rule in future contests.</p>
|
||||
<p>See <a href="rules.html#rule-6-free">Rule 6 Free</a>.</p>
|
||||
<h2 id="further-reading">Further Reading</h2>
|
||||
<p>Please read the <a href="guidelines.html">Guidelines</a> next for further
|
||||
commentary on The Rules.</p>
|
||||
<p>See also the <a href="../faq.html">FAQ</a>.</p>
|
||||
<p>Consider joining our Discord
|
||||
server for discussions about The Rules, questions for the Judges, and
|
||||
<code>C</code> in general.</p>
|
||||
<p>Leonid A. Broukhis
|
||||
chongo (Landon Curt Noll) /\cc/\
|
||||
<!-- AFTER: last line of markdown file: next/rules.md --></p>
|
||||
|
||||
<!-- END: this line ends content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
|
||||
|
||||
Reference in new issue
Block a user