From d49e2f2d9cb6cabeca32e173d9d4166c3b2f8378 Mon Sep 17 00:00:00 2001 From: Cody Boone Ferguson <53008573+xexyl@users.noreply.github.com> Date: Sat, 29 Nov 2025 09:28:49 -0800 Subject: [PATCH] More work on rules, guidelines and FAQ More links have to be checked as does formatting and other things. The guidelines have had some typo fixes but more has to be done. --- faq.md | 96 ++++++++++++------------- next/guidelines.html | 165 +++++++++++++++++++++++++----------------- next/guidelines.md | 167 ++++++++++++++++++++++++++----------------- next/rules.html | 40 ++++++++--- next/rules.md | 41 ++++++++--- 5 files changed, 307 insertions(+), 202 deletions(-) diff --git a/faq.md b/faq.md index e1f435682..e5ff91541 100644 --- a/faq.md +++ b/faq.md @@ -1,6 +1,6 @@ # IOCCC FAQ Table of Contents -This is FAQ version **29.01 2025-11-28**. +This is FAQ version **29.02 2025-11-29**. ## 0. [Entering the IOCCC: the bare minimum you need to know](#enter_questions) @@ -26,7 +26,7 @@ This is FAQ version **29.01 2025-11-28**. - **Q 1.4**: How can I check if my submission passes tests without having to answer questions? - **Q 1.5**: What are extra files and how may I include additional files beyond the max allowed? - **Q 1.6**: May I use AI, LLM, Virtual coding assistants, or similar tools to write my submission? -- **Q 1.7**: What are the details behind Rule 17 - Packaging? +- **Q 1.7**: What are the details behind Rule 17 - use mkiocccentry? - **Q 1.8**: How can I avoid re-entering my UUID to mkiocccentry? - **Q 1.9**: How can I avoid having to move or delete my submission directory for the same workdir? - **Q 1.10**: Can I download my submission tarball from the submit server? @@ -216,7 +216,7 @@ This toolkit is from the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry) and it is **required** that you use it to package your submission. Not doing so puts you at a great risk of violating the [Rules](next/rules.html) and in particular -[Rule 17 - Packaging](next/rules.html#rule-17---packaging). +[Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry). Jump to: [top](#) @@ -387,7 +387,7 @@ directory** will be created, with the name based on your IOCCC registration username, which is **in the form of a UUID**, and submission number along with the timestamp; see the [rules](next/rules.html) for more details on this, and in particular -[Rule 17 - Packaging](next/rules.html#rule-17---packaging). +[Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry). **IMPORTANT NOTE**: the tools that require other tools, `mkiocccentry(1)` and `txzchk(1)`, will, as of version `2.0.2 2025-03-11`, search under `$PATH`. If @@ -582,7 +582,7 @@ rounds; we look at the author name only if an entry wins. See the - leaving the remark section empty (which would also indicate that you did not use `mkiocccentry(1)`, as it requires it to not be of size 0, though if you only include whitespace you would still be violating -[Rule 17 - Packaging](next/rules.html#rule-17---packaging)). +[Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry)). Jump to: [top](#) @@ -641,7 +641,7 @@ for more details. See the FAQ on "[Rule 17](#rule17)" and -[Rule 17 - Packaging](next/rules.html#rule-17---packaging) +[Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry) itself. Do remember that if your submission requires different filenames, then you @@ -858,12 +858,12 @@ itself is an extra file, meaning it counts **AS** an extra file. This file does **NOT** need to pass the `txzchk(1)` tests; only your submission tarball needs to pass these tests. However see below if you do do this. -Please pay careful attention to [Rule 17 - Packaging](next/rules.html#rule-17---packaging) and in +Please pay careful attention to [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry) and in particular the part about the maximum number of files per submission, which not only discusses the maximum number of files but also specific rules you must follow if you do include a tarball. Not following these points puts you at great risk -of violating [Rule 17 - Packaging](next/rules.html#rule-17---packaging)! +of violating [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry)! Also, remember what the [guidelines](next/guidelines.html) say: @@ -902,7 +902,7 @@ Jump to: [top](#)
-### Q 1.7: What are details behind Rule 17 - Packaging? +### Q 1.7: What are details behind Rule 17 - Use mkiocccentry?
@@ -925,7 +925,7 @@ contains **IMPORTANT** tools and libraries such as: - `chksubmit(1)` (which uses `jparse(3)` and is a wrapper to `chkentry(1)`) The above mentioned tools will help you verify that your submission -conforms to [Rule 17 - Packaging](next/rules.html#rule-17---packaging). Each of these tool has a `-h` +conforms to [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry). Each of these tool has a `-h` option that provides command line help. For additional details of each tool, see its man page, and in some cases, the [IOCCC guidelines](next/guidelines.html). @@ -988,7 +988,7 @@ for help. The `remarks.md` **MUST** be a **non**-empty file in markdown format (`mkiocccentry(1)` only checks the file size but if you do not have any text in it you still risk violating this rule). See also -[Rule 17 - Packaging](next/rules.html#rule-17---packaging) +[Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry) and our FAQ on "[remarks.md](#remarks_md)", our @@ -1096,7 +1096,7 @@ permissions and `mkiocccentry(1)` does this for you. In particular: directories `-r-xr-xr-x` (i.e. `0555`); and all other files **MUST** be `-r--r--r--` (i.e. `0444`). If any file or directory does not have the correct permissions, your submission **WILL** be rejected for violating -[Rule 17 - Packaging](next/rules.html#rule17)! +[Rule 17 - Use mkiocccentry](next/rules.html#rule17)! After `mkiocccentry(1)` creates the directories and copies the files with these modes, it also verifies them after the fact and if they are not correct it is an @@ -1124,7 +1124,7 @@ there should be no problem but if you were to package things manually it is possible there could be a problem and this poses a big risk of violating [Rule 4 - Files](next/rules.html#rule-4---files) or -[Rule 17 - Packaging](next/rules.html#rule17). +[Rule 17 - Use mkiocccentry](next/rules.html#rule17). The `fnamchk(1)`, which `txzchk(1)` executes, will verify that the @@ -1136,7 +1136,7 @@ These checks **MUST PASS**. If they do not you stand a significant chance of having your submission rejected for violating [Rule 4 - Files](next/rules.html#rule-4---files) or -[Rule 17 - Packaging](next/rules.html#rule17). +[Rule 17 - Use mkiocccentry](next/rules.html#rule17).
#### Maximum number of files per submission @@ -1179,7 +1179,7 @@ The `mkiocccentry(1)` tool uses the v7 format. For instance you might try: **IMPORTANT**: where [Rule 4 - Files](next/rules.html#rule-4---files), and -[Rule 17 - Packaging](next/rules.html#rule-17---packaging). +[Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry). and the tools from the latest release of the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry) conflict, the [IOCCC judges](judges.html) will use their best judgment which @@ -1222,7 +1222,7 @@ FAQ on "[mkiocccentry repo bugs](#mkiocccentry_bugs)". At the risk of stating the obvious: submissions that violate [Rule 4 - Files](next/rules.html#rule-4---files), or -[Rule 17 - Packaging](next/rules.html#rule-17---packaging) +[Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry) **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 @@ -1594,7 +1594,7 @@ somehow, `txzchk(1)` will flag it as an error. When the judges run `txzchk(1)` on the uploaded submission compressed tarball, if anything is wrong, for instance if you "sneak in" any dot files or dot directories, the submission **WILL BE REJECTED** for violating -[Rule 17 - Packaging](next/rules.html#rule-17---packaging)! +[Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry)! You may use whatever tools you need to develop your submission, including the use of `git(1)` or `gh(1)`, just be sure that your submission code and your @@ -2212,7 +2212,7 @@ the judges **ONLY**; use of this option to validate your submission puts you at a great risk of violating [Rule 4 - Files](next/rules.html#rule-4---files), or -[Rule 17 - Packaging](next/rules.html#rule-17---packaging)!). +[Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry)!). As an example, if your submission directory is `00000000-0000-4000-0000-000000000000-3/` then you should run the following @@ -2241,7 +2241,7 @@ FAQ on "[.info.json](#info_json)" as well as [Rule 4 - Files](next/rules.html#rule-4---files), and -[Rule 17 - Packaging](next/rules.html#rule-17---packaging) +[Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry) for more information. **NOTE**: the `chksubmit(1)` tool invokes `chkentry(1)` but as a contestant you @@ -2336,12 +2336,12 @@ In order of the file's contents we describe each required field, below: * The IOCCC contestant ID used as a username in the form of **in the form of a UUID** and submission number; see the [Rules](next/rules.html) for more details on this, and in particular - [Rule 17 - Packaging](next/rules.html#rule-17---packaging). + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry). **NOTE:** if the contest ID is **NOT** in this format then `fnamchk` will report it as an **error** and your submission **WILL BE** rejected for violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging). + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry). - `tarball` (double quoted string) * The xz compressed tarball filename. @@ -2349,10 +2349,10 @@ In order of the file's contents we describe each required field, below: **IMPORTANT:** this **MUST** match the actual tarball's **filename** in order for this to be valid. If there is a mismatch you stand a great risk of having your submission rejected for violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging)! + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry)! Moreover, it is possible that `txzchk` will report a problem through `fnamchk(1)` which also puts you at great risk of violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging). The + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry). The `txzchk(1)` tool will use the output of `fnamchk` to obtain the correct directory _name_ in the tarball; if `fnamchk` fails to validate your filename, or if you have the wrong directory name in the @@ -2367,7 +2367,7 @@ In order of the file's contents we describe each required field, below: in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If this is not the case you stand a great risk of having your submission rejected for violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging). + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry). - `author_count` (number) * How many authors this submission has. @@ -2432,7 +2432,7 @@ author(s) of the submission: in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If this is not the case you stand a great risk of having your submission rejected for violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging). + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry). **NOTE:** an **affiliation** does **NOT** have any affect on whether you will win or not. @@ -2519,7 +2519,7 @@ reported invalid by `chksubmit(1)`, your submission will almost certainly be rejected for violating the [Rules](next/rules.html) and in particular [Rule 4 - Files](next/rules.html#rule-4---files), and -[Rule 17 - Packaging](next/rules.html#rule-17---packaging). +[Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry). An obvious example where `chksubmit(1)` would fail to validate `.auth.json` is if there is a mismatch of type in the JSON file with what is expected, for @@ -2531,7 +2531,7 @@ that must be established as valid by `chksubmit(1)`) your submission would be rejected for violating [Rule 4 - Files](next/rules.html#rule-4---files), and -[Rule 17 - Packaging](next/rules.html#rule-17---packaging) +[Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry) and in particular because `chksubmit(1)` would not validate the `.auth.json` file (and maybe other things too). @@ -2655,7 +2655,7 @@ In order of the file's contents we describe each required field, below: * The IOCCC contestant ID used as a username in the form of **in the form of a UUID** and submission number; see the [rules](next/rules.html) for more details on this, and in particular - [Rule 17 - Packaging](next/rules.html#rule-17---packaging). + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry). - `submit_slot` (number) * The submission number. @@ -2666,7 +2666,7 @@ In order of the file's contents we describe each required field, below: in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If this is not the case you stand a great risk of having your submission rejected for violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging). + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry). - `title` (double quoted string) * A short name (length >= 1 **THROUGH** `MAX_TITLE_LEN`, defined in @@ -2676,7 +2676,7 @@ In order of the file's contents we describe each required field, below: **IMPORTANT:** if this is **NOT** the case you stand a great risk of having your submission rejected for violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging)! + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry)! - `abstract` (double quoted string) * A one line summary of your submission, with a length of 1 **THROUGH** @@ -2688,7 +2688,7 @@ In order of the file's contents we describe each required field, below: **IMPORTANT:** if your abstract is 0 in length or > the maximum abstract length you stand a great risk of having your submission rejected for violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging)! + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry)! - `tarball` (double quoted string) * The xz compressed tarball filename. @@ -2696,10 +2696,10 @@ In order of the file's contents we describe each required field, below: **IMPORTANT:** this **MUST** match the actual tarball's **filename** in order for this to be valid. If there is a mismatch you stand a great risk of having your submission rejected for violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging)! + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry)! Moreover, it is possible that `txzchk` will report a problem through `fnamchk(1)` which also puts you at great risk of violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging). + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry). The `txzchk(1)` tool will use the output of `fnamchk` to obtain the correct directory _name_ in the tarball; if `fnamchk` fails to validate your filename, or if you have the wrong directory name in the @@ -2734,7 +2734,7 @@ In order of the file's contents we describe each required field, below: calculated size is **NOT** violated but this is `true` then you stand a good chance of having your submission rejected for violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging). + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry). - `rule_2a_mismatch` (boolean) * `true` if @@ -2752,7 +2752,7 @@ In order of the file's contents we describe each required field, below: calculated size is **NOT** violated but this is `true` then you stand a good chance of having your submission rejected for violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging). + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry). - `highbit_warning` (boolean) * `true` if `iocccsize` detects a high bit (unescaped octets with the high @@ -2780,7 +2780,7 @@ In order of the file's contents we describe each required field, below: **IMPORTANT:** if the `Makefile` file has no problems and this is `true` then you stand a good chance of having your submission rejected for violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging)! + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry)! See the FAQ on "[Makefile](#makefile)" @@ -2791,7 +2791,7 @@ In order of the file's contents we describe each required field, below: **IMPORTANT:**: if the `Makefile` file does **NOT** have an `all` rule then you stand a good chance of having your submission rejected for violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging)! + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry)! See the FAQ on "[Makefile](#makefile)" @@ -2803,7 +2803,7 @@ In order of the file's contents we describe each required field, below: **IMPORTANT:** if the `Makefile` file does **NOT** have an `all` rule and this boolean is `true` then you stand a good chance of having your submission rejected for violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging)! + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry)! See the FAQ on "[Makefile](#makefile)" @@ -2815,7 +2815,7 @@ In order of the file's contents we describe each required field, below: **IMPORTANT:** if the `Makefile` file does **NOT** have a `clean` rule and this boolean is `true` then you stand a good chance of having your submission rejected for violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging)! + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry)! See the FAQ on "[Makefile](#makefile)" @@ -2827,7 +2827,7 @@ In order of the file's contents we describe each required field, below: **IMPORTANT:** if the `Makefile` file does **NOT** have an `clobber` rule and this boolean is `true` then you stand a good chance of having your submission rejected for violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging)! + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry)! See the FAQ on "[Makefile](#makefile)" @@ -2839,7 +2839,7 @@ In order of the file's contents we describe each required field, below: **IMPORTANT:** if the `Makefile` file does **NOT** have a `try` rule and this boolean is `true` then you stand a good chance of having your submission rejected for violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging)! + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry)! See the FAQ on "[Makefile](#makefile)" @@ -2865,7 +2865,7 @@ The `mkiocccentry(1)` tool will write it in this order: **IMPORTANT:** if this is **NOT** the case you stand a great chance of having your submission rejected for violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging)! + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry)! - `auth_JSON` (double quoted string) * This `MUST` be `".auth.json"`, defined as `AUTH_JSON_FILENAME` in @@ -2878,7 +2878,7 @@ The `mkiocccentry(1)` tool will write it in this order: **IMPORTANT:** if this is **NOT** the case you stand a great chance of having your submission rejected for violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging)! + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry)! - `c_src` (double quoted string) * This `MUST` be `"prog.c"`, defined as `PROG_C_FILENAME` in @@ -2888,7 +2888,7 @@ The `mkiocccentry(1)` tool will write it in this order: **IMPORTANT:** if this is **NOT** the case you stand a great chance of having your submission rejected for violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging)! + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry)! - `Makefile` (double quoted string) * This `MUST` be `"Makefile"`, defined as `MAKEFILE_FILENAME` in @@ -2901,7 +2901,7 @@ The `mkiocccentry(1)` tool will write it in this order: **IMPORTANT:** if this is **NOT** the case you stand a great chance of having your submission rejected for violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging)! + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry)! - `remarks` (double quoted string) * This `MUST` be `"remarks.md"`, defined as `REMARKS_FILENAME` in @@ -2914,7 +2914,7 @@ The `mkiocccentry(1)` tool will write it in this order: **IMPORTANT:** if this is **NOT** the case you stand a great chance of having your submission rejected for violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging)! + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry)! The `manifest` **array** also **OPTIONALLY** has one or more of the field: @@ -2927,7 +2927,7 @@ The `manifest` **array** also **OPTIONALLY** has one or more of the field: filenames are not unique, not POSIX plus + safe chars only, if they are the wrong permission and various other things. In these cases you stand a great risk of having your submission rejected for violating - [Rule 17 - Packaging](next/rules.html#rule-17---packaging)! + [Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry)! On the other hand, **ONLY** `mkiocccentry` will verify that the files exist and can be read; `txzchk(1)` will **NOT** do this for you as it only **LISTS** the tarball: it does **NOT** extract it. @@ -2991,7 +2991,7 @@ out of range (see above for list). Two more examples would be if a field is missing or if an unknown filed is in the file. In these cases (and any others that must be established as valid by `chksubmit`) your submission would be rejected for violating -[Rule 17 - Packaging](next/rules.html#rule-17---packaging), +[Rule 17 - Use mkiocccentry](next/rules.html#rule17-mkiocccentry), and in particular because `chksubmit` would not validate the `.info.json` file. diff --git a/next/guidelines.html b/next/guidelines.html index ce7bb3a11..d03abd544 100644 --- a/next/guidelines.html +++ b/next/guidelines.html @@ -483,7 +483,7 @@ and remains unaltered. All other uses must receive prior permission in writing by contacting the judges.

IOCCC Guidelines version

-These IOCCC guidelines are version 29.00 2025-11-28. +These IOCCC guidelines are version 29.01 2025-11-29.

The | symbol indicates an change from the previous IOCCC. @@ -491,23 +491,24 @@ The | symbol indicates an ch

Because the IOCCC29 guidelines was a substantial rewrite, only important changes from IOCCC28 have been marked.

-

Be sure to read the IOCCC rules.

+

Be sure to read the IOCCC rules.

-

Guidelines for Rule 2 - Size

+
+

Guidelines for Rule 2 - Size restrictions

+

You should pay attention to our observations on code size and Rule 2 remarks for IOCCC28.

-

Your submission must satisfy BOTH the maximum size -Rule 2a Gross Size +

Your submission must satisfy BOTH the +Rule 2a Gross Size AND -the IOCCC size -Rule 2b Next Size.

+Rule 2b Net Size rules.

To check your code against -Rule 2 - Size, use the iocccentry(1) tool. +Rule 2 - Size restrictions, use the iocccentry(1) tool. For example:

    iocccsize prog.c

The IOCCC size tool algorithm can be summarized as follows:

@@ -523,24 +524,25 @@ counted by the IOCCC size tool.

In cases where the above summary and the algorithm implemented by the IOCCC size tool iocccsize(1) conflict, the algorithm implemented -by the current version of iocccsize(1) is preferred by the IOCCC judges.

+by the minimum required version of iocccsize(1) is preferred by the IOCCC +judges.

Make sure iocccsize does not flag any issues with your prog.c.

There a much less need to #define C reserved words in an effort to get around the size limits of -Rule 2 - Size +Rule 2 - Size restrictions because of the iocccsize(1) algorithm.

Yes Virginia, the previous guideline sentence is an important hint!

Jump to: top

-

Guidelines for Rule 3 - Register

+

Guidelines for Rule 3 - Register for the contest

See FAQ on “What is an author handle?”.

Jump to: top

-

Guidelines for Rule 7 - Original Work

+

Guidelines for Rule 7 - Original Work

While it is NOT required, you are allowed to use tools or services such as:

@@ -548,11 +550,11 @@ because of the iocccsize(1) algorithm.

  • Code generators
  • Static and runtime code analysis tools
  • Machine learning tools
  • -
  • natural language models
  • +
  • Natural language models
  • Large language models (LLMs)
  • Code copilot tools
  • So called “AI services”
  • -
  • etc.
  • +
  • Etc.
  • The IOCCC has a rich history of remarkable winning entries created by authors who skillfully employed various techniques to develop their code.

    @@ -563,7 +565,7 @@ how you used such tools
    in your remarks.md file.

    Jump to: top

    -

    Guidelines for Rule 11 - Abuse

    +

    Guidelines for Rule 11 - Legal rule abuse

    We try to avoid limiting creativity in our IOCCC rules so @@ -571,7 +573,7 @@ we leave the contest open for creative rule interpretation.

    We do realize that there are holes in the IOCCC rules, and invite submitters to attempt to exploit them.

    We sometime award ‘Best abuse of the rules’ or ‘Worst abuse of the rules’, -or some variation to a submission that creatively attempts to exploit a holes in the +or some variation, to a submission that creatively attempts to exploit a holes in the IOCCC rules.

    When we do need to plug a hole in the IOCCC rules or IOCCC guidelines, we will attempt to use a very small plug, @@ -590,7 +592,8 @@ opinion of the IOCCC judges, WILL disqualified. RULE ABUSE CARRIES A CERTAIN LEVEL OF RISK! If you have a submission that might otherwise be interesting, you might want to submit two versions; one that does not abuse the IOCCC rules and one that -does.

    +does, making sure to note in the one that does not abuse the rules that this is +another version, so that the judges do not assume you uploaded it by mistake.

    If you intend to abuse the IOCCC rules, indicate so in your remarks.md file. You MUST try to justify why you consider your rule abuse to be allowed under the @@ -600,9 +603,9 @@ As there is no guarantee that you will succeed, you might consider submitting an alternate version that conforms to the IOCCC rules.

    If you do bypass the mkiocccentry(1) warnings about -Rule 2a Gross Size +Rule 2a - Gross Size and/or about -Rule 2b Next Size +Rule 2b - Net Size or any other rule and submit a submission anyway, you MUST try to justify why the IOCCC IOCCC judges should not reject your submission due to a rule @@ -634,7 +637,7 @@ This is one of the reasons why the IOCCC rules and

    Jump to: top

    -

    Guidelines for Rule 15 - Building

    +

    Guidelines for Rule 15 - GNU Makefile

    You may use git, or services such as GitHub @@ -648,13 +651,18 @@ an IDE will be rejected.

    environments, and commonly found on systems that reasonably conform to the Single UNIX Specification in the building and compiling of your submission.

    +

    Your Makefile MUST be compatible with GNU make and we suggest you use +Makefile.example as a template, renamed as Makefile of +course.

    Jump to: top

    -

    Guidelines for Rule 17 - Packaging

    +
    +

    Guidelines for Rule 17 - Use mkiocccentry

    -

    We STRONGLY recommend you do install the +

    +

    We STRONGLY recommend you do install the most recent release of mkiocccentry toolkit as use of using older versions of the mkiocccentry toolkit to are HIGHLY LIKELY to be REJECTED!

    If you submit your own JSON files (other than .auth.json and @@ -671,13 +679,13 @@ file. The non-extra files (prog.c, prog.alt.c, try.sh, try.alt.sh, remarks.md, Makefile, .auth.json and .info.json) are considered free files, and to not count towards the -Rule 17 - Packaging +Rule 17 - Use mkiocccentry limit of 31 extra files.

    If you use an optional filename for something other than their intended use in order to get past the file limit, we will consider that an abuse of rules.

    -

    Your tarball does NOT reveal who you are! For this reason, the tarball -MUST be a v7 format tarball.

    +

    The mkiocccentry generated tarball does NOT reveal who you are! For this +reason, the tarball MUST be a v7 format tarball.

    You should NOT use a tarball as an extra file for a test-suite unless you have a very good reason for this: if you do include a tarball as an extra file, then you MUST specify why in your remarks.md file.

    @@ -687,13 +695,23 @@ said tarball(s), the make clobber rule MUST remove and your submission doesn’t require the test-suite to be available to run, then in your remarks.md a URL where such a test-suite may be downloaded from and how to use the test-suite to test your submission.

    -

    See FAQ on “What should I do with the try.sh and try.alt.sh scripts?”.

    -

    See FAQ on “What is a .auth.json file?”.

    -

    See FAQ on “What is a .info.json file?”.

    -

    See FAQ on “How can I validate my submission directory?”.

    -

    See FAQ on “What permissions may my files be and what if I need different permissions?”.

    -

    See FAQ on “What are the detailed recommendations for a submission Makefile?”.

    -

    See FAQ on “What are the details behind Rule 17 - Packaging?”.

    +

    If you DO include a tarball then make sure it uses the v7 format. See the +FAQ on “extra files” +for details on how to make a v7 tarball.

    +

    See the +FAQ on “What should I do with the try.sh and try.alt.sh scripts?”.

    +

    See the +FAQ on “What is a .auth.json file?”.

    +

    See the +FAQ on “What is a .info.json file?”.

    +

    See the +FAQ on “How can I validate my submission directory?”.

    +

    See the +FAQ on “What permissions may my files be and what if I need different permissions?”.

    +

    See the +FAQ on “What are the detailed recommendations for a submission Makefile?”.

    +

    See the +FAQ on “What are the details behind Rule 17 - Use mkiocccentry?”.

    Jump to: top

    @@ -706,7 +724,7 @@ use the most recent version of the submissions that package using older versions of the mkiocccentry toolkit are LIKELY to be REJECTED!

    -

    You REALLY SHOULD use latest mkiocccentry toolkit +

    You REALLY SHOULD use the latest mkiocccentry toolkit to package your own submission.

    The mkiocccentry(1) tool runs a number of checks by way of these mkiocccentry toolkit @@ -723,7 +741,7 @@ in the txzchk(1) man page.

    Do NOT use fnamchk(1) command line options that are labeled “for TESTING purposes” in the fnamchk(1) man page.

    Do NOT use chkentry(1) command line options that are labeled “for the use by the IOCCC judges only” -in the chkentry(1) man page.

    +in the chksubmit(1) (or chkentry(1)) man page(s).

    To view mkiocccentry toolkit man pages, while your current directory is the top of the source tree:

        man soup/man/man1/mkiocccentry.1
    @@ -736,32 +754,35 @@ while your current directory is the top of the source tree:

    So that you do not have to repeatedly answer all the mkiocccentry(1) questions, use mkiocccentry -a answers ... to create a file containing the answers you first give, that will allow you to later use mkiocccentry -i answers ... to reuse those same answers.

    -

    The mkiocccentry -A answers .. does the same thing except that the answers file will be overwritten.

    -

    The mkiocccentry -i answers .. will still be required to confirm “Yes/No” questions.

    +

    The mkiocccentry -A answers ... does the same thing except that the answers file will be overwritten.

    +

    The mkiocccentry -i answers ... will still be required to confirm “Yes/No” questions.

    Use mkiocccentry -Y -i answers .. to force a yes answers with great caution -because it might force a yes answer to something you do NOT want.

    +because it might force a yes answer to something you do NOT want, such as a +change in your code that violates a detected rule.

    To help with not having to repeatedly enter a UUID, put your UUID into a file and use -mkiocccentry -u uuidfile .., or use mkiocccentry -U UUID .. to give the UUID +mkiocccentry -u uuidfile ..., or use mkiocccentry -U UUID ... to give the UUID on the command line.

    If you wish to test that your submission passes the mkiocccentry(1) tests without having to type in in answers each time, you can use the -d or -s seed option to mkiocccentry for the tool to pseudo-randomly create answers for you. For example:

        mkiocccentry -d workdir topdir
    -

    Do NOT submit a tarball formed by mkiocccentry -d .., NOR by mkiocccentry -s seed ..!

    +

    Do NOT submit a tarball formed by mkiocccentry -d .. OR by +mkiocccentry -s seed .. OR by using the test UUID!

    The mkiocccentry(1) tool creates an xz(1) compressed v7 format tarball using a tar(1) command of the form:

        cd workdir/UUID-slot_num && tar --format=v7 -cJf submit.UUID-slot_num.timestamp.txz UUID-slot_num

    In many places the mkiocccentry(1) tool will prompt you to verify what you input, allowing you to correct details as you go along.

    -

    Pressing the “enter key” mkiocccentry(1) tool prompts will allow you to proceed with a default, -however make sure the default is the CORRECT answer.

    +

    Pressing the “enter key” at the mkiocccentry(1) tool prompts will allow you +to proceed with a default, however make sure the default is the CORRECT +answer.

    The mkiocccentry(1) tool will use code from iocccsize(1) which detects a number of -issues (such as Rule 2 - Size) that you may ignore, +issues (such as Rule 2 - Size) that you may ignore, however ignoring such issues comes with a significant level of risk!

    Once the tarball is packaged it will run txzchk(1), which will also run fnamchk(1), as part of its algorithm.

    -

    The use of mkiocccentry -W ... is highly discouraged as this may ignore +

    The use of mkiocccentry -W .... is highly discouraged as this may ignore warnings about a problem that may cause your submission to be REJECTED!”

    If mkiocccentry encounters an error, the program will exit and the xz compressed tarball will NOT be formed: this is a feature, not a bug!

    @@ -778,7 +799,7 @@ and fnamchk(1) (mkiocccentry -F fnamchk ..).

    The mkiocccentry(1) tool will ignore any directory tree with a directory name that begins with a “.” (dot).

    The mkiocccentry(1) tool will all files that begin with COPYING, COPYRIGHT, and LICENSE, regardless of filename case.

    -

    The mkiocccentry(1) tool will any of the following files if they are found directly under +

    The mkiocccentry(1) tool will reject any of the following files if they are found directly under the top level directory (topdir):

    • README.md
    • @@ -791,10 +812,13 @@ the top level directory (topdir):

    The files listed in the above list are allowed to exist in sub-directories: just NOT directly under the top level directory (topdir).

    -

    The mkiocccentry(1) tool evaluates all filenames and directory names in a case independent way: -this FOO, Foo, and foo are treated as the SAME file even if your filesystem doesn’t.

    -

    Having two or more filenames that differ only by case WILL lead to problems because of the previous statement.

    -

    When the mkiocccentry(1) tool ignores a file, that file is NOT included as part of your submission.

    +

    The mkiocccentry(1) tool evaluates all filenames and directory names in a case +independent way: thus FOO, Foo, and foo are considered the SAME file +even if your filesystem doesn’t do the same.

    +

    Having two or more filenames that differ only by case WILL lead to problems +because of the previous statement.

    +

    When the mkiocccentry(1) tool ignores a file, that file is NOT included as +part of your submission.

    When the mkiocccentry(1) tool ignores a directory, that directory, and everything under that directory is NOT included as part of your submission.

    @@ -804,19 +828,28 @@ that is normally considered to be a regular file, such as a directory named Makefile, prog.alt.c, prog.c, remarks.md, try.alt.sh, or try.sh is NOT a good idea and will likely cause the mkiocccentry(1) tool to abort with a fatal error.

    -

    The required Makefile, remarks.md file may NOT be an empty file.

    -

    If the optional file try.alt.sh, or try.sh exits and is an empty file, -the mkiocccentry(1) tool to abort with a fatal error.

    -

    If the mkiocccentry(1) tool encounters anything that isn’t a file, isn’t a directory, -and isn’t a symlink (which the tool ignores), the mkiocccentry(1) tool to abort with a fatal error.

    -

    See FAQ on “How do I report bugs in an mkiocccentry tool?”.

    -

    See Rule 11 - Abuse for warnings about ignoring mkiocccentry(1) tool warnings.

    -

    See FAQ on “What is the fnamchk tool?”.

    -

    See FAQ on “What is mkiocccentry in simple terms?”.

    -

    See FAQ on “What is the mkiocccentry tool, how do I obtain it and how do I use it”.

    +

    The required Makefile and remarks.md files may NOT be empty. This +does not mean just 0 bytes but also that it MUST have content, and +content that is relevant (e.g. a Makefile with just comments is NOT +allowed). However, with the exception of the Makefile, the mkiocccentry(1) +tool will ONLY check file size.

    +

    If the optional file try.alt.sh, or try.sh exists and is an empty file, +the mkiocccentry(1) tool will abort with a fatal error.

    +

    If the mkiocccentry(1) tool encounters anything that isn’t a file, isn’t a +directory, and isn’t a symlink (which the tool ignores), the mkiocccentry(1) +tool to abort with a fatal error.

    +

    See +FAQ on “How do I report bugs in an mkiocccentry tool?”.

    +

    See Rule 11 - Legal rule abuse for warnings about ignoring mkiocccentry(1) tool warnings.

    +

    See +FAQ on “What is the fnamchk tool?”.

    +

    See +FAQ on “What is mkiocccentry in simple terms?”.

    +

    See +FAQ on “What is the mkiocccentry tool, how do I obtain it and how do I use it”.

    Jump to: top

    -

    General Overall Guidelines

    +

    General Guidelines

    These guideline are hints and suggestions, NOT IOCCC rules.

    While submissions that violate guideline are allowed, @@ -1082,7 +1115,7 @@ and/or obfuscated way, would definitely win over the first two! Remember, you can submit more than one submission. See the IOCCC rules for details (in particular, -Rule 8 - Submission).

    +Rule 8 - Submitting requirements).

    We suggest that you avoid trying for the ‘smallest self-replicating’ source. The smallest, a zero byte entry, won in 1994.

    @@ -1169,7 +1202,7 @@ or Linux curses.

    If you do #include <curses.h> make CERTAIN you link in curses (i.e. -lcurses) and not ncurses (i.e. -lncurses).

    -

    Rule 13 - Newlines +

    Rule 12 - UTF-8 no longer discourages the use of UTF-8 characters in C code.

    It is a very good idea to, in your remarks.md file, tell us why you @@ -1260,7 +1293,7 @@ character tab stop.

    when forming your submission’s remarks.md file. And if your submission contains additional markdown files, please follow those same guidelines for those files. See also -Rule 4 - Files, +Rule 4 - Required files, and the FAQ on “markdown”.

    We LIKE reading remarks.md files, especially if they contain @@ -1276,14 +1309,14 @@ is a hint. :-)

    The reason for the times of day are so that key IOCCC events are calculated to be a functional UTC time. :-)

    At least 2 of several reasons for selecting the prime, 2503, for -Rule 2b - Net Size +Rule 2b - Net Size may be found on the “Curios!” about 2503.

    -

    The 2503 value for Rule 2b - Net is a decimal anagram +

    The 2503 value for Rule 2b - Net Size is a decimal anagram of the number of the kernel disk pack of one of the judge’s BESM-6.

    There may or may not be fewer than 2^7+1 reasons why these IOCCC guidelines seem obfuscated.

    Excessively “dotty” use of the chksubmit(1) or chkentry(1) commands suggests that -either like silly things, or that you”RTFS” with some level of care.

    +either you like silly things, or that you”RTFS” with some level of care.

    Some people might question what actually constitutes a valid JSON file, given the state of the “so-called” JSON spec.. :-)

    We prefer programs that do not require a fish license: crayons and @@ -1359,7 +1392,7 @@ Please try to avoid this specific individual guideline, if it at all po

    We do not recommend submitting systemd source code to the IOCCC, if nothing else because that code is likely to exceed -Rule 2 - Size. +Rule 2 - Size. This isn’t to say that another highly compact and obfuscated replacement of init(8) would not be an interesting submission.

    diff --git a/next/guidelines.md b/next/guidelines.md index 37d4cc16b..6dc1dbb14 100644 --- a/next/guidelines.md +++ b/next/guidelines.md @@ -41,7 +41,7 @@ writing by [contacting the judges](../contact.html). # IOCCC Guidelines version

    -These IOCCC guidelines are version **29.00 2025-11-28**. +These IOCCC guidelines are version **29.01 2025-11-29**.

    @@ -52,12 +52,14 @@ The | symbol indicates an **c Because the **IOCCC29** guidelines was a substantial rewrite, only **important changes** from **IOCCC28** have been marked.

    -Be sure to read the [IOCCC rules](guidelines.html). +Be sure to read the [IOCCC rules](rules.html).
    -# Guidelines for [Rule 2 - Size](rules.html#rule-2---size) +
    +# Guidelines for [Rule 2 - Size restrictions](rules.html#rule2-size-restrictions) +
    @@ -66,14 +68,13 @@ You should pay attention to our observations on [code size and Rule 2 remarks for IOCCC28](../2024/index.html#code-size-and-rule-2).

    -Your submission must satisfy **BOTH** the maximum size -[Rule 2a Gross Size](rules.html#rule-2a-gross-size) +Your submission must satisfy **BOTH** the +[Rule 2a Gross Size](rules.html#rule2a-gross-size) **AND** -the IOCCC size -[Rule 2b Next Size](rules.html#rule-2b-net-size). +[Rule 2b Net Size](rules.html#rule2b-net-size) rules. To check your code against -[Rule 2 - Size](rules.html#rule-2---size), use the `iocccentry(1)` tool. +[Rule 2 - Size restrictions](rules.html#rule2-size), use the `iocccentry(1)` tool. For example: ``` @@ -95,13 +96,14 @@ counted by the IOCCC size tool. In cases where the above summary and the algorithm implemented by the IOCCC size tool `iocccsize(1)` conflict, the algorithm implemented -by the current version of `iocccsize(1)` is preferred by the [IOCCC judges](../judges.html). +by the minimum required version of `iocccsize(1)` is preferred by the [IOCCC +judges](../judges.html). Make sure `iocccsize` does not flag any issues with your `prog.c`. There a much less need to `#define` C reserved words in an effort to get around the size limits of -[Rule 2 - Size](rules.html#rule-2---size) +[Rule 2 - Size restrictions](rules.html#rule2-size) because of the `iocccsize(1)` algorithm. Yes Virginia, **the previous guideline sentence is an important hint**! @@ -112,7 +114,7 @@ Jump to: [top](#)
    -# Guidelines for [Rule 3 - Register](rules.html#rule-3---register) +# Guidelines for [Rule 3 - Register for the contest](rules.html#rule3-register)
    @@ -124,7 +126,7 @@ Jump to: [top](#)
    -# Guidelines for [Rule 7 - Original Work](rules.html#rule-7---original-work) +# Guidelines for [Rule 7 - Original Work](rules.html#rule7-original-work)
    @@ -133,11 +135,11 @@ While it is **NOT** required, you are allowed to use tools or services such as: * Code generators * Static and runtime code analysis tools * Machine learning tools -* natural language models +* Natural language models * Large language models (LLMs) * Code copilot tools * So called "_AI services_" -* etc. +* Etc. The IOCCC has a rich history of remarkable winning entries created by authors who skillfully employed various techniques to develop their code. @@ -155,7 +157,7 @@ Jump to: [top](#)
    -# Guidelines for [Rule 11 - Abuse](rules.html#rule-11---abuse) +# Guidelines for [Rule 11 - Legal rule abuse](rules.html#rule11-legal-rule-abuse)
    @@ -166,7 +168,7 @@ We do realize that there are holes in the [IOCCC rules](rules.html), and invite submitters to attempt to exploit them. We sometime award '**Best abuse of the rules**' or '**Worst abuse of the rules**', -or some variation to a submission that creatively attempts to exploit a holes in the +or some variation, to a submission that creatively attempts to exploit a holes in the [IOCCC rules](rules.html). When we do need to plug a hole in the [IOCCC rules](rules.html) or @@ -190,7 +192,8 @@ opinion of the [IOCCC judges](../judges.html), **WILL** be disqualified. **_RULE ABUSE CARRIES A CERTAIN LEVEL OF RISK!_** If you have a submission that might otherwise be interesting, you might want to submit two versions; one that does not abuse the [IOCCC rules](rules.html) and one that -does. +does, making sure to note in the one that does not abuse the rules that this is +another version, so that the judges do not assume you uploaded it by mistake. If you intend to abuse the [IOCCC rules](rules.html), indicate so in your `remarks.md` file. You **MUST** try to justify @@ -202,9 +205,9 @@ submitting an alternate version that conforms to the [IOCCC rules](rules.html). If you do bypass the `mkiocccentry(1)` warnings about -[Rule 2a Gross Size](rules.html#rule-2a-gross-size) +[Rule 2a - Gross Size](rules.html#rule-2a-gross-size) and/or about -[Rule 2b Next Size](rules.html#rule-2b-net-size) +[Rule 2b - Net Size](rules.html#rule-2b-net-size) or any other rule and submit a submission anyway, you **MUST** try to justify why the IOCCC [IOCCC judges](../judges.html) should not reject your submission due to a rule @@ -243,7 +246,7 @@ Jump to: [top](#)
    -# Guidelines for [Rule 15 - Building](rules.html#rule-15---building) +# Guidelines for [Rule 15 - GNU Makefile](rules.html#rule15-gnu-makefile)
    @@ -261,17 +264,23 @@ environments, and commonly found on systems that reasonably conform to the [Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) in the building and compiling of your submission. +Your Makefile **MUST** be compatible with GNU `make` and we suggest you use +[Makefile.example](Makefile.example) as a template, renamed as Makefile of +course. + Jump to: [top](#)
    -# Guidelines for [Rule 17 - Packaging](rules.html#rule-17---packaging) +
    +# Guidelines for [Rule 17 - Use mkiocccentry](rules.html#rule17-mkiocccentry) +
    -We **STRONGLY** recommend you **do** install the +We **STRONGLY** recommend you **do** install the most recent release of [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) as use of using older versions of the mkiocccentry toolkit to are **HIGHLY LIKELY** to be **REJECTED**! @@ -292,15 +301,15 @@ file_. The non-extra files (`prog.c`, `prog.alt.c`, `try.sh`, `try.alt.sh`, `remarks.md`, `Makefile`, `.auth.json` and `.info.json`) are considered _free files_, and to not count towards the -[Rule 17 - Packaging](rules.html#rule-17---packaging) +[Rule 17 - Use mkiocccentry](rules.html#rule17-mkiocccentry) limit of **31** _extra files_.

    If you use an optional filename for something other than their intended use in order to get past the file limit, we will consider that an abuse of rules. -Your tarball does **NOT** reveal who you are! For this reason, the tarball -**MUST** be a **v7 format** tarball. +The `mkiocccentry` generated tarball does **NOT** reveal who you are! For this +reason, the tarball **MUST** be a **v7 format** tarball. You should NOT use a tarball as an _extra file_ for a test-suite unless you have a very good reason for this: if you do include a tarball as an _extra file_, @@ -314,19 +323,30 @@ and your submission doesn't require the test-suite to be available to run, then in your `remarks.md` a URL where such a test-suite may be downloaded from and how to use the test-suite to test your submission. -See FAQ on "[What should I do with the `try.sh` and `try.alt.sh` scripts?](../faq.html#try_scripts)". +If you **DO** include a tarball then make sure it uses the v7 format. See the +FAQ on "[extra files](../faq.html#extra-files)" +for details on how to make a v7 tarball. -See FAQ on "[What is a `.auth.json` file?](../faq.html#auth_json)". +See the +FAQ on "[What should I do with the `try.sh` and `try.alt.sh` scripts?](../faq.html#try_scripts)". -See FAQ on "[What is a `.info.json` file?](../faq.html#info_json)". +See the +FAQ on "[What is a `.auth.json` file?](../faq.html#auth_json)". -See FAQ on "[How can I validate my submission directory?](../faq.html#chksubmit)". +See the +FAQ on "[What is a `.info.json` file?](../faq.html#info_json)". -See FAQ on "[What permissions may my files be and what if I need different permissions?](../faq.html#file_perms)". +See the +FAQ on "[How can I validate my submission directory?](../faq.html#chksubmit)". -See FAQ on "[What are the detailed recommendations for a submission Makefile?](../faq.html#makefile_details)". +See the +FAQ on "[What permissions may my files be and what if I need different permissions?](../faq.html#file_perms)". -See FAQ on "[What are the details behind Rule 17 - Packaging?](../faq.html#rule17)". +See the +FAQ on "[What are the detailed recommendations for a submission Makefile?](../faq.html#makefile_details)". + +See the +FAQ on "[What are the details behind Rule 17 - Use mkiocccentry?](../faq.html#rule17)". Jump to: [top](#) @@ -345,7 +365,7 @@ submissions that package using older versions of the [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) are **LIKELY** to be **REJECTED**! -You **REALLY SHOULD** use latest [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) +You **REALLY SHOULD** use the latest [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) to package your own submission. The `mkiocccentry(1)` tool runs a number of checks by way of these @@ -365,7 +385,7 @@ Do **NOT** use `fnamchk(1)` command line options that are labeled "**for TESTING in the `fnamchk(1)` man page. Do **NOT** use `chkentry(1)` command line options that are labeled "**for the use by the IOCCC judges only**" -in the `chkentry(1)` man page. +in the `chksubmit(1)` (or `chkentry(1)`) man page(s). To view [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) man pages, while your current directory is the top of the source tree: @@ -385,15 +405,16 @@ So that you do not have to repeatedly answer all the `mkiocccentry(1)` questions use `mkiocccentry -a answers ...` to create a file containing the answers you first give, that will allow you to later use `mkiocccentry -i answers ...` to reuse those same answers. -The `mkiocccentry -A answers ..` does the same thing except that the **answers file will be overwritten**. +The `mkiocccentry -A answers ...` does the same thing except that the **answers file will be overwritten**. -The `mkiocccentry -i answers ..` will still be required to confirm "_Yes/No_" questions. +The `mkiocccentry -i answers ...` will still be required to confirm "_Yes/No_" questions. Use `mkiocccentry -Y -i answers ..` to force a yes answers with **great caution** -because it might force a yes answer to something you do **NOT** want. +because it might force a yes answer to something you do **NOT** want, such as a +change in your code that violates a detected rule. To help with not having to repeatedly enter a UUID, put your UUID into a file and use -`mkiocccentry -u uuidfile ..`, or use `mkiocccentry -U UUID ..` to give the `UUID` +`mkiocccentry -u uuidfile ...`, or use `mkiocccentry -U UUID ...` to give the `UUID` on the command line. If you wish to **test** that your submission passes the `mkiocccentry(1)` tests @@ -405,7 +426,8 @@ For example: mkiocccentry -d workdir topdir ``` -Do **NOT** submit a tarball formed by `mkiocccentry -d ..`, **NOR** by `mkiocccentry -s seed ..`! +Do **NOT** submit a tarball formed by `mkiocccentry -d ..` **OR** by +`mkiocccentry -s seed ..` **OR** by using the `test` UUID! The `mkiocccentry(1)` tool creates an `xz(1)` compressed **v7 format** tarball using a `tar(1)` command of the form: @@ -417,17 +439,18 @@ command of the form: In many places the `mkiocccentry(1)` tool will prompt you to verify what you input, allowing you to correct details as you go along. -Pressing the "_enter key_" `mkiocccentry(1)` tool prompts will allow you to proceed with a default, -however make sure the default is the **CORRECT** answer. +Pressing the "_enter key_" at the `mkiocccentry(1)` tool prompts will allow you +to proceed with a default, however make sure the default is the **CORRECT** +answer. The `mkiocccentry(1)` tool will use code from `iocccsize(1)` which detects a number of -issues (such as [Rule 2 - Size](rules.html#rule-2---size)) that you may ignore, +issues (such as [Rule 2 - Size](rules.html#rule2-size)) that you may ignore, however ignoring such issues **comes with a significant level of risk!** Once the tarball is packaged it will run `txzchk(1)`, which will also run `fnamchk(1)`, as part of its algorithm. -The use of `mkiocccentry -W ...` is **highly discouraged** as this may ignore +The use of `mkiocccentry -W ....` is **highly discouraged** as this may ignore warnings about a problem that may cause your submission to be **REJECTED!**" If `mkiocccentry` encounters an **error**, the program will exit and the xz @@ -451,7 +474,7 @@ The `mkiocccentry(1)` tool will ignore any directory tree with a directory name The `mkiocccentry(1)` tool will all files that begin with `COPYING`, `COPYRIGHT`, and `LICENSE`, regardless of filename case. -The `mkiocccentry(1)` tool will any of the following files if they are found directly under +The `mkiocccentry(1)` tool will reject any of the following files if they are found directly under the top level directory (`topdir`): * README.md @@ -465,12 +488,15 @@ the top level directory (`topdir`): The files listed in the above list are allowed to exist in sub-directories: just **NOT** directly under the top level directory (`topdir`). -The `mkiocccentry(1)` tool evaluates all filenames and directory names in a case independent way: -this `FOO`, `Foo`, and `foo` are treated as the **SAME** file even if your filesystem doesn't. +The `mkiocccentry(1)` tool evaluates all filenames and directory names in a case +independent way: thus `FOO`, `Foo`, and `foo` are considered the **SAME** file +even if your filesystem doesn't do the same. -Having two or more filenames that differ only by case **WILL** lead to problems because of the previous statement. +Having two or more filenames that differ only by case **WILL** lead to problems +because of the previous statement. -When the `mkiocccentry(1)` tool ignores a file, that file is **NOT** included as part of your submission. +When the `mkiocccentry(1)` tool ignores a file, that file is **NOT** included as +part of your submission. When the `mkiocccentry(1)` tool ignores a directory, that directory, and everything under that directory is **NOT** included as part of @@ -484,30 +510,39 @@ named `Makefile`, `prog.alt.c`, `prog.c`, `remarks.md`, `try.alt.sh`, or `try.sh` is **NOT** a good idea and will likely cause the `mkiocccentry(1)` tool to abort with a **fatal error**. -The required `Makefile`, `remarks.md` file may **NOT** be an empty file. +The required `Makefile` and `remarks.md` files may **NOT** be empty. This +does not mean just 0 bytes but also that it **MUST** have **content**, and +content that is relevant (e.g. a Makefile with just comments is **NOT** +allowed). However, with the exception of the `Makefile`, the `mkiocccentry(1)` +tool will **ONLY** check file size. -If the optional file `try.alt.sh`, or `try.sh` exits and is an empty file, -the `mkiocccentry(1)` tool to abort with a **fatal error**. +If the optional file `try.alt.sh`, or `try.sh` exists and is an empty file, +the `mkiocccentry(1)` tool will abort with a **fatal error**. -If the `mkiocccentry(1)` tool encounters anything that isn't a file, isn't a directory, -and isn't a symlink (which the tool ignores), the `mkiocccentry(1)` tool to abort with a **fatal error**. +If the `mkiocccentry(1)` tool encounters anything that isn't a file, isn't a +directory, and isn't a symlink (which the tool ignores), the `mkiocccentry(1)` +tool to abort with a **fatal error**. -See FAQ on "[How do I report bugs in an `mkiocccentry` tool?](../faq.html#mkiocccentry_bugs)". +See +FAQ on "[How do I report bugs in an `mkiocccentry` tool?](../faq.html#mkiocccentry_bugs)". -See [Rule 11 - Abuse](rules.html#rule-11---abuse) for warnings about ignoring `mkiocccentry(1)` tool warnings. +See [Rule 11 - Legal rule abuse](rules.html#rule11-legal-rulea-abuse) for warnings about ignoring `mkiocccentry(1)` tool warnings. -See FAQ on "[What is the `fnamchk` tool?](../faq.html#fnamchk)". +See +FAQ on "[What is the `fnamchk` tool?](../faq.html#fnamchk)". -See FAQ on "[What is mkiocccentry in simple terms?](../faq.html#about_mkiocccentry)". +See +FAQ on "[What is mkiocccentry in simple terms?](../faq.html#about_mkiocccentry)". -See FAQ on "[What is the mkiocccentry tool, how do I obtain it and how do I use it](../faq.html#mkiocccentry)". +See +FAQ on "[What is the mkiocccentry tool, how do I obtain it and how do I use it](../faq.html#mkiocccentry)". Jump to: [top](#)
    -# General Overall Guidelines +# General Guidelines
    These [guideline](guidelines.html) are **hints** and **suggestions**, **NOT** [IOCCC rules](rules.html). @@ -861,7 +896,7 @@ and/or obfuscated way, would definitely win over the first two! Remember, you can submit more than one submission. See the [IOCCC rules](rules.html) for details (in particular, -[Rule 8 - Submission](rules.html#rule-8---submission)). +[Rule 8 - Submitting requirements](rules.html#rule8-submitting-requirements)). We suggest that you avoid trying for the '**smallest self-replicating**' source. The smallest, a [zero byte entry](../1994/smr/index.html), won in @@ -979,7 +1014,7 @@ If you do `#include ` make **CERTAIN** you link in curses (i.e. `-lcurses`) and not ncurses (i.e. `-lncurses`).

    -[Rule 13 - Newlines](rules.html#rule-13---newlines) +[Rule 12 - UTF-8](rules.html#rule12-utf8) no longer discourages the use of UTF-8 characters in C code. @@ -1084,7 +1119,7 @@ character tab stop. when forming your submission's `remarks.md` file. And if your submission contains additional markdown files, please follow those same guidelines for those files. See also -[Rule 4 - Files](rules.html#rule-4---files), +[Rule 4 - Required files](rules.html#rule4-required-files), and the FAQ on "[markdown](../faq.html#markdown)". @@ -1109,17 +1144,17 @@ The reason for the times of day are so that key IOCCC events are **calculated** to be a **fun**ctional UTC time. :-) At least 2 of several reasons for selecting the prime, 2503, for -[Rule 2b - Net Size](rules.html#rule-2b---net-size) +[Rule 2b - Net Size](rules.html#rule2b-net-size) may be found on the ["Curios!" about 2503](https://t5k.org/curios/page.php/2503.html). -The 2503 value for [Rule 2b - Net](rules.html#rule-2b---net-size) is a decimal anagram +The 2503 value for [Rule 2b - Net Size](rules.html#rule2b-net-size) is a decimal anagram of the number of the kernel disk pack of one of the judge's [BESM-6](https://en.wikipedia.org/wiki/BESM-6). There may or may not be fewer than 2^7+1 reasons why these [IOCCC guidelines](guidelines.html) seem obfuscated. Excessively "_dotty"_ use of the `chksubmit(1)` or `chkentry(1)` commands suggests that -either like silly things, or that you "_RTFS"_ with some level of care. +either you like silly things, or that you "_RTFS"_ with some level of care. Some people might question what actually constitutes a valid JSON file, given the state of the "_so-called_" JSON spec.. :-) @@ -1210,7 +1245,7 @@ We believe that Mark Twain's quote:

    We do not recommend submitting [systemd](https://systemd.io) source code to the IOCCC, if nothing else because that code is likely to exceed -[Rule 2 - Size](rules.html#rule-2---size). +[Rule 2 - Size](rules.html#rule2-size). This isn't to say that another highly compact and obfuscated replacement of `init(8)` would not be an interesting submission.

    diff --git a/next/rules.html b/next/rules.html index 5ec93b720..d513d1a8d 100644 --- a/next/rules.html +++ b/next/rules.html @@ -485,12 +485,12 @@ writing by contacting the judges.

    Rule 0 - Dates

    -

    This IOCCC runs from 2025-12-03 20:25:12.045045 UTC to 2026-03-13 17:19:23.293137 UTC.

    -

    This contest will enter the pending state on 2025-12-03 20:25:12.045045 UTC, +

    This IOCCC runs from 2025-12-03 20:25:12.045045 UTC to 2026-03-13 17:19:23.293137 UTC.

    +

    This contest will enter the pending state on 2025-12-03 20:25:12.045045 UTC, allowing people to register for the IOCCC.

    -

    This contest will enter the open state on 2025-12-15 18:21:24.273033 UTC, +

    This contest will enter the open state on 2025-12-15 18:21:24.273033 UTC, allowing people to upload submissions to the IOCCC submit server.

    -

    This contest will enter the judging state on 2026-03-13 17:19:23.293137 UTC, +

    This contest will enter the judging state on 2026-03-13 17:19:23.293137 UTC, when people will no longer be allowed to upload submissions.

    Until the contest enters the open state, any or all of the above dates and times may change AT ANY TIME!

    @@ -501,26 +501,34 @@ of the above dates and times may change AT ANY TIME!

    Your submission MUST be a C program that does NOT #include data files.

    +
    +

    Rule 2 - Size restrictions

    +
    +

    Rule 2 requires that your submission satisfy BOTH -Rule 2a &lparen;Gross Size&rparen; +Rule 2a (Gross Size) and -Rule 2b &lparen;Net Size&rparen;. +Rule 2b (Net Size). During development this can be checked using iocccsize(1):

        iocccsize prog.c

    See the Guidelines for Rule 2 - Size restrictions.

    +

    Rule 2a - Gross 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.

    +

    Rule 2b - Net Size

    +

    When the filename of your program source (i.e., prog.c) 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 MUST @@ -529,7 +537,7 @@ NOT exceed 2503.

    Use mkiocccentry.

    -

    Rule 3 - You must register to enter the contest

    +

    Rule 3 - Register for the contest

    You MUST register, using a valid email address, in order to submit @@ -603,7 +611,7 @@ a case insensitive filesystem.

    The remarks.md and Makefile are explained in more detail in the Guidelines.

    See IOCCC markdown guidelines.

    -

    See Rule 17 - Use mkiocccentry.

    +

    See Rule 17 - Use mkiocccentry.

    See the FAQ on “What permissions may my files be and what if I need different permissions?”.

    See the Guidelines on the mkiocccentry toolkit.

    @@ -638,8 +646,10 @@ original form, including the removal of any created files and directories.

    }

    See Rule 19 - Prime.

    +

    Rule 7 - Original Work

    +

    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 @@ -649,8 +659,10 @@ you obtained from them in your remarks.md file.

    See Rule 16 - Anonymous Judging.

    See Guidelines for Rule 7 - Original Work.

    +

    Rule 8 - Submitting requirements

    +

    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 size limit of 3999971 bytes PER @@ -665,7 +677,7 @@ validate your submission.

    Do NOT register more than one account!

    See Rule 3 - Registering for the IOCCC, -Rule 15 - GNU Makefile compatibility, +Rule 15 - GNU Makefile compatibility, and Rule 17 - Use mkiocccentry.

    @@ -699,8 +711,10 @@ bits are NOT allowed in submissions and those bits will Rule 5 - Do NOT modify files.

    + +

    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 @@ -721,8 +735,10 @@ wrong slot by mistake.

    See Guidelines for Rule 11 - Legal rule abuse.

    +

    Rule 12 - UTF-8

    +

    Use of UTF-8 is supported by C89 standard and its updates and so too by the IOCCC.

    @@ -751,7 +767,9 @@ 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.

    -

    Rule 15 - GNU Makefile compatibility

    +
    +

    Rule 15 - GNU Makefile

    +

    The Makefile MUST adhere to GNU Makefile syntax. It’s highly recommended that you copy the Makefile.example as a template, renaming @@ -774,7 +792,7 @@ environments and systems are available in the search GNU long name options (such as --example) or extensions like grep -P.

    Do NOT assume that . (current directory) is in the $PATH environment variable.

    -

    See Rule 4 - Required files.

    +

    See Rule 4 - Required files.

    See FAQ on “What are the detailed recommendations for a submission Makefile?”.

    See Guidelines for Rule 15 - GNU Makefile compatibility.

    diff --git a/next/rules.md b/next/rules.md index 78bdc8426..0a3574ba5 100644 --- a/next/rules.md +++ b/next/rules.md @@ -48,15 +48,16 @@ Reminder: be SURE to read the [IOCCC guidelines](guidelines.html). ## Rule 0 - Dates
    -This IOCCC runs from **2025-12-03 20:25:12.045045 UTC** to **2026-03-13 17:19:23.293137 UTC**. +This IOCCC runs from `2025-12-03 20:25:12.045045 UTC` to `2026-03-13 +17:19:23.293137 UTC`. -This contest will enter the **pending state** on **2025-12-03 20:25:12.045045 UTC**, +This contest will enter the **pending state** on `2025-12-03 20:25:12.045045 UTC`, allowing people to register for the IOCCC. -This contest will enter the **open state** on **2025-12-15 18:21:24.273033 UTC**, +This contest will enter the **open state** on `2025-12-15 18:21:24.273033 UTC`, allowing people to upload submissions to the [IOCCC submit server](https://submit.ioccc.org). -This contest will enter the **judging state** on **2026-03-13 17:19:23.293137 UTC**, +This contest will enter the **judging state** on `2026-03-13 17:19:23.293137 UTC`, when people will no longer be allowed to upload submissions. Until the contest enters the **open** state, any or all @@ -75,13 +76,17 @@ Your submission **MUST** be a C program that does NOT `#include` data files.
    +
    +
    ## Rule 2 - Size restrictions
    +
    +
    `Rule 2` requires that your submission satisfy **BOTH** -[Rule 2a &lparen;Gross Size&rparen;](rules.html#rule-2a-gross-size) +[Rule 2a (Gross Size)](rules.html#rule2a) and -[Rule 2b &lparen;Net Size&rparen;](rules.html#rule-2b-net-size). +[Rule 2b (Net Size)](rules.html#rule2b). During development this can be checked using `iocccsize(1)`: ``` @@ -92,8 +97,10 @@ See the [Guidelines for Rule 2 - Size restrictions](guidelines.html#guideline-2-
    +
    ### Rule 2a - Gross Size
    +
    The overall maximum size of your `prog.c` program source **MUST NOT** exceed **4993** bytes. @@ -105,8 +112,10 @@ See [Entering the IOCCC: the bare minimum you need to know](../quick-start.html#
    +
    ### Rule 2b - Net Size
    +
    When the filename of your program source (i.e., `prog.c`) is given as a command line argument to the latest version of the official IOCCC size @@ -119,7 +128,7 @@ Use mkiocccentry](#rule17-mkiocccentry).
    -## Rule 3 - You must register to enter the contest +## Rule 3 - Register for the contest
    @@ -218,7 +227,7 @@ The `remarks.md` and `Makefile` are explained in more detail in the Guidelines. See [IOCCC markdown guidelines](../markdown.html). -See [Rule 17 - Use mkiocccentry](rules.html#rule-17-mkiocccentry). +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)". @@ -270,8 +279,10 @@ See [Rule 19 - Prime](rules.html#rule-19---prime).
    +
    ## Rule 7 - Original Work
    +
    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 @@ -287,8 +298,10 @@ See [Guidelines for Rule 7 - Original Work](guidelines.html#guideline-7---origin
    +
    ## Rule 8 - Submitting requirements
    +
    The submit server will accept submissions **ONLY** from those who have registered and **ONLY** while the contest is open. @@ -308,7 +321,7 @@ Do **NOT** register more than one account! See [Rule 3 - Registering for the IOCCC](rules.html#rule3-register), -[Rule 15 - GNU Makefile compatibility](rules.html#rule-15---building), +[Rule 15 - GNU Makefile compatibility](rules.html#rule15-gnu-makefile), and [Rule 17 - Use mkiocccentry](rules.html#rule-17-mkiocccentry). @@ -356,8 +369,10 @@ and
    + +
    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 @@ -385,8 +400,10 @@ abuse](guidelines.html#guideline-11---abuse).
    +
    ## Rule 12 - UTF-8
    +
    Use of UTF-8 is supported by `C89` standard and its updates and so too by the IOCCC. @@ -426,7 +443,9 @@ win, then you are encouraged to mention this in your `remarks.md` file as this
    -## Rule 15 - GNU Makefile compatibility +
    +## Rule 15 - GNU Makefile +
    The `Makefile` **MUST** adhere to GNU Makefile syntax. It's highly recommended @@ -459,7 +478,7 @@ GNU long name options (such as `--example`) or extensions like `grep -P`. Do **NOT** assume that `.` (current directory) is in the `$PATH` environment variable. -See [Rule 4 - Required files](rules.html#rule-4---files). +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)".