766 lines
24 KiB
Markdown
766 lines
24 KiB
Markdown
<!-- START: this line starts content from: inc/rules.open.hdr -->
|
||
|
||
# Official IOCCC rules
|
||
|
||
These rules are **OFFICIAL**.
|
||
|
||
Unless some significant problem turns up (such as a need to delay in
|
||
when the IOCCC will close, or some major bug is discovered) they will
|
||
remain **OFFICIAL** for this IOCCC.
|
||
|
||
See our
|
||
FAQ on "[rules, guidelines, tools feedback](../faq.html#feedback)"
|
||
as well as our
|
||
FAQ on "[about asking questions](../faq.html#question)"
|
||
about these rules. You might also find the FAQ in general useful, especially the
|
||
FAQ on "[how to enter the IOCCC](../quick-start.html#enter)".
|
||
|
||
**SUGGESTION**: Watch both the [IOCCC news](../news.html) and the [IOCCC
|
||
Mastodon](https://fosstodon.org/@ioccc) feed for the latest news about
|
||
any _mentions_ changes.
|
||
|
||
**HINT to mastodon users**: You may wish to refresh the [@IOCCC mastodon
|
||
feed](https://fosstodon.org/@ioccc) page and/or mastodon app from time
|
||
to time to view IOCCC mastodon updates.
|
||
|
||
|
||
# The IOCCC open for submissions
|
||
|
||
See "[FAQ - How may I enter the IOCCC](../quick-start.html#enter)"
|
||
for information on how to register for the IOCCC, how to create a proper
|
||
bzip2 compressed tarball of your submission, and how to upload your
|
||
bzip2 compressed tarball to the IOCCC submit server.
|
||
|
||
<!-- END: the next line ends content from: inc/rules.open.hdr -->
|
||
<!-- This is the last line modified by the tool: bin/gen-status.sh -->
|
||
|
||
# 29th International Obfuscated C Code Contest Official Rules
|
||
|
||
Copyright (c) 2025 Leonid A. Broukhis and Landon Curt Noll.
|
||
|
||
All Rights Reserved. Permission for personal, education or non-profit use is
|
||
granted provided this copyright and notice are included in its entirety
|
||
and remains unaltered. All other uses **MUST** receive prior permission in
|
||
writing by [contacting the judges](../contact.html).
|
||
|
||
|
||
## Rules Version
|
||
|
||
These IOCCC Rules are version **29.15 2025-12-02**.
|
||
|
||
<p class="leftbar">
|
||
The <span style='font-size:28px;'><b>|</b></span> symbol
|
||
indicates a **change** from the previous IOCCC.
|
||
</p>
|
||
|
||
<p class="leftbar">
|
||
Because the **IOCCC29** rules was a substantial rewrite, only
|
||
**important changes** from **IOCCC28** have been marked.
|
||
</p>
|
||
|
||
Reminder: be SURE to read the [IOCCC guidelines](guidelines.html).
|
||
|
||
|
||
<div id="rule0">
|
||
## Rule 0 - Dates
|
||
</div>
|
||
|
||
<p class="leftbar">
|
||
This IOCCC runs from `2025-12-03 20:25:12.045045 UTC` to `2026-03-13
|
||
17:19:23.293137 UTC`.
|
||
</p>
|
||
|
||
<p class="leftbar">
|
||
This contest will enter the [pending state](../faq.html#pending) on
|
||
`2025-12-03 20:25:12.045045 UTC`, allowing people to [register for the
|
||
IOCCC](register.html).
|
||
</p>
|
||
|
||
<p class="leftbar">
|
||
This contest will enter the [open state](../faq.html#open) on
|
||
`2025-12-15 18:21:24.273033 UTC`, allowing people to [upload
|
||
submissions](submit.html).
|
||
</p>
|
||
|
||
<p class="leftbar">
|
||
This contest will enter the [judging state](../faq.html#judging) on
|
||
`2026-03-13 17:19:23.293137 UTC`, when people will no longer be allowed
|
||
to upload submissions.
|
||
</p>
|
||
|
||
The above **dates and times may change _AT ANY TIME_** until the
|
||
[contest status](../status.html) is **open**.
|
||
|
||
<p class="leftbar">
|
||
The above timestamps are in "_YYYY-MM-DD HH:MM:SS.micros UTC_" format.
|
||
</p>
|
||
|
||
See [Entering the IOCCC: the bare minimum you need to
|
||
know](../quick-start.html#enter).
|
||
|
||
See
|
||
FAQ on "[How can I comment or make a suggestion on IOCCC rules,
|
||
guidelines and tools?](../faq.html#feedback)".
|
||
|
||
|
||
<div id="rule1">
|
||
<div id="rule1-c">
|
||
## Rule 1 - C program
|
||
</div>
|
||
</div>
|
||
|
||
<p class="leftbar">
|
||
Your submission **MUST** be a C program.
|
||
</p>
|
||
|
||
See the [Guidelines for Rule 1 - C
|
||
program](guidelines.html#guideline1-c).
|
||
|
||
|
||
<div id="rule2">
|
||
<div id="rule2-size-restrictions">
|
||
<div id="rule2-size">
|
||
## Rule 2 - Size restrictions
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
`Rule 2` requires that your submission satisfy **BOTH** [Rule 2a
|
||
(Gross Size)](rules.html#rule2a) and [Rule 2b (Net
|
||
Size)](rules.html#rule2b).
|
||
|
||
During development this can be checked using `iocccsize(1)`:
|
||
|
||
``` <!---sh-->
|
||
iocccsize prog.c
|
||
```
|
||
|
||
See the [Guidelines for Rule 2 - Size
|
||
restrictions](guidelines.html#guideline2-size).
|
||
|
||
|
||
<div id="rule2a">
|
||
<div id="rule2a-gross-size">
|
||
### Rule 2a - Gross Size
|
||
</div>
|
||
</div>
|
||
|
||
The overall maximum size of your `prog.c` program source **MUST NOT**
|
||
exceed **4993** bytes.
|
||
|
||
See [Entering the IOCCC: the bare minimum you need to
|
||
know](../quick-start.html#enter).
|
||
|
||
|
||
<div id="rule2b">
|
||
<div id="rule2b-net-size">
|
||
### Rule 2b - Net Size
|
||
</div>
|
||
</div>
|
||
|
||
Check your source code using the latest official IOCCC size tool,
|
||
`iocccsize(1)`. The value printed **MUST NOT** exceed **2503**.
|
||
|
||
See [Rule 17 - Use mkiocccentry](#rule17-mkiocccentry).
|
||
|
||
|
||
<div id="rule3">
|
||
<div id="rule3-register">
|
||
## Rule 3 - Register for the IOCCC
|
||
</div>
|
||
</div>
|
||
|
||
You **MUST** register, using a valid email address, in order to submit
|
||
to the IOCCC. You may register while the contest is **pending** or
|
||
**open**.
|
||
|
||
A few days after registering, you'll receive your UUID username and
|
||
temporary password, which you **MUST** change within 14 days.
|
||
|
||
See [How to register for the IOCCC](register.html).
|
||
|
||
See [Entering the IOCCC: the bare minimum you need to
|
||
know](../quick-start.html#enter).
|
||
|
||
See [Guidelines for Rule 3 - Register for the
|
||
IOCCC](guidelines.html#guideline3-register).
|
||
|
||
|
||
<div id="rule4">
|
||
<div id="rule4-required-files">
|
||
## Rule 4 - Required files
|
||
</div>
|
||
</div>
|
||
|
||
<p class="leftbar">
|
||
Your submission **MUST** include at least these files: `Makefile`,
|
||
`prog.c`, `remarks.md`,`.info.json`, and `.auth.json`, the latter two
|
||
of which are generated by `mkiocccentry(1)`. See [Rule 17 - Use
|
||
mkiocccentry](#rule17-mkiocccentry).
|
||
</p>
|
||
|
||
<p class="leftbar">
|
||
At a **minimum** the following requirements apply. Additional
|
||
requirements may be imposed by `mkiocccentry(1)` updates that have yet
|
||
to be listed below:
|
||
</p>
|
||
|
||
* <p class="leftbar">`.info.json` and `.auth.json` **MUST** be generated by
|
||
`mkiocccenty(1)` when packing a submission.</p>
|
||
|
||
* <p class="leftbar">
|
||
Before forming the tarball, `mkiocccentry(1)` will run `chksubmit(1)` on your
|
||
submission directory and if **ANY** problems are found (with `.auth.json`,
|
||
`.info.json` or **ANYTHING** else), your tarball will **NOT** be formed.
|
||
</p>
|
||
|
||
* <p class="leftbar">The `Makefile`, `remarks.md`,`.info.json`, and `.auth.json`
|
||
**MUST** have a file size **greater than 0** and **MUST** have content. Note
|
||
that `mkiocccentry(1)` will check for file **size** but will **NOT** check for
|
||
content. On the other hand `chksubmit(1)` will check that the `.auth.json` and
|
||
`.info.json` are both valid JSON and are valid according to the IOCCC
|
||
requirements.</p>
|
||
|
||
* <p class="leftbar">
|
||
Your submitted source code **MUST** be called `prog.c`. When the
|
||
`Makefile` compiles your code, the executable (if applicable) **MUST**
|
||
be called `prog`. The `Makefile` may compile your source code into
|
||
other filenames as well, if you want.</p>
|
||
|
||
* <p class="leftbar">
|
||
As `prog`, `prog.alt`, `prog.alt.o`, `prog.o` may be created by your
|
||
`Makefile`, your submission **MUST NOT** include those files in your
|
||
**top** directory.</p>
|
||
|
||
* <p class="leftbar">
|
||
Your submission may **NOT** have any file that starts with `COPYING`,
|
||
`COPYRIGHT`, or `LICENSE` as those files are reserved by IOCCC.</p>
|
||
|
||
* <p class="leftbar">
|
||
Your submission may **NOT** have in the **top** directory:
|
||
`prog.orig.c`, `README.md` or `index.html` as those files are reserved
|
||
by the IOCCC.</p>
|
||
|
||
* <p class="leftbar">
|
||
Your submission may **NOT** have in the **top** directory any file that matches
|
||
a file glob pattern form `[0-9][0-9][0-9][0-9]_*.tar.bz2` as those files are
|
||
reserved by IOCCC.</p>
|
||
|
||
* <p class="leftbar">
|
||
Your submission may **ONLY** contain **regular** files and directories. Other
|
||
file types such as symlinks, sockets etc. are **NOT** allowed.</p>
|
||
|
||
* <p class="leftbar">
|
||
**All** directories **MUST** have permission mode of `0755`. All
|
||
files **MUST** have the file mode of `0444`, **EXCEPT** for files that
|
||
end in `.sh` which must have a mode of `0555`.</p>
|
||
|
||
* <p class="leftbar">
|
||
All files that end in `.md` **MUST** be in markdown format.
|
||
</p>
|
||
|
||
* <p class="leftbar">
|
||
All filenames are treated as case insensitive. For example,
|
||
`REMARKS.MD`, and `Remarks.md`, and `remarks.md` are considered by
|
||
`mkiocccenty(1)` to be the **SAME** file. When preparing a submission
|
||
on a case sensitive filesystem, ensure that the submission will work on
|
||
a case insensitive filesystem.
|
||
</p>
|
||
|
||
<p class="leftbar">
|
||
**NOTE**: by 'top directory' we mean the directory with `prog.c`,
|
||
`Makefile`, `remarks.md` and the `mkiocccentry(1)` generated files
|
||
`.auth.json` and `.info.json` and **NOT** the `topdir` arg to
|
||
`mkiocccentry(1)`.
|
||
</p>
|
||
|
||
<p class="leftbar">
|
||
**NOTE**: `mkiocccentry(1)` will reject any directory which has
|
||
prohibited files.
|
||
</p>
|
||
|
||
The `remarks.md` and `Makefile` are explained in more detail in the
|
||
[Guidelines](guidelines.html).
|
||
|
||
See [IOCCC markdown guidelines](../markdown.html).
|
||
|
||
See [Rule 17 - Use mkiocccentry](rules.html#rule17-mkiocccentry).
|
||
|
||
See the
|
||
FAQ on "[What permissions may my files be and what if I need different
|
||
permissions?](../faq.html#file_perms)".
|
||
|
||
See the
|
||
FAQ on "[What are the detailed recommendations for a submission
|
||
Makefile?](../faq.html#makefile_details)".
|
||
|
||
See the [Guidelines on the mkiocccentry
|
||
toolkit](guidelines.html#mkiocccentry_toolkit).
|
||
|
||
|
||
<div id="rule5">
|
||
<div id="rule5-modifying-files">
|
||
## Rule 5 - Do NOT modify submitted files, filenames or parent directories
|
||
</div>
|
||
</div>
|
||
|
||
Your submission **MUST NOT** modify the filenames or content of any of
|
||
your original submission, such as `prog.c`, `Makefile`, or **ANY**
|
||
other supplied files. To modify files, your program can make a copy or
|
||
you can use the `Makefile` to setup working copies. Any working copies
|
||
**MUST** be cleaned up by the `Makefile` `clobber` target, so as to
|
||
restore the directory to its original state.
|
||
|
||
With the exception of the `/tmp` and the `/var/tmp` directories,
|
||
assuming the directory name or filename does **NOT** start with a `.`
|
||
(dot), your submission **MUST NOT** create or modify directories and
|
||
files **ABOVE** the current directory.
|
||
|
||
The `Makefile` `clobber` target **MUST** restore your submission to its
|
||
original form, including the removal of any created files and
|
||
directories.
|
||
|
||
<p class="leftbar">
|
||
Your code should be able to run under a [SUS
|
||
environment](https://pubs.opengroup.org/onlinepubs/9799919799/).
|
||
</p>
|
||
|
||
|
||
<div id="rule6">
|
||
<div id="rule6-free-rule">
|
||
## Rule 6 - Free Rule
|
||
</div>
|
||
</div>
|
||
|
||
I am **NOT** a Rule, I am a `free(void *human);` ‼️
|
||
|
||
``` <!---c-->
|
||
while (!(ioccc(rule(you(are(number(6)))))) {
|
||
ha(); ha(); ha();
|
||
}
|
||
```
|
||
See [Rule 19 - Prime](rules.html#rule19-prime).
|
||
|
||
|
||
<div id="rule7">
|
||
<div id="rule7-original-work">
|
||
## Rule 7 - Original Work
|
||
</div>
|
||
</div>
|
||
|
||
<p class="leftbar">
|
||
You, the author(s), **MUST** own the contents of your submission, **OR**, IF you
|
||
do **NOT** own the work, then you **MUST** have permission from the original
|
||
owner(s) to its use. If you submit **ANY** content that is owned by others, you
|
||
**MUST** detail that ownership, i.e., who owns what, and document in your
|
||
`remarks.md` the permission you obtained from them.
|
||
</p>
|
||
|
||
<p class="leftbar">
|
||
You are permitted to use tools to write your code.
|
||
</p>
|
||
|
||
See [Rule 16 - Anonymous Judging](rules.html#rule16-anonymous-judging),
|
||
and
|
||
[Guidelines for Rule 7 - Original
|
||
Work](guidelines.html#guideline7-original).
|
||
|
||
|
||
<div id="rule8">
|
||
<div id="rule8-submitting-requirements">
|
||
## Rule 8 - Submitting requirements
|
||
</div>
|
||
</div>
|
||
|
||
The submit server will accept submissions **ONLY** from those who have
|
||
registered and **ONLY** while the contest is open and **ONLY** after
|
||
you have changed your initial password.
|
||
|
||
The submit server places a total size limit of **3999971** bytes
|
||
**PER** submission.
|
||
|
||
<p class="leftbar">
|
||
Each account has ten (**10.000**) submission slots (**0..9)**.
|
||
</p>
|
||
|
||
<p class="leftbar">
|
||
Each submission slot should be annotated by the server as to whether it
|
||
was received, processed, malformed, etc. Please take note of any
|
||
errors, rectify, and resubmit.
|
||
</p>
|
||
|
||
<p class="leftbar">
|
||
In order to avoid potential packaging errors, it is **highly
|
||
recommended** to use `mkiocccentry(1)`, **AND** to check from time to
|
||
time the status on the submit server, to see if any tests run by the
|
||
server failed to validate your submission.
|
||
</p>
|
||
|
||
See
|
||
[Rule 3 - Registering for the IOCCC](rules.html#rule3-register),
|
||
[Rule 15 - GNU Makefile](rules.html#rule15-gnu-makefile),
|
||
and
|
||
[Rule 17 - Use mkiocccentry](rules.html#rule17-mkiocccentry).
|
||
|
||
See [Guidelines for Rule 8 - Submitting
|
||
requirements](guidelines.html#guideline8-submitting).
|
||
|
||
|
||
<div id="rule9">
|
||
<div id="rule9-no-interactive">
|
||
## Rule 9 - No interactive compiling allowed
|
||
</div>
|
||
</div>
|
||
|
||
Entries requiring human interaction to be initially compiled are **NOT**
|
||
permitted. However, see the [guidelines on rule
|
||
9](guidelines.html#guideline9-no-interactive) as you
|
||
**may** suggest alternative compilation steps to do something fun or
|
||
cute.
|
||
|
||
Each entry **MUST** automate the build process using `bash`, `gmake`,
|
||
`gcc` and/or `clang` and other commonly available tools under an [SUS
|
||
environment](https://pubs.opengroup.org/onlinepubs/9799919799/).
|
||
|
||
**NOTE**: any reference to `gmake(1)` can be any GNU Make compatible
|
||
tool.
|
||
|
||
**NOTE**: it is better to use the `${MAKE}` variable as then one may
|
||
override the `make` command.
|
||
|
||
**NOTE**: it is better to **NOT** modify `${CC}` in your Makefile as
|
||
this makes your program more portable.
|
||
|
||
See [Rule 15 - GNU Makefile](rules.html#rule15-gnu-makefile).
|
||
|
||
See [Guidelines for Rule 9 - No interactive compiling
|
||
allowed](guidelines.html#guideline9-no-interactive).
|
||
|
||
|
||
<div id="rule10">
|
||
## Rule 10 - Program file permissions
|
||
</div>
|
||
|
||
Programs that require special privileges (`setuid(2)`, `setgid(2)`,
|
||
super-user, special owner, special group, etc.) are **HIGHLY
|
||
DISCOURAGED**. We do **NOT** guarantee these functions will behave as
|
||
you expect on our test platforms.
|
||
|
||
If your program needs special permissions you **MUST** document this
|
||
fact and explain why it is needed in your submission’s `remarks.md`
|
||
file, preferably close to the top, because `mkiocccentry(1)` will
|
||
**NOT** set those modes.
|
||
|
||
Furthermore, if you need a supplementary program that you include to
|
||
have these permissions, you will also have to explain this as well,
|
||
because these bits are **NOT** allowed in submissions and those bits
|
||
will **NOT** be copied by `mkiocccentry(1)` either.
|
||
|
||
See [Rule 4 - Required files](rules.html#rule4-required-files),
|
||
and
|
||
[Rule 5 - Do NOT modify files](rules.html#rule5-modifying-files).
|
||
|
||
|
||
<div id="rule11">
|
||
<div id="rule11-legal-rule-abuse">
|
||
## Rule 11 - Legal rule abuse
|
||
</div>
|
||
</div>
|
||
|
||
Legal abuse of the rules is **somewhat** encouraged, but comes with
|
||
risks. A submission that, in the opinion of the Judges, **violates**
|
||
the rules **WILL BE DISQUALIFIED**. Submissions that plan to abuse the
|
||
rules **MUST** justify why their rule abuse is legal (or interesting)
|
||
in the `remarks.md` file.
|
||
|
||
Submission packaging abuse will **NOT** be tolerated and for this reason,
|
||
amongst many other reasons, it is recommended that you use
|
||
`mkiocccentry(1)`. See also [Rule 17 - use
|
||
mkiocccentry](#rule17-mkiocccentry).
|
||
|
||
During development you can check your `prog.c` size limits using
|
||
`iocccsize(1)`, e.g., `iocccsize -v1 prog.c`. Overriding problems
|
||
detected by any of the IOCCC tools risks that the submission will be
|
||
rejected.
|
||
|
||
If you do submit a rule abusing or violating submission, then consider
|
||
also submitting an alternate version in a different submission server
|
||
slot that does **NOT** violate the rules in case your rule abuse excuse
|
||
is rejected.
|
||
|
||
**IMPORTANT**: If you do submit such an alternate non-rule abusing
|
||
version, **PLEASE** indicate that in your `remarks.md` file of your
|
||
non-rule abusing version so that the Judges don't think you uploaded a
|
||
duplicate into a wrong slot by mistake.
|
||
|
||
See [Guidelines for Rule 11 - Legal rule
|
||
abuse](guidelines.html#guideline11-abuse).
|
||
|
||
|
||
<div id="rule12">
|
||
<div id="rule12-utf8">
|
||
## Rule 12 - UTF-8
|
||
</div>
|
||
</div>
|
||
|
||
Use of UTF-8 is supported by `C11` standard and its updates and so too
|
||
by the IOCCC.
|
||
|
||
See [Guidelines for Rule 12 - UTF-8](guidelines.html#guideline12-utf8).
|
||
|
||
|
||
<div id="rule13">
|
||
<div id="rule13-nocr">
|
||
## Rule 13 - No carriage returns in prog.c
|
||
</div>
|
||
</div>
|
||
|
||
Any C source that fails to compile because lines contain
|
||
carriage-returns (CTRL+M, `\r`) in particular as part of DOS/Windows
|
||
style newlines might be rejected. Please do **NOT** put trailing
|
||
CTRL+M in `prog.c`, `Makefile`, or `remarks.md` files, but instead end
|
||
lines with Unix newline (line-feed, CTRL+J, `\n`).
|
||
|
||
You are permitted, in order to try and squeeze your `prog.c` under a
|
||
[Rule 2a Gross Size](rules.html#rule2a-gross-size) and/or [Rule 2b Net
|
||
Size](rules.html#rule2b-net-size) limits, to **NOT** end source with a
|
||
newline. If you need to do this, please document that in your
|
||
`remarks.md` file and if your compiler complains about this, document
|
||
this too and update your `Makefile` to account for this.
|
||
|
||
See [Guidelines for Rule 13 - No carriage returns in
|
||
prog.c](guidelines.html#guideline13-nocr).
|
||
|
||
|
||
<div id="rule14">
|
||
## Rule 14 - Resubmitting lost submissions
|
||
</div>
|
||
|
||
Submissions that are substantially similar to previous winning IOCCC
|
||
entries are discouraged. See the
|
||
FAQ on "[What types of entries have been frequently submitted to the
|
||
IOCCC?](../faq.html#frequent-themes).
|
||
|
||
You are allowed to resubmit to a later contest, a submission that
|
||
didn't win the IOCCC. If you do so, then you would be **WELL ADVISED**
|
||
to try and enhance and improve your submission. If you do resubmit
|
||
something that didn't previously win, then you are encouraged to
|
||
mention this in your `remarks.md` file as this **sometimes** helps.
|
||
|
||
<div id="rule15">
|
||
<div id="rule15-gnu-makefile">
|
||
## Rule 15 - GNU Makefile
|
||
</div>
|
||
</div>
|
||
|
||
<p class="leftbar">
|
||
The `Makefile` **MUST** adhere to GNU Makefile syntax. It's highly
|
||
recommended that you copy the [Makefile.example](Makefile.example) as a
|
||
template, renaming it to `Makefile`. The primary target of the
|
||
`Makefile` **MUST** be `prog` and the source file is `prog.c`. The C
|
||
compiler and preprocessor **MUST** be invoked using `${CC}` and
|
||
`${CPP}` macros respectively.
|
||
</p>
|
||
|
||
The `clobber` target **MUST** clean and restore the submission
|
||
directory tree to its original state, such as removing temporary files
|
||
or any modified data files. Don't assume that `git` tool chain is
|
||
installed, i.e. do **NOT** expect `git clean -f` to work. To be clear:
|
||
do **NOT** use `git` to clean out files as this **WILL** cause problems
|
||
in the winner repo!
|
||
|
||
<p class="leftbar">
|
||
The `Makefile` **MUST** use a syntax that is compatible with `bash(1)`
|
||
and GNU `make(1)`. You are encouraged to use `SHELL= bash` in your
|
||
`Makefile`; please add a space between the `=` and the value such as:
|
||
</p>
|
||
|
||
``` <!---makefile-->
|
||
SHELL= bash
|
||
```
|
||
|
||
<p class="leftbar">
|
||
Assume that commands commonly found in [Single UNIX
|
||
Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification)
|
||
environments and systems are available in the search
|
||
`$PATH`.
|
||
</p>
|
||
|
||
<p class="leftbar">
|
||
Avoid command options that aren't part of
|
||
[SUS](https://en.wikipedia.org/wiki/Single_UNIX_Specification), such as
|
||
GNU long name options (such as `--example`) or extensions like `grep
|
||
-P`.
|
||
</p>
|
||
|
||
Do **NOT** assume that `.` (current directory) is in the `$PATH`
|
||
environment variable.
|
||
|
||
See [Rule 4 - Required files](rules.html#rule4-required-files).
|
||
|
||
See
|
||
FAQ on "[What are the detailed recommendations for a submission
|
||
Makefile?](../faq.html#makefile_details)".
|
||
|
||
See [Guidelines for Rule 15 - GNU
|
||
Makefile](guidelines.html#guideline15-gnu-makefile).
|
||
|
||
|
||
<div id="rule16">
|
||
<div id="rule16-anonymous-judging">
|
||
## Rule 16 - Anonymous judging
|
||
</div>
|
||
</div>
|
||
|
||
Your source code, data files, remarks, and program output **MUST NOT**
|
||
identify the author(s) of your code (unless you are **Peter Honeyman**
|
||
or pretending to be **Peter Honeyman**). In order to be impartial the
|
||
[Judges](https://www.ioccc.org/judges.html) do **NOT** know who is
|
||
submitting programs to the IOCCC until final selection is made, and
|
||
**only** submissions that won.
|
||
|
||
Even if you are a past winner, you **MUST NOT** reveal your identity
|
||
deliberately or by accident anywhere in your submission. **_Failure to
|
||
comply may result in the submission being disqualified_**.
|
||
|
||
|
||
<div id="rule17">
|
||
<div id="rule17-mkiocccentry">
|
||
## Rule 17 - Use `mkiocccentry`
|
||
</div>
|
||
</div>
|
||
|
||
**TL;DR**: use `mkiocccentry(1)` to package your submission.
|
||
|
||
The files, directories, and paths **MUST** conform to the limits
|
||
imposed by `mkiocccentry(1)`, including but **NOT** limited to, their
|
||
names, count, path length, directory tree depth, and permissions.
|
||
|
||
<p class="leftbar">
|
||
The submission tree may have at most **13** directories and maximum
|
||
directory depths of **4**. The maximum number of files, excluding
|
||
`prog.c`, `remarks.md`, `Makefile`, `prog.alt.c`, `try.sh`,
|
||
`try.alt.sh`, `.info.json` and `.auth.json` is **31**.
|
||
</p>
|
||
|
||
<p class="leftbar">The maximum file-path component is **38** and the maximum
|
||
path length is **60**.
|
||
</p>
|
||
|
||
The submission **MUST** be a `.txz` compressed tarball (i.e., tarball
|
||
compressed by `xz(1)`) **as constructed by** `mkiocccentry(1)`, which
|
||
**MUST** be within **[1..3999971]** bytes in size.
|
||
|
||
The tarball **MUST** be a **v7 format** tarball, and any supplementary
|
||
tarballs you provide **MUST ALSO** be **v7 format**.
|
||
|
||
The sum of all file lengths, after unpacking from the tarball, **MUST**
|
||
be less than `27651*1024` (**28314624**) bytes.
|
||
|
||
<p class="leftbar">
|
||
The submission **MUST** pass all `txzchk(1)` checks, and the tarball
|
||
filename **MUST** pass all `fnamchk(1)` checks as well.
|
||
</p>
|
||
|
||
<p class="leftbar">
|
||
You may **NOT** submit a tarball created by the `-d`, `-e` **OR** by
|
||
the `-s seed` options of `mkiocccentry(1)`.
|
||
</p>
|
||
|
||
<p class="leftbar">
|
||
The unpacked submission directory **MUST** pass the checks performed by
|
||
the minimum required version of `chksubmit(1)`.
|
||
</p>
|
||
|
||
<p class="leftbar">
|
||
Submissions may **NOT** use a [mkiocccentry
|
||
toolkit](https://github.com/ioccc-src/mkiocccentry) command line
|
||
options that are labelled as "**for TESTING purposes**", **OR**
|
||
labelled as "**for the use by the IOCCC judges only**", in their
|
||
respective man pages.
|
||
</p>
|
||
|
||
<p class="leftbar">
|
||
Submissions may **ONLY** use [mkiocccentry
|
||
toolkit](https://github.com/ioccc-src/mkiocccentry) command lines that
|
||
confirm to the command's `-h` "_print help message_", again
|
||
notwithstanding the options for testing and the IOCCC judges.
|
||
</p>
|
||
|
||
<p class="leftbar">
|
||
The `prog.c` file should pass the [Rule 2 - Size
|
||
restrictions](rules.html#rule2-size) checks performed by
|
||
`iocccsize(1)`.
|
||
</p>
|
||
|
||
<p class="leftbar">
|
||
The `.auth.json` and `.info.json` files **MUST** be exactly
|
||
what the minimum required `mkiocccentry(1)` version generates.
|
||
</p>
|
||
|
||
<p class="leftbar">
|
||
Any submission that fails to pass the checks performed by the minimum
|
||
required version of the [mkiocccentry
|
||
toolkit](https://github.com/ioccc-src/mkiocccentry) **WILL be
|
||
rejected**!
|
||
</p>
|
||
|
||
See [Rule 4 - Required files](rules.html#rule4-required-files).
|
||
|
||
See the
|
||
FAQ on "[What is the mkiocccentry tool, how do I obtain it and how do I
|
||
use it?](../faq.html#mkiocccentry)".
|
||
|
||
See the [Guidelines for Rule 17 - Use
|
||
mkiocccentry](guidelines.html#guideline17-mkiocccentry).
|
||
|
||
|
||
<div id="rule18">
|
||
## Rule 18 - Submission license
|
||
</div>
|
||
|
||
The entirety of your submission **MUST** be submitted under the
|
||
following license:
|
||
|
||
[CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0
|
||
International](https://creativecommons.org/licenses/by-sa/4.0/).
|
||
|
||
See [Rule 7 - Original Work](rules.html#rule7-original-work).
|
||
|
||
|
||
<div id="rule19">
|
||
<div id="rule19-prime">
|
||
## Rule 19 - Prime
|
||
</div>
|
||
</div>
|
||
|
||
<p class="leftbar">
|
||
This 19th rule, while prime, is reserved for future abuse 😁.
|
||
Additional rules, both humorous and otherwise, may be added below this
|
||
rule in future contests.
|
||
</p>
|
||
|
||
See [Rule 6 - Free Rule](rules.html#rule6-free-rule).
|
||
|
||
|
||
## Further Reading
|
||
|
||
Please read the [Guidelines](guidelines.html) next for further
|
||
commentary on these rules.
|
||
|
||
Read the
|
||
FAQ on "[Entering the IOCCC: the bare minimum you need to
|
||
know](https://www.ioccc.org/quick-start.html#enter)"
|
||
for an overview of how to enter the contest.
|
||
|
||
See also the [FAQ](../faq.html) in general.
|
||
|
||
And now [for something completely different](guidelines.html#fun).
|
||
|
||
Consider joining the [IOCCC Discord
|
||
Server](https://discord.com/invite/Wa42Qujwnw) for discussions about
|
||
The Rules, questions for the Judges, and `C` in general.
|
||
|
||
Leonid A. Broukhis
|
||
chongo (Landon Curt Noll) /\\cc/\\
|