Merge pull request #2550 from xexyl/styles-leftbar

Improve change mark in guidelines and rules
This commit is contained in:
Landon Curt Noll authored and GitHub committed 2024-07-08 11:54:40 -07:00
commit 60ce3d9155
5 files changed
+1925 -839

No files matched your search

+7
View File
@@ -796,6 +796,13 @@ blockquote {
color: DarkBlue;
}
/* Guidelines / Rules change bar ============================================================================ */
.leftbar {
border-left: 4px solid black;
}
/* Footer ======================================================================================== */
/* Style footer */
+637 -295
View File
File diff suppressed because it is too large. Load diff
+521 -214
View File
File diff suppressed because it is too large. Load diff
+420 -183
View File
@@ -405,7 +405,9 @@ 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><strong><code>|</code></strong> Copyright © 2024 Leonid A. Broukhis and Landon Curt Noll.</p>
<p class="leftbar">
Copyright © 2024 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
@@ -413,14 +415,19 @@ writing by <a href="../contact.html">contacting the judges</a>.</p>
<div id="rules_version">
<h2 id="ioccc-rules-version">IOCCC Rules version</h2>
</div>
<p><strong><code>|</code></strong> These <a href="rules.html">IOCCC rules</a> are version <strong>28.4 2024-07-02</strong>.</p>
<p class="leftbar">
These <a href="rules.html">IOCCC rules</a> are version <strong>28.5 2024-07-08</strong>.
</p>
<p><strong>IMPORTANT</strong>: Be sure to read the <a href="guidelines.html">IOCCC guidelines</a>.</p>
<div id="change_marks">
<h3 id="change-marks">Change marks</h3>
</div>
<p><strong><code>|</code></strong> <strong>← Lines that start with this symbol indicate a change from the previous IOCCC</strong></p>
<p class="leftbar">
<strong>← Lines that start with this symbol indicate a change from the previous IOCCC</strong>
</p>
<p>Most lines (we sometimes make mistakes) that were modified since the previous
IOCCC start with the <strong><code>|</code></strong> symbol.</p>
IOCCC start with a solid 4 pixel black left border (or, in the case of a code
block or blockquote, just a vertical bar).</p>
<div id="obfuscate">
<h1 id="obfuscate-defined">Obfuscate defined:</h1>
</div>
@@ -446,19 +453,25 @@ IOCCC start with the <strong><code>|</code></strong> symbol.</p>
<div id="dates">
<h1 id="important-ioccc-dates">Important IOCCC dates</h1>
</div>
<p><strong><code>|</code></strong> This IOCCC runs from <strong>2024-MMM-DD HH:MM:SS UTC</strong> to <strong>202x-MMM-DD HH:MM:SS UTC</strong>.<br>
<strong><code>|</code></strong> <strong>XXX - date/time is TBD - XXX</strong></p>
<p><strong><code>|</code></strong> Until the start of this IOCCC, these <a href="rules.html">IOCCC rules</a>,
<p class="leftbar">
This IOCCC runs from <strong>2024-MMM-DD HH:MM:SS UTC</strong> to <strong>202x-MMM-DD HH:MM:SS UTC</strong>.<br>
<strong>XXX - date/time is TBD - XXX</strong>
</p>
<p class="leftbar">
Until the start of this IOCCC, these <a href="rules.html">IOCCC rules</a>,
<a href="guidelines.html">IOCCC guidelines</a> and the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
toolkit</a> should be considered
provisional <strong>BETA</strong> versions and <strong>may be adjusted <em>AT ANY TIME</em></strong>.</p>
provisional <strong>BETA</strong> versions and <strong>may be adjusted <em>AT ANY TIME</em></strong>.
</p>
<p>When the IOCCC is open, the submission URL is:
<a href="https://submit.ioccc.org">https://submit.ioccc.org</a>; at all other
times that link is likely to be unresponsive.</p>
<p>Please check the <a href="../faq.html#submit">How to enter FAQ</a>
for <strong>important information</strong> on how to submit to the IOCCC.</p>
<p><strong><code>|</code></strong> The submit URL should be active on or slightly before <strong>2024-MMM-DD HH:MM:SS UTC</strong>.<br>
<strong><code>|</code></strong> <strong>XXX - date/time is TBD - XXX</strong></p>
<p class="leftbar">
The submit URL should be active on or slightly before <strong>2024-MMM-DD HH:MM:SS UTC</strong>.<br>
<strong>XXX - date/time is TBD - XXX</strong>
</p>
<p>Please wait to submit your entries until after that time.</p>
<p>The official <a href="rules.html">IOCCC rules</a> and <a href="guidelines.html">IOCCC guidelines</a> will be
available on the <a href="../index.html">official IOCCC website</a> on or slightly before
@@ -486,44 +499,66 @@ submission URL</em></strong>.</p>
<div id="rule2a">
<h2 id="rule-2a">Rule 2a</h2>
</div>
<p><strong><code>|</code></strong> The size of your program source <strong>should not exceed 4993 bytes</strong>.</p>
<p><strong><code>|</code></strong> If you use the most recently released official IOCCC submission
<p class="leftbar">
The size of your program source <strong>should not exceed 4993 bytes</strong>.
</p>
<p class="leftbar">
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> (see also <a href="#rule17">Rule 17</a>), then the <code>mkiocccentry(1)</code>
tool will warn you if there appears to be a <a href="#rule2a">Rule 2a</a> violation.</p>
<p><strong><code>|</code></strong> The <code>mkiocccentry(1)</code> tool will give you the option of overriding the <a href="#rule2a">Rule 2a</a> warning.
tool will warn you if there appears to be a <a href="#rule2a">Rule 2a</a> violation.
</p>
<p class="leftbar">
The <code>mkiocccentry(1)</code> tool will give you the option of overriding the <a href="#rule2a">Rule 2a</a> warning.
Overriding a <a href="#rule2a">Rule 2a</a> warning carries a <strong>fair amount of risk that your submission
will be rejected</strong>. Be sure to consult the <a href="guidelines.html">IOCCC guidelines</a>
ahead of time if you plan to override the <a href="#rule2a">Rule 2a</a> warning.</p>
<p><strong><code>|</code></strong> If you do override the <a href="#rule2a">Rule 2a</a> warning from the
ahead of time if you plan to override the <a href="#rule2a">Rule 2a</a> warning.
</p>
<p class="leftbar">
If you do override the <a href="#rule2a">Rule 2a</a> warning from the
<code>mkiocccentry(1)</code> tool, or otherwise plan to violate <a href="#rule2a">Rule 2a</a>, then
you <strong>MUST CLEARLY EXPLAIN THE RATIONALE</strong> of why you are doing so 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><code>|</code></strong> You may check your code prior to submission by giving the filename
as a command like argument to the <code>iocccsize(1)</code> tool. For example:</p>
submission may still be rejected</strong>.
</p>
<p class="leftbar">
You may check your code prior to submission 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>
<div id="rule2b">
<h2 id="rule-2b">Rule 2b</h2>
</div>
<p><strong><code>|</code></strong> When the filename of your program source is given as a command line argument to the latest version
<p class="leftbar">
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>should NOT exceed <em>2503</em></strong>.</p>
<p><strong><code>|</code></strong> 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><strong><code>|</code></strong> If you use the <code>mkiocccentry(1)</code> tool, which we <strong>STRONGLY recommend
value printed <strong>should NOT exceed <em>2503</em></strong>.
</p>
<p class="leftbar">
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 class="leftbar">
If you use the <code>mkiocccentry(1)</code> tool, which we <strong>STRONGLY recommend
you do</strong> (again, see also <a href="#rule17">Rule 17</a>),
then <code>mkiocccentry(1)</code> will invoke <code>iocccsize(1)</code> before packaging your submission.</p>
<p><strong><code>|</code></strong> The <code>mkiocccentry(1)</code> tool will give you the option of overriding the <a href="#rule2b">Rule 2b</a> warning.
then <code>mkiocccentry(1)</code> will invoke <code>iocccsize(1)</code> before packaging your submission.
</p>
<p class="leftbar">
The <code>mkiocccentry(1)</code> tool will give you the option of overriding the <a href="#rule2b">Rule 2b</a> warning.
Overriding a <a href="#rule2b">Rule 2b</a> warning carries a <strong>fair amount of risk that your submission
will be rejected</strong>. Be sure to consult the <a href="guidelines.html">IOCCC guidelines</a>
ahead of time if you plan to override the <a href="#rule2b">Rule 2b</a> warning.</p>
<p><strong><code>|</code></strong> If you do override the <a href="#rule2b">Rule 2b</a> warning from the <code>mkiocccentry(1)</code> tool,
ahead of time if you plan to override the <a href="#rule2b">Rule 2b</a> warning.
</p>
<p class="leftbar">
If you do override the <a href="#rule2b">Rule 2b</a> warning from the <code>mkiocccentry(1)</code> tool,
or otherwise plan to violate <a href="#rule2b">Rule 2a</a>, then you <strong>MUST CLEARLY EXPLAIN THE RATIONALE</strong>
of why you are doing so 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><code>|</code></strong> You may check your code prior to submission by giving the filename
as a command like argument to the <code>iocccsize(1)</code> tool. For example:</p>
your submission may still be rejected</strong>.
</p>
<p class="leftbar">
You may check your code prior to submission 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>
<div id="rule3">
<h2 id="rule-3">Rule 3</h2>
@@ -533,20 +568,30 @@ the <a href="../faq.html#submit">How to enter FAQ</a>.</p>
<p>To submit to an open IOCCC, you must use the <a href="https://submit.ioccc.org/">IOCCC submit
server</a>. Unless the IOCCC is open, that link will
likely be unresponsive.</p>
<p><strong><code>|</code></strong> The submit URL should be active on or slightly before <strong>2024-MMM-DD HH:MM:SS UTC</strong>.<br>
<strong><code>|</code></strong> <strong>XXX - date/time is TBD - XXX</strong></p>
<p class="leftbar">
The submit URL should be active on or slightly before <strong>2024-MMM-DD HH:MM:SS UTC</strong>.<br>
<strong>XXX - date/time is TBD - XXX</strong>
</p>
<p><strong>Please wait to submit</strong> your entries until after that time.</p>
<div id="rule4">
<h2 id="rule-4">Rule 4</h2>
</div>
<p><strong><code>|</code></strong> If your submission is selected as a winner, it 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><strong><code>|</code></strong> For example, your submission’s <code>Makefile</code> might be modified.</p>
<p><strong><code>|</code></strong> Your source code will be the file <code>prog.c</code>. The compiled binary
<p class="leftbar">
If your submission is selected as a winner, it 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 class="leftbar">
For example, your submission’s <code>Makefile</code> might be modified.
</p>
<p class="leftbar">
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><strong><code>|</code></strong> See also <a href="#rule5">Rule 5</a>, <a href="#rule18">Rule 18</a> and <a href="#rule21">Rule 21</a>.</p>
the files accordingly.
</p>
<p class="leftbar">
See also <a href="#rule5">Rule 5</a>, <a href="#rule18">Rule 18</a> and <a href="#rule21">Rule 21</a>.
</p>
<div id="rule5">
<h2 id="rule-5">Rule 5</h2>
</div>
@@ -559,10 +604,14 @@ file to a new filename and then modify that copy.</p>
<div id="rule6">
<h2 id="rule-6">Rule 6</h2>
</div>
<p><strong><code>|</code></strong> I am not a rule, I am a <code>free(void *human);</code> ‼️</p>
<p><strong><code>|</code></strong>        <code>while (!(ioccc(rule(you(are(number(6)))))) {</code><br>
<strong><code>|</code></strong>                <code>ha_ha_ha();</code><br>
<strong><code>|</code></strong>        <code>}</code></p>
<p class="leftbar">
I am not a rule, I am a <code>free(void *human);</code> ‼️
</p>
<p class="leftbar">
        <code>while (!(ioccc(rule(you(are(number(6)))))) {</code><br>
                <code>ha_ha_ha();</code><br>
        <code>}</code>
</p>
<div id="rule7">
<h2 id="rule-7">Rule 7</h2>
</div>
@@ -570,7 +619,9 @@ file to a new filename and then modify that copy.</p>
<p>You (the author(s)) must own the contents of your submission OR
you must have permission from the owner(s) to submit their content
under the following license:</p>
<p><strong><code>|</code></strong> <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>
<p class="leftbar">
<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>
<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</strong>.</p>
@@ -578,14 +629,18 @@ permission you obtained</strong>.</p>
<div id="rule8">
<h2 id="rule-8">Rule 8</h2>
</div>
<p><strong><code>|</code></strong> Entries must be received prior to the end of this IOCCC which is <strong>2024-MMM-DD HH:MM:SS UTC</strong>.<br>
<strong><code>|</code></strong> <strong>XXX - date/time is TBD - XXX</strong></p>
<p class="leftbar">
Entries must be received prior to the end of this IOCCC which is <strong>2024-MMM-DD HH:MM:SS UTC</strong>.<br>
<strong>XXX - date/time is TBD - XXX</strong>
</p>
<p>A confirmation of submission will be sent to the submitting email address
before the close of the contest.</p>
<div id="rule9">
<h2 id="rule-9">Rule 9</h2>
</div>
<p><strong><code>|</code></strong> Each person may submit up to and including <strong>10.000000</strong> entries per contest.</p>
<p class="leftbar">
Each person may submit up to and including <strong>10.000000</strong> (ten) entries per contest.
</p>
<p><strong>Each submission <em>must be submitted separately</em></strong>.</p>
<div id="rule10">
<h2 id="rule-10">Rule 10</h2>
@@ -611,25 +666,33 @@ their rule abuse is legal, in the <code>remarks.md</code> file.</p>
<div id="rule13">
<h2 id="rule-13">Rule 13</h2>
</div>
<p><strong><code>|</code></strong> Any C source that fails to compile because of unescaped octets with
the high bit set (octet value &gt;= 128) <strong><em>might</em></strong> be rejected.</p>
<p class="leftbar">
Any C source that fails to compile because of unescaped octets with
the high bit set (octet value &gt;= 128) <strong><em>might</em></strong> be rejected.
</p>
<div id="rule14">
<h2 id="rule-14">Rule 14</h2>
</div>
<p><strong><code>|</code></strong> Any C source that fails to compile because of lines with trailing
control-M’s (i.e., lines with a tailing octet <code>015</code>) <strong><em>might</em></strong> be rejected.</p>
<p class="leftbar">
Any C source that fails to compile because of lines with trailing
control-M’s (i.e., lines with a tailing octet <code>015</code>) <strong><em>might</em></strong> be rejected.
</p>
<p>Please do <strong>NOT</strong> put trailing control-M’s on remarks file lines.
Please check to be sure, before submitting, that you have removed
any control-M at the end of remark file lines.</p>
<div id="rule15">
<h2 id="rule-15">Rule 15</h2>
</div>
<p><strong><code>|</code></strong> In order to register for the IOCCC, you <strong>MUST</strong> have a valid email address.</p>
<p class="leftbar">
In order to register for the IOCCC, you <strong>MUST</strong> have a valid email address.
</p>
<p>The judges <strong>are not responsible for delays in email</strong>, please plan
enough time for one automated exchange of email as part of your
submission.</p>
<p><strong><code>|</code></strong> See <a href="../faq.html#register">the FAQ on how to register for the IOCCC</a> in the
<a href="../faq.html">FAQ</a> for details.</p>
<p class="leftbar">
See <a href="../faq.html#register">the FAQ on how to register for the IOCCC</a> in the
<a href="../faq.html">FAQ</a> for details.
</p>
<div id="rule16">
<h2 id="rule-16">Rule 16</h2>
</div>
@@ -641,168 +704,323 @@ been published may be disqualified.</p>
<h2 id="rule-17">Rule 17</h2>
</div>
<h3 id="tldr-rule-17---use-mkiocccentry1">TL;DR Rule 17 - Use <code>mkiocccentry(1)</code></h3>
<p><strong><code>|</code></strong> This is a <strong>COMPLEX</strong> rule. <strong>Violating this rule will cause your submission to REJECTED</strong>!
<p class="leftbar">
This is a <strong>COMPLEX</strong> rule. <strong>Violating this rule will cause your submission to REJECTED</strong>!
To help you avoid such a rejection, you are <strong>HIGHLY ENCOURAGED</strong> to use the <code>mkiocccentry(1)</code> tool,
based on the latest release of the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a>,
to form your submission’s xz compressed tarball.</p>
<p><strong><code>|</code></strong> The <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a>
contains <strong>IMPORTANT</strong> tools such as:</p>
to form your submission’s xz compressed tarball.
</p>
<p class="leftbar">
The <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a>
contains <strong>IMPORTANT</strong> tools such as:
</p>
<ul>
<li><code>chkentry(1)</code></li>
<li><code>iocccsize(1)</code></li>
<li><code>mkiocccentry(1)</code></li>
<li><code>txzchk(1)</code></li>
<li><code>fnamchk(1)</code></li>
<li><code>jparse(1)</code> and <code>jparse(8)</code> (which <code>chkentry(1)</code> uses)</li>
<li><p class="leftbar">
<code>chkentry(1)</code>
</p></li>
<li><p class="leftbar">
<code>iocccsize(1)</code>
</p></li>
<li><p class="leftbar">
<code>mkiocccentry(1)</code>
</p></li>
<li><p class="leftbar">
<code>txzchk(1)</code>
</p></li>
<li><p class="leftbar">
<code>fnamchk(1)</code>
</p></li>
<li><p class="leftbar">
<code>jparse(1)</code> and <code>jparse(8)</code> (which <code>chkentry(1)</code> uses)
</p></li>
</ul>
<p><strong><code>|</code></strong> The above mentioned tools will help you verify that your submission
conforms to <a href="#rule17">Rule 17</a>.</p>
<p><strong><code>|</code></strong> Each above mentioned tools has a <code>-h</code> option that provides command
line help. For additional details, see the tools’ man pages.</p>
<p><strong><code>|</code></strong> You do not explicitly need to invoke <code>jparse(1)</code> but the <code>jparse(8)</code>
library will be used when compiling various tools.</p>
<p class="leftbar">
The above mentioned tools will help you verify that your submission
conforms to <a href="#rule17">Rule 17</a>.
</p>
<p class="leftbar">
Each above mentioned tools has a <code>-h</code> option that provides command
line help. For additional details, see the tools’ man pages.
</p>
<p class="leftbar">
You do not explicitly need to invoke <code>jparse(1)</code> but the <code>jparse(8)</code>
library will be used when compiling various tools.
</p>
<p class="leftbar">
Of course you <strong>can</strong> invoke <code>jparse(1)</code> if you wish to validate your own JSON
data file or some other JSON file.
</p>
<h3 id="rule-17---the-complex-details">Rule 17 - The COMPLEX details</h3>
<p><strong><code>|</code></strong> Each submission <strong>MUST</strong> be in the form of a xz compressed tarball.</p>
<p><strong><code>|</code></strong> The xz compressed tarball filename must be of the form:</p>
<p class="leftbar">
Each submission <strong>MUST</strong> be in the form of a xz compressed tarball.
The xz compressed tarball filename must be of the form:
</p>
<pre><code> ^submit.username-slot_num.[1-9][0-9]{9,}.txz$</code></pre>
<p><strong><code>|</code></strong> where <em><code>username</code></em> is your IOCCC registration username <strong>in the form of a
<p class="leftbar">
… where <em><code>username</code></em> is your IOCCC registration username <strong>in the form of a
<a href="https://en.wikipedia.org/wiki/Universally_unique_identifier">UUID</a></strong> (see
<a href="https://datatracker.ietf.org/doc/html/rfc9562">RFC 9562</a> for
details), and where <em><code>slot_num</code></em> is a single decimal digit integer
(i.e., &gt;= <code>0</code> and &lt; <code>9</code>).</p>
<p><strong><code>|</code></strong> In particular, <em><code>username</code></em> is in the form of:
(i.e., &gt;= <code>0</code> and &lt; <code>9</code>).
</p>
<p class="leftbar">
In particular, <em><code>username</code></em> is in the form of:
<code>xxxxxxxx-xxxx-4xxx-axxx-xxxxxxxxxxxx</code> where <code>x</code> is a hexadecimal digit in the
range <code>[0-9a-f]</code>. And yes, there is a 4 (UUID version 4) and an <code>a</code> (UUID variant
1) in there.</p>
<p><strong><code>|</code></strong> Your xz compressed tarball <strong>MUST</strong> contain, at a minimum,
the following files:</p>
1) in there.
</p>
<p class="leftbar">
Your xz compressed tarball <strong>MUST</strong> contain, <strong>at a minimum</strong>, the following files:
</p>
<ul>
<li><code>Makefile</code></li>
<li><code>prog.c</code></li>
<li><code>remarks.md</code></li>
<li><code>.info.json</code></li>
<li><code>.auth.json</code></li>
<li><p class="leftbar">
<code>Makefile</code>
</p></li>
<li><p class="leftbar">
<code>prog.c</code>
</p></li>
<li><p class="leftbar">
<code>remarks.md</code>
</p></li>
<li><p class="leftbar">
<code>.info.json</code>
</p></li>
<li><p class="leftbar">
<code>.auth.json</code>
</p></li>
</ul>
<p><strong><code>|</code></strong> The <code>.info.json</code> must be valid JSON and pass the <code>chkentry(1)</code> tests.</p>
<p><strong><code>|</code></strong> The <code>.auth.json</code> must be valid JSON and pass the <code>chkentry(1)</code> tests.</p>
<p><strong><code>|</code></strong> You submission may have additional files, however the filenames of those additional files <strong>MUST</strong>:</p>
<p><strong><code>|</code></strong> * Be less than <strong>100</strong> characters in length<br>
<strong><code>|</code></strong> * Match the regular expression: <code>^[0-9A-Za-z][0-9A-Za-z._+-]*$</code></p>
<p><strong><code>|</code></strong> The <code>mkiocccentry(1)</code> tool will not package any files that do not meet
those requirements.</p>
<p><strong><code>|</code></strong> The <code>Makefile</code> must be a non-empty file in <a href="https://www.gnu.org/software/make/manual/make.html">GNU
Makefile</a> form. See the
<p class="leftbar">
The <code>.info.json</code> must be valid JSON and pass the <code>chkentry(1)</code> tests.
It is generated by the <code>mkiocccentry(1)</code> tool.
</p>
<p class="leftbar">
The <code>.auth.json</code> must be valid JSON and pass the <code>chkentry(1)</code> tests.
It is generated by the <code>mkiocccentry(1)</code> tool.
</p>
<p class="leftbar">
You submission may have additional files, however the filenames of those additional files <strong>MUST</strong>:
</p>
<ul>
<li><p class="leftbar">
Be less than <strong>100</strong> characters in length.
</p></li>
<li><p class="leftbar">
Match the regular expression:
<code>^[0-9A-Za-z][0-9A-Za-z._+-]*$</code>
</p></li>
</ul>
<p class="leftbar">
The <code>mkiocccentry(1)</code> tool will not package any files that do not meet
those requirements.
</p>
<p class="leftbar">
The <code>Makefile</code> <strong>MUST</strong> be a <strong>non</strong>-empty file in <strong><a href="https://www.gnu.org/software/make/manual/make.html">GNU
Makefile</a></strong> form. See the
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example">Makefile.example</a>,
the <a href="../faq.html#submission_makefiles">FAQ about your submission’s Makefile</a> and
the <a href="../faq.html#make_compatibility">FAQ about IOCCC Makefile compatibility</a> for help.</p>
<p><strong><code>|</code></strong> The <code>remarks.md</code> must be a non-empty file in markdown form. See also
the <a href="../faq.html#make_compatibility">FAQ about IOCCC Makefile compatibility</a> for help.
</p>
<p class="leftbar">
The <code>remarks.md</code> <strong>MUST</strong> be a <strong>non</strong>-empty file in markdown form. See also
<a href="#rule18">Rule 18</a> and our <a href="../faq.html#remarks_md">FAQ about what to put in your
remarks.md</a>.</p>
<p><strong><code>|</code></strong> The xz compressed tarball file <strong>MUST</strong> be less than
or equal <strong>3999971</strong> octets in size.</p>
<p><strong><code>|</code></strong> When your submission’s xz compressed tarball is uncompressed,
remarks.md</a> and the <a href="../faq.html#markdown">FAQ about IOCCC best markdown
practices</a>.
</p>
<p class="leftbar">
See also the <a href="https://www.markdownguide.org/basic-syntax">markdown syntax</a> guide
and the <a href="https://spec.commonmark.org/current/">CommonMark Spec</a>.
</p>
</p>
<p class="leftbar">
The xz compressed tarball file <strong>MUST</strong> be less than or equal <strong>3999971</strong> octets in size.
</p>
<p class="leftbar">
When your submission’s xz compressed tarball is uncompressed,
the total size of your submission: the sum of the size of the program,
hints, comments, build and info files <strong>MUST</strong> be less than or equal
to <strong>28314624</strong> octets (<strong>27651K</strong>) in size.</p>
<p><strong><code>|</code></strong> Your submission’s xz compressed tarball <strong>MUST</strong> pass the <code>txzchk(1)</code> test.</p>
<p><strong><code>|</code></strong> You are <strong>HIGHLY ENCOURAGED</strong> to use the <code>mkiocccentry(1)</code>
tool to form your submission’s xz compressed tarball.</p>
<p><strong><code>|</code></strong> Your entry may <strong>NOT</strong> have subdirectories.</p>
<p><strong><code>|</code></strong> Filenames in your entry (that is, not including the files generated by
the <code>mkiocccentry(1)</code> tool or the tools it invokes) <strong>MUST</strong>:</p>
to <strong>28314624</strong> octets (<strong>27651K</strong>) in size.
</p>
<p class="leftbar">
Your submission’s xz compressed tarball <strong>MUST</strong> pass the <code>txzchk(1)</code> test. See
the <a href="guidelines.html">guidelines</a> for more details on this tool.
</p>
<p class="leftbar">
You are <strong>HIGHLY ENCOURAGED</strong> to use the <code>mkiocccentry(1)</code> tool to form your
submission’s xz compressed tarball. See the <a href="guidelines.html">guidelines</a> for
more details on this tool and the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
repo</a>.
</p>
<p class="leftbar">
Your entry may <strong>NOT</strong> have subdirectories. However, you can provide files that
are in different directories as <code>mkiocccentry(1)</code> will copy them to the work
directory (see the <a href="guidelines.html">guidelines</a> for more details).
</p>
<p class="leftbar">
Filenames in your entry (that is, not including the files generated by the
<code>mkiocccentry(1)</code> tool or the tools it or any other tool invokes) <strong>MUST</strong>:
</p>
<ul>
<li>Be less than <strong>100</strong> characters in length</li>
<li><strong>NOT</strong> have a <strong><code>/</code></strong> (excluding the entry directory that the
<code>mkiocccentry(1)</code> tool generates).</li>
<li><strong>NOT</strong> contain a path component of: <strong><code>.</code></strong> (that is, with the exception of
files generated by <code>mkiocccentry(1)</code> itself, it must have <strong>NO</strong> <strong><code>.</code></strong>).</li>
<li><strong>NOT</strong> contain a path component of: <strong><code>..</code></strong> (that is, <strong>NO</strong> <strong><code>..</code></strong>).</li>
<li>Match the regular expression <code>^[0-9A-Za-z][0-9A-Za-z._+-]*$</code> (again, excluding
files generated by <code>mkiocccentry(1)</code>).</li>
<li><p class="leftbar">
Be less than <strong>100</strong> characters in length
</p></li>
<li><p class="leftbar">
<strong>NOT</strong> have a <strong><code>/</code></strong> (excluding the entry directory that
the <code>mkiocccentry(1)</code> tool generates).
</p></li>
<li><p class="leftbar">
<strong>NOT</strong> contain a path component of: <strong><code>.</code></strong> (that is, with
the exception of files generated by <code>mkiocccentry(1)</code> itself, it must have
<strong>NO</strong> <strong><code>.</code></strong>).
</p></li>
<li><p class="leftbar">
<strong>NOT</strong> contain a path component of: <strong><code>..</code></strong> (that is,
<strong>NO</strong> <strong><code>..</code></strong>).
</p></li>
<li><p class="leftbar">
Match the regular expression
<code>^[0-9A-Za-z][0-9A-Za-z._+-]*$</code> (again, excluding files generated by
<code>mkiocccentry(1)</code>).
</p></li>
</ul>
<p><strong><code>|</code></strong> Additionally, the tarball <strong>MUST</strong> have the following files (generated
by the <code>mkiocccentry(1)</code> tool):</p>
<p class="leftbar">
Additionally, the tarball <strong>MUST</strong> have the following files (generated
by the <code>mkiocccentry(1)</code> tool):
</p>
<ul>
<li><code>.auth.json</code> which contains information about the author or authors (that will
only be looked at if the submission wins).</li>
<li><code>.info.json</code> which contains information about the entry.</li>
<li><p class="leftbar">
<code>.auth.json</code> which contains information about the author or
authors (that will only be looked at if the submission wins).
</p></li>
<li><p class="leftbar">
<code>.info.json</code> which contains information about the
entry.
</p></li>
</ul>
<p><strong><code>|</code></strong> The <code>txzchk(1)</code> tool will verify these (and other things) for you and
<p class="leftbar">
The <code>txzchk(1)</code> tool will verify these (and other things) for you and
the <code>chkentry(1)</code> tool will do additional checks on the contents of the
<code>.auth.json</code> and <code>.info.json</code> files.</p>
<p><strong><code>|</code></strong> The tarball filename <strong>MUST</strong> pass <code>fnamchk(1)</code>; the tool <code>txzchk(1)</code>
<code>.auth.json</code> and <code>.info.json</code> files including JSON validity. If these checks
fail it is an error and <code>mkiocccentry(1)</code> will fail. In this case it is very
<strong>possibly</strong> a bug; please <a href="https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&amp;labels=bug&amp;projects=&amp;template=bug_report.yml&amp;title=%5BBug%5D+%3Ctitle%3E">report it at the mkiocccentry issues
page</a>.
</p>
<p class="leftbar">
The tarball filename <strong>MUST</strong> pass <code>fnamchk(1)</code>; the tool <code>txzchk(1)</code>
will run <code>fnamchk(1)</code> as part of its algorithm. If you use <code>mkiocccentry(1)</code>
there should be no problem but if you were to package things manually it is
possible there could be a problem.</p>
<p><strong><code>|</code></strong> The <code>fnamchk(1)</code>, which <code>txzchk(1)</code> executes, will verify that the
filename is correct.</p>
<p><strong><code>|</code></strong> These checks <strong>MUST PASS</strong>.</p>
<p><strong><code>|</code></strong> Where <a href="#rule17">Rule 17</a> and the tools from the latest
possible there could be a problem and this is a big risk.
</p>
<p class="leftbar">
The <code>fnamchk(1)</code>, which <code>txzchk(1)</code> executes, will verify that the
filename is correct.
</p>
<p class="leftbar">
These checks <strong>MUST PASS</strong>.
</p>
<p class="leftbar">
Where <a href="#rule17">Rule 17</a> and the tools from the latest
release of the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a>
conflict, the <a href="../judges.html">IOCCC Judges</a> will use their best judgment which
is likely to favor <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a> code.</p>
<p><strong><code>|</code></strong> This means you should <strong>MAKE SURE</strong> that you use <code>mkiocccentry(1)</code> to
is likely to favor <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a> code.
</p>
<p class="leftbar">
This means you should <strong>MAKE SURE</strong> that you use <code>mkiocccentry(1)</code> to
package your submission; <code>mkiocccentry(1)</code> will run the above mentioned tools
(that do not act on the tarball) <strong>before</strong> creating the tarball and after the
tarball is created it will then verify that the tarball is okay by running
<code>txzchk(1)</code> on it.</p>
<p><strong><code>|</code></strong> These tools will link in the <code>jparse(8)</code> library and <code>chkentry(1)</code>
actually uses the parser to validate the
<a href="https://www.json.org/json-en.html">JSON</a>.</p>
<p><strong><code>|</code></strong> If you run into a problem with one or more of these tools, <strong>PLEASE</strong>
report it at the <a href="https://github.com/ioccc-src/mkiocccentry/issues">mkiocccentry issues
page</a>, <strong>making sure to run
<code>bug_report.sh</code></strong>. See the <a href="guidelines.html">guidelines</a> for help here and also
read <a href="../faq.html#mkiocccentry_bugs">the FAQ about reporting bugs in the mkiocccentry
repo</a>.</p>
<p><strong><code>|</code></strong> To state the obvious: submissions that violate <a href="#rule17">Rule 17</a> <strong>will be rejected</strong>,
so be sure to use the latest release of the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a>,
to form and test your submission’s xz compressed tarball.</p>
<code>txzchk(1)</code> on it.
</p>
<p class="leftbar">
<strong>MAKE SURE</strong> you use the correct release of the repository; you should do this
<strong>AFTER</strong> the contest opens (pull any changes or if you prefer download the
repository via the download option at GitHub).
</p>
<p class="leftbar">
We recommend that you run <code>make</code> and then install the tools (and man pages) via
<code>make install</code> (as root or using <code>sudo(1)</code> to help you run these tools from your
submission’s directory. The <code>make install</code> will install in <code>/usr/local</code>.
</p>
<p class="leftbar">
These tools will link in the <code>jparse(8)</code> library; <code>chkentry(1)</code> uses the parser
to validate the <a href="https://www.json.org/json-en.html">JSON</a> but the other tools
use parts of the library as well.
</p>
<p class="leftbar">
If you run into a problem with one or more of these tools, <strong>PLEASE</strong> <a href="https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&amp;labels=bug&amp;projects=&amp;template=bug_report.yml&amp;title=%5BBug%5D+%3Ctitle%3E">report it
at the mkiocccentry issues
page</a>,
<strong>making sure to run <code>bug_report.sh</code></strong>. See the <a href="guidelines.html">guidelines</a>
for help here and also read <a href="../faq.html#mkiocccentry_bugs">the FAQ about reporting bugs in the mkiocccentry
repo</a>.
</p>
<p class="leftbar">
At the risk of stating the obvious: submissions that violate <a href="#rule17">Rule
17</a> <strong>will be rejected</strong>, so <strong>be sure</strong> to use the latest release of the
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a>, to form and test
your submission’s xz compressed tarball. Do <strong>NOT</strong> assume you have the most
recent release without pulling or downloading via GitHub and <strong>make sure</strong> you
do this <strong>AFTER</strong> the <a href="../status.html">contest status</a> has changed to
<a href="../status.html#open">open</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>
<p><strong><code>|</code></strong> <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>
<p class="leftbar">
<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>
<p>You (the author(s)) <strong>MUST</strong> own the contents of your submission <strong>OR</strong>
you <strong>MUST HAVE PERMISSION</strong> from the owner(s) to submit their content.</p>
<p>You must not submit anything that cannot be submitted under that license.</p>
<p>You <strong>MUST NOT</strong> submit anything that cannot be submitted under that license.</p>
<div id="rule19">
<h2 id="rule-19">Rule 19</h2>
</div>
<p><strong><code>|</code></strong> The <code>remarks.md</code> file, a required non-empty file, must be written in
markdown format. See the Daring Fireball <a href="http://daringfireball.net/projects/markdown/basics">Markdown:
Basics</a>.</p>
<p><strong><code>|</code></strong> We currently use <a href="https://pandoc.org">pandoc</a> to convert markdown to HTML.</p>
<p><strong><code>|</code></strong> Please see our <a href="../faq.html#remarks_md">FAQ about what to put in your
<p class="leftbar">
The <code>remarks.md</code> file, a required non-empty file, must be written in
markdown format. See the <a href="http://daringfireball.net/projects/markdown/basics">Daring Fireball Markdown:
Basics</a>.
</p>
<p class="leftbar">
We currently use <a href="https://pandoc.org">pandoc</a> to convert markdown to HTML.
</p>
<p class="leftbar">
Please see our <a href="../faq.html#remarks_md">FAQ about what to put in your
remarks.md</a> and the <a href="../markdown.html">IOCCC markdown
guidelines</a> for additional markdown guidance.</p>
guidelines</a> for additional markdown guidance.
</p>
<div id="rule20">
<h2 id="rule-20">Rule 20</h2>
</div>
<p>The how to build instructions must be in Makefile format. See <a href="../faq.html#make_compatibility">the FAQ about
make(1) compatibility the IOCCC
supports</a> for more details.</p>
<p><strong><code>|</code></strong> You are <strong>ENCOURAGED</strong> to use
<p class="leftbar">
You are <strong>ENCOURAGED</strong> to use
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example">Makefile.example</a>,
renamed as <code>Makefile</code> of course, for help in constructing your Makefile.</p>
renamed as <code>Makefile</code> of course, for help in constructing your <code>Makefile</code>.
</p>
<p>The target of the Makefile 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 not assume that <code>.</code> (the current directory) is in the <code>$PATH</code>.</p>
<p><strong><code>|</code></strong> Your <code>Makefile</code> <strong>MUST</strong> use a syntax that is compatible with bash
<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 class="leftbar">
Your <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 <strong>ENCOURAGED</strong> to use set <code>SHELL= bash</code> in
your <code>Makefile</code>.</p>
<p><strong><code>|</code></strong> Assume that commands commonly found in <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX
your <code>Makefile</code>.
</p>
<p class="leftbar">
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>
available in the <code>$PATH</code> search path.
</p>
<div id="rule21">
<h2 id="rule-21">Rule 21</h2>
</div>
<p>Your submission <strong>must NOT</strong> create or modify files above the current directory
with the exception of the <code>/tmp</code> and the <code>/var/tmp</code> directories. Your submission
<p>Your submission <strong>MUST NOT</strong> create or modify files above 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 below the current directory, or in <code>/tmp</code>,
or in <code>/var/tmp</code> provided that <code>.</code> is <strong>NOT</strong> the first octet in any
directory name or filename you create.</p>
@@ -810,13 +1028,13 @@ directory name or filename you create.</p>
<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 judges <strong>STRONGLY prefer</strong> to
NOT know who is submitting entries to the IOCCC.</p>
<p>Your source code, data files, remarks and program output <strong>MUST NOT</strong>
identify the authors of your code. The judges <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
<em>Peter Honeyman</em> or pretending to be <em>Peter Honeyman</em>) will be grounds
<strong>Peter Honeyman</strong> or pretending to be <strong>Peter Honeyman</strong>) will be grounds
for disqualification of your submission.</p>
<p>Yes, Virginia, <strong>WE REALLY MEAN IT!</strong></p>
<div id="rule23">
@@ -830,43 +1048,62 @@ for disqualification of your submission.</p>
<div id="rule25">
<h2 id="rule-25">Rule 25</h2>
</div>
<p><strong><code>|</code></strong> The <a href="rules.html">IOCCC rule set</a> needs more than 5^2 rules: see <a href="#rule26">Rule 26</a>.</p>
<p class="leftbar">
The <a href="rules.html">IOCCC rule set</a> needs more than 5^2 rules: see <a href="#rule26">Rule 26</a>.
</p>
<div id="rule26">
<h2 id="rule-26">Rule 26</h2>
</div>
<p><strong><code>|</code></strong> “The quick brown fox jumps over the lazy dog”.<br>
<strong><code>|</code></strong> “Pack my box with five dozen liquor jugs.”<br>
<strong><code>|</code></strong> “How vexingly quick daft zebras jump!”<br>
<strong><code>|</code></strong> “Sphinx of black quartz, judge my vow.”<br>
<strong><code>|</code></strong> “Waltz, bad nymph, for quick jigs vex.”<br>
<strong><code>|</code></strong> “Mr. Jock, TV quiz PhD, bags few lynx.”<br>
<strong><code>|</code></strong> “abcdefg, hijklmnop, qrstu&amp;v, wxy&amp;z.”</p>
<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&amp;v, wxy&amp;z.”</p>
</blockquote>
<div id="rule27">
<h2 id="rule-27">Rule 27</h2>
</div>
<p><strong><code>|</code></strong> Unless otherwise needed, <a href="#rule27">Rule 27</a> is reserved for something cubic. :-)</p>
<p class="leftbar">
Unless otherwise needed, <a href="#rule27">Rule 27</a> is reserved for something cubic. :-)
</p>
<div id="rule28">
<h2 id="rule-28">Rule 28</h2>
</div>
<p><strong><code>|</code></strong> <a href="#rule28">Rule 28</a> is a perfect way end to 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 class="leftbar">
<a href="#rule28">Rule 28</a> is a perfect way end to the list of <a href="rules.html">IOCCC rules</a>
as we do <strong>NOT</strong> plan to have <strong>496</strong> rules. :-)
</p>
<div id="more-information">
<div id="information">
<h1 id="for-more-information">FOR MORE INFORMATION:</h1>
</div>
</div>
<p><strong><code>|</code></strong> For questions or comments about the contest, see <a href="../contact.html">Contacting the IOCCC</a>.</p>
<p><strong><code>|</code></strong> Be sure to review the <a href="index.html">IOCCC Rules and Guidelines</a> as
<p class="leftbar">
For questions or comments about the contest, see <a href="../contact.html">Contacting the IOCCC</a>.
</p>
<p class="leftbar">
<strong>Be SURE</strong> to review the <a href="index.html">IOCCC Rules and Guidelines</a> as
<a href="rules.html">IOCCC rules</a> and the <a href="guidelines.html">IOCCC guidelines</a> may (and
<strong>often do</strong>) change from year to year.</p>
<p><strong><code>|</code></strong> You should be sure you have the current <a href="rules.html">IOCCC rules</a> and
<a href="guidelines.html">IOCCC guidelines</a> prior to submitting entries.</p>
<p><strong><code>|</code></strong> See the <a href="../news.html">Official IOCCC website news</a> for additional information.</p>
<p><strong><code>|</code></strong> For the updates and breaking IOCCC news, you are encouraged to follow
<strong>often do</strong>) change from year to year.
</p>
<p class="leftbar">
You should be sure you have the current <a href="rules.html">IOCCC rules</a> and
<a href="guidelines.html">IOCCC guidelines</a> prior to submitting entries.
</p>
<p>See the <a href="../news.html">Official IOCCC website news</a> for additional information.</p>
<p class="leftbar">
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
<a href="../faq.html#try_mastodon">FAQ about 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><strong><code>|</code></strong> Check out the <a href="https://www.ioccc.org/index.html">Official IOCCC winner website</a> in general.</p>
should refresh the page <strong>even if you do follow us</strong></em>.
</p>
<p class="leftbar">
Check out the <a href="https://www.ioccc.org/index.html">Official IOCCC winner website</a> in general.
</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">
+340 -147
View File
@@ -31,7 +31,9 @@ app from time to time to view IOCCC mastodon updates.
<!-- This is the last line modified by the tool: bin/gen-status.sh -->
# 28th International Obfuscated C Code Contest Official Rules
**`|`** Copyright &copy; 2024 Leonid A. Broukhis and Landon Curt Noll.
<p class="leftbar">
Copyright &copy; 2024 Leonid A. Broukhis and Landon Curt Noll.
</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
@@ -43,7 +45,9 @@ writing by [contacting the judges](../contact.html).
## IOCCC Rules version
</div>
**`|`** These [IOCCC rules](rules.html) are version **28.4 2024-07-02**.
<p class="leftbar">
These [IOCCC rules](rules.html) are version **28.5 2024-07-08**.
</p>
**IMPORTANT**: Be sure to read the [IOCCC guidelines](guidelines.html).
@@ -52,10 +56,13 @@ writing by [contacting the judges](../contact.html).
### Change marks
</div>
**`|`** **&larr; Lines that start with this symbol indicate a change from the previous IOCCC**
<p class="leftbar">
**&larr; Lines that start with this symbol indicate a change from the previous IOCCC**
</p>
Most lines (we sometimes make mistakes) that were modified since the previous
IOCCC start with the **`|`** symbol.
IOCCC start with a solid 4 pixel black left border (or, in the case of a code
block or blockquote, just a vertical bar).
<div id="obfuscate">
@@ -89,13 +96,17 @@ The goals of the IOCCC:
# Important IOCCC dates
</div>
**`|`** This IOCCC runs from **2024-MMM-DD HH:MM:SS UTC** to **202x-MMM-DD HH:MM:SS UTC**.<br>
**`|`** **XXX - date/time is TBD - XXX**
<p class="leftbar">
This IOCCC runs from **2024-MMM-DD HH:MM:SS UTC** to **202x-MMM-DD HH:MM:SS UTC**.<br>
**XXX - date/time is TBD - XXX**
</p>
**`|`** Until the start of this IOCCC, these [IOCCC rules](rules.html),
<p class="leftbar">
Until the start of this IOCCC, these [IOCCC rules](rules.html),
[IOCCC guidelines](guidelines.html) and the [mkiocccentry
toolkit](https://github.com/ioccc-src/mkiocccentry) should be considered
provisional **BETA** versions and **may be adjusted _AT ANY TIME_**.
</p>
When the IOCCC is open, the submission URL is:
[https://submit.ioccc.org](https://submit.ioccc.org); at all other
@@ -104,8 +115,10 @@ times that link is likely to be unresponsive.
Please check the [How to enter FAQ](../faq.html#submit)
for **important information** on how to submit to the IOCCC.
**`|`** The submit URL should be active on or slightly before **2024-MMM-DD HH:MM:SS UTC**.<br>
**`|`** **XXX - date/time is TBD - XXX**
<p class="leftbar">
The submit URL should be active on or slightly before **2024-MMM-DD HH:MM:SS UTC**.<br>
**XXX - date/time is TBD - XXX**
</p>
Please wait to submit your entries until after that time.
@@ -151,26 +164,36 @@ The size rule requires your submission to satisfy **BOTH** [Rule 2a](#rule2a) an
## Rule 2a
</div>
**`|`** The size of your program source **should not exceed 4993 bytes**.
<p class="leftbar">
The size of your program source **should not exceed 4993 bytes**.
</p>
**`|`** If you use the most recently released official IOCCC submission
<p class="leftbar">
If you use the most recently released official IOCCC submission
packaging tool (hereby referred to as `mkiocccentry(1)`), which we **STRONGLY
recommend you do** (see also [Rule 17](#rule17)), then the `mkiocccentry(1)`
tool will warn you if there appears to be a [Rule 2a](#rule2a) violation.
</p>
**`|`** The `mkiocccentry(1)` tool will give you the option of overriding the [Rule 2a](#rule2a) warning.
<p class="leftbar">
The `mkiocccentry(1)` tool will give you the option of overriding the [Rule 2a](#rule2a) warning.
Overriding a [Rule 2a](#rule2a) warning carries a **fair amount of risk that your submission
will be rejected**. Be sure to consult the [IOCCC guidelines](guidelines.html)
ahead of time if you plan to override the [Rule 2a](#rule2a) warning.
</p>
**`|`** If you do override the [Rule 2a](#rule2a) warning from the
<p class="leftbar">
If you do override the [Rule 2a](#rule2a) warning from the
`mkiocccentry(1)` tool, or otherwise plan to violate [Rule 2a](#rule2a), then
you **MUST CLEARLY EXPLAIN THE RATIONALE** of why you are doing so in your
`remarks.md` file. **_Even if you do_ explain this in your `remarks.md` file your
submission may still be rejected**.
</p>
**`|`** You may check your code prior to submission by giving the filename
<p class="leftbar">
You may check your code prior to submission by giving the filename
as a command like argument to the `iocccsize(1)` tool. For example:
</p>
``` <!---sh-->
./iocccsize prog.c
@@ -181,29 +204,41 @@ as a command like argument to the `iocccsize(1)` tool. For example:
## Rule 2b
</div>
**`|`** When the filename of your program source is given as a command line argument to the latest version
<p class="leftbar">
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 `iocccsize(1)`), the
value printed **should NOT exceed _2503_**.
</p>
**`|`** The source to `iocccsize(1)` may be found in the
<p class="leftbar">
The source to `iocccsize(1)` may be found in the
[mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry).
</p>
**`|`** If you use the `mkiocccentry(1)` tool, which we **STRONGLY recommend
<p class="leftbar">
If you use the `mkiocccentry(1)` tool, which we **STRONGLY recommend
you do** (again, see also [Rule 17](#rule17)),
then `mkiocccentry(1)` will invoke `iocccsize(1)` before packaging your submission.
</p>
**`|`** The `mkiocccentry(1)` tool will give you the option of overriding the [Rule 2b](#rule2b) warning.
<p class="leftbar">
The `mkiocccentry(1)` tool will give you the option of overriding the [Rule 2b](#rule2b) warning.
Overriding a [Rule 2b](#rule2b) warning carries a **fair amount of risk that your submission
will be rejected**. Be sure to consult the [IOCCC guidelines](guidelines.html)
ahead of time if you plan to override the [Rule 2b](#rule2b) warning.
</p>
**`|`** If you do override the [Rule 2b](#rule2b) warning from the `mkiocccentry(1)` tool,
<p class="leftbar">
If you do override the [Rule 2b](#rule2b) warning from the `mkiocccentry(1)` tool,
or otherwise plan to violate [Rule 2a](#rule2b), then you **MUST CLEARLY EXPLAIN THE RATIONALE**
of why you are doing so in your `remarks.md` file. **_Even if you do_ explain this in your `remarks.md` file
your submission may still be rejected**.
</p>
**`|`** You may check your code prior to submission by giving the filename
<p class="leftbar">
You may check your code prior to submission by giving the filename
as a command like argument to the `iocccsize(1)` tool. For example:
</p>
``` <!---sh-->
./iocccsize prog.c
@@ -220,8 +255,10 @@ To submit to an open IOCCC, you must use the [IOCCC submit
server](https://submit.ioccc.org/). Unless the IOCCC is open, that link will
likely be unresponsive.
**`|`** The submit URL should be active on or slightly before **2024-MMM-DD HH:MM:SS UTC**.<br>
**`|`** **XXX - date/time is TBD - XXX**
<p class="leftbar">
The submit URL should be active on or slightly before **2024-MMM-DD HH:MM:SS UTC**.<br>
**XXX - date/time is TBD - XXX**
</p>
**Please wait to submit** your entries until after that time.
@@ -230,17 +267,25 @@ likely be unresponsive.
## Rule 4
</div>
**`|`** If your submission is selected as a winner, it may be modified in order
<p class="leftbar">
If your submission is selected as a winner, it may be modified in order
to fit into the structure of the [Official IOCCC winner website](https://www.ioccc.org/index.html).
</p>
**`|`** For example, your submission's `Makefile` might be modified.
<p class="leftbar">
For example, your submission's `Makefile` might be modified.
</p>
**`|`** Your source code will be the file `prog.c`. The compiled binary
<p class="leftbar">
Your source code will be the file `prog.c`. The compiled binary
will be called `prog`. If you submission requires different filenames,
then modify your submission's `Makefile` to **COPY** (**NOT** move)
the files accordingly.
</p>
**`|`** See also [Rule 5](#rule5), [Rule 18](#rule18) and [Rule 21](#rule21).
<p class="leftbar">
See also [Rule 5](#rule5), [Rule 18](#rule18) and [Rule 21](#rule21).
</p>
<div id="rule5">
@@ -260,11 +305,15 @@ file to a new filename and then modify that copy.
## Rule 6
</div>
**`|`** I am not a rule, I am a `free(void *human);` ‼️
<p class="leftbar">
I am not a rule, I am a `free(void *human);` ‼️
</p>
**`|`**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`while (!(ioccc(rule(you(are(number(6)))))) {`<br>
**`|`**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`ha_ha_ha();`<br>
**`|`**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`}`
<p class="leftbar">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`while (!(ioccc(rule(you(are(number(6)))))) {`<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`ha_ha_ha();`<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`}`
</p>
<div id="rule7">
@@ -277,7 +326,9 @@ You (the author(s)) must own the contents of your submission OR
you must have permission from the owner(s) to submit their content
under the following license:
**`|`** **[CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/)**
<p class="leftbar">
**[CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/)**
</p>
If you submit any content that is owned by others, you **MUST
detail that ownership** (i.e., who owns what) **_AND_ document the
@@ -290,8 +341,10 @@ Please note that the IOCCC size tool is **NOT** an original work.
## Rule 8
</div>
**`|`** Entries must be received prior to the end of this IOCCC which is **2024-MMM-DD HH:MM:SS UTC**.<br>
**`|`** **XXX - date/time is TBD - XXX**
<p class="leftbar">
Entries must be received prior to the end of this IOCCC which is **2024-MMM-DD HH:MM:SS UTC**.<br>
**XXX - date/time is TBD - XXX**
</p>
A confirmation of submission will be sent to the submitting email address
@@ -302,7 +355,9 @@ before the close of the contest.
## Rule 9
</div>
**`|`** Each person may submit up to and including **10.000000** entries per contest.
<p class="leftbar">
Each person may submit up to and including **10.000000** (ten) entries per contest.
</p>
**Each submission _must be submitted separately_**.
@@ -341,16 +396,20 @@ their rule abuse is legal, in the `remarks.md` file.
## Rule 13
</div>
**`|`** Any C source that fails to compile because of unescaped octets with
<p class="leftbar">
Any C source that fails to compile because of unescaped octets with
the high bit set (octet value >= 128) **_might_** be rejected.
</p>
<div id="rule14">
## Rule 14
</div>
**`|`** Any C source that fails to compile because of lines with trailing
<p class="leftbar">
Any C source that fails to compile because of lines with trailing
control-M's (i.e., lines with a tailing octet `015`) **_might_** be rejected.
</p>
Please do **NOT** put trailing control-M's on remarks file lines.
Please check to be sure, before submitting, that you have removed
@@ -361,15 +420,18 @@ any control-M at the end of remark file lines.
## Rule 15
</div>
**`|`** In order to register for the IOCCC, you **MUST** have a valid email address.
<p class="leftbar">
In order to register for the IOCCC, you **MUST** have a valid email address.
</p>
The judges **are not responsible for delays in email**, please plan
enough time for one automated exchange of email as part of your
submission.
**`|`** See [the FAQ on how to register for the IOCCC](../faq.html#register) in the
<p class="leftbar">
See [the FAQ on how to register for the IOCCC](../faq.html#register) in the
[FAQ](../faq.html) for details.
</p>
<div id="rule16">
## Rule 16
@@ -388,156 +450,256 @@ been published may be disqualified.
### TL;DR Rule 17 - Use `mkiocccentry(1)`
**`|`** This is a **COMPLEX** rule. **Violating this rule will cause your submission to REJECTED**!
<p class="leftbar">
This is a **COMPLEX** rule. **Violating this rule will cause your submission to REJECTED**!
To help you avoid such a rejection, you are **HIGHLY ENCOURAGED** to use the `mkiocccentry(1)` tool,
based on the latest release of the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry),
to form your submission's xz compressed tarball.
</p>
**`|`** The [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry)
<p class="leftbar">
The [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry)
contains **IMPORTANT** tools such as:
</p>
* `chkentry(1)`
* `iocccsize(1)`
* `mkiocccentry(1)`
* `txzchk(1)`
* `fnamchk(1)`
* `jparse(1)` and `jparse(8)` (which `chkentry(1)` uses)
* <p class="leftbar">`chkentry(1)`</p>
* <p class="leftbar">`iocccsize(1)`</p>
* <p class="leftbar">`mkiocccentry(1)`</p>
* <p class="leftbar">`txzchk(1)`</p>
* <p class="leftbar">`fnamchk(1)`</p>
* <p class="leftbar">`jparse(1)` and `jparse(8)` (which `chkentry(1)` uses)</p>
**`|`** The above mentioned tools will help you verify that your submission
<p class="leftbar">
The above mentioned tools will help you verify that your submission
conforms to [Rule 17](#rule17).
</p>
**`|`** Each above mentioned tools has a `-h` option that provides command
<p class="leftbar">
Each above mentioned tools has a `-h` option that provides command
line help. For additional details, see the tools' man pages.
</p>
**`|`** You do not explicitly need to invoke `jparse(1)` but the `jparse(8)`
<p class="leftbar">
You do not explicitly need to invoke `jparse(1)` but the `jparse(8)`
library will be used when compiling various tools.
</p>
<p class="leftbar">
Of course you **can** invoke `jparse(1)` if you wish to validate your own JSON
data file or some other JSON file.
</p>
### Rule 17 - The COMPLEX details
**`|`** Each submission **MUST** be in the form of a xz compressed tarball.
**`|`** The xz compressed tarball filename must be of the form:
<p class="leftbar">
Each submission **MUST** be in the form of a xz compressed tarball.
The xz compressed tarball filename must be of the form:
</p>
``` <!---re-->
^submit.username-slot_num.[1-9][0-9]{9,}.txz$
```
**`|`** where _`username`_ is your IOCCC registration username **in the form of a
<p class="leftbar">
... where _`username`_ is your IOCCC registration username **in the form of a
[UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier)** (see
[RFC 9562](https://datatracker.ietf.org/doc/html/rfc9562) for
details), and where _`slot_num`_ is a single decimal digit integer
(i.e., >= `0` and < `9`).
</p>
**`|`** In particular, _`username`_ is in the form of:
<p class="leftbar">
In particular, _`username`_ is in the form of:
`xxxxxxxx-xxxx-4xxx-axxx-xxxxxxxxxxxx` where `x` is a hexadecimal digit in the
range `[0-9a-f]`. And yes, there is a 4 (UUID version 4) and an `a` (UUID variant
1) in there.
</p>
**`|`** Your xz compressed tarball **MUST** contain, at a minimum,
the following files:
<p class="leftbar">
Your xz compressed tarball **MUST** contain, **at a minimum**, the following files:
</p>
* `Makefile`
* `prog.c`
* `remarks.md`
* `.info.json`
* `.auth.json`
* <p class="leftbar">`Makefile`</p>
* <p class="leftbar">`prog.c`</p>
* <p class="leftbar">`remarks.md`</p>
* <p class="leftbar">`.info.json`</p>
* <p class="leftbar">`.auth.json`</p>
**`|`** The `.info.json` must be valid JSON and pass the `chkentry(1)` tests.
<p class="leftbar">
The `.info.json` must be valid JSON and pass the `chkentry(1)` tests.
It is generated by the `mkiocccentry(1)` tool.
</p>
**`|`** The `.auth.json` must be valid JSON and pass the `chkentry(1)` tests.
<p class="leftbar">
The `.auth.json` must be valid JSON and pass the `chkentry(1)` tests.
It is generated by the `mkiocccentry(1)` tool.
</p>
**`|`** You submission may have additional files, however the filenames of those additional files **MUST**:
<p class="leftbar">
You submission may have additional files, however the filenames of those additional files **MUST**:
</p>
**`|`** * Be less than **100** characters in length<br>
**`|`** * Match the regular expression: `^[0-9A-Za-z][0-9A-Za-z._+-]*$`
* <p class="leftbar"> Be less than **100** characters in length.</p>
* <p class="leftbar">Match the regular expression:
`^[0-9A-Za-z][0-9A-Za-z._+-]*$`</p>
**`|`** The `mkiocccentry(1)` tool will not package any files that do not meet
<p class="leftbar">
The `mkiocccentry(1)` tool will not package any files that do not meet
those requirements.
</p>
**`|`** The `Makefile` must be a non-empty file in [GNU
Makefile](https://www.gnu.org/software/make/manual/make.html) form. See the
<p class="leftbar">
The `Makefile` **MUST** be a **non**-empty file in **[GNU
Makefile](https://www.gnu.org/software/make/manual/make.html)** form. See the
[Makefile.example](https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example),
the [FAQ about your submission's Makefile](../faq.html#submission_makefiles) and
the [FAQ about IOCCC Makefile compatibility](../faq.html#make_compatibility) for help.
</p>
**`|`** The `remarks.md` must be a non-empty file in markdown form. See also
<p class="leftbar">
The `remarks.md` **MUST** be a **non**-empty file in markdown form. See also
[Rule 18](#rule18) and our [FAQ about what to put in your
remarks.md](../faq.html#remarks_md).
remarks.md](../faq.html#remarks_md) and the [FAQ about IOCCC best markdown
practices](../faq.html#markdown).
</p>
**`|`** The xz compressed tarball file **MUST** be less than
or equal **3999971** octets in size.
<p class="leftbar">
See also the [markdown syntax](https://www.markdownguide.org/basic-syntax) guide
and the [CommonMark Spec](https://spec.commonmark.org/current/).</p>
</p>
**`|`** When your submission's xz compressed tarball is uncompressed,
<p class="leftbar">
The xz compressed tarball file **MUST** be less than or equal **3999971** octets in size.
</p>
<p class="leftbar">
When your submission's xz compressed tarball is uncompressed,
the total size of your submission: the sum of the size of the program,
hints, comments, build and info files **MUST** be less than or equal
to **28314624** octets (**27651K**) in size.
</p>
**`|`** Your submission's xz compressed tarball **MUST** pass the `txzchk(1)` test.
<p class="leftbar">
Your submission's xz compressed tarball **MUST** pass the `txzchk(1)` test. See
the [guidelines](guidelines.html) for more details on this tool.
</p>
**`|`** You are **HIGHLY ENCOURAGED** to use the `mkiocccentry(1)`
tool to form your submission's xz compressed tarball.
<p class="leftbar">
You are **HIGHLY ENCOURAGED** to use the `mkiocccentry(1)` tool to form your
submission's xz compressed tarball. See the [guidelines](guidelines.html) for
more details on this tool and the [mkiocccentry
repo](https://github.com/ioccc-src/mkiocccentry).
</p>
**`|`** Your entry may **NOT** have subdirectories.
<p class="leftbar">
Your entry may **NOT** have subdirectories. However, you can provide files that
are in different directories as `mkiocccentry(1)` will copy them to the work
directory (see the [guidelines](guidelines.html) for more details).
</p>
**`|`** Filenames in your entry (that is, not including the files generated by
the `mkiocccentry(1)` tool or the tools it invokes) **MUST**:
<p class="leftbar">
Filenames in your entry (that is, not including the files generated by the
`mkiocccentry(1)` tool or the tools it or any other tool invokes) **MUST**:
</p>
* Be less than **100** characters in length
* **NOT** have a **`/`** (excluding the entry directory that the
`mkiocccentry(1)` tool generates).
* **NOT** contain a path component of: **`.`** (that is, with the exception of
files generated by `mkiocccentry(1)` itself, it must have **NO** **`.`**).
* **NOT** contain a path component of: **`..`** (that is, **NO** **`..`**).
* Match the regular expression `^[0-9A-Za-z][0-9A-Za-z._+-]*$` (again, excluding
files generated by `mkiocccentry(1)`).
* <p class="leftbar">Be less than **100** characters in length</p>
* <p class="leftbar">**NOT** have a **`/`** (excluding the entry directory that
the `mkiocccentry(1)` tool generates).</p>
* <p class="leftbar">**NOT** contain a path component of: **`.`** (that is, with
the exception of files generated by `mkiocccentry(1)` itself, it must have
**NO** **`.`**).</p>
* <p class="leftbar">**NOT** contain a path component of: **`..`** (that is,
**NO** **`..`**).</p>
* <p class="leftbar">Match the regular expression
`^[0-9A-Za-z][0-9A-Za-z._+-]*$` (again, excluding files generated by
`mkiocccentry(1)`).</p>
**`|`** Additionally, the tarball **MUST** have the following files (generated
<p class="leftbar">
Additionally, the tarball **MUST** have the following files (generated
by the `mkiocccentry(1)` tool):
</p>
* `.auth.json` which contains information about the author or authors (that will
only be looked at if the submission wins).
* `.info.json` which contains information about the entry.
* <p class="leftbar">`.auth.json` which contains information about the author or
authors (that will only be looked at if the submission wins).</p>
* <p class="leftbar">`.info.json` which contains information about the
entry.</p>
**`|`** The `txzchk(1)` tool will verify these (and other things) for you and
<p class="leftbar">
The `txzchk(1)` tool will verify these (and other things) for you and
the `chkentry(1)` tool will do additional checks on the contents of the
`.auth.json` and `.info.json` files.
`.auth.json` and `.info.json` files including JSON validity. If these checks
fail it is an error and `mkiocccentry(1)` will fail. In this case it is very
**possibly** a bug; please [report it at the mkiocccentry issues
page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D+%3Ctitle%3E).
</p>
**`|`** The tarball filename **MUST** pass `fnamchk(1)`; the tool `txzchk(1)`
<p class="leftbar">
The tarball filename **MUST** pass `fnamchk(1)`; the tool `txzchk(1)`
will run `fnamchk(1)` as part of its algorithm. If you use `mkiocccentry(1)`
there should be no problem but if you were to package things manually it is
possible there could be a problem.
possible there could be a problem and this is a big risk.
</p>
**`|`** The `fnamchk(1)`, which `txzchk(1)` executes, will verify that the
<p class="leftbar">
The `fnamchk(1)`, which `txzchk(1)` executes, will verify that the
filename is correct.
</p>
**`|`** These checks **MUST PASS**.
<p class="leftbar">
These checks **MUST PASS**.
</p>
**`|`** Where [Rule 17](#rule17) and the tools from the latest
<p class="leftbar">
Where [Rule 17](#rule17) and the tools from the latest
release of the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry)
conflict, the [IOCCC Judges](../judges.html) will use their best judgment which
is likely to favor [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry) code.
</p>
**`|`** This means you should **MAKE SURE** that you use `mkiocccentry(1)` to
<p class="leftbar">
This means you should **MAKE SURE** that you use `mkiocccentry(1)` to
package your submission; `mkiocccentry(1)` will run the above mentioned tools
(that do not act on the tarball) **before** creating the tarball and after the
tarball is created it will then verify that the tarball is okay by running
`txzchk(1)` on it.
</p>
**`|`** These tools will link in the `jparse(8)` library and `chkentry(1)`
actually uses the parser to validate the
[JSON](https://www.json.org/json-en.html).
<p class="leftbar">
**MAKE SURE** you use the correct release of the repository; you should do this
**AFTER** the contest opens (pull any changes or if you prefer download the
repository via the download option at GitHub).
</p>
**`|`** If you run into a problem with one or more of these tools, **PLEASE**
report it at the [mkiocccentry issues
page](https://github.com/ioccc-src/mkiocccentry/issues), **making sure to run
`bug_report.sh`**. See the [guidelines](guidelines.html) for help here and also
read [the FAQ about reporting bugs in the mkiocccentry
<p class="leftbar">
We recommend that you run `make` and then install the tools (and man pages) via
`make install` (as root or using `sudo(1)` to help you run these tools from your
submission's directory. The `make install` will install in `/usr/local`.
</p>
<p class="leftbar">
These tools will link in the `jparse(8)` library; `chkentry(1)` uses the parser
to validate the [JSON](https://www.json.org/json-en.html) but the other tools
use parts of the library as well.
</p>
<p class="leftbar">
If you run into a problem with one or more of these tools, **PLEASE** [report it
at the mkiocccentry issues
page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D+%3Ctitle%3E),
**making sure to run `bug_report.sh`**. See the [guidelines](guidelines.html)
for help here and also read [the FAQ about reporting bugs in the mkiocccentry
repo](../faq.html#mkiocccentry_bugs).
</p>
**`|`** To state the obvious: submissions that violate [Rule 17](#rule17) **will be rejected**,
so be sure to use the latest release of the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry),
to form and test your submission's xz compressed tarball.
<p class="leftbar">At the risk of stating the obvious: submissions that violate [Rule
17](#rule17) **will be rejected**, so **be sure** to use the latest release of the
[mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry), to form and test
your submission's xz compressed tarball. Do **NOT** assume you have the most
recent release without pulling or downloading via GitHub and **make sure** you
do this **AFTER** the [contest status](../status.html) has changed to
[open](../status.html#open).
</p>
<div id="rule18">
@@ -546,27 +708,35 @@ to form and test your submission's xz compressed tarball.
The entirety of your submission must be submitted under the following license:
**`|`** **[CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/)**
<p class="leftbar">
**[CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/)**
</p>
You (the author(s)) **MUST** own the contents of your submission **OR**
you **MUST HAVE PERMISSION** from the owner(s) to submit their content.
You must not submit anything that cannot be submitted under that license.
You **MUST NOT** submit anything that cannot be submitted under that license.
<div id="rule19">
## Rule 19
</div>
**`|`** The `remarks.md` file, a required non-empty file, must be written in
markdown format. See the Daring Fireball [Markdown:
<p class="leftbar">
The `remarks.md` file, a required non-empty file, must be written in
markdown format. See the [Daring Fireball Markdown:
Basics](http://daringfireball.net/projects/markdown/basics).
</p>
**`|`** We currently use [pandoc](https://pandoc.org) to convert markdown to HTML.
<p class="leftbar">
We currently use [pandoc](https://pandoc.org) to convert markdown to HTML.
</p>
**`|`** Please see our [FAQ about what to put in your
<p class="leftbar">
Please see our [FAQ about what to put in your
remarks.md](../faq.html#remarks_md) and the [IOCCC markdown
guidelines](../markdown.html) for additional markdown guidance.
</p>
<div id="rule20">
@@ -577,35 +747,41 @@ The how to build instructions must be in Makefile format. See [the FAQ about
make&#x28;1&#x29; compatibility the IOCCC
supports](../faq.html#make_compatibility) for more details.
**`|`** You are **ENCOURAGED** to use
<p class="leftbar">
You are **ENCOURAGED** to use
[Makefile.example](https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example),
renamed as `Makefile` of course, for help in constructing your Makefile.
renamed as `Makefile` of course, for help in constructing your `Makefile`.
</p>
The target of the Makefile must be called `prog`. The original
C source file must be called `prog.c`.
To invoke the C compiler, use `${CC}`.
To invoke the C preprocessor use `${CPP}`.
To invoke the C compiler, use `${CC}`. To invoke the C preprocessor use
`${CPP}`.
Do not assume that `.` (the current directory) is in the `$PATH`.
Do **NOT** assume that `.` (the current directory) is in the `$PATH`.
**`|`** Your `Makefile` **MUST** use a syntax that is compatible with bash
<p class="leftbar">
Your `Makefile` **MUST** use a syntax that is compatible with `bash(1)`
and GNU `make(1)`. You are **ENCOURAGED** to use set `SHELL= bash` in
your `Makefile`.
</p>
**`|`** Assume that commands commonly found in [Single UNIX
<p class="leftbar">
Assume that commands commonly found in [Single UNIX
Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification)
environments and systems that conform to the [Single UNIX
Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) are
available in the `$PATH` search path.
</p>
<div id="rule21">
## Rule 21
</div>
Your submission **must NOT** create or modify files above the current directory
with the exception of the `/tmp` and the `/var/tmp` directories. Your submission
Your submission **MUST NOT** create or modify files above the current directory
_with the exception of_ the `/tmp` and the `/var/tmp` directories. Your submission
**MAY** create subdirectories below the current directory, or in `/tmp`,
or in `/var/tmp` provided that `.` is **NOT** the first octet in any
directory name or filename you create.
@@ -617,15 +793,15 @@ directory name or filename you create.
Catch 22:
Your source code, data files, remarks and program output **must NOT**
identify the authors of your code. The judges **STRONGLY prefer** to
NOT know who is submitting entries to the IOCCC.
Your source code, data files, remarks and program output **MUST NOT**
identify the authors of your code. The judges **STRONGLY PREFER** to
**NOT** know who is submitting entries to the IOCCC.
Even if you are a previous IOCCC winner, catch 22 still applies.
Identifying the author(s) of your submission in an obvious way anywhere
within your code, data, remarks or program output (unless you are
_Peter Honeyman_ or pretending to be _Peter Honeyman_) will be grounds
**Peter Honeyman** or pretending to be **Peter Honeyman**) will be grounds
for disqualification of your submission.
Yes, Virginia, **WE REALLY MEAN IT!**
@@ -649,34 +825,41 @@ Even though 24 is not prime, you should still see [Rule 23](#rule23).
## Rule 25
</div>
**`|`** The [IOCCC rule set](rules.html) needs more than 5^2 rules: see [Rule 26](#rule26).
<p class="leftbar">
The [IOCCC rule set](rules.html) needs more than 5^2 rules: see [Rule 26](#rule26).
</p>
<div id="rule26">
## Rule 26
</div>
**`|`** "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."
> "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."
<div id="rule27">
## Rule 27
</div>
**`|`** Unless otherwise needed, [Rule 27](#rule27) is reserved for something cubic. :-)
<p class="leftbar">
Unless otherwise needed, [Rule 27](#rule27) is reserved for something cubic. :-)
</p>
<div id="rule28">
## Rule 28
</div>
**`|`** [Rule 28](#rule28) is a perfect way end to the list of [IOCCC rules](rules.html) as we do **NOT** plan to have **496** rules. :-)
<p class="leftbar">
[Rule 28](#rule28) is a perfect way end to the list of [IOCCC rules](rules.html)
as we do **NOT** plan to have **496** rules. :-)
</p>
<div id="more-information">
@@ -685,24 +868,34 @@ Even though 24 is not prime, you should still see [Rule 23](#rule23).
</div>
</div>
**`|`** For questions or comments about the contest, see [Contacting the IOCCC](../contact.html).
<p class="leftbar">
For questions or comments about the contest, see [Contacting the IOCCC](../contact.html).
</p>
**`|`** Be sure to review the [IOCCC Rules and Guidelines](index.html) as
<p class="leftbar">
**Be SURE** to review the [IOCCC Rules and Guidelines](index.html) as
[IOCCC rules](rules.html) and the [IOCCC guidelines](guidelines.html) may (and
**often do**) change from year to year.
</p>
**`|`** You should be sure you have the current [IOCCC rules](rules.html) and
<p class="leftbar">
You should be sure you have the current [IOCCC rules](rules.html) and
[IOCCC guidelines](guidelines.html) prior to submitting entries.
</p>
**`|`** See the [Official IOCCC website news](../news.html) for additional information.
See the [Official IOCCC website news](../news.html) for additional information.
**`|`** For the updates and breaking IOCCC news, you are encouraged to follow
<p class="leftbar">
For the updates and breaking IOCCC news, you are encouraged to follow
the [IOCCC on Mastodon](https://fosstodon.org/@ioccc) account. See our
[FAQ about Mastodon](../faq.html#try_mastodon) for more information. Please do note that unless
you are mentioned by us you will **NOT** get a notification from the app _so you
should refresh the page **even if you do follow us**_.
</p>
**`|`** Check out the [Official IOCCC winner website](https://www.ioccc.org/index.html) in general.
<p class="leftbar">
Check out the [Official IOCCC winner website](https://www.ioccc.org/index.html) in general.
</p>
**Leonid A. Broukhis**<br>