experiment to move much of Rule 17 text into an FAQ

In order simplify the write-up of the actual Rule 17
into a new FAQ 1.8.  The somewhat shorted Rule 17 text
now refers to checks performed by tools, encourages
their use, discourages their misuse (overriding limits),
and is easier to read: we think.
This commit is contained in:
Landon Curt Noll committed 2025-03-01 01:42:21 -08:00
1 parent 6f06d1f441
commit bf6d0a3574
7 files changed
+886 -733

No files matched your search

+379 -1
View File
@@ -453,6 +453,7 @@
<li><strong>Q 1.5</strong>: <a class="normal" href="#mkiocccentry_test">How can I check if my submission passes tests without having to answer questions?</a></li>
<li><strong>Q 1.6</strong>: <a class="normal" href="#extra-files">How may I include additional files beyond the max allowed?</a></li>
<li><strong>Q 1.7</strong>: <a class="normal" href="#ai">May I use AI, Virtual coding assistants, or similar tools to write my submission?</a></li>
<li><strong>Q 1.8</strong>: <a class="normal" href="#rule17">What are the details behind Rule 17?</a></li>
</ul>
<h2 id="ioccc-judging-process">2. <a href="#judging_proceess">IOCCC Judging process</a></h2>
<ul>
@@ -1082,7 +1083,7 @@ files (<code>prog.c</code>, <code>Makefile</code>, <code>remarks.md</code>) is 3
<p>This file does <strong>NOT</strong> need to pass the <code>txzchk(1)</code> tests; only your submission
tarball needs to pass these tests.</p>
<p>Please pay careful attention to <a href="next/rules.html#rule17">Rule 17</a> and in
particular the part about the <a href="next/rules.html#max-files">maximum number of files per
particular the part about the <a href="#max-files">maximum number of files per
submission</a>, which not only discusses the maximum
number of files (including extra files) but also specific rules you must follow
if you do include a tarball. Not following these points puts you at great risk
@@ -1107,6 +1108,383 @@ the ultimate author of the code you submit.</p>
<p>If you do use such tools, <strong>PLEASE mention</strong> which tools you used as well
as how you them to help write you submission in your <code>remarks.md</code> file.</p>
<p>Jump to: <a href="#">top</a></p>
<div id="rule17">
<h3 id="q-1.8-what-are-details-behind-rule-17">Q 1.8: What are details behind Rule 17?</h3>
</div>
<p>The following are the details behind <a href="next/rules.html#rule17">Rule 17</a>.</p>
<h3 id="tldr-rule-17---use-mkiocccentry1">TL;DR Rule 17 - Use <code>mkiocccentry(1)</code></h3>
<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 class="leftbar">
The <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a>
contains <strong>IMPORTANT</strong> tools and libraries such as:
</p>
<ul>
<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 other tools) and <code>jparse(3)</code> (which <code>chkentry(1)</code> uses)
</p></li>
</ul>
<p class="leftbar">
The above mentioned tools will help you verify that your submission
conforms to <a href="next/rules.html#rule17">Rule 17</a>.
</p>
<p class="leftbar">
Each above mentioned tool has a <code>-h</code> option that provides command line help. For
additional details of each tool, see its man page, and in some cases, the <a href="next/guidelines.html">IOCCC
guidelines</a>.
</p>
<p class="leftbar">
There is no need to use <code>jparse(1)</code> but the <code>jparse(3)</code> library
library will be linked when compiling the tools as they use various functions
provided by it, and <code>chkentry</code> uses the JSON parser API as well.
</p>
<p class="leftbar">
Of course you <strong>may</strong> invoke <code>jparse(1)</code> if you wish to validate a JSON file but
the only JSON files you might want to validate for the IOCCC are validated
by <code>chkentry(1)</code>, and that is what you should use to make sure you conform to
this rule.
</p>
<p class="leftbar">
The maximum number of <strong>extra files</strong> is 31. See the <a href="#max-files">maximum number of extra
files section</a> below for finer details and the
FAQ on “<a href="#extra-files">including additional files</a>”
if you need to include more files than this maximum.
</p>
<p class="leftbar">
Extra files are defined as files that are not the required files (<code>prog.c</code>,
<code>Makefile</code>, <code>remarks.md</code> and the two generated by <code>mkiocccentry(1)</code> <code>.info.json</code>
and <code>.auth.json</code>) and files that are also not the optional files (<code>try.sh</code>,
<code>prog.alt.c</code> and <code>try.alt.sh</code>).
</p>
<p>Jump to: <a href="#">top</a></p>
<h3 id="rule-17---the-complex-details">Rule 17 - The COMPLEX details</h3>
<p class="leftbar">
<p>Each submission <strong>MUST</strong> be in the form of a xz compressed tarball.
The xz compressed tarball filename must be of the form:
<code>^submit.username-slot_num.[1-9][0-9]{9,}.txz$</code>.</p>
<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 class="leftbar">
In particular, <code>username</code> is in the form of:
<code>xxxxxxxx-xxxx-4xxx-Nxxx-xxxxxxxxxxxx</code> where <code>'x'</code> is a hex digit in the range
of <code>[0-9a-f]</code>, 4 is the UUID version, and <code>N</code> is one of <code>8</code>, <code>9</code>, <code>a</code>, or <code>b</code>.
And yes, there is a 4 (UUID version 4) and the variants <code>0x8</code>, <code>0x9</code>, <code>0xa</code> and
<code>0xb</code> 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><p class="leftbar">
<code>prog.c</code>
</p></li>
<li><p class="leftbar">
<code>Makefile</code>
</p></li>
<li><p class="leftbar">
<code>remarks.md</code>
</p></li>
<li><p class="leftbar">
<code>.auth.json</code>
</p></li>
<li><p class="leftbar">
<code>.info.json</code>
</p></li>
</ul>
<p class="leftbar">
<code>prog.c</code> is of course your submission program.
</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> format. See the
<a href="next/guidelines.html#makefile">Makefile section in the guidelines</a>,
the
FAQ on “<a href="#submission_makefiles">submission Makefile</a>”
and the
FAQ on “<a href="#make_compatibility">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 format
(<code>mkiocccentry(1)</code> only checks the file size but if you do not have any text in
it you still risk violating this rule). See also
<a href="next/rules.html#rule18">Rule 18</a> and our
FAQ on “<a href="#remarks_md">remarks.md</a>”
and our
FAQ on “<a href="#markdown">markdown</a>”
and our <a href="markdown.html">markdown guidelines</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 class="leftbar">
The <code>.auth.json</code> file is created by <code>mkiocccentry(1)</code> and it holds information
about the author(s) of the submission. It will <strong>ONLY</strong> be looked at if your
submission wins but it <strong>MUST</strong> still be valid according to <code>chkentry(1)</code>.
</p>
<p class="leftbar">
The <code>.info.json</code> file is created by <code>mkiocccentry(1)</code> and it holds information
about the submission itself. It also <strong>MUST</strong> be valid according to
<code>chkentry(1)</code>.
</p>
<p class="leftbar">
For the complete <code>mkiocccentry(1)</code> process, see the
FAQ on the “<a href="#mkiocccentry_process">mkiocccentry process</a>.
</p>
<p class="leftbar">
The tool performs a lot of checks, both directly and indirectly, and if it or
any other tool detects <strong>ANY</strong> problem, you are <strong>HIGHLY</strong> encouraged to fix it
and try again.
</p>
<p class="leftbar">
If you do use <code>mkiocccentry(1)</code> and you run into a problem, you might see the
FAQ on “<a href="#questions">how to ask a question about the IOCCC rules, guidelines and
tools</a>”.
If you believe you have encountered a bug, feel free to open a bug report at the
<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">mkiocccentry repo issues
page</a>.
</p>
<p class="leftbar">
The xz compressed tarball file <strong>MUST</strong> be &lt;= <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 &lt;=
<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="next/guidelines.html">guidelines</a> for more details on this tool.
</p>
<p class="leftbar">
<strong>IMPORTANT</strong>: Make <strong>SURE</strong> you have the most recent version of the
<code>mkiocccentry</code> toolkit! Not doing so will put you at a great risk of violating
this rule! See the
FAQ on “<a href="#mkiocccentry">obtaining the mkiocccentry toolkit</a>”
for more details.
</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="next/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 have subdirectories, depending on the depth and total length of
the filenames. Certain directories like <code>.git</code>, <code>RCCS</code>, <code>CVS</code> and <code>.svn</code> are
skipped. For more information, see the <a href="next/guidelines.html">guidelines</a>.
</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><p class="leftbar">
Be &lt;= <strong>38</strong> characters in length.
</p></li>
<li><p class="leftbar">
<strong>NOT</strong> have a leading <strong><code>/</code></strong>.
</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> an <strong>NO</strong> dot file).
</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>
<li><p class="leftbar">
<strong>NOT</strong> be a directory depth &gt; 4.
</p></li>
<li><p class="leftbar">
<strong>NOT</strong> have a total <strong>path</strong> length &gt; 99 characters.
</p></li>
</ul>
<p class="leftbar">
The submission tarball created by <code>mkiocccentry(1)</code> <strong>MUST</strong> have
the additional files that are generated by the <code>mkiocccentry(1)</code> tool:
</p>
<ul>
<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 class="leftbar">
The <code>chkentry(1)</code> tool will validate these two JSON files, and do other checks
on your submission directory as well, <em>prior to</em> forming the tarball.
</p>
<p class="leftbar">
Files and directories in your submission tarball <strong>MUST</strong> be specific
permissions and <code>mkiocccentry(1)</code> does this for you. In particular: directories
<strong>MUST</strong> be <code>drwxr-xr-x</code> (i.e. <code>0755</code>), the optional files, <code>try.sh</code> or
<code>try.alt.sh</code>, if provided, <strong>MUST</strong> be <code>-r-xr-xr-x</code> (i.e. <code>0555</code>) and all other
files <strong>MUST</strong> be <code>-r--r--r--</code> (i.e. <code>0444</code>). If the files do not have these
permissions, your submission <strong>WILL</strong> be rejected for violating <a href="next/rules.html#rule17">Rule
17</a>! In addition to <code>mkiocccentry(1)</code> creating and copying the
directories and files with these modes, it also verifies them after the fact and
if they are not correct it is an <strong>error</strong>.
</p>
<p class="leftbar">
If you do need different permissions, then see the
FAQ on “<a href="#file_perms">file permissions</a>”. Also keep in mind
<a href="next/rules.html#rule4">Rule 4</a>, <a href="next/rules.html#rule5">Rule 5</a> and <a href="next/rules.html#rule21">Rule 21</a>.
</p>
<p class="leftbar">
The <code>txzchk(1)</code> tool will also verify file/directory permissions (and many other
things) for you and so will <code>chkentry(1)</code> (along with validating the JSON files
and running semantics checks on them). If these checks fail it is an <strong>error</strong>
and <code>mkiocccentry(1)</code> will fail. In this case (it fails and you used
<code>mkiocccentry(1)</code>) 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 as a bug 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 and this poses a big risk of violating <a href="next/rules.html#rule17">Rule
17</a>.
</p>
<p class="leftbar">
The <code>fnamchk(1)</code>, which <code>txzchk(1)</code> executes, will verify that the
filename is correct. But if you do package your tarball manually, and you have a
mismatch in what is in the tarball and the name, <code>txzchk(1)</code> will flag the
discrepancy as an error and exit with non-zero.
</p>
<p class="leftbar">
These checks <strong>MUST PASS</strong>. If they do not you stand a significant chance of
having your submission rejected for violating <a href="next/rules.html#rule17">Rule 17</a>!
</p>
<div id="max-files">
<h4 id="maximum-number-of-files-per-submission">Maximum number of files per submission</h4>
</div>
<p class="leftbar">
The maximum number of files your submission tarball may contain, not counting
the optional files (<code>prog.alt.c</code>, <code>try.sh</code>, <code>try.alt.sh</code>) and the mandatory
files (<code>prog.c</code>, <code>Makefile</code>, <code>remarks.md</code> plus the <code>mkiocccentry(1)</code> generated
files <code>.auth.json</code> and <code>.info.json</code>), is 31. This is defined in the macro
<code>MAX_EXTRA_FILE_COUNT</code> in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a>. See the
FAQ on “<a href="#extra-files">how to include additional files</a>”
if you need to include more files.
</p>
<p class="leftbar">
If you do include a tarball that takes your extra files count over the maximum,
you <strong>MUST</strong> explain this in your <code>remarks.md</code> file! <strong>PLEASE</strong> do not include a
tarball with extra files for a test-suite; instead mention in your remarks that
you have extra files for a test-suite that can be included should your
submission win. Of course if you don’t need that many files for a test-suite you
are more than welcome to include those files in your submission.
</p>
<p class="leftbar">
If you need to extract a tarball by some Makefile, or perhaps the program
itself, then <code>make clobber</code> <strong>MUST</strong> remove everything that the extraction
created!
</p>
<p class="leftbar">
Tarballs <strong>MUST</strong> only create files and directories <em>under</em> the submission
directory. They may <strong>NOT</strong> contain absolute paths (paths that start with <code>/</code>)!
<code>txzchk</code> only checks the submission tarball so you must verify these details
yourself.
</p>
<p class="leftbar">
<strong>IMPORTANT REMINDER</strong>: <strong>MAKE SURE</strong> your tarball does not reveal who you are!
The <code>mkiocccentry(1)</code> tool uses the v7 format. For instance you might try:
</p>
<pre><code> tar --format=v7 -cJf foo.txz directory</code></pre>
<hr style="width:50%;text-align:left;margin-left:0">
<p class="leftbar">
<strong>IMPORTANT</strong>: where <a href="next/rules.html#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 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. If any step fails it is an error and submitting the
submission will result in violating this rule.
</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). See the
FAQ on “<a href="#obtaining_mkiocccentry">obtaining mkiocccentry</a>”
for more help on ensuring you do have the most up to date release.
</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 (or any other directory). The <code>make install</code> will
install in <code>/usr/local</code>. However, <strong>you do not have</strong> to install them, but in
that case you’ll have to run it from the toolkit’s directory or use the correct
options to specify the path to the necessary tools, and also specify the path to
your files.
</p>
<p class="leftbar">
These tools will link in the <code>jparse(3)</code> library and the <code>dbg</code> library and the
<code>dyn_array</code> library; <code>chkentry(1)</code> uses the JSON parser (<code>jparse</code>) to validate
and parse the <a href="https://www.json.org/json-en.html">JSON</a> but the other tools use
parts of the <code>jparse</code> utility functions 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
as a bug at the mkiocccentry issues
page</a>,
<strong>making sure to run <code>bug_report.sh</code></strong>. See the <a href="next/guidelines.html">guidelines</a>
for help here and also read our
FAQ on “<a href="#mkiocccentry_bugs">mkiocccentry repo bugs</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 do <strong>MAKE SURE</strong> you
do this <strong>AFTER</strong> the <a href="status.html">contest status</a> has changed to
<a href="#open">open</a>.
</p>
<p>Jump to: <a href="#">top</a></p>
<hr style="width:50%;text-align:left;margin-left:0">
<hr style="width:50%;text-align:left;margin-left:0">
<div id="judging">
+400 -1
View File
@@ -27,6 +27,7 @@ This is FAQ version **28.2.12 2025-02-28**.
- **Q 1.5**: <a class="normal" href="#mkiocccentry_test">How can I check if my submission passes tests without having to answer questions?</a>
- **Q 1.6**: <a class="normal" href="#extra-files">How may I include additional files beyond the max allowed?</a>
- **Q 1.7**: <a class="normal" href="#ai">May I use AI, Virtual coding assistants, or similar tools to write my submission?</a>
- **Q 1.8**: <a class="normal" href="#rule17">What are the details behind Rule 17?</a>
## 2. [IOCCC Judging process](#judging_proceess)
@@ -818,7 +819,7 @@ tarball needs to pass these tests.
Please pay careful attention to [Rule 17](next/rules.html#rule17) and in
particular the part about the [maximum number of files per
submission](next/rules.html#max-files), which not only discusses the maximum
submission](#max-files), which not only discusses the maximum
number of files (including extra files) but also specific rules you must follow
if you do include a tarball. Not following these points puts you at great risk
of violating [Rule 17](next/rules.html#rule17)!
@@ -856,6 +857,404 @@ as how you them to help write you submission in your `remarks.md` file.
Jump to: [top](#)
<div id="rule17">
### Q 1.8: What are details behind Rule 17?
</div>
The following are the details behind [Rule 17](next/rules.html#rule17).
### TL;DR Rule 17 - Use `mkiocccentry(1)`
<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>
<p class="leftbar">
The [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry)
contains **IMPORTANT** tools and libraries such as:
</p>
* <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 other tools) and `jparse(3)` (which `chkentry(1)` uses)</p>
<p class="leftbar">
The above mentioned tools will help you verify that your submission
conforms to [Rule 17](next/rules.html#rule17).
</p>
<p class="leftbar">
Each above mentioned tool has a `-h` option that provides command line help. For
additional details of each tool, see its man page, and in some cases, the [IOCCC
guidelines](next/guidelines.html).
</p>
<p class="leftbar">
There is no need to use `jparse(1)` but the `jparse(3)` library
library will be linked when compiling the tools as they use various functions
provided by it, and `chkentry` uses the JSON parser API as well.
</p>
<p class="leftbar">
Of course you **may** invoke `jparse(1)` if you wish to validate a JSON file but
the only JSON files you might want to validate for the IOCCC are validated
by `chkentry(1)`, and that is what you should use to make sure you conform to
this rule.
</p>
<p class="leftbar">
The maximum number of **extra files** is 31. See the [maximum number of extra
files section](#max-files) below for finer details and the
FAQ on "[including additional files](#extra-files)"
if you need to include more files than this maximum.
</p>
<p class="leftbar">
Extra files are defined as files that are not the required files (`prog.c`,
`Makefile`, `remarks.md` and the two generated by `mkiocccentry(1)` `.info.json`
and `.auth.json`) and files that are also not the optional files (`try.sh`,
`prog.alt.c` and `try.alt.sh`).
</p>
Jump to: [top](#)
### Rule 17 - The COMPLEX details
<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:
`^submit.username-slot_num.[1-9][0-9]{9,}.txz$`.
<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>
<p class="leftbar">
In particular, `username` is in the form of:
`xxxxxxxx-xxxx-4xxx-Nxxx-xxxxxxxxxxxx` where `'x'` is a hex digit in the range
of `[0-9a-f]`, 4 is the UUID version, and `N` is one of `8`, `9`, `a`, or `b`.
And yes, there is a 4 (UUID version 4) and the variants `0x8`, `0x9`, `0xa` and
`0xb` in there.
</p>
<p class="leftbar">
Your xz compressed tarball **MUST** contain, **at a minimum**, the following files:
</p>
* <p class="leftbar">`prog.c`</p>
* <p class="leftbar">`Makefile`</p>
* <p class="leftbar">`remarks.md`</p>
* <p class="leftbar">`.auth.json`</p>
* <p class="leftbar">`.info.json`</p>
<p class="leftbar">
`prog.c` is of course your submission program.
</p>
<p class="leftbar">
The `Makefile` **MUST** be a **non**-empty file in **[GNU
Makefile](https://www.gnu.org/software/make/manual/make.html)** format. See the
[Makefile section in the guidelines](next/guidelines.html#makefile),
the
FAQ on "[submission Makefile](#submission_makefiles)"
and the
FAQ on "[Makefile compatibility](#make_compatibility)"
for help.
</p>
<p class="leftbar">
The `remarks.md` **MUST** be a **non**-empty file in markdown format
(`mkiocccentry(1)` only checks the file size but if you do not have any text in
it you still risk violating this rule). See also
[Rule 18](next/rules.html#rule18) and our
FAQ on "[remarks.md](#remarks_md)"
and our
FAQ on "[markdown](#markdown)"
and our [markdown guidelines](markdown.html).
</p>
<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 class="leftbar">
The `.auth.json` file is created by `mkiocccentry(1)` and it holds information
about the author(s) of the submission. It will **ONLY** be looked at if your
submission wins but it **MUST** still be valid according to `chkentry(1)`.
</p>
<p class="leftbar">
The `.info.json` file is created by `mkiocccentry(1)` and it holds information
about the submission itself. It also **MUST** be valid according to
`chkentry(1)`.
</p>
<p class="leftbar">
For the complete `mkiocccentry(1)` process, see the
FAQ on the "[mkiocccentry process](#mkiocccentry_process).
</p>
<p class="leftbar">
The tool performs a lot of checks, both directly and indirectly, and if it or
any other tool detects **ANY** problem, you are **HIGHLY** encouraged to fix it
and try again.
</p>
<p class="leftbar">
If you do use `mkiocccentry(1)` and you run into a problem, you might see the
FAQ on "[how to ask a question about the IOCCC rules, guidelines and
tools](#questions)".
If you believe you have encountered a bug, feel free to open a bug report at the
[mkiocccentry repo issues
page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D+%3Ctitle%3E).
</p>
<p class="leftbar">
The xz compressed tarball file **MUST** be <= **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 <=
**28314624** octets (**27651K**) in size.
</p>
<p class="leftbar">
Your submission's xz compressed tarball **MUST** pass the `txzchk(1)` test. See
the [guidelines](next/guidelines.html) for more details on this tool.
</p>
<p class="leftbar">
**IMPORTANT**: Make **SURE** you have the most recent version of the
`mkiocccentry` toolkit! Not doing so will put you at a great risk of violating
this rule! See the
FAQ on "[obtaining the mkiocccentry toolkit](#mkiocccentry)"
for more details.
</p>
<p class="leftbar">
You are **HIGHLY ENCOURAGED** to use the `mkiocccentry(1)` tool to form your
submission's xz compressed tarball. See the [guidelines](next/guidelines.html) for
more details on this tool and the [mkiocccentry
repo](https://github.com/ioccc-src/mkiocccentry).
</p>
<p class="leftbar">
Your entry may have subdirectories, depending on the depth and total length of
the filenames. Certain directories like `.git`, `RCCS`, `CVS` and `.svn` are
skipped. For more information, see the [guidelines](next/guidelines.html).
</p>
<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>
* <p class="leftbar">Be <= **38** characters in length.</p>
* <p class="leftbar">**NOT** have a leading **`/`**.</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** **`.`** an **NO** dot file).</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>
* <p class="leftbar">**NOT** be a directory depth > 4.</p>
* <p class="leftbar">**NOT** have a total **path** length > 99 characters.</p>
<p class="leftbar">
The submission tarball created by `mkiocccentry(1)` **MUST** have
the additional files that are generated by the `mkiocccentry(1)` tool:
</p>
* <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>
<p class="leftbar">
The `chkentry(1)` tool will validate these two JSON files, and do other checks
on your submission directory as well, _prior to_ forming the tarball.
</p>
<p class="leftbar">
Files and directories in your submission tarball **MUST** be specific
permissions and `mkiocccentry(1)` does this for you. In particular: directories
**MUST** be `drwxr-xr-x` (i.e. `0755`), the optional files, `try.sh` or
`try.alt.sh`, if provided, **MUST** be `-r-xr-xr-x` (i.e. `0555`) and all other
files **MUST** be `-r--r--r--` (i.e. `0444`). If the files do not have these
permissions, your submission **WILL** be rejected for violating [Rule
17](next/rules.html#rule17)! In addition to `mkiocccentry(1)` creating and copying the
directories and files with these modes, it also verifies them after the fact and
if they are not correct it is an **error**.
</p>
<p class="leftbar">
If you do need different permissions, then see the
FAQ on "[file permissions](#file_perms)". Also keep in mind
[Rule 4](next/rules.html#rule4), [Rule 5](next/rules.html#rule5) and [Rule 21](next/rules.html#rule21).
</p>
<p class="leftbar">
The `txzchk(1)` tool will also verify file/directory permissions (and many other
things) for you and so will `chkentry(1)` (along with validating the JSON files
and running semantics checks on them). If these checks fail it is an **error**
and `mkiocccentry(1)` will fail. In this case (it fails and you used
`mkiocccentry(1)`) it is very **possibly** a bug; please [report it as a bug 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>
<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 and this poses a big risk of violating [Rule
17](next/rules.html#rule17).
</p>
<p class="leftbar">
The `fnamchk(1)`, which `txzchk(1)` executes, will verify that the
filename is correct. But if you do package your tarball manually, and you have a
mismatch in what is in the tarball and the name, `txzchk(1)` will flag the
discrepancy as an error and exit with non-zero.
</p>
<p class="leftbar">
These checks **MUST PASS**. If they do not you stand a significant chance of
having your submission rejected for violating [Rule 17](next/rules.html#rule17)!
</p>
<div id="max-files">
#### Maximum number of files per submission
</div>
<p class="leftbar">
The maximum number of files your submission tarball may contain, not counting
the optional files (`prog.alt.c`, `try.sh`, `try.alt.sh`) and the mandatory
files (`prog.c`, `Makefile`, `remarks.md` plus the `mkiocccentry(1)` generated
files `.auth.json` and `.info.json`), is 31. This is defined in the macro
`MAX_EXTRA_FILE_COUNT` in
[soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry). See the
FAQ on "[how to include additional files](#extra-files)"
if you need to include more files.
</p>
<p class="leftbar">
If you do include a tarball that takes your extra files count over the maximum,
you **MUST** explain this in your `remarks.md` file! **PLEASE** do not include a
tarball with extra files for a test-suite; instead mention in your remarks that
you have extra files for a test-suite that can be included should your
submission win. Of course if you don't need that many files for a test-suite you
are more than welcome to include those files in your submission.
</p>
<p class="leftbar">
If you need to extract a tarball by some Makefile, or perhaps the program
itself, then `make clobber` **MUST** remove everything that the extraction
created!
</p>
<p class="leftbar">
Tarballs **MUST** only create files and directories _under_ the submission
directory. They may **NOT** contain absolute paths (paths that start with `/`)!
`txzchk` only checks the submission tarball so you must verify these details
yourself.
</p>
<p class="leftbar">
**IMPORTANT REMINDER**: **MAKE SURE** your tarball does not reveal who you are!
The `mkiocccentry(1)` tool uses the v7 format. For instance you might try:
</p>
``` <!---sh-->
tar --format=v7 -cJf foo.txz directory
```
<hr style="width:50%;text-align:left;margin-left:0">
<p class="leftbar">
**IMPORTANT**: where [Rule 17](next/rules.html#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>
<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. If any step fails it is an error and submitting the
submission will result in violating this rule.
</p>
<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). See the
FAQ on "[obtaining mkiocccentry](#obtaining_mkiocccentry)"
for more help on ensuring you do have the most up to date release.
</p>
<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 (or any other directory). The `make install` will
install in `/usr/local`. However, **you do not have** to install them, but in
that case you'll have to run it from the toolkit's directory or use the correct
options to specify the path to the necessary tools, and also specify the path to
your files.
</p>
<p class="leftbar">
These tools will link in the `jparse(3)` library and the `dbg` library and the
`dyn_array` library; `chkentry(1)` uses the JSON parser (`jparse`) to validate
and parse the [JSON](https://www.json.org/json-en.html) but the other tools use
parts of the `jparse` utility functions as well.
</p>
<p class="leftbar">
If you run into a problem with one or more of these tools, **PLEASE** [report it
as a bug 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](next/guidelines.html)
for help here and also read our
FAQ on "[mkiocccentry repo bugs](#mkiocccentry_bugs)".
</p>
<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 do **MAKE SURE** you
do this **AFTER** the [contest status](status.html) has changed to
[open](#open).
</p>
Jump to: [top](#)
<hr style="width:50%;text-align:left;margin-left:0">
<hr style="width:50%;text-align:left;margin-left:0">
+1 -1
View File
@@ -1115,7 +1115,7 @@ do the same like:
</p>
<pre><code> tar --format=v7 -cJf foo.txz directory</code></pre>
<p class="leftbar">
See <a href="rules.html#rule17">Rule 17</a> and in particular the part about the <a href="rules.html#max-files">maximum
See <a href="rules.html#rule17">Rule 17</a> and in particular the part about the <a href="../faq.html#max-files">maximum
number of files</a>. If you do not follow these points, you
are at a great risk of violating <a href="rules.html#rule17">Rule 17</a>!
</p>
+1 -1
View File
@@ -855,7 +855,7 @@ do the same like:
<p class="leftbar">
See [Rule 17](rules.html#rule17) and in particular the part about the [maximum
number of files](rules.html#max-files). If you do not follow these points, you
number of files](../faq.html#max-files). If you do not follow these points, you
are at a great risk of violating [Rule 17](rules.html#rule17)!
</p>
+49 -352
View File
@@ -913,385 +913,82 @@ for details.
<div id="rule16">
<h2 id="rule-16">Rule 16</h2>
</div>
<p>You are <strong>STRONGLY</strong> encouraged to submit <strong>a previously unpublished <em>AND</em>
original submission</strong>. Submissions that are similar to previous entries are
<p>You are <strong>STRONGLY</strong> encouraged to submit an <strong>original submission</strong>.
Submissions that are similar to previous entries are
discouraged. As we judge anonymously, submissions that have already
been published may be disqualified.</p>
<p>Jump to: <a href="#">top</a></p>
<div id="rule17">
<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 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.
Your submission must be in the form of <strong>xz compressed tarball</strong>
that <code>mkiocccentry(1)</code> tool would generate. The files, directories,
and paths must conform to the limits imposed by <code>mkiocccentry(1)</code>
including but not limited to their names, count, path length
and directory tree depth.
</p>
<p class="leftbar">
The <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a>
contains <strong>IMPORTANT</strong> tools and libraries such as:
Your <strong>xz compressed tarball</strong> submission file must pass the tests performed by:
</p>
<ul>
<li><p class="leftbar">
<code>txzchk(1)</code>
</p></li>
</ul>
<p class="leftbar">
Your <strong>xz compressed tarball</strong> submission file must pass the tests performed by:
</p>
<ul>
<li><p class="leftbar">
<code>fnamchk(1)</code>
</p></li>
</ul>
<p class="leftbar">
The resulting directory produced when your <strong>xz compressed tarball</strong> submission file uncompressed,
must pass the pass the checks performed by:
</p>
<ul>
<li><p class="leftbar">
<code>chkentry(1)</code>
</p></li>
</ul>
<p class="leftbar">
The resulting <code>prog.c</code> file must pass the <a href="#rule2">Rule 2</a> size checked performed by:
</p>
<ul>
<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 other tools) and <code>jparse(3)</code> (which <code>chkentry(1)</code> uses)
</p></li>
</ul>
<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 tool has a <code>-h</code> option that provides command line help. For
additional details of each tool, see its man page, and in some cases, the <a href="guidelines.html">IOCCC
guidelines</a>.
</p>
<p class="leftbar">
There is no need to use <code>jparse(1)</code> but the <code>jparse(3)</code> library
library will be linked when compiling the tools as they use various functions
provided by it, and <code>chkentry</code> uses the JSON parser API as well.
</p>
<p class="leftbar">
Of course you <strong>may</strong> invoke <code>jparse(1)</code> if you wish to validate a JSON file but
the only JSON files you might want to validate for the IOCCC are validated
by <code>chkentry(1)</code>, and that is what you should use to make sure you conform to
this rule.
</p>
<p class="leftbar">
The maximum number of <strong>extra files</strong> is 31. See the <a href="#max-files">maximum number of extra
files section</a> below for finer details and the
FAQ on “<a href="../faq.html#extra-files">including additional files</a>”
if you need to include more files than this maximum.
</p>
<p class="leftbar">
Extra files are defined as files that are not the required files (<code>prog.c</code>,
<code>Makefile</code>, <code>remarks.md</code> and the two generated by <code>mkiocccentry(1)</code> <code>.info.json</code>
and <code>.auth.json</code>) and files that are also not the optional files (<code>try.sh</code>,
<code>prog.alt.c</code> and <code>try.alt.sh</code>).
</p>
<p>Jump to: <a href="#">top</a></p>
<h3 id="rule-17---the-complex-details">Rule 17 - The COMPLEX details</h3>
<p class="leftbar">
<p>Each submission <strong>MUST</strong> be in the form of a xz compressed tarball.
The xz compressed tarball filename must be of the form:
<code>^submit.username-slot_num.[1-9][0-9]{9,}.txz$</code>.</p>
<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 class="leftbar">
In particular, <code>username</code> is in the form of:
<code>xxxxxxxx-xxxx-4xxx-Nxxx-xxxxxxxxxxxx</code> where <code>'x'</code> is a hex digit in the range
of <code>[0-9a-f]</code>, 4 is the UUID version, and <code>N</code> is one of <code>8</code>, <code>9</code>, <code>a</code>, or <code>b</code>.
And yes, there is a 4 (UUID version 4) and the variants <code>0x8</code>, <code>0x9</code>, <code>0xa</code> and
<code>0xb</code> in there.
</p>
<p class="leftbar">
Your xz compressed tarball <strong>MUST</strong> contain, <strong>at a minimum</strong>, the following files:
The <code>.auth.json</code> and <code>.info.json</code> must be compatible with what hat <code>mkiocccentry(1)</code> tool
would produce as well as pass the tests performed by:
</p>
<ul>
<li><p class="leftbar">
<code>prog.c</code>
</p></li>
<li><p class="leftbar">
<code>Makefile</code>
</p></li>
<li><p class="leftbar">
<code>remarks.md</code>
</p></li>
<li><p class="leftbar">
<code>.auth.json</code>
</p></li>
<li><p class="leftbar">
<code>.info.json</code>
<code>jparse(1)</code>
</p></li>
</ul>
<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 <code>mkiocccentry(1)</code> tool form your <strong>xz compressed tarball</strong>
submission file and don’t try to override override its checks and
limits in order to be sure you submission conforms to this rule.</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 [IOCCC
Judges[(../judges.html).</p>
<p class="leftbar">
<code>prog.c</code> is of course your submission program.
See the
FAQ on the “<a href="../faq.html#mkiocccentry">mkiocccentry tool</a>
for how to obtain and use the above mentioned tools.
</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> format. See the
<a href="guidelines.html#makefile">Makefile section in the guidelines</a>,
the
FAQ on “<a href="../faq.html#submission_makefiles">submission Makefile</a>”
and the
FAQ on “<a href="../faq.html#make_compatibility">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 format
(<code>mkiocccentry(1)</code> only checks the file size but if you do not have any text in
it you still risk violating this rule). See also
<a href="#rule18">Rule 18</a> and our
FAQ on “<a href="../faq.html#remarks_md">remarks.md</a>”
and our
FAQ on “<a href="../faq.html#markdown">markdown</a>”
and our <a href="../markdown.html">markdown guidelines</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 class="leftbar">
The <code>.auth.json</code> file is created by <code>mkiocccentry(1)</code> and it holds information
about the author(s) of the submission. It will <strong>ONLY</strong> be looked at if your
submission wins but it <strong>MUST</strong> still be valid according to <code>chkentry(1)</code>.
</p>
<p class="leftbar">
The <code>.info.json</code> file is created by <code>mkiocccentry(1)</code> and it holds information
about the submission itself. It also <strong>MUST</strong> be valid according to
<code>chkentry(1)</code>.
</p>
<p class="leftbar">
For the complete <code>mkiocccentry(1)</code> process, see the
FAQ on the “<a href="../faq.html#mkiocccentry_process">mkiocccentry process</a>.
</p>
<p class="leftbar">
The tool performs a lot of checks, both directly and indirectly, and if it or
any other tool detects <strong>ANY</strong> problem, you are <strong>HIGHLY</strong> encouraged to fix it
and try again.
</p>
<p class="leftbar">
If you do use <code>mkiocccentry(1)</code> and you run into a problem, you might see the
FAQ on “<a href="../faq.html#questions">how to ask a question about the IOCCC rules, guidelines and
tools</a>”.
If you believe you have encountered a bug, feel free to open a bug report at the
<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">mkiocccentry repo issues
page</a>.
</p>
<p class="leftbar">
The xz compressed tarball file <strong>MUST</strong> be &lt;= <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 &lt;=
<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">
<strong>IMPORTANT</strong>: Make <strong>SURE</strong> you have the most recent version of the
<code>mkiocccentry</code> toolkit! Not doing so will put you at a great risk of violating
this rule! See the
FAQ on “<a href="../faq.html#mkiocccentry">obtaining the mkiocccentry toolkit</a>”
for more details.
</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 have subdirectories, depending on the depth and total length of
the filenames. Certain directories like <code>.git</code>, <code>RCCS</code>, <code>CVS</code> and <code>.svn</code> are
skipped. For more information, see the <a href="guidelines.html">guidelines</a>.
</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><p class="leftbar">
Be &lt;= <strong>38</strong> characters in length.
</p></li>
<li><p class="leftbar">
<strong>NOT</strong> have a leading <strong><code>/</code></strong>.
</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> an <strong>NO</strong> dot file).
</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>
<li><p class="leftbar">
<strong>NOT</strong> be a directory depth &gt; 4.
</p></li>
<li><p class="leftbar">
<strong>NOT</strong> have a total <strong>path</strong> length &gt; 99 characters.
</p></li>
</ul>
<p class="leftbar">
The submission tarball created by <code>mkiocccentry(1)</code> <strong>MUST</strong> have
the additional files that are generated by the <code>mkiocccentry(1)</code> tool:
</p>
<ul>
<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 class="leftbar">
The <code>chkentry(1)</code> tool will validate these two JSON files, and do other checks
on your submission directory as well, <em>prior to</em> forming the tarball.
</p>
<p class="leftbar">
Files and directories in your submission tarball <strong>MUST</strong> be specific
permissions and <code>mkiocccentry(1)</code> does this for you. In particular: directories
<strong>MUST</strong> be <code>drwxr-xr-x</code> (i.e. <code>0755</code>), the optional files, <code>try.sh</code> or
<code>try.alt.sh</code>, if provided, <strong>MUST</strong> be <code>-r-xr-xr-x</code> (i.e. <code>0555</code>) and all other
files <strong>MUST</strong> be <code>-r--r--r--</code> (i.e. <code>0444</code>). If the files do not have these
permissions, your submission <strong>WILL</strong> be rejected for violating <a href="#rule17">Rule
17</a>! In addition to <code>mkiocccentry(1)</code> creating and copying the
directories and files with these modes, it also verifies them after the fact and
if they are not correct it is an <strong>error</strong>.
</p>
<p class="leftbar">
If you do need different permissions, then see the
FAQ on “<a href="../faq.html#file_perms">file permissions</a>”. Also keep in mind
<a href="#rule4">Rule 4</a>, <a href="#rule5">Rule 5</a> and <a href="#rule21">Rule 21</a>.
</p>
<p class="leftbar">
The <code>txzchk(1)</code> tool will also verify file/directory permissions (and many other
things) for you and so will <code>chkentry(1)</code> (along with validating the JSON files
and running semantics checks on them). If these checks fail it is an <strong>error</strong>
and <code>mkiocccentry(1)</code> will fail. In this case (it fails and you used
<code>mkiocccentry(1)</code>) 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 as a bug 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 and this poses a big risk of violating <a href="#rule17">Rule
17</a>.
</p>
<p class="leftbar">
The <code>fnamchk(1)</code>, which <code>txzchk(1)</code> executes, will verify that the
filename is correct. But if you do package your tarball manually, and you have a
mismatch in what is in the tarball and the name, <code>txzchk(1)</code> will flag the
discrepancy as an error and exit with non-zero.
</p>
<p class="leftbar">
These checks <strong>MUST PASS</strong>. If they do not you stand a significant chance of
having your submission rejected for violating <a href="#rule17">Rule 17</a>!
</p>
<div id="max-files">
<h4 id="maximum-number-of-files-per-submission">Maximum number of files per submission</h4>
</div>
<p class="leftbar">
The maximum number of files your submission tarball may contain, not counting
the optional files (<code>prog.alt.c</code>, <code>try.sh</code>, <code>try.alt.sh</code>) and the mandatory
files (<code>prog.c</code>, <code>Makefile</code>, <code>remarks.md</code> plus the <code>mkiocccentry(1)</code> generated
files <code>.auth.json</code> and <code>.info.json</code>), is 31. This is defined in the macro
<code>MAX_EXTRA_FILE_COUNT</code> in
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h">soup/limit_ioccc.h</a>
in the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a>. See the
FAQ on “<a href="../faq.html#extra-files">how to include additional files</a>”
if you need to include more files.
</p>
<p class="leftbar">
If you do include a tarball that takes your extra files count over the maximum,
you <strong>MUST</strong> explain this in your <code>remarks.md</code> file! <strong>PLEASE</strong> do not include a
tarball with extra files for a test-suite; instead mention in your remarks that
you have extra files for a test-suite that can be included should your
submission win. Of course if you don’t need that many files for a test-suite you
are more than welcome to include those files in your submission.
</p>
<p class="leftbar">
If you need to extract a tarball by some Makefile, or perhaps the program
itself, then <code>make clobber</code> <strong>MUST</strong> remove everything that the extraction
created!
</p>
<p class="leftbar">
Tarballs <strong>MUST</strong> only create files and directories <em>under</em> the submission
directory. They may <strong>NOT</strong> contain absolute paths (paths that start with <code>/</code>)!
<code>txzchk</code> only checks the submission tarball so you must verify these details
yourself.
</p>
<p class="leftbar">
<strong>IMPORTANT REMINDER</strong>: <strong>MAKE SURE</strong> your tarball does not reveal who you are!
The <code>mkiocccentry(1)</code> tool uses the v7 format. For instance you might try:
</p>
<pre><code> tar --format=v7 -cJf foo.txz directory</code></pre>
<hr style="width:50%;text-align:left;margin-left:0">
<p class="leftbar">
<strong>IMPORTANT</strong>: 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 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. If any step fails it is an error and submitting the
submission will result in violating this rule.
</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). See the
FAQ on “<a href="../faq.html#obtaining_mkiocccentry">obtaining mkiocccentry</a>”
for more help on ensuring you do have the most up to date release.
</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 (or any other directory). The <code>make install</code> will
install in <code>/usr/local</code>. However, <strong>you do not have</strong> to install them, but in
that case you’ll have to run it from the toolkit’s directory or use the correct
options to specify the path to the necessary tools, and also specify the path to
your files.
</p>
<p class="leftbar">
These tools will link in the <code>jparse(3)</code> library and the <code>dbg</code> library and the
<code>dyn_array</code> library; <code>chkentry(1)</code> uses the JSON parser (<code>jparse</code>) to validate
and parse the <a href="https://www.json.org/json-en.html">JSON</a> but the other tools use
parts of the <code>jparse</code> utility functions 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
as a bug 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 our
FAQ on “<a href="../faq.html#mkiocccentry_bugs">mkiocccentry repo bugs</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 do <strong>MAKE SURE</strong> you
do this <strong>AFTER</strong> the <a href="../status.html">contest status</a> has changed to
<a href="../faq.html#open">open</a>.
<strong>IMPORTANT</strong>: See the
FAQ on “<a href="../faq.html#rule17">Rule17</a>”
for very important details behind this rule.
</p>
<p>Jump to: <a href="#">top</a></p>
<div id="rule18">
+54 -375
View File
@@ -683,8 +683,8 @@ Jump to: [top](#)
## Rule 16
</div>
You are **STRONGLY** encouraged to submit **a previously unpublished _AND_
original submission**. Submissions that are similar to previous entries are
You are **STRONGLY** encouraged to submit an **original submission**.
Submissions that are similar to previous entries are
discouraged. As we judge anonymously, submissions that have already
been published may be disqualified.
@@ -696,392 +696,71 @@ Jump to: [top](#)
## Rule 17
</div>
### TL;DR Rule 17 - Use `mkiocccentry(1)`
<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.
Your submission must be in the form of **xz compressed tarball**
that `mkiocccentry(1)` tool would generate. The files, directories,
and paths must conform to the limits imposed by `mkiocccentry(1)`
including but not limited to their names, count, path length
and directory tree depth.
</p>
<p class="leftbar">
The [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry)
contains **IMPORTANT** tools and libraries such as:
Your **xz compressed tarball** submission file must pass the tests performed by:
</p>
* <p class="leftbar">`txzchk(1)`</p>
<p class="leftbar">
Your **xz compressed tarball** submission file must pass the tests performed by:
</p>
* <p class="leftbar">`fnamchk(1)`</p>
<p class="leftbar">
The resulting directory produced when your **xz compressed tarball** submission file uncompressed,
must pass the pass the checks performed by:
</p>
* <p class="leftbar">`chkentry(1)`</p>
<p class="leftbar">
The resulting `prog.c` file must pass the [Rule 2](#rule2) size checked performed by:
</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 other tools) and `jparse(3)` (which `chkentry(1)` uses)</p>
<p class="leftbar">
The above mentioned tools will help you verify that your submission
conforms to [Rule 17](#rule17).
The `.auth.json` and `.info.json` must be compatible with what hat `mkiocccentry(1)` tool
would produce as well as pass the tests performed by:
</p>
* <p class="leftbar">`jparse(1)`</p>
### TL;DR Rule 17 - Use `mkiocccentry(1)` to form your submission
Let the `mkiocccentry(1)` tool form your **xz compressed tarball**
submission file and don't try to override override its checks and
limits in order to be sure you submission conforms to this rule.
### Warning
Using command line flags or input prompts to override checks and
limits made by the above mentioned tools is **NOT** recommended
and may result in your submission being rejected by the [IOCCC
submit server](https://submit.ioccc.org) and/or the [IOCCC
Judges[(../judges.html).
<p class="leftbar">
See the
FAQ on the "[mkiocccentry tool](../faq.html#mkiocccentry)
for how to obtain and use the above mentioned tools.
</p>
<p class="leftbar">
Each above mentioned tool has a `-h` option that provides command line help. For
additional details of each tool, see its man page, and in some cases, the [IOCCC
guidelines](guidelines.html).
</p>
<p class="leftbar">
There is no need to use `jparse(1)` but the `jparse(3)` library
library will be linked when compiling the tools as they use various functions
provided by it, and `chkentry` uses the JSON parser API as well.
</p>
<p class="leftbar">
Of course you **may** invoke `jparse(1)` if you wish to validate a JSON file but
the only JSON files you might want to validate for the IOCCC are validated
by `chkentry(1)`, and that is what you should use to make sure you conform to
this rule.
</p>
<p class="leftbar">
The maximum number of **extra files** is 31. See the [maximum number of extra
files section](#max-files) below for finer details and the
FAQ on "[including additional files](../faq.html#extra-files)"
if you need to include more files than this maximum.
</p>
<p class="leftbar">
Extra files are defined as files that are not the required files (`prog.c`,
`Makefile`, `remarks.md` and the two generated by `mkiocccentry(1)` `.info.json`
and `.auth.json`) and files that are also not the optional files (`try.sh`,
`prog.alt.c` and `try.alt.sh`).
</p>
Jump to: [top](#)
### Rule 17 - The COMPLEX details
<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:
`^submit.username-slot_num.[1-9][0-9]{9,}.txz$`.
<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>
<p class="leftbar">
In particular, `username` is in the form of:
`xxxxxxxx-xxxx-4xxx-Nxxx-xxxxxxxxxxxx` where `'x'` is a hex digit in the range
of `[0-9a-f]`, 4 is the UUID version, and `N` is one of `8`, `9`, `a`, or `b`.
And yes, there is a 4 (UUID version 4) and the variants `0x8`, `0x9`, `0xa` and
`0xb` in there.
</p>
<p class="leftbar">
Your xz compressed tarball **MUST** contain, **at a minimum**, the following files:
</p>
* <p class="leftbar">`prog.c`</p>
* <p class="leftbar">`Makefile`</p>
* <p class="leftbar">`remarks.md`</p>
* <p class="leftbar">`.auth.json`</p>
* <p class="leftbar">`.info.json`</p>
<p class="leftbar">
`prog.c` is of course your submission program.
</p>
<p class="leftbar">
The `Makefile` **MUST** be a **non**-empty file in **[GNU
Makefile](https://www.gnu.org/software/make/manual/make.html)** format. See the
[Makefile section in the guidelines](guidelines.html#makefile),
the
FAQ on "[submission Makefile](../faq.html#submission_makefiles)"
and the
FAQ on "[Makefile compatibility](../faq.html#make_compatibility)"
for help.
</p>
<p class="leftbar">
The `remarks.md` **MUST** be a **non**-empty file in markdown format
(`mkiocccentry(1)` only checks the file size but if you do not have any text in
it you still risk violating this rule). See also
[Rule 18](#rule18) and our
FAQ on "[remarks.md](../faq.html#remarks_md)"
and our
FAQ on "[markdown](../faq.html#markdown)"
and our [markdown guidelines](../markdown.html).
</p>
<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 class="leftbar">
The `.auth.json` file is created by `mkiocccentry(1)` and it holds information
about the author(s) of the submission. It will **ONLY** be looked at if your
submission wins but it **MUST** still be valid according to `chkentry(1)`.
</p>
<p class="leftbar">
The `.info.json` file is created by `mkiocccentry(1)` and it holds information
about the submission itself. It also **MUST** be valid according to
`chkentry(1)`.
</p>
<p class="leftbar">
For the complete `mkiocccentry(1)` process, see the
FAQ on the "[mkiocccentry process](../faq.html#mkiocccentry_process).
</p>
<p class="leftbar">
The tool performs a lot of checks, both directly and indirectly, and if it or
any other tool detects **ANY** problem, you are **HIGHLY** encouraged to fix it
and try again.
</p>
<p class="leftbar">
If you do use `mkiocccentry(1)` and you run into a problem, you might see the
FAQ on "[how to ask a question about the IOCCC rules, guidelines and
tools](../faq.html#questions)".
If you believe you have encountered a bug, feel free to open a bug report at the
[mkiocccentry repo issues
page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D+%3Ctitle%3E).
</p>
<p class="leftbar">
The xz compressed tarball file **MUST** be <= **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 <=
**28314624** octets (**27651K**) in size.
</p>
<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>
<p class="leftbar">
**IMPORTANT**: Make **SURE** you have the most recent version of the
`mkiocccentry` toolkit! Not doing so will put you at a great risk of violating
this rule! See the
FAQ on "[obtaining the mkiocccentry toolkit](../faq.html#mkiocccentry)"
for more details.
</p>
<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>
<p class="leftbar">
Your entry may have subdirectories, depending on the depth and total length of
the filenames. Certain directories like `.git`, `RCCS`, `CVS` and `.svn` are
skipped. For more information, see the [guidelines](guidelines.html).
</p>
<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>
* <p class="leftbar">Be <= **38** characters in length.</p>
* <p class="leftbar">**NOT** have a leading **`/`**.</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** **`.`** an **NO** dot file).</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>
* <p class="leftbar">**NOT** be a directory depth > 4.</p>
* <p class="leftbar">**NOT** have a total **path** length > 99 characters.</p>
<p class="leftbar">
The submission tarball created by `mkiocccentry(1)` **MUST** have
the additional files that are generated by the `mkiocccentry(1)` tool:
</p>
* <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>
<p class="leftbar">
The `chkentry(1)` tool will validate these two JSON files, and do other checks
on your submission directory as well, _prior to_ forming the tarball.
</p>
<p class="leftbar">
Files and directories in your submission tarball **MUST** be specific
permissions and `mkiocccentry(1)` does this for you. In particular: directories
**MUST** be `drwxr-xr-x` (i.e. `0755`), the optional files, `try.sh` or
`try.alt.sh`, if provided, **MUST** be `-r-xr-xr-x` (i.e. `0555`) and all other
files **MUST** be `-r--r--r--` (i.e. `0444`). If the files do not have these
permissions, your submission **WILL** be rejected for violating [Rule
17](#rule17)! In addition to `mkiocccentry(1)` creating and copying the
directories and files with these modes, it also verifies them after the fact and
if they are not correct it is an **error**.
</p>
<p class="leftbar">
If you do need different permissions, then see the
FAQ on "[file permissions](../faq.html#file_perms)". Also keep in mind
[Rule 4](#rule4), [Rule 5](#rule5) and [Rule 21](#rule21).
</p>
<p class="leftbar">
The `txzchk(1)` tool will also verify file/directory permissions (and many other
things) for you and so will `chkentry(1)` (along with validating the JSON files
and running semantics checks on them). If these checks fail it is an **error**
and `mkiocccentry(1)` will fail. In this case (it fails and you used
`mkiocccentry(1)`) it is very **possibly** a bug; please [report it as a bug 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>
<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 and this poses a big risk of violating [Rule
17](#rule17).
</p>
<p class="leftbar">
The `fnamchk(1)`, which `txzchk(1)` executes, will verify that the
filename is correct. But if you do package your tarball manually, and you have a
mismatch in what is in the tarball and the name, `txzchk(1)` will flag the
discrepancy as an error and exit with non-zero.
</p>
<p class="leftbar">
These checks **MUST PASS**. If they do not you stand a significant chance of
having your submission rejected for violating [Rule 17](#rule17)!
</p>
<div id="max-files">
#### Maximum number of files per submission
</div>
<p class="leftbar">
The maximum number of files your submission tarball may contain, not counting
the optional files (`prog.alt.c`, `try.sh`, `try.alt.sh`) and the mandatory
files (`prog.c`, `Makefile`, `remarks.md` plus the `mkiocccentry(1)` generated
files `.auth.json` and `.info.json`), is 31. This is defined in the macro
`MAX_EXTRA_FILE_COUNT` in
[soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h)
in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry). See the
FAQ on "[how to include additional files](../faq.html#extra-files)"
if you need to include more files.
</p>
<p class="leftbar">
If you do include a tarball that takes your extra files count over the maximum,
you **MUST** explain this in your `remarks.md` file! **PLEASE** do not include a
tarball with extra files for a test-suite; instead mention in your remarks that
you have extra files for a test-suite that can be included should your
submission win. Of course if you don't need that many files for a test-suite you
are more than welcome to include those files in your submission.
</p>
<p class="leftbar">
If you need to extract a tarball by some Makefile, or perhaps the program
itself, then `make clobber` **MUST** remove everything that the extraction
created!
</p>
<p class="leftbar">
Tarballs **MUST** only create files and directories _under_ the submission
directory. They may **NOT** contain absolute paths (paths that start with `/`)!
`txzchk` only checks the submission tarball so you must verify these details
yourself.
</p>
<p class="leftbar">
**IMPORTANT REMINDER**: **MAKE SURE** your tarball does not reveal who you are!
The `mkiocccentry(1)` tool uses the v7 format. For instance you might try:
</p>
``` <!---sh-->
tar --format=v7 -cJf foo.txz directory
```
<hr style="width:50%;text-align:left;margin-left:0">
<p class="leftbar">
**IMPORTANT**: 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>
<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. If any step fails it is an error and submitting the
submission will result in violating this rule.
</p>
<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). See the
FAQ on "[obtaining mkiocccentry](../faq.html#obtaining_mkiocccentry)"
for more help on ensuring you do have the most up to date release.
</p>
<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 (or any other directory). The `make install` will
install in `/usr/local`. However, **you do not have** to install them, but in
that case you'll have to run it from the toolkit's directory or use the correct
options to specify the path to the necessary tools, and also specify the path to
your files.
</p>
<p class="leftbar">
These tools will link in the `jparse(3)` library and the `dbg` library and the
`dyn_array` library; `chkentry(1)` uses the JSON parser (`jparse`) to validate
and parse the [JSON](https://www.json.org/json-en.html) but the other tools use
parts of the `jparse` utility functions as well.
</p>
<p class="leftbar">
If you run into a problem with one or more of these tools, **PLEASE** [report it
as a bug 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 our
FAQ on "[mkiocccentry repo bugs](../faq.html#mkiocccentry_bugs)".
</p>
<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 do **MAKE SURE** you
do this **AFTER** the [contest status](../status.html) has changed to
[open](../faq.html#open).
**IMPORTANT**: See the
FAQ on "[Rule17](../faq.html#rule17)"
for very important details behind this rule.
</p>
+2 -2
View File
@@ -15414,11 +15414,11 @@
</url>
<url>
<loc>https://www.ioccc.org/faq.html</loc>
<lastmod>2025-03-01T07:38:50+00:00</lastmod>
<lastmod>2025-03-01T09:10:15+00:00</lastmod>
</url>
<url>
<loc>https://www.ioccc.org/faq.md</loc>
<lastmod>2025-03-01T07:38:41+00:00</lastmod>
<lastmod>2025-03-01T09:10:08+00:00</lastmod>
</url>
<url>
<loc>https://www.ioccc.org/inc/index.html</loc>