Fixes and minor improvements in rules
This includes typos (including command lines, formatting and other things), renaming some rules to be a bit more intuitive and other things I noticed. Please note that I have not yet checked all links: not in other files or in this file. This will be done after a break, and it likely will involve updates to the guidelines and possibly the FAQ too. In other words this is a work in progress that should be completed later today.
This commit is contained in:
1 parent
698cd8f92b
commit
87d8c627a0
2 files changed
+383
-279
No files matched your search
+203
-144
@@ -10,9 +10,9 @@ These rules are a **TENTATIVE proposal** for the next IOCCC
|
||||
and are **likely be to be updated** before the next IOCCC.
|
||||
|
||||
See our
|
||||
FAQ on "[rules, guidelines, tools feedback](../faq.html#feedback)"
|
||||
FAQ on "[rules, guidelines and tools feedback](../faq.html#feedback)"
|
||||
as well as our
|
||||
FAQ on "[about asking questions](../faq.html#question)"
|
||||
FAQ on "[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)".
|
||||
|
||||
@@ -29,7 +29,7 @@ app from time to time to view IOCCC mastodon updates.
|
||||
|
||||
# 29th International Obfuscated C Code Contest Official Rules
|
||||
|
||||
Copyright © 2025 Leonid A. Broukhis and Landon Curt Noll.
|
||||
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
|
||||
@@ -39,9 +39,9 @@ writing by [contacting the judges](../contact.html).
|
||||
|
||||
## Rules Version
|
||||
|
||||
These IOCCC Rules are version **29.08 2025-11-28**.
|
||||
These IOCCC Rules are version **29.09 2025-11-29**.
|
||||
|
||||
Be sure to read the [IOCCC guidelines](guidelines.html).
|
||||
Reminder: be SURE to read the [IOCCC guidelines](guidelines.html).
|
||||
|
||||
|
||||
<div id="rule0">
|
||||
@@ -64,29 +64,31 @@ of the above **dates and times may change _AT ANY TIME_**!
|
||||
|
||||
The above timestamps are in "_YYYY-MM-DD HH:MM:SS.micros UTC_" format.
|
||||
|
||||
See [Current status of the IOCCC](../status.html).
|
||||
See the [current status of the IOCCC](../status.html).
|
||||
|
||||
|
||||
<div id="rule1">
|
||||
## Rule 1 - Program
|
||||
## Rule 1 - C program
|
||||
</div>
|
||||
|
||||
Your submission **MUST** be a C program.
|
||||
Your submission **MUST** be a C program that does NOT `#include` data files.
|
||||
|
||||
|
||||
<div id="rule2">
|
||||
## Rule 2 - Size
|
||||
## Rule 2 - Size restrictions
|
||||
</div>
|
||||
|
||||
`Rule 2` requires that your submission satisfy **BOTH**
|
||||
[Rule 2a Gross Size](rules.html#rule-2a-gross-size)
|
||||
[Rule 2a &lparen;Gross Size&rparen;](rules.html#rule-2a-gross-size)
|
||||
and
|
||||
[Rule 2b Next Size](rules.html#rule-2b-net-size).
|
||||
[Rule 2b &lparen;Net Size&rparen;](rules.html#rule-2b-net-size).
|
||||
During development this can be checked using `iocccsize(1)`:
|
||||
|
||||
``` <!---sh-->
|
||||
iocccsize prog.c
|
||||
```
|
||||
|
||||
See [Guidelines for Rule 2 - Size](guidelines.html#guideline-2---size).
|
||||
See the [Guidelines for Rule 2 - Size restrictions](guidelines.html#guideline-2---size).
|
||||
|
||||
|
||||
<div id="rule2a">
|
||||
@@ -96,6 +98,9 @@ See [Guidelines for Rule 2 - Size](guidelines.html#guideline-2---size).
|
||||
The overall maximum size of your `prog.c` program source **MUST NOT**
|
||||
exceed **4993** bytes.
|
||||
|
||||
**NOTE**: by default `iocccsize` will only report the rule 2b size, unless the
|
||||
code surpasses the limit.
|
||||
|
||||
See [Entering the IOCCC: the bare minimum you need to know](../quick-start.html#enter).
|
||||
|
||||
|
||||
@@ -108,13 +113,18 @@ command line argument to the latest version of the official IOCCC size
|
||||
tool (hereby referred to as `iocccsize(1)`), the value printed **MUST
|
||||
NOT** exceed **2503**.
|
||||
|
||||
**NOTE**: `iocccsize` does **NOT** calculate the filename length. See [Rule 17 -
|
||||
Use mkiocccentry](#rule17-mkiocccentry).
|
||||
|
||||
|
||||
<div id="rule3">
|
||||
## Rule 3 - Register
|
||||
<div id="rule3-register">
|
||||
## Rule 3 - You must register to enter the contest
|
||||
</div>
|
||||
</div>
|
||||
|
||||
You **MUST** register, using a valid email address, in order to submit
|
||||
entries to the IOCCC. You may register while the contest is **pending** or **open**.
|
||||
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. If you
|
||||
@@ -129,51 +139,69 @@ email or for those who wait until the last minute to try to register!
|
||||
|
||||
See [Entering the IOCCC: the bare minimum you need to know](../quick-start.html#enter).
|
||||
|
||||
See [Rule 8 - Submission](rules.html#rule-8---submission).
|
||||
See [Rule 8 - Submitting requirements](rules.html#rule8).
|
||||
|
||||
See [Guidelines for Rule 3 - Register](guidelines.html#guideline-3---register).
|
||||
See [Guidelines for Rule 3 - Registering for the IOCCC](guidelines.html#guideline-3---register).
|
||||
|
||||
|
||||
<div id="rule4">
|
||||
## Rule 4 - Files
|
||||
<div id="rule4-required-files">
|
||||
## Rule 4 - Required files
|
||||
</div>
|
||||
</div>
|
||||
|
||||
The submission **MUST** include at least these files: `Makefile`, `prog.c`,
|
||||
`remarks.md`,`.info.json`, and `.auth.json`.
|
||||
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).
|
||||
|
||||
At a minimum the following requirements apply. Additional requirements
|
||||
At a **minimum** the following requirements apply. Additional requirements
|
||||
may be imposed by `mkiocccentry(1)` updates that have yet to be listed
|
||||
here:
|
||||
below.
|
||||
|
||||
* `.info.json`, and `.auth.json` **MUST** be generated by `mkiocccenty(1)`
|
||||
when packing a submission, and **MUST** pass the `chksubmit(1)` tests.
|
||||
**NOTE**: `mkiocccentry(1)` will reject any directory which has prohibited
|
||||
files.
|
||||
|
||||
**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)`.
|
||||
|
||||
|
||||
* `.info.json` and `.auth.json` **MUST** be generated by `mkiocccenty(1)`
|
||||
when packing a submission. When `chksubmit(1)` is run on the submission
|
||||
directory **ALL** tests must pass and if there is **ANY** problem with these
|
||||
JSON files or if either is missing it will fail. See [Rule 17 - use
|
||||
mkiocccentry](#rule17-mkiocccentry).
|
||||
|
||||
* The `Makefile`, `remarks.md`,`.info.json`, and `.auth.json` **MUST**
|
||||
have a file size **greater than 0**.
|
||||
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.
|
||||
|
||||
* Your submitted source code **MUST** be called `prog.c`. When the `Makefile`
|
||||
* 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.
|
||||
The `Makefile` may compile your source code into other filenames as well, if you
|
||||
want.
|
||||
|
||||
* 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, as original content.
|
||||
`Makefile`, your submission **MUST NOT** include those files in your **top**
|
||||
directory.
|
||||
|
||||
* Your submission may **NOT** have any file that starts with `COPYING`,
|
||||
`COPYRIGHT`, or `LICENSE` as those files are reserved by IOCCC.
|
||||
|
||||
* Your submission may **NOT** have in the top directory, `prog.orig.c`,
|
||||
`README.md`, nor `index.html` as those files reserved by IOCCC.
|
||||
* 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.
|
||||
|
||||
* Your submission may **NOT** have in the top directory, any file
|
||||
* 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.
|
||||
|
||||
* Your submission may **ONLY** contain files and directories. Other file
|
||||
types such as symlinks, sockets, etc are **NOT** allowed.
|
||||
types such as symlinks, sockets etc. are **NOT** allowed.
|
||||
|
||||
* All directories **MUST** have a file mode of **0755**. All files
|
||||
**MUST** have the file mode of **0444**, except for files that
|
||||
* **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**.
|
||||
|
||||
* All files that end in `.md` **MUST** be in markdown format.
|
||||
@@ -190,32 +218,35 @@ The `remarks.md` and `Makefile` are explained in more detail in the Guidelines.
|
||||
|
||||
See [IOCCC markdown guidelines](../markdown.html).
|
||||
|
||||
See [Rule 17 - Packaging](rules.html#rule-17---packaging).
|
||||
See [Rule 17 - Use mkiocccentry](rules.html#rule-17-mkiocccentry).
|
||||
|
||||
See FAQ on "[What permissions may my files be and what if I need different permissions?](../faq.html#file_perms)".
|
||||
See the
|
||||
FAQ on "[What permissions may my files be and what if I need different permissions?](../faq.html#file_perms)".
|
||||
|
||||
See [Guidelines for the mkiocccentry toolkit](guidelines.html#mkiocccentry_toolkit).
|
||||
See the [Guidelines on the mkiocccentry toolkit](guidelines.html#mkiocccentry_toolkit).
|
||||
|
||||
See [Guidelines for the Makefile](guidelines.html#makefile).
|
||||
See the [Guidelines on the Makefile](guidelines.html#makefile).
|
||||
|
||||
|
||||
<div id="rule5">
|
||||
## Rule 5 - Integrity
|
||||
<div id="rule5-modifying-files">
|
||||
## Rule 5 - Do NOT modify submitted files or 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 supplied
|
||||
data files. To modify files, your program can make a copy or you can
|
||||
use the `Makefile` to setup working copies. Any working copies **MUST** be
|
||||
cleaned up by the `Makefile` `clobber` target, so as to restore the
|
||||
directory to its original state.
|
||||
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.
|
||||
|
||||
Your submission **MUST NOT** create or modify directories and files
|
||||
ABOVE the current directory with the exception of the `/tmp` and the
|
||||
`/var/tmp` directories as long as the directory name or filename does
|
||||
**NOT** start with "." (dot).
|
||||
ABOVE the current directory (with the exception of the `/tmp` and the `/var/tmp`
|
||||
directories and as long as the directory name or filename does **NOT** start
|
||||
with a `.` (dot)).
|
||||
|
||||
The `Makefile` `clobber` target **MUST** be restore your submission into
|
||||
The `Makefile` `clobber` target **MUST** restore your submission to its
|
||||
original form, including the removal of any created files and directories.
|
||||
|
||||
Your code should be able to run under a
|
||||
@@ -223,7 +254,9 @@ Your code should be able to run under a
|
||||
|
||||
|
||||
<div id="rule6">
|
||||
## Rule 6 - Free
|
||||
<div id="rule6-free-rule">
|
||||
## Rule 6 - Free Rule
|
||||
</div>
|
||||
</div>
|
||||
|
||||
I am **NOT** a Rule, I am a `free(void *human);` ‼️
|
||||
@@ -240,89 +273,101 @@ See [Rule 19 - Prime](rules.html#rule-19---prime).
|
||||
## Rule 7 - Original Work
|
||||
</div>
|
||||
|
||||
You, the author(s), **MUST** own the contents of your submission, or 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 the permission you obtained from them
|
||||
in your `remarks.md` file.
|
||||
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 the permission
|
||||
you obtained from them in your `remarks.md` file.
|
||||
|
||||
You are permitted to use tools to write your code.
|
||||
|
||||
See [Rule 16 - Anonymous](rules.html#rule-16---anonymous).
|
||||
See [Rule 16 - Anonymous Judging](rules.html#rule-16-anonymous-judging).
|
||||
|
||||
See [Guidelines for Rule 7 - Original Work](guidelines.html#guideline-7---original-work).
|
||||
|
||||
|
||||
<div id="rule8">
|
||||
## Rule 8 - Submission
|
||||
## Rule 8 - Submitting requirements
|
||||
</div>
|
||||
|
||||
The Submit Server will only accept submissions from those who have
|
||||
registered and only while the contest is open.
|
||||
The submit server will accept submissions **ONLY** from those who have
|
||||
registered and **ONLY** while the contest is open.
|
||||
|
||||
The Submit Server places a total submission size limit of **3999971** bytes.
|
||||
The submit server places a total size limit of **3999971** bytes **PER**
|
||||
submission.
|
||||
|
||||
Each account has ten (**10.000**) submission slots (**0..9)**. Each submission
|
||||
slot should be annotated by the server as to whether its was received,
|
||||
processed, malformed, etc. Please take note of any errors, rectify,
|
||||
and resubmit. In order to avoid potential packaging errors, it is **highly
|
||||
recommended** to use `mkiocccentry(1)`.
|
||||
and resubmit. 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.
|
||||
|
||||
Do **NOT** register more than one account!
|
||||
|
||||
See
|
||||
[Rule 3 - Register](rules.html#rule-3---register),
|
||||
[Rule 15 - Building](rules.html#rule-15---building),
|
||||
[Rule 3 - Registering for the IOCCC](rules.html#rule3-register),
|
||||
[Rule 15 - GNU Makefile compatibility](rules.html#rule-15---building),
|
||||
and
|
||||
[Rule 17 - Packaging](rules.html#rule-17---packaging).
|
||||
[Rule 17 - Use mkiocccentry](rules.html#rule-17-mkiocccentry).
|
||||
|
||||
|
||||
<div id="rule9">
|
||||
## Rule 9 - No hands
|
||||
## Rule 9 - No interactive compiling allowed
|
||||
</div>
|
||||
|
||||
Entries requiring human interaction to be initially compiled are **NOT**
|
||||
permitted. However, see the guidelines. Each entry **MUST** automate the
|
||||
build process using `bash`, `gmake`, `gcc`, `clang`, under a
|
||||
[SUS environment](https://pubs.opengroup.org/onlinepubs/9799919799/).
|
||||
permitted. However, see the guidelines. 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**: The references to `gmake(1)` can be any GNU Make compatible tool.
|
||||
|
||||
See [Rule 15 - Building](rules.html#rule-15---building).
|
||||
**NOTE**: it is better to use the `${MAKE}` variable as then one may override
|
||||
the make command.
|
||||
|
||||
**NOTE**: it is better and more portable to **NOT** modify the `${CC}` variable
|
||||
in the Makefile.
|
||||
|
||||
See [Rule 15 - GNU Makefile compatibility](rules.html#rule-15---building).
|
||||
|
||||
|
||||
<div id="rule10">
|
||||
## Rule 10 - Privileges
|
||||
## 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**
|
||||
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.
|
||||
`remarks.md` file, preferably close to the top.
|
||||
|
||||
Furthermore, if you need a supplementary program that you include to
|
||||
have these permissions, you will also have to explain this, because these
|
||||
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)`.
|
||||
|
||||
See [Rule 4 - Files](rules.html#rule-4---files),
|
||||
See [Rule 4 - Required files](rules.html#rule4-required-files),
|
||||
and
|
||||
[Rule 5 - Integrity](rules.html#rule-5---integrity).
|
||||
[Rule 5 - Do NOT modify files](rules.html#rule5-modifying-files).
|
||||
|
||||
|
||||
<div id="rule11">
|
||||
## Rule 11 - Abuse
|
||||
## Rule 11 - Legal rule abuse
|
||||
</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
|
||||
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
|
||||
its recommended to use `mkiocccentry(1)`. 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
|
||||
Submission packaging abuse will **NOT** be tolerated and for this reason,
|
||||
amongst many others, it is recommended that you use `mkiocccentry(1)`. 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
|
||||
@@ -331,22 +376,24 @@ 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.
|
||||
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 - Abuse](guidelines.html#guideline-11---abuse).
|
||||
See [Guidelines for Rule 11 - Legal rule
|
||||
abuse](guidelines.html#guideline-11---abuse).
|
||||
|
||||
|
||||
<div id="rule12">
|
||||
## Rule 12 - UTF-8
|
||||
</div>
|
||||
|
||||
Use of UTF-8 is supported by `C89` standard and its updates and so too by the IOCCC.
|
||||
Use of UTF-8 is supported by `C89` standard and its updates and so too by the
|
||||
IOCCC.
|
||||
|
||||
|
||||
<div id="rule13">
|
||||
## Rule 13 - Newlines
|
||||
## Rule 13 - No carriage returns in prog.c
|
||||
</div>
|
||||
|
||||
Any C source that fails to compile because lines contain carriage-returns
|
||||
@@ -357,90 +404,98 @@ CTRL+J, `\n`).
|
||||
|
||||
You are permitted, in order to try and squeeze your `prog.c` under a
|
||||
[Rule 2a Gross Size](rules.html#rule-2a-gross-size) and/or
|
||||
[Rule 2b Next Size](rules.html#rule-2b-net-size)
|
||||
limits, to **NOT** end source with a newline. If you
|
||||
[Rule 2b Net Size](rules.html#rule-2b-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.
|
||||
|
||||
|
||||
<div id="rule14">
|
||||
## Rule 14 - Resubmit
|
||||
## Rule 14 - Resubmitting lost submissions
|
||||
</div>
|
||||
|
||||
Submissions that are substantially similar to previous winning IOCCC
|
||||
entries are discouraged.
|
||||
|
||||
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.
|
||||
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">
|
||||
## Rule 15 - Building
|
||||
## Rule 15 - GNU Makefile compatibility
|
||||
</div>
|
||||
|
||||
The `Makefile` **MUST** adhere to GNU Makefile syntax. Its recommended
|
||||
that you copy and rename the `Makefile.example` as a template. 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.
|
||||
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.
|
||||
|
||||
The `clobber` target should clean and restore the submission directory
|
||||
tree to its original state, such as removing temporary files or any
|
||||
modified data files. Don't assume that `git` tool chain is installed,
|
||||
i.e., do **NOT** expect `git clean -f` to work.
|
||||
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
|
||||
can cause problems in the winner repo!
|
||||
|
||||
The `Makefile` **MUST** use a syntax that is compatible with
|
||||
`bash(1)` and GNU `make(1)`. You are encouraged to use `SHELL=
|
||||
`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:
|
||||
|
||||
``` <!---sh-->
|
||||
``` <!---makefile-->
|
||||
SHELL= bash
|
||||
```
|
||||
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`. Avoid command options that aren't part of
|
||||
`$PATH`. Avoid command options that aren't part of
|
||||
[SUS](https://en.wikipedia.org/wiki/Single_UNIX_Specification), such as
|
||||
GNU long name options `--example` or extensions like `grep -P`.
|
||||
GNU long name options (such as `--example`) or extensions like `grep -P`.
|
||||
|
||||
Do **NOT** assume that `.` (current directory) is in the `$PATH` environment variable.
|
||||
Do **NOT** assume that `.` (current directory) is in the `$PATH` environment
|
||||
variable.
|
||||
|
||||
See [Rule 4 - Files](rules.html#rule-4---files).
|
||||
See [Rule 4 - Required files](rules.html#rule-4---files).
|
||||
|
||||
See FAQ on "[What are the detailed recommendations for a submission Makefile?](../faq.html#makefile_details)".
|
||||
|
||||
See [Guidelines for Rule 15 - Building](guidelines.html#guideline-15---building).
|
||||
See [Guidelines for Rule 15 - GNU Makefile compatibility](guidelines.html#guideline-15---building).
|
||||
|
||||
|
||||
<div id="rule16">
|
||||
## Rule 16 - Anonymous
|
||||
## Rule 16 - Anonymous judging
|
||||
</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
|
||||
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
|
||||
entries to the IOCCC until final selection is made. 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.***
|
||||
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">
|
||||
## Rule 17 - Packaging
|
||||
<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.
|
||||
|
||||
The submission tree may have at most **13** directories and maximum
|
||||
directory depths of **4**. The maximum number of files, excluding
|
||||
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**. And the maximum file-path
|
||||
component is **38** and maximum path length is **60**.
|
||||
@@ -448,47 +503,51 @@ component is **38** and maximum path length is **60**.
|
||||
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.
|
||||
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.
|
||||
|
||||
The submission **MUST** be a tarball file that **MUST** pass all `txzchk(1)` checks, and the tarball
|
||||
filename **MUST** pass all `fnamchk(1)` checks.
|
||||
The submission **MUST** pass all `txzchk(1)` checks, and the tarball filename
|
||||
**MUST** pass all `fnamchk(1)` checks as well.
|
||||
|
||||
You may **NOT** submit a tarball created by the `-d`, `-e`, **NOR** by the `-s seed` options of `mkiocccentry(1)`.
|
||||
You may **NOT** submit a tarball created by the `-d`, `-e` **OR** by the `-s
|
||||
seed` options of `mkiocccentry(1)`.
|
||||
|
||||
The unpacked submission directory **MUST** pass the checks performed by the
|
||||
current version of `chksubmit(1)`.
|
||||
minimum required version of `chksubmit(1)`.
|
||||
|
||||
Submissions may **NOT** use a
|
||||
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry)
|
||||
command line options that labeled as "**for TESTING purposes**",
|
||||
**NOR** labeled as "**for the use by the IOCCC judges only**",
|
||||
in their respective man pages.
|
||||
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.
|
||||
|
||||
Submissions may **ONLY** use
|
||||
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry)
|
||||
command lines that confirm to the command's `-h` "_print help message_".
|
||||
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.
|
||||
|
||||
The `prog.c` file **MUST** pass the [Rule 2 - Size](rules.html#rule-2---size)
|
||||
size checks performed by `iocccsize(1)`.
|
||||
checks performed by `iocccsize(1)`.
|
||||
|
||||
The `.auth.json` and `.info.json` files **MUST** be compatible with what `chksubmit(1)` generates.
|
||||
The `.auth.json` and `.info.json` files **MUST** be compatible with what
|
||||
`mkiocccentry(1)` generates.
|
||||
|
||||
Any submission that fails to pass the checks performed by the most recent version of the
|
||||
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry)
|
||||
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**!
|
||||
|
||||
See [Rule 4 - Files](rules.html#rule-4---files).
|
||||
See [Rule 4 - Required files](rules.html#rule4-required-files).
|
||||
|
||||
See FAQ on "[What is the mkiocccentry tool, how do I obtain it and how do I use it?](../faq.html#mkiocccentry)".
|
||||
See the
|
||||
FAQ on "[What is the mkiocccentry tool, how do I obtain it and how do I use it?](../faq.html#mkiocccentry)".
|
||||
|
||||
See [Guidelines for Rule 17 - Packaging](guidelines.html#guideline-17---packaging).
|
||||
See the [Guidelines for Rule 17 - Use mkiocccentry](guidelines.html#guideline-17---packaging).
|
||||
|
||||
|
||||
<div id="rule18">
|
||||
## Rule 18 - License
|
||||
## Rule 18 - Submission license
|
||||
</div>
|
||||
|
||||
The entirety of your submission **MUST** be submitted under the following license:
|
||||
@@ -506,7 +565,7 @@ 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.
|
||||
|
||||
See [Rule 6 - Free](rules.html#rule-6---free).
|
||||
See [Rule 6 - Free Rule](rules.html#rule6-free).
|
||||
|
||||
|
||||
## Further Reading
|
||||
|
||||
Reference in new issue
Block a user