Merge pull request #107 from xexyl/updates

Fixes in rules
This commit is contained in:
Landon Curt Noll authored and GitHub committed 2025-03-01 14:47:50 -08:00
commit aa5fb89abf
4 files changed
+335 -246

No files matched your search

+62 -52
View File
@@ -922,7 +922,7 @@ FAQ on “<a href="#makefile">submission Makefiles</a>.</p>
<div id="file_perms">
<h3 id="q-0.6-what-permissions-may-my-files-be-and-what-if-i-need-different-permissions">Q 0.6: What permissions may my files be and what if I need different permissions?</h3>
</div>
<p>As <a href="next/rules.html#rule17">Rule 17</a> states, files in your submission tarball <strong>MUST</strong> be
<p>Files in your submission tarball <strong>MUST</strong> be
specific permissions. 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.
@@ -931,6 +931,9 @@ specific permissions. In particular: directories <strong>MUST</strong> be <code>
the appropriate place in your Makefile. See the
FAQ on “<a href="#makefile">submission Makefile</a>”
for more details.</p>
<p>See the
FAQ on “<a href="#rule17">Rule 17</a>”
and <a href="next/rules.html#rule17">Rule 17</a> itself.</p>
<p>Do remember that if your submission requires different filenames, then you
<strong>MUST</strong> make a <strong>COPY</strong> of them in your <code>Makefile</code>. See also <a href="next/rules.html#rule11">Rule
11</a>.</p>
@@ -1114,10 +1117,11 @@ as how you them to help write you submission in your <code>remarks.md</code> fil
<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.
This is a <strong>COMPLEX</strong> rule. <strong>Violating this rule will cause your submission to
be 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>
@@ -1153,17 +1157,6 @@ additional details of each tool, see its man page, and in some cases, the <a hre
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>”
@@ -1175,6 +1168,10 @@ Extra files are defined as files that are not the required files (<code>prog.c</
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 class="leftbar">
<strong>NOTE</strong>: optional filenames are only optional if they are in the submission top
level directory.
</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">
@@ -1186,7 +1183,7 @@ The xz compressed tarball filename must be of the form:
<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>).
(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:
@@ -1245,12 +1242,13 @@ and the <a href="https://spec.commonmark.org/current/">CommonMark Spec</a>.
<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>.
submission wins but it <strong>MUST</strong> still be valid according to <code>jparse(3)</code> <strong>AND</strong>
<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>.
about the submission itself. It also <strong>MUST</strong> be valid according to <strong>BOTH</strong>
<code>jparse(3)</code> <strong>AND</strong> <code>chkentry(1)</code>.
</p>
<p class="leftbar">
For the complete <code>mkiocccentry(1)</code> process, see the
@@ -1262,6 +1260,9 @@ any other tool detects <strong>ANY</strong> problem, you are <strong>HIGHLY</str
and try again.
</p>
<p class="leftbar">
On the other hand, some issues are errors and you <strong>MUST</strong> fix those).
</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>”.
@@ -1273,10 +1274,15 @@ page</a>.
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.
When your submission’s xz compressed tarball is uncompressed, the total size of
your submission (the sum of the size of the program source code,
remarks/comments, Makefile and all other files) <strong>MUST</strong> be &lt;= <strong>28314624</strong>
octets (<strong>27651K</strong>) in size.
</p>
<p class="leftbar">
One of the many checks <code>txzchk(1)</code> performs is summing up the total size. Of
course if you manipulate the tarball to get past this you risk violating this
rule.
</p>
<p class="leftbar">
Your submission’s xz compressed tarball <strong>MUST</strong> pass the <code>txzchk(1)</code> test. See
@@ -1296,13 +1302,14 @@ more details on this tool and the <a href="https://github.com/ioccc-src/mkioccce
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>.
Your entry <strong>MAY</strong> 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>
(amongst others) 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>:
With the exception of those generated by the <code>mkiocccentry(1)</code> tool or the tools
it or any other tool invokes, files in your submission <strong>MUST</strong>:
</p>
<ul>
<li><p class="leftbar">
@@ -1314,7 +1321,7 @@ Be &lt;= <strong>38</strong> characters in length.
<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).
<strong>NO</strong> dot file including <code>.</code> itself).
</p></li>
<li><p class="leftbar">
<strong>NOT</strong> contain a path component of: <strong><code>..</code></strong> (that is,
@@ -1326,7 +1333,7 @@ Match the regular expression
<code>mkiocccentry(1)</code>).
</p></li>
<li><p class="leftbar">
<strong>NOT</strong> be a directory depth &gt; 4.
<strong>NOT</strong> have a directory depth &gt; 4.
</p></li>
<li><p class="leftbar">
<strong>NOT</strong> have a total <strong>path</strong> length &gt; 99 characters.
@@ -1343,23 +1350,25 @@ 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.
submission.
</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.
on your submission directory as well, <em>prior to</em> <code>mkiocccentry(1)</code> 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>.
<strong>MUST</strong> be <code>drwxr-xr-x</code> (i.e. <code>0755</code>), the optional files, not counting
<code>prog.alt.c</code> (i.e. <code>try.sh</code> and <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
@@ -1368,9 +1377,10 @@ FAQ on “<a href="#file_perms">file permissions</a>”. Also keep in mind
</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
things) for you, and so will <code>chkentry(1)</code> (along with other checks on files and
directories in your submission directory, including the two required JSON files,
<code>.auth.json</code> and <code>.info.json</code>). If these checks fail it is an <strong>error</strong>
and <code>mkiocccentry(1)</code> will abort. 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>.
@@ -1422,7 +1432,7 @@ created!
<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
<code>txzchk</code> does <strong>NOT</strong> check other tarballs so <strong>YOU MUST</strong> verify these details
yourself.
</p>
<p class="leftbar">
@@ -1449,23 +1459,23 @@ submission will result in violating this rule.
<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>”
FAQ on “<a href="#obtaining_mkiocccentry">obtaining the latest release of 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
<code>make install</code> (as root or using <code>sudo(8)</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.
your files, which can be problematic.
</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.
These tools will link in the <code>jparse(3)</code> library, the <code>dbg</code> library and the
<code>dyn_array</code> library; <code>chkentry(1)</code> uses the JSON parser (<code>jparse(3)</code>) to
validate and parse the <a href="https://www.json.org/json-en.html">JSON</a> files 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
@@ -1476,7 +1486,7 @@ 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
At the risk of stating the obvious: submissions that violate <a href="next/rules.html#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
+66 -54
View File
@@ -596,7 +596,7 @@ Jump to: [top](#)
### Q 0.6: What permissions may my files be and what if I need different permissions?
</div>
As [Rule 17](next/rules.html#rule17) states, files in your submission tarball **MUST** be
Files in your submission tarball **MUST** be
specific permissions. 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.
@@ -607,6 +607,10 @@ the appropriate place in your Makefile. See the
FAQ on "[submission Makefile](#makefile)"
for more details.
See the
FAQ on "[Rule 17](#rule17)"
and [Rule 17](next/rules.html#rule17) itself.
Do remember that if your submission requires different filenames, then you
**MUST** make a **COPY** of them in your `Makefile`. See also [Rule
11](next/rules.html#rule11).
@@ -867,10 +871,11 @@ 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.
This is a **COMPLEX** rule. **Violating this rule will cause your submission to
be 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">
@@ -896,19 +901,6 @@ 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
@@ -923,6 +915,11 @@ and `.auth.json`) and files that are also not the optional files (`try.sh`,
`prog.alt.c` and `try.alt.sh`).
</p>
<p class="leftbar">
**NOTE**: optional filenames are only optional if they are in the submission top
level directory.
</p>
Jump to: [top](#)
@@ -938,7 +935,7 @@ The xz compressed tarball filename must be of the form:
[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`).
(i.e., >= `0` and <= `9`).
</p>
<p class="leftbar">
@@ -993,13 +990,14 @@ and the [CommonMark Spec](https://spec.commonmark.org/current/).
<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)`.
submission wins but it **MUST** still be valid according to `jparse(3)` **AND**
`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)`.
about the submission itself. It also **MUST** be valid according to **BOTH**
`jparse(3)` **AND** `chkentry(1)`.
</p>
@@ -1014,6 +1012,10 @@ any other tool detects **ANY** problem, you are **HIGHLY** encouraged to fix it
and try again.
</p>
<p class="leftbar">
On the other hand, some issues are errors and you **MUST** fix those).
</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
@@ -1028,10 +1030,16 @@ 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.
When your submission's xz compressed tarball is uncompressed, the total size of
your submission (the sum of the size of the program source code,
remarks/comments, Makefile and all other files) **MUST** be <= **28314624**
octets (**27651K**) in size.
</p>
<p class="leftbar">
One of the many checks `txzchk(1)` performs is summing up the total size. Of
course if you manipulate the tarball to get past this you risk violating this
rule.
</p>
<p class="leftbar">
@@ -1056,27 +1064,28 @@ 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).
Your entry **MAY** have subdirectories, depending on the depth and total length of
the filenames. Certain directories like `.git`, `RCCS`, `CVS` and `.svn`
(amongst others) 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**:
With the exception of those generated by the `mkiocccentry(1)` tool or the tools
it or any other tool invokes, files in your submission **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>
**NO** dot file including `.` itself).</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 directory depth > 4.</p>
* <p class="leftbar">**NOT** have a total **path** length > 99 characters.</p>
<p class="leftbar">
@@ -1087,23 +1096,25 @@ the additional files that are generated by the `mkiocccentry(1)` tool:
* <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>
submission.</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.
on your submission directory as well, _prior to_ `mkiocccentry(1)` 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**.
**MUST** be `drwxr-xr-x` (i.e. `0755`), the optional files, not counting
`prog.alt.c` (i.e. `try.sh` and `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">
@@ -1114,9 +1125,10 @@ FAQ on "[file permissions](#file_perms)". Also keep in mind
<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
things) for you, and so will `chkentry(1)` (along with other checks on files and
directories in your submission directory, including the two required JSON files,
`.auth.json` and `.info.json`). If these checks fail it is an **error**
and `mkiocccentry(1)` will abort. 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).
@@ -1176,7 +1188,7 @@ created!
<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
`txzchk` does **NOT** check other tarballs so **YOU MUST** verify these details
yourself.
</p>
@@ -1212,25 +1224,25 @@ submission will result in violating this rule.
**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)"
FAQ on "[obtaining the latest release of 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
`make install` (as root or using `sudo(8)`) 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.
your files, which can be problematic.
</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.
These tools will link in the `jparse(3)` library, the `dbg` library and the
`dyn_array` library; `chkentry(1)` uses the JSON parser (`jparse(3)`) to
validate and parse the [JSON](https://www.json.org/json-en.html) files but the
other tools use parts of the `jparse` utility functions as well.
</p>
<p class="leftbar">
@@ -1243,7 +1255,7 @@ 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
17](next/rules.html#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
+101 -69
View File
@@ -566,7 +566,7 @@ as well as
<h2 id="rule-0">Rule 0</h2>
</div>
<p class="leftbar">
Just as C starts at 0, so the IOCCC starts at <a href="#rule0">rule 0</a>. :-)
Just as C starts at 0, so the IOCCC starts at <a href="#rule0">Rule 0</a>. :-)
</p>
<p class="leftbar">
The “<a href="#dates">Important IOCCC dates</a>” section above is part of this rule.
@@ -578,57 +578,63 @@ The “<a href="#dates">Important IOCCC dates</a>” section above is part of th
<p class="leftbar">
Your submission must be a C program.
</p>
<p class="leftbar">
You see, the contest is not called the <strong>International Obfuscated JSON Contest</strong>
(<strong>IOJSONC</strong>), even if the <a href="https://github.com/xexyl/jparse/blob/master/json_README.md#so-called-json-spec">so-called JSON
spec</a> might be called obfuscated. :-)
</p>
<p>Jump to: <a href="#">top</a></p>
<div id="rule2">
<h2 id="rule-2">Rule 2</h2>
</div>
<p>The size rule requires your submission to satisfy <strong>BOTH</strong> <a href="#rule2a">Rule 2a</a> and <a href="#rule2b">Rule 2b</a>:</p>
<p>Jump to: <a href="#">top</a></p>
<div id="rule2a">
<h2 id="rule-2a">Rule 2a</h2>
</div>
<p class="leftbar">
The size of your program source <strong>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>Jump to: <a href="#">top</a></p>
<div id="rule2a">
<h2 id="rule-2a">Rule 2a</h2>
</div>
<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.
The size of your program source <strong>should NOT exceed 4993 bytes</strong>.
</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>.
The <code>mkiocccentry(1)</code> tool will give you the option of overriding the <a href="#rule2a">Rule
2a</a> warning. Overriding the <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 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 you 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>
<pre><code> iocccsize prog.c</code></pre>
<p class="leftbar">
Alternatively, you may use the <code>mkiocccentry(1)</code> option <code>-d</code> to verify that
things check out without having to answer all the questions. See the
FAQ on “<a href="../faq.html#mkiocccentry_test">how to test your submission without having to answer
questions</a>”
for more details.
things check out okay (i.e. no problems are detected) without having to answer
all the questions. See the
FAQ on “<a href="../faq.html#mkiocccentry_test">how to test your submission without having
to answer questions</a>” for more details.
</p>
<p>Jump to: <a href="#">top</a></p>
<div id="rule2b">
<h2 id="rule-2b">Rule 2b</h2>
</div>
<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>.
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 class="leftbar">
The source to <code>iocccsize(1)</code> may be found in the
@@ -637,25 +643,28 @@ The source to <code>iocccsize(1)</code> may be found in the
<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.
then <code>mkiocccentry(1)</code> will invoke the <code>iocccsize(1)</code> checks 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.
The <code>mkiocccentry(1)</code> tool will give you the option of overriding the <a href="#rule2b">Rule
2b</a> warning. Overriding the <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 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>.
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 2b</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 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>
<pre><code> iocccsize prog.c</code></pre>
<p>Jump to: <a href="#">top</a></p>
<div id="rule3">
<h2 id="rule-3">Rule 3</h2>
@@ -673,7 +682,7 @@ for instructions on registering and participating in the IOCCC, as the process h
<p class="leftbar">
When the contest is <strong><a href="../faq.html#open">open</a></strong>, an
<a href="../judges.html">IOCCC judge</a> will email you your <a href="https://submit.ioccc.org">submit server</a>
<strong>Username</strong> and <strong>Initial password</strong>. This takes some time (maybe even a few days) for an
<strong>Username</strong> and <strong>Initial password</strong>. It takes some time (maybe even a few days) for an
<a href="../judges.html">IOCCC judge</a> to process your registration and email you your
initial login and password.
</p>
@@ -696,10 +705,10 @@ The <a href="../judges.html">IOCCC judges</a> are <strong>NOT</strong> responsib
or for those who wait until the last minute to try to register!
</p>
<p class="leftbar">
If you have <a href="register.html">registered</a> and received by email their
If you have <a href="register.html">registered</a> and received by email your
<a href="https://submit.ioccc.org">submit server</a> <strong>Username</strong> and <strong>Initial password</strong>
from an <a href="../judges.html">IOCCC judge</a>, you may upload your submission to
the <a href="https://submit.ioccc.org">submit server</a> only while the
the <a href="https://submit.ioccc.org">submit server</a> <strong>ONLY</strong> while the
contest is <strong><a href="../faq.html#open">open</a></strong>.
</p>
<p class="leftbar">
@@ -755,8 +764,8 @@ will become a <code>README.md</code> which will be used to generate an <code>ind
<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.
then modify your submission’s <code>Makefile</code> to <strong>COPY</strong> (<strong>NOT</strong> move!) 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>.
@@ -765,19 +774,19 @@ See also <a href="#rule5">Rule 5</a>, <a href="#rule18">Rule 18</a> and <a href=
<div id="rule5">
<h2 id="rule-5">Rule 5</h2>
</div>
<p>Your submission <strong>MUST</strong> not modify the content or filename of any part of your
<p>Your submission must <strong>NOT</strong> modify the content or filename of any part of your
original submission including, but not limited to <code>prog.c</code>, the <code>Makefile</code>
(that we create from your how to build instructions), as well as any data
files you submit.</p>
<p>If you submission needs (or wishes :-) ) to modify such content, it <strong>MUST</strong> first copy the
file to a new filename and then modify that copy.</p>
as well as any data files you submit.</p>
<p>If you submission needs (or wishes :-) ) to modify such content, it <strong>MUST</strong>
first copy the file to a new filename and then modify that copy.</p>
<p class="leftbar">
You may use your submission to form a copy, or you can make use of your <code>Makefile</code> to form that copy.
You may use your submission (program) to form a copy, or you can make use of
your <code>Makefile</code> to form that copy.
</p>
<p class="leftbar">
If you do make a copy and then modify that copy, please be sure that
If you do make a copy and then modify that copy, <strong>PLEASE</strong> be sure that
the <code>clobber</code> rule of your <code>Makefile</code> removes that copy in order to
restore the contents if your submission to its original submission.
restore the contents of your submission to its original submission.
</p>
<p>Jump to: <a href="#">top</a></p>
<div id="rule6">
@@ -813,7 +822,11 @@ permission you obtained</strong>.</p>
Please note that the IOCCC size tool, the tools in the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
repo</a> and the tools and library in
the <a href="https://github.com/xexyl/jparse/issues">jparse repo</a> (that the
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a> clones) are
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a> clones) or the
<a href="https://github.com/lcn2/dbg">dbg repo</a> (that the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
repo</a> clones) or the <a href="https://github.com/lcn2/dyn_array">dyn_array
repo</a> (that the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
repo</a> clones) are
<strong>NOT</strong> original works, unless of course you’re the respective authors, in
which case they are. Of course, neither are any of the previous
winning entries, unless of course you’re the winner! :-)
@@ -830,14 +843,14 @@ Submissions may only be uploaded to the <a href="https://submit.ioccc.org">IOCCC
while the contest is <strong><a href="../faq.html#open">open</a></strong>.
</p>
<p class="leftbar">
Once the contest is in the <strong><a href="../faq.html#judging">judging</a></strong> state (or <strong><a href="../faq.html#closed">closed</a></strong>),
you may <strong>NOT</strong> upload submissions.
Once the contest is in the <strong><a href="../faq.html#judging">judging</a></strong> state (or
<strong><a href="../faq.html#closed">closed</a></strong>), you may <strong>NOT</strong> upload submissions.
</p>
<p class="leftbar">
While the contest is <strong><a href="../faq.html#open">open</a></strong> or in the <strong><a href="../faq.html#judging">judging</a></strong> state,
the <a href="../judges.html">IOCCC judges</a> may (but are not required to) modify the slot comment of your submission to indicate
the <a href="../judges.html">IOCCC judges</a> <strong>MAY</strong> (but are not required to) modify the slot comment of your submission to indicate
that they have received it. If uploaded submission is malformed, the <a href="../judges.html">IOCCC judges</a>
may (but are not required to) modify the slot comment accordingly.
<strong>MAY</strong> (but are not required to) modify the slot comment accordingly.
</p>
<p class="leftbar">
See the “<a href="#dates">Important IOCCC dates</a>” section above for when these contest states are scheduled.
@@ -850,8 +863,8 @@ See also <a href="#rule17">Rule 17</a>.
<h2 id="rule-9">Rule 9</h2>
</div>
<p class="leftbar">
Each person may register <strong>ONLY</strong> one account and each account may submit up to
and including <strong>10.000000</strong> (ten in base 10) entries per contest.
Each <strong>PERSON</strong> may register <strong>ONLY ONE</strong> account and each account may submit up to
and including <strong>10.000000</strong> (ten in base 10) submissions <strong>PER</strong> contest.
</p>
<p><strong>Each submission <em>must be submitted separately</em></strong>.</p>
<p class="leftbar">
@@ -885,7 +898,7 @@ it is needed in your submission’s <code>remarks.md</code> file.</p>
<h2 id="rule-12">Rule 12</h2>
</div>
<p><strong>Legal</strong> abuse of the rules is somewhat encouraged. <strong>A submission that, in
the opinion of the <a href="../judges.html">judges</a>, violates the rules will be disqualified</strong>.
the opinion of the <a href="../judges.html">judges</a>, violates the rules WILL BE DISQUALIFIED</strong>.
Submissions that attempt to abuse the rules <strong>MUST</strong> try to justify why
their rule abuse is legal, in the <code>remarks.md</code> file.</p>
<p>Jump to: <a href="#">top</a></p>
@@ -893,7 +906,11 @@ their rule abuse is legal, in the <code>remarks.md</code> file.</p>
<h2 id="rule-13">Rule 13</h2>
</div>
<p class="leftbar">
7 out of 13 UTF-8 characters in C code agree that this rule number is lucky enough to be a prime number.
7 out of 13 UTF-8 characters in C code agree that this rule number is lucky
enough to be a prime number.
</p>
<p class="leftbar">
Fun fact: the fear of the number 13 is called <em>triskaidekaphobia</em>.
</p>
<p>Jump to: <a href="#">top</a></p>
<div id="rule14">
@@ -901,7 +918,7 @@ their rule abuse is legal, in the <code>remarks.md</code> file.</p>
</div>
<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.
control-M’s (i.e., lines with a trailing 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
@@ -913,7 +930,7 @@ any control-M at the end of remark file lines.</p>
<p class="leftbar">
In order to register for the IOCCC, you <strong>MUST</strong> have a valid email address.
</p>
<p>The <a href="../judges.html">judges</a> <strong>are not responsible for delays in email</strong>, please plan
<p>The <a href="../judges.html">judges</a> <strong>are NOT responsible for delays in email</strong>, please plan
enough time for the exchange of emails so you can upload your submission.</p>
<p class="leftbar">
See the
@@ -935,8 +952,8 @@ been published may be disqualified.</p>
<p class="leftbar">
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 paths <strong>MUST</strong> conform to the limits imposed by <code>mkiocccentry(1)</code>
including but <strong>NOT LIMITED</strong> to their names, count, path length
and directory tree depth.
</p>
<p class="leftbar">
@@ -948,7 +965,7 @@ Your <strong>xz compressed tarball</strong> submission file must pass the tests
</p></li>
</ul>
<p class="leftbar">
Your <strong>xz compressed tarball</strong> submission file must pass the tests performed by:
Your <strong>xz compressed tarball</strong> submission filename must pass the tests performed by:
</p>
<ul>
<li><p class="leftbar">
@@ -965,6 +982,10 @@ must pass the checks performed by:
</p></li>
</ul>
<p class="leftbar">
<code>txzchk(1)</code> uses the <code>fnamchk(1)</code> tool on your tarball to obtain the proper
directory name. If either name is wrong, it will be flagged as an error.
</p>
<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>
@@ -984,10 +1005,16 @@ would produce as well as pass the tests performed by:
<code>chkentry(1)</code>
</p></li>
</ul>
<p class="leftbar">
The <code>Makefile</code> must <strong>NOT</strong> be empty.
</p>
<p class="leftbar">
The <code>remarks.md</code> must <strong>NOT</strong> be empty.
</p>
<h3 id="tldr-rule-17---use-mkiocccentry1-to-form-your-submission">TL;DR Rule 17 - Use <code>mkiocccentry(1)</code> to form your submission</h3>
<p>Let the <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>
<p>Let the <code>mkiocccentry(1)</code> tool form your <strong>xz compressed tarball</strong> submission
file and don’t try to 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
@@ -1001,7 +1028,7 @@ for how to obtain and use the above mentioned tools.
</p>
<p class="leftbar">
<strong>IMPORTANT</strong>: See the
FAQ on “<a href="../faq.html#rule17">Rule17</a>”
FAQ on “<a href="../faq.html#rule17">Rule 17</a>”
for very important details behind this rule.
</p>
<p>Jump to: <a href="#">top</a></p>
@@ -1044,13 +1071,13 @@ Makefile example, renamed as <code>Makefile</code> of course, for help in constr
<code>Makefile</code>. See the <a href="guidelines.html#makefile">Makefile section</a> in the
guidelines for more details.
</p>
<p>The target of the Makefile must be called <code>prog</code>. The original
<p>The target of the <code>Makefile</code> must be called <code>prog</code>. The original
C source file must be called <code>prog.c</code>.</p>
<p>To invoke the C compiler, use <code>${CC}</code>. To invoke the C preprocessor use
<code>${CPP}</code>.</p>
<p>Do <strong>NOT</strong> assume that <code>.</code> (the current directory) is in the <code>$PATH</code>.</p>
<p class="leftbar">
When <code>make clobber</code> is invoked, we request that submission be restored
When <code>make clobber</code> is invoked, we request that submission directory be restored
to its original submission state. For example, any temporary files
created during the build process, or during execution should be
removed by the <code>clobber</code> rule.
@@ -1071,7 +1098,7 @@ available in the <code>$PATH</code> search path.
<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
<p>Your submission <strong>MUST NOT</strong> create or modify files <strong>ABOVE</strong> the current directory
<em>with the exception of</em> the <code>/tmp</code> and the <code>/var/tmp</code> directories. Your submission
<strong>MAY</strong> create subdirectories 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
@@ -1092,6 +1119,11 @@ identify the authors of your code. The <a href="../judges.html">judges</a> <stro
within your code, data, remarks or program output (unless you are
<strong>Peter Honeyman</strong> or pretending to be <strong>Peter Honeyman</strong>) will be grounds
for disqualification of your submission.</p>
<p class="leftbar">
And don’t assume that we won’t be able to determine your name even if it’s not
obvious, because you stand a significant chance of violating this rule if you
do.
</p>
<p>Yes, Virginia, <strong>WE REALLY MEAN IT!</strong></p>
<p>Jump to: <a href="#">top</a></p>
<div id="rule23">
+106 -71
View File
@@ -196,7 +196,7 @@ Jump to: [top](#)
</div>
<p class="leftbar">
Just as C starts at 0, so the IOCCC starts at [rule 0](#rule0). :-)
Just as C starts at 0, so the IOCCC starts at [Rule 0](#rule0). :-)
</p>
<p class="leftbar">
@@ -215,6 +215,12 @@ Jump to: [top](#)
Your submission must be a C program.
</p>
<p class="leftbar">
You see, the contest is not called the **International Obfuscated JSON Contest**
(**IOJSONC**), even if the [so-called JSON
spec](https://github.com/xexyl/jparse/blob/master/json_README.md#so-called-json-spec) might be called obfuscated. :-)
</p>
Jump to: [top](#)
@@ -225,6 +231,12 @@ Jump to: [top](#)
The size rule requires your submission to satisfy **BOTH** [Rule 2a](#rule2a) and [Rule 2b](#rule2b):
<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>
Jump to: [top](#)
@@ -234,29 +246,23 @@ Jump to: [top](#)
</div>
<p class="leftbar">
The size of your program source **should not exceed 4993 bytes**.
The size of your program source **should NOT exceed 4993 bytes**.
</p>
<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.
The `mkiocccentry(1)` tool will give you the option of overriding the [Rule
2a](#rule2a) warning. Overriding the [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>
<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>
<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**.
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 you submission may
still be rejected**.
</p>
<p class="leftbar">
@@ -265,18 +271,17 @@ as a command like argument to the `iocccsize(1)` tool. For example:
</p>
``` <!---sh-->
./iocccsize prog.c
iocccsize prog.c
```
<p class="leftbar">
Alternatively, you may use the `mkiocccentry(1)` option `-d` to verify that
things check out without having to answer all the questions. See the
FAQ on "[how to test your submission without having to answer
questions](../faq.html#mkiocccentry_test)"
for more details.
things check out okay (i.e. no problems are detected) without having to answer
all the questions. See the
FAQ on "[how to test your submission without having
to answer questions](../faq.html#mkiocccentry_test)" for more details.
</p>
Jump to: [top](#)
@@ -285,9 +290,9 @@ Jump to: [top](#)
</div>
<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_**.
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>
<p class="leftbar">
@@ -298,21 +303,24 @@ The source to `iocccsize(1)` may be found in the
<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.
then `mkiocccentry(1)` will invoke the `iocccsize(1)` checks before packaging
your submission.
</p>
<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.
The `mkiocccentry(1)` tool will give you the option of overriding the [Rule
2b](#rule2b) warning. Overriding the [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>
<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**.
If you do override the [Rule 2b](#rule2b) warning from the `mkiocccentry(1)`
tool, or otherwise plan to violate [Rule 2b](#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>
<p class="leftbar">
@@ -321,7 +329,7 @@ as a command like argument to the `iocccsize(1)` tool. For example:
</p>
``` <!---sh-->
./iocccsize prog.c
iocccsize prog.c
```
@@ -347,7 +355,7 @@ for instructions on registering and participating in the IOCCC, as the process h
<p class="leftbar">
When the contest is **[open](../faq.html#open)**, an
[IOCCC judge](../judges.html) will email you your [submit server](https://submit.ioccc.org)
**Username** and **Initial password**. This takes some time (maybe even a few days) for an
**Username** and **Initial password**. It takes some time (maybe even a few days) for an
[IOCCC judge](../judges.html) to process your registration and email you your
initial login and password.
</p>
@@ -374,10 +382,10 @@ or for those who wait until the last minute to try to register!
</p>
<p class="leftbar">
If you have [registered](register.html) and received by email their
If you have [registered](register.html) and received by email your
[submit server](https://submit.ioccc.org) **Username** and **Initial password**
from an [IOCCC judge](../judges.html), you may upload your submission to
the [submit server](https://submit.ioccc.org) only while the
the [submit server](https://submit.ioccc.org) **ONLY** while the
contest is **[open](../faq.html#open)**.
</p>
@@ -447,8 +455,8 @@ will become a `README.md` which will be used to generate an `index.html` file.
<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.
then modify your submission's `Makefile` to **COPY** (**NOT** move!) the files
accordingly.
</p>
<p class="leftbar">
@@ -463,22 +471,22 @@ Jump to: [top](#)
## Rule 5
</div>
Your submission **MUST** not modify the content or filename of any part of your
Your submission must **NOT** modify the content or filename of any part of your
original submission including, but not limited to `prog.c`, the `Makefile`
(that we create from your how to build instructions), as well as any data
files you submit.
as well as any data files you submit.
If you submission needs (or wishes :-) ) to modify such content, it **MUST** first copy the
file to a new filename and then modify that copy.
If you submission needs (or wishes :-) ) to modify such content, it **MUST**
first copy the file to a new filename and then modify that copy.
<p class="leftbar">
You may use your submission to form a copy, or you can make use of your `Makefile` to form that copy.
You may use your submission (program) to form a copy, or you can make use of
your `Makefile` to form that copy.
</p>
<p class="leftbar">
If you do make a copy and then modify that copy, please be sure that
If you do make a copy and then modify that copy, **PLEASE** be sure that
the `clobber` rule of your `Makefile` removes that copy in order to
restore the contents if your submission to its original submission.
restore the contents of your submission to its original submission.
</p>
@@ -529,7 +537,11 @@ permission you obtained**.
Please note that the IOCCC size tool, the tools in the [mkiocccentry
repo](https://github.com/ioccc-src/mkiocccentry) and the tools and library in
the [jparse repo](https://github.com/xexyl/jparse/issues) (that the
[mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry) clones) are
[mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry) clones) or the
[dbg repo](https://github.com/lcn2/dbg) (that the [mkiocccentry
repo](https://github.com/ioccc-src/mkiocccentry) clones) or the [dyn_array
repo](https://github.com/lcn2/dyn_array) (that the [mkiocccentry
repo](https://github.com/ioccc-src/mkiocccentry) clones) are
**NOT** original works, unless of course you're the respective authors, in
which case they are. Of course, neither are any of the previous
winning entries, unless of course you're the winner! :-)
@@ -553,15 +565,15 @@ while the contest is **[open](../faq.html#open)**.
</p>
<p class="leftbar">
Once the contest is in the **[judging](../faq.html#judging)** state (or **[closed](../faq.html#closed)**),
you may **NOT** upload submissions.
Once the contest is in the **[judging](../faq.html#judging)** state (or
**[closed](../faq.html#closed)**), you may **NOT** upload submissions.
</p>
<p class="leftbar">
While the contest is **[open](../faq.html#open)** or in the **[judging](../faq.html#judging)** state,
the [IOCCC judges](../judges.html) may (but are not required to) modify the slot comment of your submission to indicate
the [IOCCC judges](../judges.html) **MAY** (but are not required to) modify the slot comment of your submission to indicate
that they have received it. If uploaded submission is malformed, the [IOCCC judges](../judges.html)
may (but are not required to) modify the slot comment accordingly.
**MAY** (but are not required to) modify the slot comment accordingly.
</p>
<p class="leftbar">
@@ -581,8 +593,8 @@ Jump to: [top](#)
</div>
<p class="leftbar">
Each person may register **ONLY** one account and each account may submit up to
and including **10.000000** (ten in base 10) entries per contest.
Each **PERSON** may register **ONLY ONE** account and each account may submit up to
and including **10.000000** (ten in base 10) submissions **PER** contest.
</p>
**Each submission _must be submitted separately_**.
@@ -632,7 +644,7 @@ Jump to: [top](#)
</div>
**Legal** abuse of the rules is somewhat encouraged. **A submission that, in
the opinion of the [judges](../judges.html), violates the rules will be disqualified**.
the opinion of the [judges](../judges.html), violates the rules WILL BE DISQUALIFIED**.
Submissions that attempt to abuse the rules **MUST** try to justify why
their rule abuse is legal, in the `remarks.md` file.
@@ -645,9 +657,13 @@ Jump to: [top](#)
</div>
<p class="leftbar">
7 out of 13 UTF-8 characters in C code agree that this rule number is lucky enough to be a prime number.
7 out of 13 UTF-8 characters in C code agree that this rule number is lucky
enough to be a prime number.
</p>
<p class="leftbar">
Fun fact: the fear of the number 13 is called _triskaidekaphobia_.
</p>
Jump to: [top](#)
@@ -658,7 +674,7 @@ Jump to: [top](#)
<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.
control-M's (i.e., lines with a trailing octet `015`) **_might_** be rejected.
</p>
Please do **NOT** put trailing control-M's on remarks file lines.
@@ -677,7 +693,7 @@ Jump to: [top](#)
In order to register for the IOCCC, you **MUST** have a valid email address.
</p>
The [judges](../judges.html) **are not responsible for delays in email**, please plan
The [judges](../judges.html) **are NOT responsible for delays in email**, please plan
enough time for the exchange of emails so you can upload your submission.
<p class="leftbar">
@@ -710,8 +726,8 @@ Jump to: [top](#)
<p class="leftbar">
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 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>
@@ -722,7 +738,7 @@ Your **xz compressed tarball** submission file must pass the tests performed by:
* <p class="leftbar">`txzchk(1)`</p>
<p class="leftbar">
Your **xz compressed tarball** submission file must pass the tests performed by:
Your **xz compressed tarball** submission filename must pass the tests performed by:
</p>
* <p class="leftbar">`fnamchk(1)`</p>
@@ -734,6 +750,11 @@ must pass the checks performed by:
* <p class="leftbar">`chkentry(1)`</p>
<p class="leftbar">
`txzchk(1)` uses the `fnamchk(1)` tool on your tarball to obtain the proper
directory name. If either name is wrong, it will be flagged as an error.
</p>
<p class="leftbar">
The resulting `prog.c` file must pass the [Rule 2](#rule2) size checked performed by:
</p>
@@ -748,12 +769,20 @@ would produce as well as pass the tests performed by:
* <p class="leftbar">`jparse(3)`</p>
* <p class="leftbar">`chkentry(1)`</p>
<p class="leftbar">
The `Makefile` must **NOT** be empty.
</p>
<p class="leftbar">
The `remarks.md` must **NOT** be empty.
</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.
Let the `mkiocccentry(1)` tool form your **xz compressed tarball** submission
file and don't try to override its checks and limits, in order to be sure you
submission conforms to this rule.
### Warning
@@ -771,7 +800,7 @@ for how to obtain and use the above mentioned tools.
<p class="leftbar">
**IMPORTANT**: See the
FAQ on "[Rule17](../faq.html#rule17)"
FAQ on "[Rule 17](../faq.html#rule17)"
for very important details behind this rule.
</p>
@@ -836,7 +865,7 @@ Makefile example, renamed as `Makefile` of course, for help in constructing your
guidelines for more details.
</p>
The target of the Makefile must be called `prog`. The original
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
@@ -845,7 +874,7 @@ To invoke the C compiler, use `${CC}`. To invoke the C preprocessor use
Do **NOT** assume that `.` (the current directory) is in the `$PATH`.
<p class="leftbar">
When `make clobber` is invoked, we request that submission be restored
When `make clobber` is invoked, we request that submission directory be restored
to its original submission state. For example, any temporary files
created during the build process, or during execution should be
removed by the `clobber` rule.
@@ -873,7 +902,7 @@ Jump to: [top](#)
## Rule 21
</div>
Your submission **MUST NOT** create or modify files above the current directory
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
@@ -904,6 +933,12 @@ within your code, data, remarks or program output (unless you are
**Peter Honeyman** or pretending to be **Peter Honeyman**) will be grounds
for disqualification of your submission.
<p class="leftbar">
And don't assume that we won't be able to determine your name even if it's not
obvious, because you stand a significant chance of violating this rule if you
do.
</p>
Yes, Virginia, **WE REALLY MEAN IT!**