diff --git a/2024/README.md b/2024/README.md index 83b0d37ed..6a128c458 100644 --- a/2024/README.md +++ b/2024/README.md @@ -77,7 +77,7 @@ become more skilled in the programming in the C language. We were pleased to observe that while the [IOCCC size limit](../faq.html#size_rule_history) increased by about 21%, we received many submissions that were well under the new -[Rule 2 size limit](../next/rules.html#rule2) including a fair number of quality +[Rule 2 Size](../next/rules.html#rule-2-size) including a fair number of quality small and medium sized submissions. Half of the **IOCCC28 winners** were less than _2/3 of the size limit_, and 10 of the **IOCCC28 winners** were less than _1/2 of the size limit_! @@ -85,10 +85,10 @@ _1/2 of the size limit_! **IMPORTANT NOTE**: The [IOCCC size limit](../faq.html#size_rule_history) increase for **IOCCC28** was the first size increase in over 10 years. Given the quality of submissions we received that were well under the limit, we do **NOT** expect to change the -[Rule 2 size limit](../next/rules.html#rule2) for **at least another 10 years** (and likely longer). +[Rule 2 Size](../next/rules.html#rule-2-size) for **at least another 10 years** (and likely longer). **IMPORTANT HINT**: Only 3 of the 23 **IOCCC28 winners** came close to the [Rule -2 size limit](../next/rules.html#rule2). Large code size isn't everything. :-) +2 Size](../next/rules.html#rule-2-size). Large code size isn't everything. :-) Those submitting to future contents should **take a careful note** of that fact. diff --git a/2024/index.html b/2024/index.html index ac2a75322..b41981ca2 100644 --- a/2024/index.html +++ b/2024/index.html @@ -513,16 +513,16 @@ become more skilled in the programming in the C language.

Code size and Rule 2

We were pleased to observe that while the IOCCC size limit increased by about 21%, we received many submissions that were well under the new -Rule 2 size limit including a fair number of quality +Rule 2 Size including a fair number of quality small and medium sized submissions. Half of the IOCCC28 winners were less than 2/3 of the size limit, and 10 of the IOCCC28 winners were less than 1/2 of the size limit!

IMPORTANT NOTE: The IOCCC size limit increase for IOCCC28 was the first size increase in over 10 years. Given the quality of submissions we received that were well under the limit, we do NOT expect to change the -Rule 2 size limit for at least another 10 years (and likely longer).

-

IMPORTANT HINT: Only 3 of the 23 IOCCC28 winners came close to the Rule -2 size limit. Large code size isn’t everything. :-) +Rule 2 Size for at least another 10 years (and likely longer).

+

IMPORTANT HINT: Only 3 of the 23 IOCCC28 winners came close to the Rule +2 Size. Large code size isn’t everything. :-) Those submitting to future contents should take a careful note of that fact.

Rules and Guidelines for this contest

Here are the final versions of the IOCCC rules and guidelines that were in diff --git a/faq.html b/faq.html index b67b849a1..a06f4651b 100644 --- a/faq.html +++ b/faq.html @@ -657,8 +657,8 @@

This toolkit is from the mkiocccentry repo 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 and in particular Rule -17.

+violating the Rules and in particular +Rule 17 Packaging.

Jump to: top

Q 0.1.1: What is mkiocccentry in simple terms?

@@ -772,7 +772,8 @@ is not a directory that can be written to. In this directory yo 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 for more details on this, and in -particular Rule 17.

+particular +Rule 17 Packaging.

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 you have an earlier version and you have not installed the tools and run the @@ -932,7 +933,8 @@ rounds; we look at the author name only if an entry wins. See the guidelines AND rules if this is not clear!

  • 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).
  • +include whitespace you would still be violating +Rule 17 Packaging).

    Jump to: top

    @@ -975,10 +977,12 @@ FAQ on “submission Makefile” for more details.

    See the FAQ on “Rule 17” -and Rule 17 itself.

    +and +Rule 17 Packaging +itself.

    Do remember that if your submission requires different filenames, then you -MUST make a COPY of them in your Makefile. See also Rule -11.

    +MUST make a COPY of them in your Makefile. See also +Rule 5 Purity.

    Jump to: top



    @@ -1122,12 +1126,12 @@ level directory.

    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 and in +

    Please pay careful attention to Rule 17 Packaging 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!

    +of violating Rule 17 Packaging!

    Also, remember what the guidelines say:

    IMPORTANT REMINDER: make SURE your tarball does NOT reveal who you are! @@ -1170,7 +1174,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. Each of these tool has a -h +conforms to Rule 17 Packaging. 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.

    The maximum number of extra files is 31. See the @@ -1220,7 +1224,8 @@ 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 18 and our +Rule 17 Packaging +and our FAQ on “remarks.md”, our FAQ on “markdown” @@ -1312,13 +1317,17 @@ permissions and mkiocccentry(1) does this for you. In particular: d MUST be drwxr-xr-x (i.e. 0755); any file ending with .sh MUST be -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!

    +submission WILL be rejected for violating +Rule 17 Packaging!

    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 error.

    If you do need different permissions, then see the FAQ on “file permissions”. Also keep in mind -Rule 4, Rule 5 and Rule 21.

    +Rule 4 Files, +Rule 5 Purity, +and +Rule 16 Anonymous.

    The txzchk(1) tool will also verify file/directory permissions (and many other things) for you, and so will chksubmit(1) (along with other checks on files and directories in your submission directory, including the two required JSON files, @@ -1330,14 +1339,19 @@ page.

    The tarball filename MUST pass fnamchk(1); the tool txzchk(1) will run fnamchk(1) as part of its algorithm. If you use mkiocccentry(1) there should be no problem but if you were to package things manually it is -possible there could be a problem and this poses a big risk of violating Rule -17.

    +possible there could be a problem and this poses a big risk of violating +Rule 4 Files +or +Rule 17 Packaging.

    The fnamchk(1), which txzchk(1) executes, will verify that the filename is correct. But if you do package your tarball manually, and you have a mismatch in what is in the tarball and the name, txzchk(1) will flag the discrepancy as an error and exit with non-zero.

    These checks MUST PASS. If they do not you stand a significant chance of -having your submission rejected for violating Rule 17!

    +having your submission rejected for violating +Rule 4 Files +or +Rule 17 Packaging.

    Maximum number of files per submission

    @@ -1366,7 +1380,11 @@ yourself.

    The mkiocccentry(1) tool uses the v7 format. For instance you might try:

        tar --format=v7 -cJf foo.txz directory

    -

    IMPORTANT: where Rule 17 and the tools from the latest +

    IMPORTANT: where +Rule 4 Files, +and +Rule 17 Packaging. +and the tools from the latest release of the mkiocccentry repo conflict, the IOCCC judges will use their best judgment which is likely to favor mkiocccentry repo code.

    @@ -1399,8 +1417,11 @@ page, making sure to run bug_report.sh. See the guidelines for help here and also read our FAQ on “mkiocccentry repo bugs”.

    -

    At the risk of stating the obvious: submissions that violate Rule -17 WILL BE REJECTED, so BE SURE to use the latest release of the +

    At the risk of stating the obvious: submissions that violate +Rule 4 Files, +or +Rule 17 Packaging +WILL BE REJECTED, so BE SURE to use the latest release of the mkiocccentry repo, to form and test your submission’s xz compressed tarball. Do NOT assume you have the most recent release without pulling or downloading via GitHub and do MAKE SURE you @@ -1878,7 +1899,10 @@ two JSON files, .auth.json and .info.json as well as t Makefile and remarks.md files along with all the other files listed in the .info.json manifest. (Okay there is an option to skip files but this is for the judges ONLY; use of this option to validate your submission puts you at -a great risk of violating Rule 17!).

    +a great risk of violating +Rule 4 Files, +or +Rule 17 Packaging!).

    As an example, if your submission directory is 00000000-0000-4000-0000-000000000000-3/ then you should run the following command:

    @@ -1897,7 +1921,11 @@ checks.

    FAQ on “.auth.json” and the FAQ on “.info.json” -as well as Rule 17 for more information.

    +as well as +Rule 4 Files, +and +Rule 17 Packaging +for more information.

    NOTE: the chksubmit(1) tool invokes chkentry(1) but as a contestant you do not need to worry about those details. One should use chksubmit(1) instead of chkentry(1) when validating a directory; chkentry(1) is for the judges @@ -1986,21 +2014,25 @@ to be valid. If this is not the case your submission WILL BE re

    • The IOCCC contestant ID used as a username in the form of in the form of a UUID and submission number; see the Rules for more details -on this, and in particular Rule 17.
    • +on this, and in particular +Rule 17 Packaging.

    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!

    +violating +Rule 17 Packaging.

  • tarball (double quoted string)

    • The xz compressed tarball filename.

    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! +your submission rejected for violating +Rule 17 Packaging! Moreover, it is possible that txzchk will report a problem through -fnamchk(1) which also puts you at great risk of violating Rule -17. txzchk will use the output of fnamchk to +fnamchk(1) which also puts you at great risk of violating +Rule 17 Packaging. 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 tarball, this will be flaggd.

  • @@ -2013,7 +2045,8 @@ tarball, this will be flaggd.

    soup/limit_ioccc.h in the mkiocccentry repo). If this is not the case you stand a great risk of having your submission -rejected for violating Rule 17!

    +rejected for violating +Rule 17 Packaging.

  • author_count (number)

    • How many authors this submission has.
    • @@ -2085,7 +2118,8 @@ the range of 1 THROUGH MAX_AFFILIATION_LEN (see soup/limit_ioccc.h in the mkiocccentry repo). If this is not the case you stand a great risk of having your submission -rejected for violating Rule 17!

      +rejected for violating +Rule 17 Packaging.

      NOTE: an affiliation does NOT have any affect on whether you will win or not.

    • past_winning_author (boolean)

        @@ -2169,8 +2203,10 @@ will use it on the submission directory as part of the judging process.

        At the risk of stating the obvious, if your .auth.json file is invalid JSON or is reported invalid by chksubmit(1), or if your submission directory is reported invalid by chksubmit(1), your submission will almost certainly be -rejected for violating the Rules and in particular Rule -17.

        +rejected for violating the Rules and in particular +Rule 4 Files, +and +Rule 17 Packaging.

        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 instance, if in .auth.json the no_comment that we chose to not comment on is @@ -2178,7 +2214,11 @@ not a string or is the wrong string. Another obvious example is when things are 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(1)) your submission would be -rejected for violating Rule 17 and in particular +rejected for violating +Rule 4 Files, +and +Rule 17 Packaging +and in particular because chksubmit(1) would not validate the .auth.json file (and maybe other things too).

        If you wish to verify that your .auth.json file is valid JSON then see the @@ -2296,7 +2336,8 @@ this is not the case your submission WILL BE rejected!

        • The IOCCC contestant ID used as a username in the form of in the form of a UUID and submission number; see the rules for more details -on this, and in particular Rule 17.
        • +on this, and in particular +Rule 17 Packaging.
      • submit_slot (number)

          @@ -2307,7 +2348,8 @@ on this, and in particular Rule 17. soup/limit_ioccc.h in the mkiocccentry repo). If this is not the case you stand a great risk of having your submission -rejected for violating Rule 17!

          +rejected for violating +Rule 17 Packaging.

        • title (double quoted string)

          • A short name (length >= 1 THROUGH MAX_TITLE_LEN, defined in @@ -2316,7 +2358,8 @@ in the mkiocccentry repo[a-z0-9][a-z0-9_+-]*.

          IMPORTANT: if this is NOT the case you stand a great risk of having your submission -rejected for violating Rule 17!

        • +rejected for violating +Rule 17 Packaging!

        • abstract (double quoted string)

          • A one line summary of your submission, with a length of 1 THROUGH @@ -2326,33 +2369,37 @@ in the mkiocccentry repo

            The abstract may not contain a ; (semicolon), nor & (ampersand), nor , (comma).

            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!

          • +stand a great risk of having your submission rejected for violating +Rule 17 Packaging!

          • tarball (double quoted string)

            • The xz compressed tarball filename.

            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! +your submission rejected for violating +Rule 17 Packaging! Moreover, it is possible that txzchk will report a problem through -fnamchk(1) which also puts you at great risk of violating Rule -17. txzchk will use the output of fnamchk to +fnamchk(1) which also puts you at great risk of violating +Rule 17 Packaging. +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 tarball, this will be flaggd.

          • rule_2a_size (number)

            IMPORTANT: if this violates Rule 2a you stand a great chance of having your submission rejected for violating the Rules!

          • rule_2b_size (number)

            -

            IMPORTANT: if this violates Rule 2b you stand a great +

            IMPORTANT: if this violates +Rule 2b Next Size +you stand a great chance of having your submission rejected for violating the Rules!

          • empty_override (boolean)

            @@ -2361,30 +2408,41 @@ chance of having your submission rejected for violating the
        • rule_2a_override (boolean)

          -

          IMPORTANT: if the Rule 2a calculated size is NOT +

          IMPORTANT: if the +Rule 2a Gross Size +calculated size is NOT violated but this is true then you stand a good chance of having your -submission rejected for violating Rule 17!

        • +submission rejected for violating +Rule 17 Packaging.

        • rule_2a_mismatch (boolean)

            -
          • true if Rule 2a calculated size is not the +
          • true if +Rule 2a Gross Size +calculated size is not the same as the file size.
        • rule_2b_override (boolean)

            -
          • true if user overrides warning of Rule 2b +
          • true if user overrides warning of +Rule 2b Next Size violation, else false.
          -

          IMPORTANT: if the Rule 2b calculated size is NOT +

          IMPORTANT: if the +Rule 2b Next Size +calculated size is NOT violated but this is true then you stand a good chance of having your -submission rejected for violating Rule 17!

        • +submission rejected for violating +Rule 17 Packaging.

        • highbit_warning (boolean)

          • true if iocccsize detects a high bit (unescaped octets with the high -bit set - octet value >= 128); see Rule 13, else -false.
          • +bit set - octet value >= 128); see +Rule 12 UTF-8, +else false.
        • nul_warning (boolean)

          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!

          +Rule 17 Packaging!

          See the FAQ on “Makefile” for more information.

        • @@ -2431,7 +2489,8 @@ for more information.

        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!

        +submission rejected for violating +Rule 17 Packaging!

        See the FAQ on “Makefile” for more information.

      • @@ -2441,7 +2500,8 @@ for more information.

      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!

      +rejected for violating +Rule 17 Packaging!

      See the FAQ on “Makefile” for more information.

    • @@ -2451,7 +2511,8 @@ for more information.

    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!

    +rejected for violating +Rule 17 Packaging!

    See the FAQ on “Makefile” for more information.

  • @@ -2461,7 +2522,8 @@ for more information.

    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!

    +rejected for violating +Rule 17 Packaging!

    See the FAQ on “Makefile” for more information.

    @@ -2486,8 +2548,8 @@ FAQ on “.info.json” for more information.

    IMPORTANT: if this is NOT the case you stand a -great chance of having your submission rejected for violating Rule -17!

    +great chance of having your submission rejected for violating +Rule 17 Packaging!

  • auth_JSON (double quoted string)

    • This MUST be ".auth.json", defined as AUTH_JSON_FILENAME in @@ -2499,7 +2561,8 @@ FAQ on “.auth.json” for more information.

    IMPORTANT: if this is NOT the case you stand a great chance of having your -submission rejected for violating Rule 17!

  • +submission rejected for violating +Rule 17 Packaging!

  • c_src (double quoted string)

    • This MUST be "prog.c", defined as PROG_C_FILENAME in @@ -2508,7 +2571,8 @@ in the mkiocccentry repo

    IMPORTANT: if this is NOT the case you stand a great chance of having your -submission rejected for violating Rule 17!

  • +submission rejected for violating +Rule 17 Packaging!

  • Makefile (double quoted string)

    • This MUST be "Makefile", defined as MAKEFILE_FILENAME in @@ -2520,7 +2584,8 @@ FAQ on “Makefile” for more information.

    IMPORTANT: if this is NOT the case you stand a great chance of having your -submission rejected for violating Rule 17!

  • +submission rejected for violating +Rule 17 Packaging!

  • remarks (double quoted string)

    • This MUST be "remarks.md", defined as REMARKS_FILENAME in @@ -2532,7 +2597,8 @@ FAQ on “remarks.md” for more information.

    IMPORTANT: if this is NOT the case you stand a great chance of having your -submission rejected for violating Rule 17!

  • +submission rejected for violating +Rule 17 Packaging!

    The manifest array also OPTIONALLY has one or more of the field:

      @@ -2544,8 +2610,9 @@ submission rejected for violating Rule 17!< and chksubmit will verify this for you; it is ALSO an error if the 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! On the other hand, ONLY mkiocccentry will +risk of having your submission rejected for violating +Rule 17 Packaging! +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. Even so, the Judges WILL extract the tarball and if a @@ -2606,7 +2673,9 @@ not a string or is the wrong string. Another obvious example is when things are 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 and in particular +rejected for violating +Rule 17 Packaging](next/rules.html#rule-17-packaging), +and in particular because chksubmit would not validate the .info.json file.

      If you wish to verify that your .info.json file is valid JSON then see the FAQ on “validating JSON documents”.

      diff --git a/faq.md b/faq.md index 007d664c2..4b4929194 100644 --- a/faq.md +++ b/faq.md @@ -214,8 +214,8 @@ Jump to: [top](#) 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](next/rules.html#rule17). +violating the [Rules](next/rules.html) and in particular +[Rule 17 Packaging](next/rules.html#rule-17-packaging). Jump to: [top](#) @@ -385,7 +385,8 @@ is not a directory that can be written to. In **this** directory your **submissi 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](next/rules.html#rule17). +particular +[Rule 17 Packaging](next/rules.html#rule-17-packaging). **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 @@ -574,7 +575,8 @@ rounds; we look at the author name only if an entry wins. See the [guidelines](next/guidelines.html) **AND** [rules](next/rules.html) if this is not clear! - 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](next/rules.html#rule17)). +include whitespace you would still be violating +[Rule 17 Packaging](next/rules.html#rule-17-packaging)). Jump to: [top](#) @@ -632,11 +634,13 @@ for more details. See the FAQ on "[Rule 17](#rule17)" -and [Rule 17](next/rules.html#rule17) itself. +and +[Rule 17 Packaging](next/rules.html#rule-17-packaging) +itself. Do remember that if your submission requires different filenames, then you -**MUST** make a **COPY** of them in your `Makefile`. See also [Rule -11](next/rules.html#rule11). +**MUST** make a **COPY** of them in your `Makefile`. See also +[Rule 5 Purity](next/rules.html#rule-5-purity). Jump to: [top](#) @@ -848,12 +852,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](next/rules.html#rule17) and in +Please pay careful attention to [Rule 17 Packaging](next/rules.html#rule-17-packaging) 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](next/rules.html#rule17)! +of violating [Rule 17 Packaging](next/rules.html#rule-17-packaging)! Also, remember what the [guidelines](next/guidelines.html) say: @@ -915,7 +919,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](next/rules.html#rule17). Each of these tool has a `-h` +conforms to [Rule 17 Packaging](next/rules.html#rule-17-packaging). 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). @@ -977,7 +981,8 @@ 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 18](next/rules.html#rule18) and our +[Rule 17 Packaging](next/rules.html#rule-17-packaging) +and our FAQ on "[remarks.md](#remarks_md)", our FAQ on "[markdown](#markdown)" @@ -1083,7 +1088,8 @@ permissions and `mkiocccentry(1)` does this for you. In particular: directories **MUST** be `drwxr-xr-x` (i.e. `0755`); any file ending with `.sh` **MUST** be `-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](next/rules.html#rule17)! +submission **WILL** be rejected for violating +[Rule 17 Packaging](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 @@ -1091,7 +1097,10 @@ modes, it also verifies them after the fact and if they are not correct it is an If you do need different permissions, then see the FAQ on "[file permissions](#file_perms)". Also keep in mind -[Rule 4](next/rules.html#rule4), [Rule 5](next/rules.html#rule5) and [Rule 21](next/rules.html#rule21). +[Rule 4 Files](next/rules.html#rule-4-files), +[Rule 5 Purity](next/rules.html#rule-5-purity), +and +[Rule 16 Anonymous](next/rules.html#rule-16-anonymous). The `txzchk(1)` tool will also verify file/directory permissions (and many other things) for you, and so will `chksubmit(1)` (along with other checks on files and @@ -1105,8 +1114,11 @@ page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug The tarball filename **MUST** pass `fnamchk(1)`; the tool `txzchk(1)` will run `fnamchk(1)` as part of its algorithm. If you use `mkiocccentry(1)` there should be no problem but if you were to package things manually it is -possible there could be a problem and this poses a big risk of violating [Rule -17](next/rules.html#rule17). +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). + The `fnamchk(1)`, which `txzchk(1)` executes, will verify that the filename is correct. But if you do package your tarball manually, and you have a @@ -1114,7 +1126,10 @@ mismatch in what is in the tarball and the name, `txzchk(1)` will flag the discrepancy as an error and exit with non-zero. These checks **MUST PASS**. If they do not you stand a significant chance of -having your submission rejected for violating [Rule 17](next/rules.html#rule17)! +having your submission rejected for violating +[Rule 4 Files](next/rules.html#rule-4-files) +or +[Rule 17 Packaging](next/rules.html#rule17).
      #### Maximum number of files per submission @@ -1154,7 +1169,11 @@ The `mkiocccentry(1)` tool uses the v7 format. For instance you might try:
      -**IMPORTANT**: where [Rule 17](next/rules.html#rule17) and the tools from the latest +**IMPORTANT**: where +[Rule 4 Files](next/rules.html#rule-4-files), +and +[Rule 17 Packaging](next/rules.html#rule-17-packaging). +and the tools from the latest release of the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry) conflict, the [IOCCC judges](judges.html) will use their best judgment which is likely to favor [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry) code. @@ -1193,8 +1212,11 @@ page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug for help here and also read our FAQ on "[mkiocccentry repo bugs](#mkiocccentry_bugs)". -At the risk of stating the obvious: submissions that violate [Rule -17](next/rules.html#rule17) **WILL BE REJECTED**, so **BE SURE** to use the latest release of the +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) +**WILL BE REJECTED**, so **BE SURE** to use the latest release of the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry), to form and test your submission's xz compressed tarball. Do **NOT** assume you have the most recent release without pulling or downloading via GitHub and do **MAKE SURE** you @@ -1851,7 +1873,10 @@ two JSON files, `.auth.json` and `.info.json` as well as the `prog.c`, `Makefile` and `remarks.md` files along with all the other files listed in the `.info.json` manifest. (Okay there is an option to skip files but this is for the judges **ONLY**; use of this option to validate your submission puts you at -a great risk of violating [Rule 17](next/rules.html#rule17)!). +a great risk of violating +[Rule 4 Files](next/rules.html#rule-4-files), +or +[Rule 17 Packaging](next/rules.html#rule-17-packaging)!). As an example, if your submission directory is `00000000-0000-4000-0000-000000000000-3/` then you should run the following @@ -1877,7 +1902,11 @@ See the FAQ on "[.auth.json](#auth_json)" and the FAQ on "[.info.json](#info_json)" -as well as [Rule 17](next/rules.html#rule17) for more information. +as well as +[Rule 4 Files](next/rules.html#rule-4-files), +and +[Rule 17 Packaging](next/rules.html#rule-17-packaging) +for more information. **NOTE**: the `chksubmit(1)` tool invokes `chkentry(1)` but as a contestant you do not need to worry about those details. One should use `chksubmit(1)` instead @@ -1969,21 +1998,25 @@ In order of the file's contents we describe each required field, below: - `IOCCC_contest_id` (double quoted string) * 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](next/rules.html#rule17). + on this, and in particular + [Rule 17 Packaging](next/rules.html#rule-17-packaging). **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](next/rules.html#rule17)! + violating + [Rule 17 Packaging](next/rules.html#rule-17-packaging). - `tarball` (double quoted string) * The xz compressed tarball filename. **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](next/rules.html#rule17)! + your submission rejected for violating + [Rule 17 Packaging](next/rules.html#rule-17-packaging)! Moreover, it is possible that `txzchk` will report a problem through - `fnamchk(1)` which also puts you at great risk of violating [Rule - 17](next/rules.html#rule17). `txzchk` will use the output of `fnamchk` to + `fnamchk(1)` which also puts you at great risk of violating + [Rule 17 Packaging](next/rules.html#rule-17-packaging). 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 tarball, this will be flaggd. @@ -1996,7 +2029,8 @@ In order of the file's contents we describe each required field, below: [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If this is not the case you stand a great risk of having your submission - rejected for violating [Rule 17](next/rules.html#rule17)! + rejected for violating + [Rule 17 Packaging](next/rules.html#rule-17-packaging). - `author_count` (number) * How many authors this submission has. @@ -2060,7 +2094,8 @@ author(s) of the submission: [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If this is not the case you stand a great risk of having your submission - rejected for violating [Rule 17](next/rules.html#rule17)! + rejected for violating + [Rule 17 Packaging](next/rules.html#rule-17-packaging). **NOTE:** an **affiliation** does **NOT** have any affect on whether you will win or not. @@ -2144,8 +2179,10 @@ will use it on the submission directory as part of the judging process. At the risk of stating the obvious, if your `.auth.json` file is invalid JSON or is reported invalid by `chksubmit(1)`, or if your submission directory is reported invalid by `chksubmit(1)`, your submission will almost certainly be -rejected for violating the [Rules](next/rules.html) and in particular [Rule -17](next/rules.html#rule17). +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). 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 @@ -2154,7 +2191,11 @@ not a string or is the wrong string. Another obvious example is when things are 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(1)`) your submission would be -rejected for violating [Rule 17](next/rules.html#rule17) and in particular +rejected for violating +[Rule 4 Files](next/rules.html#rule-4-files), +and +[Rule 17 Packaging](next/rules.html#rule-17-packaging) +and in particular because `chksubmit(1)` would not validate the `.auth.json` file (and maybe other things too). @@ -2276,7 +2317,8 @@ In order of the file's contents we describe each required field, below: - `IOCCC_contest_id` (double quoted string) * 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](next/rules.html#rule17). + on this, and in particular + [Rule 17 Packaging](next/rules.html#rule-17-packaging). - `submit_slot` (number) * The submission number. @@ -2286,7 +2328,8 @@ In order of the file's contents we describe each required field, below: [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If this is not the case you stand a great risk of having your submission - rejected for violating [Rule 17](next/rules.html#rule17)! + rejected for violating + [Rule 17 Packaging](next/rules.html#rule-17-packaging). - `title` (double quoted string) * A short name (length >= 1 **THROUGH** `MAX_TITLE_LEN`, defined in @@ -2295,7 +2338,8 @@ In order of the file's contents we describe each required field, below: matches the regexp `[a-z0-9][a-z0-9_+-]*`. **IMPORTANT:** if this is **NOT** the case you stand a great risk of having your submission - rejected for violating [Rule 17](next/rules.html#rule17)! + rejected for violating + [Rule 17 Packaging](next/rules.html#rule-17-packaging)! - `abstract` (double quoted string) * A one line summary of your submission, with a length of 1 **THROUGH** @@ -2306,33 +2350,37 @@ In order of the file's contents we describe each required field, below: The `abstract` may not contain a `;` (semicolon), nor `&` (ampersand), nor `,` (comma). **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](next/rules.html#rule17)! + stand a great risk of having your submission rejected for violating + [Rule 17 Packaging](next/rules.html#rule-17-packaging)! - `tarball` (double quoted string) * The xz compressed tarball filename. **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](next/rules.html#rule17)! + your submission rejected for violating + [Rule 17 Packaging](next/rules.html#rule-17-packaging)! Moreover, it is possible that `txzchk` will report a problem through - `fnamchk(1)` which also puts you at great risk of violating [Rule - 17](next/rules.html#rule17). `txzchk` will use the output of `fnamchk` to + `fnamchk(1)` which also puts you at great risk of violating + [Rule 17 Packaging](next/rules.html#rule-17-packaging). + 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 tarball, this will be flaggd. - `rule_2a_size` (number) - * The size calculated of [Rule 2a](next/rules.html#rule2a). + * The size calculated of [Rule 2a Gross Size](next/rules.html#rule-2a-gross-size). **IMPORTANT:** if this violates [Rule 2a](next/rules.html#rule2a) you stand a great chance of having your submission rejected for violating the [Rules](next/rules.html)! - `rule_2b_size` (number) - * The size calculated of [Rule 2b](next/rules.html#rule2b). + * The size calculated of [Rule 2b Next Size](next/rules.html#rule-2b-net-size). - **IMPORTANT:** if this violates [Rule 2b](next/rules.html#rule2b) you stand a great + **IMPORTANT:** if this violates + [Rule 2b Next Size](next/rules.html#rule-2b-net-size) + you stand a great chance of having your submission rejected for violating the [Rules](next/rules.html)! @@ -2340,29 +2388,40 @@ In order of the file's contents we describe each required field, below: * `true` if user override warning of an empty source file, else `false`. - `rule_2a_override` (boolean) - * `true` if user overrides warning of [Rule 2a](next/rules.html#rule2a) + * `true` if user overrides warning of + [Rule 2a Gross Size](next/rules.html#rule-2a-gross-size) violation, else `false`. - **IMPORTANT:** if the [Rule 2a](next/rules.html#rule2a) calculated size is **NOT** + **IMPORTANT:** if the + [Rule 2a Gross Size](next/rules.html#rule-2a-gross-size) + calculated size is **NOT** violated but this is `true` then you stand a good chance of having your - submission rejected for violating [Rule 17](next/rules.html#rule17)! + submission rejected for violating + [Rule 17 Packaging](next/rules.html#rule-17-packaging). - `rule_2a_mismatch` (boolean) - * `true` if [Rule 2a](next/rules.html#rule2a) calculated size is not the + * `true` if + [Rule 2a Gross Size](next/rules.html#rule-2a-gross-size) + calculated size is not the same as the file size. - `rule_2b_override` (boolean) - * `true` if user overrides warning of [Rule 2b](next/rules.html#rule2b) + * `true` if user overrides warning of + [Rule 2b Next Size](next/rules.html#rule-2b-net-size) violation, else `false`. - **IMPORTANT:** if the [Rule 2b](next/rules.html#rule2b) calculated size is **NOT** + **IMPORTANT:** if the + [Rule 2b Next Size](next/rules.html#rule-2b-net-size) + calculated size is **NOT** violated but this is `true` then you stand a good chance of having your - submission rejected for violating [Rule 17](next/rules.html#rule17)! + submission rejected for violating + [Rule 17 Packaging](next/rules.html#rule-17-packaging). - `highbit_warning` (boolean) * `true` if `iocccsize` detects a high bit (unescaped octets with the high - bit set - octet value >= 128); see [Rule 13](next/rules.html#rule13), else - `false`. + bit set - octet value >= 128); see + [Rule 12 UTF-8](next/rules.html#rule-12-utf-8), + else `false`. - `nul_warning` (boolean) * `true` if `iocccsize` detects a NUL character in the `prog.c`, else @@ -2384,7 +2443,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](next/rules.html#rule17)! + [Rule 17 Packaging](next/rules.html#rule-17-packaging)! See the FAQ on "[Makefile](#makefile)" @@ -2395,7 +2454,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](next/rules.html#rule17)! + [Rule 17 Packaging](next/rules.html#rule-17-packaging)! See the FAQ on "[Makefile](#makefile)" @@ -2406,7 +2465,8 @@ 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](next/rules.html#rule17)! + submission rejected for violating + [Rule 17 Packaging](next/rules.html#rule-17-packaging)! See the FAQ on "[Makefile](#makefile)" @@ -2417,7 +2477,8 @@ 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](next/rules.html#rule17)! + rejected for violating + [Rule 17 Packaging](next/rules.html#rule-17-packaging)! See the FAQ on "[Makefile](#makefile)" @@ -2428,7 +2489,8 @@ 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](next/rules.html#rule17)! + rejected for violating + [Rule 17 Packaging](next/rules.html#rule-17-packaging)! See the FAQ on "[Makefile](#makefile)" @@ -2439,7 +2501,8 @@ 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](next/rules.html#rule17)! + rejected for violating + [Rule 17 Packaging](next/rules.html#rule-17-packaging)! See the FAQ on "[Makefile](#makefile)" @@ -2464,8 +2527,8 @@ The `mkiocccentry(1)` tool will write it in this order: for more information. **IMPORTANT:** if this is **NOT** the case you stand a - great chance of having your submission rejected for violating [Rule - 17](next/rules.html#rule17)! + great chance of having your submission rejected for violating + [Rule 17 Packaging](next/rules.html#rule-17-packaging)! - `auth_JSON` (double quoted string) * This `MUST` be `".auth.json"`, defined as `AUTH_JSON_FILENAME` in @@ -2477,7 +2540,8 @@ The `mkiocccentry(1)` tool will write it in this order: for more information. **IMPORTANT:** if this is **NOT** the case you stand a great chance of having your - submission rejected for violating [Rule 17](next/rules.html#rule17)! + submission rejected for violating + [Rule 17 Packaging](next/rules.html#rule-17-packaging)! - `c_src` (double quoted string) * This `MUST` be `"prog.c"`, defined as `PROG_C_FILENAME` in @@ -2486,7 +2550,8 @@ The `mkiocccentry(1)` tool will write it in this order: is your submission source code. **IMPORTANT:** if this is **NOT** the case you stand a great chance of having your - submission rejected for violating [Rule 17](next/rules.html#rule17)! + submission rejected for violating + [Rule 17 Packaging](next/rules.html#rule-17-packaging)! - `Makefile` (double quoted string) * This `MUST` be `"Makefile"`, defined as `MAKEFILE_FILENAME` in @@ -2498,7 +2563,8 @@ The `mkiocccentry(1)` tool will write it in this order: for more information. **IMPORTANT:** if this is **NOT** the case you stand a great chance of having your - submission rejected for violating [Rule 17](next/rules.html#rule17)! + submission rejected for violating + [Rule 17 Packaging](next/rules.html#rule-17-packaging)! - `remarks` (double quoted string) * This `MUST` be `"remarks.md"`, defined as `REMARKS_FILENAME` in @@ -2510,7 +2576,8 @@ The `mkiocccentry(1)` tool will write it in this order: for more information. **IMPORTANT:** if this is **NOT** the case you stand a great chance of having your - submission rejected for violating [Rule 17](next/rules.html#rule17)! + submission rejected for violating + [Rule 17 Packaging](next/rules.html#rule-17-packaging)! The `manifest` **array** also **OPTIONALLY** has one or more of the field: @@ -2522,8 +2589,9 @@ The `manifest` **array** also **OPTIONALLY** has one or more of the field: and `chksubmit` will verify this for you; it is **ALSO** an **error** if the 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](next/rules.html#rule17)! On the other hand, **ONLY** `mkiocccentry` will + risk of having your submission rejected for violating + [Rule 17 Packaging](next/rules.html#rule-17-packaging)! + 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. Even so, the [Judges](judges.html) **WILL** extract the tarball and if a @@ -2585,7 +2653,9 @@ not a string or is the wrong string. Another obvious example is when things are 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](next/rules.html#rule17) and in particular +rejected for violating +Rule 17 Packaging](next/rules.html#rule-17-packaging), +and in particular because `chksubmit` would not validate the `.info.json` file. If you wish to **verify** that your `.info.json` file is valid **JSON** then see the diff --git a/news.html b/news.html index a3e5332ff..6e5666795 100644 --- a/news.html +++ b/news.html @@ -747,11 +747,11 @@ as well as a critical fix for installing on BSD based systems.

      and compile the mkiocccentry tool set. You may also wish to install this code. See also the mkiocccentry FAQ for more information.

      2024-12-30

      -

      The IOCCC Rule 13 no longer discourages the +

      The IOCCC Rule 12 UTF-8 no longer discourages the use of UTF-8 in C source. Since the days of -std=gnu17 compilers, UTF-8 characters do not impose a compiler problem. The related guideline states that “Rule 13 no longer discourages the use of UTF-8 +characters in C code”.

      -

      The IOCCC Rule 8 wording has been fixed. It no longer +

      The IOCCC Rule 8 Submission wording has been fixed. It no longer states that email will be sent. Instead it talks about potential slot comment modifications as means to tell the submitter that their submission was received.

      All of the import IOCCC dates within the IOCCC rules diff --git a/news.md b/news.md index 06da36478..e5f88a681 100644 --- a/news.md +++ b/news.md @@ -406,12 +406,12 @@ See also the [mkiocccentry FAQ](https://github.com/ioccc-src/mkiocccentry/blob/m ## 2024-12-30 -The IOCCC [Rule 13](next/rules.html#rule13) no longer discourages the +The IOCCC [Rule 12 UTF-8](next/rules.html#rule-12-utf-8) no longer discourages the use of UTF-8 in C source. Since the days of `-std=gnu17` compilers, UTF-8 characters do not impose a compiler problem. The related guideline states that "Rule 13 no longer discourages the use of UTF-8 +characters in C code". -The IOCCC [Rule 8](next/rules.html#rule8) wording has been fixed. It no longer +The IOCCC [Rule 8 Submission](next/rules.html#rule-8-submission) wording has been fixed. It no longer states that email will be sent. Instead it talks about potential slot comment modifications as means to tell the submitter that their submission was received. diff --git a/next/guidelines.html b/next/guidelines.html index 742ad275e..71edd39b7 100644 --- a/next/guidelines.html +++ b/next/guidelines.html @@ -569,10 +569,13 @@ may change from contest to contest.

    • using the mkiocccentry tools

    Uploading a tarball not formed by mkiocccentry(1) puts you at a very big risk of -violating Rule 17, especially as mkiocccentry(1) does a +violating +Rule 17 Packaging, +especially as mkiocccentry(1) does a great number of things that are required, and it also runs many checks, and if any of those checks fail, you are at a very great risk of having your submission -rejected for violating Rule 17.

    +rejected for violating +Rule 17 Packaging.

    We STRONGLY recommend you do install the mkiocccentry toolkit.

    IMPORTANT NOTE: the tools that require other tools, mkiocccentry(1) and @@ -608,13 +611,13 @@ option. See the FAQ on “how to avoid re-entering your UUID” for more details. Note that the -i answers option cannot be used with the UUID options as the answers file includes the UUID.

    -

    The overall size limit (see Rule 2a) on prog.c has been +

    The overall size limit (see Rule 2a Gross Size](rules.html#rule-2a-gross-size)) on prog.c has been increased from 4096 to 4993 bytes. -The Rule 2a size was changed from +The Rule 2b Next Sizesize was changed from 4096 to 4993 to keep the “2b to 2a” size ratio to a value similar to the 2001-2012 and 2013-2020 IOCCC eras.

    -

    The Rule 2b size has increased from 2053 to 2503 +

    The Rule 2b Next Size size has increased from 2053 to 2503 bytes.

    However, you should pay especial attention to our remarks in the IOCCC28 @@ -623,14 +626,19 @@ index.html:

    IMPORTANT HINT: Only 3 of the 23 IOCCC28 winners came close to the -Rule 2 size limit. Large code size isn’t +Rule 2 Size limit. +Large code size isn’t everything. :-) Those submitting to future contents should take a careful note of that fact.

    Your submission must satisfy BOTH the maximum size -Rule 2a AND the IOCCC size Rule 2b.

    -

    To check your code against Rule 2, use the iocccentry(1) tool. +Rule 2a Gross Size +AND +the IOCCC size +Rule 2b Next Size.

    +

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

        iocccsize prog.c

    The IOCCC size tool algorithm can be summarized as follows:

    @@ -657,7 +665,8 @@ if you are “Curios!” abo BESM-6, and 2503 is a decimal anagram of 2053.

    Take note that this secondary limit imposed by the IOCCC size tool obviates some of the need to #define C reserved words in an effort -to get around the size limits of Rule 2.

    +to get around the size limits of +Rule 2 Size.

    Yes Virginia, that is a hint!

    The official locale of the IOCCC is C.

    @@ -765,7 +774,8 @@ misleading comments and variable names might be a VERY GOOD START

    Jump to: top

    mkiocccentry

    -

    Rule 17 (the mkiocccentry(1) rule) states that +

    Rule 17 Packaging +(the mkiocccentry(1) rule) states that you REALLY SHOULD use the mkiocccentry(1) tool to package your submission tarball.

    See the mkiocccentry repo for the mkiocccentry(1) tool and below for more details.

    @@ -814,7 +824,9 @@ then you will have to specify the options (such as paths) for the tools that are chksubmit(1), txzchk(1) and fnamchk(1).

    Make sure you have the latest version of of the mkiocccentry toolkit -so that you do not violate Rule 17 by mistake.

    +so that you do not violate +Rule 17 Packaging +by mistake.

    Jump to: top

    mkiocccentry(1) synopsis

    @@ -841,7 +853,7 @@ for even more information.

    execute one or more additional tools.

    iocccsize

    mkiocccentry(1) will use code from iocccsize(1) which detects a number of -issues (such as Rule 2) that you may ignore, if you wish, as +issues (such as Rule 2 Size) that you may ignore, if you wish, as noted above.

    In other words, you no longer need to run iocccsize manually. However, the checks described above are still made but through the mkiocccentry(1) tool itself.

    @@ -921,8 +933,8 @@ installed separately, in order to use the tools in mkiocccentry.

    the libraries from their respective repos, it/they will not be used when compiling the mkiocccentry tools. This is important to make sure that you’re using the correct versions, which is also verified by -chksubmit (in the JSON files created by mkiocccentry(1)). See Rule -17!

    +chksubmit (in the JSON files created by mkiocccentry(1)). See +Rule 17 Packaging!

    We HIGHLY recommend you install the mkiocccentry toolkit, however.

    @@ -955,7 +967,8 @@ code or the man page. You might just find a fun option if you do either of these!

    Of course, as txzchk does not extract the tarball, it is possible that if you manually package your submission tarball and/or find and exploit a missing -check, you could still be violating Rule 17.

    +check, you could still be violating +Rule 17 Packaging.

    Including optional and extra files

    @@ -970,7 +983,9 @@ file. The non-extra files are considered free files.

    Of course any dot file that is not .auth.json and .info.json will result in -a violation of Rule 17, regardless of its depth. +a violation of +Rule 17 Packaging, +regardless of its depth.

    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 @@ -1000,10 +1015,13 @@ said tarball(s), the make clobber rule MUST remove The mkiocccentry(1) tool creates a v7 format tarball to prevent this. You can do the same like:

        tar --format=v7 -cJf foo.txz directory
    -

    See Rule 17 and also the +

    See +Rule 17 Packaging +and also the FAQ on “maximum number of files”.

    If you do not follow these points, you -are at a great risk of violating Rule 17!

    +are at a great risk of violating +Rule 17 Packaging!

    NOTE: if you want to include a test-suite that requires a lot of files, please suggest this in your remarks.md and if your submission wins it can be done. In other words you should NOT use a tarball for a test-suite unless you @@ -1018,14 +1036,16 @@ FAQ on “txzchk”.

    As an important part of its algorithm, txzchk(1) directly executes fnamchk(1). If the filename is invalid (or the filename does not match the directory name of the tarball) then it is an error and you risk violating -Rule 17. Nevertheless, you can run the tool manually, +Rule 17 Packaging. +Nevertheless, you can run the tool manually, should you wish to.

    For more information on fnamchk and how to manually validate your submission tarball filename, see the FAQ on “fnamchk”.

    It is extremely unlikely that fnamchk(1) reporting an invalid filename is a -bug in fnamchk(1) and as such, ignoring such an issue risks violating Rule -17 which is a big risk. Of course, using mkiocccentry(1) +bug in fnamchk(1) and as such, ignoring such an issue risks violating +Rule 17 Packaging +which is a big risk. Of course, using mkiocccentry(1) would prevent this from happening as it would not create such a file anyway. If mkiocccentry(1) was used it would rather suggest a bug in one of the tools and you should report it as a bug at the mkiocccentry issues @@ -1037,7 +1057,9 @@ the risk of stating the obvious, you run A VERY BIG RISK of hav your submission rejected if you package your own tarball, and there are ANY problems. For instance, if chksubmit(1) found a problem in your .info.json file, the mkiocccentry(1) tool would not package it. But if you were to package -it manually, you would be violating Rule 17. But even if +it manually, you would be violating +Rule 17 Packaging. +But even if everything checks out OK you should NOT assume that everything IS OK.

    Problems and/or bugs in the mkiocccentry toolkit

    @@ -1252,7 +1274,8 @@ the mkiocccentry(1) tool.

    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!

    +WILL BE REJECTED for violating +Rule 17 Packaging!

    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 submission Makefile don’t depend on such tools.

    @@ -1499,8 +1522,9 @@ Please try to be much more creative.

    large data files to get around the source code size limit.

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

    Did we remember to indicate that programs that blatantly use @@ -1514,8 +1538,10 @@ of code, and the other that is formatted more like a typical C program, we tend to favor the second version. Of course, a third version of the same program that is formatted in an interesting 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 9).

    +Remember, you can submit more than one submission. See the +IOCCC rules +for details (in particular, +Rule 8 Submission).

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

    @@ -1623,7 +1649,8 @@ 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 no longer discourages the use of UTF-8 +

    Rule 13 Newlines +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 think your submission is obfuscated. This is particularly true if @@ -1653,13 +1680,15 @@ Howe, in which case it is original! :-) Submitting source code that uses the contents of iocccsize.c, unless you are Anthony C Howe, might run the -risk of violating Rule 7.

    +risk of violating +Rule 7 Original Work.

    The IOCCC submission tarball validator source is not an original work, unless you are Cody Boone Ferguson, in which case it is original! :-) Submitting source code that uses the contents of txzchk.c, unless you are Cody Boone Ferguson, might -run the risk of violating Rule 7.

    +run the risk of violating +Rule 7 Original Work.

    In addition to the above tools, none of the mkiocccentry tools, including, but not limited to @@ -1682,15 +1711,17 @@ are original! :-) Submitting source code that uses the content of any of these t library, unless you are Cody Boone Ferguson or Landon Curt Noll, might run the risk of violating -Rule 7.

    +Rule 7 Original Work.

    And unless you are Landon Curt Noll, the code in dbg and dyn_array are not original works. Submitting source code that uses the contents of those libraries, unless you Landon Curt Noll, -might run the risk of violating Rule 7.

    -

    Rule 7 does not prohibit you from writing your own +might run the risk of violating +Rule 7 Original Work.

    +

    Rule 7 Original Work +does not prohibit you from writing your own obfuscated versions of these tools, unless of course you are Landon Curt Noll, in which case you probably won’t win since IOCCC judges should not enter the IOCCC! :-) @@ -1698,14 +1729,17 @@ However, if you do write your own version, you more interesting than simply implementing the IOCCC tools’ algorithms.

    Even so, we do not recommend you try and submit a JSON parser due to -the fact it will likely exceed the source code size limit +the fact it will likely exceed +Rule 2 Size and because you likely can’t beat flex and bison in obfuscation. This isn’t to say that the so-called JSON spec is not obfuscated, but unless you have some really clever way to compact and obfuscate a JSON parser more than flex and bison you will likely not win, either -because of the source code size limit or because it is not +because of the +Rule 2 Size +or because it is not as obfuscated as the flex and bison generated code of jparse.

    @@ -1785,7 +1819,9 @@ character tab stop.

    PLEASE observe our IOCCC markdown guidelines 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 19 and our +those files. See also +Rule 4 Files, +and the FAQ on “markdown”.

    We LIKE reading remarks.md files, especially if they contain useful, informative, and even humorous content about your submission. Yes, this @@ -1821,8 +1857,11 @@ your submission is valid. Humor and/or creativity help plead a case. 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 and/or about Rule 2b or any other +

    If you do bypass the mkiocccentry(1) warnings about +Rule 2a Gross Size +and/or about +Rule 2b Next 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 violation, and you would be wise to do this towards the top of your remarks.md @@ -2001,7 +2040,8 @@ strange/creative layout submission. We sometimes also select a submission that abuses the IOCCC guidelines in an interesting way, or that stretches the contest rules that while legal, it nevertheless goes against the intent of the rules.

    -

    Nevertheless, see Rule 12.

    +

    Nevertheless, see +Rule 10 Privileges.

    In the end, we traditionally pick one submission as ‘best’. Sometimes such a submission simply far exceeds any of the other submissions. More often, the ‘best’ is picked because it does well in a number of categories.

    diff --git a/next/guidelines.md b/next/guidelines.md index ba460adf9..52db42eec 100644 --- a/next/guidelines.md +++ b/next/guidelines.md @@ -158,10 +158,13 @@ See FAQs regarding: - [using the mkiocccentry tools](../faq.html#using_mkiocccentry) Uploading a tarball not formed by `mkiocccentry(1)` puts you at a very big risk of -violating [Rule 17](rules.html#rule17), especially as `mkiocccentry(1)` does a +violating +[Rule 17 Packaging](rules.html#rule-17-packaging), +especially as `mkiocccentry(1)` does a great number of things that are required, and it also runs many checks, and if any of those checks fail, you are at a very great risk of having your submission -rejected for violating [Rule 17](rules.html#rule17). +rejected for violating +[Rule 17 Packaging](rules.html#rule-17-packaging). We **STRONGLY** recommend you **do** install the [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry). @@ -205,14 +208,14 @@ FAQ on "[how to avoid re-entering your UUID](../faq.html#uuid)" for more details. Note that the `-i answers` option cannot be used with the UUID options as the answers file includes the UUID. -The overall size limit (see [Rule 2a](rules.html#rule2a)) on `prog.c` has been +The overall size limit (see Rule 2a Gross Size](rules.html#rule-2a-gross-size)) on `prog.c` has been **increased from 4096 to 4993** bytes. -The [Rule 2a](rules.html#rule2a) size was changed from +The [Rule 2b Next Size](rules.html#rule-2b-net-size)size was changed from **4096** to **4993** to keep the "2b to 2a" size ratio to a value similar to the [2001-2012](../faq.html#size_rule2001-2012) and [2013-2020](../faq.html#size_rule2013-2020) IOCCC eras. -The [Rule 2b](rules.html#rule2b) size has **increased from 2053 to 2503** +The [Rule 2b Next Size](rules.html#rule-2b-net-size) size has **increased from 2053 to 2503** bytes.

    @@ -222,16 +225,21 @@ index.html](../2024/index.html):

    > **IMPORTANT HINT**: Only 3 of the 23 **IOCCC28 winners** came close to the -[Rule 2 size limit](../next/rules.html#rule2). Large code size isn't +[Rule 2 Size](rules.html#rule-2-size) limit. +Large code size isn't everything. :-) Those submitting to future contents should **take a careful note** of that fact.

    Your submission must satisfy **BOTH** the maximum size -[Rule 2a](rules.html#rule2a) **AND** the IOCCC size [Rule 2b](rules.html#rule2b). +[Rule 2a Gross Size](rules.html#rule-2a-gross-size) +**AND** +the IOCCC size +[Rule 2b Next Size](rules.html#rule-2b-net-size). -To check your code against [Rule 2](rules.html#rule2), use the `iocccentry(1)` tool. +To check your code against +[Rule 2 Size](rules.html#rule-2-size), use the `iocccentry(1)` tool. For example: ``` @@ -267,7 +275,8 @@ BESM-6, and 2503 is a decimal anagram of 2053. Take note that this secondary limit imposed by the IOCCC size tool obviates some of the need to `#define` C reserved words in an effort -to get around the size limits of [Rule 2](rules.html#rule2). +to get around the size limits of +[Rule 2 Size](rules.html#rule-2-size). Yes Virginia, **that is a hint**! @@ -408,7 +417,8 @@ Jump to: [top](#) # `mkiocccentry`
    -[Rule 17](rules.html#rule17) (the `mkiocccentry(1)` rule) states that +[Rule 17 Packaging](rules.html#rule-17-packaging) +(the `mkiocccentry(1)` rule) states that you **REALLY SHOULD** use the `mkiocccentry(1)` tool to package your submission tarball. See the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry) @@ -471,7 +481,9 @@ then you will have to specify the options (such as paths) for the tools that are Make sure you have the latest version of of the [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) -so that you do not violate [Rule 17](rules.html#rule17) by mistake. +so that you do not violate +[Rule 17 Packaging](rules.html#rule-17-packaging) +by mistake. Jump to: [top](#) @@ -515,7 +527,7 @@ execute one or more additional tools.
    `mkiocccentry(1)` will use code from `iocccsize(1)` which detects a number of -issues (such as [Rule 2](rules.html#rule2)) that you may ignore, if you wish, as +issues (such as [Rule 2 Size](rules.html#rule-2-size)) that you may ignore, if you wish, as noted above. In other words, you no longer need to run `iocccsize` manually. However, the @@ -618,8 +630,8 @@ In other words, `mkiocccentry` **contains everything** you need, and _even if yo do install_ the libraries from their respective repos, it/they will **not be used** when compiling the `mkiocccentry` tools. This is important to make sure that you're using the correct versions, which is also verified by -`chksubmit` (in the JSON files created by `mkiocccentry(1)`). See [Rule -17](rules.html#rule17)! +`chksubmit` (in the JSON files created by `mkiocccentry(1)`). See +[Rule 17 Packaging](rules.html#rule-17-packaging)!

    We **HIGHLY** recommend you install the `mkiocccentry` toolkit, however. @@ -665,7 +677,8 @@ page. You might just find a fun option if you do either of these! Of course, as `txzchk` does not extract the tarball, it is possible that if you manually package your submission tarball and/or find and exploit a missing -check, you could still be violating [Rule 17](rules.html#rule17). +check, you could still be violating +[Rule 17 Packaging](rules.html#rule-17-packaging).

    ## Including optional and extra files @@ -684,7 +697,9 @@ file_. The non-extra files are considered _free files_.

    Of course any dot file that is not `.auth.json` and `.info.json` will result in -a violation of [Rule 17](rules.html#rule17), regardless of its depth. +a violation of +[Rule 17 Packaging](rules.html#rule-17-packaging), +regardless of its depth.

    If you use an optional filename for something other than their intended use @@ -725,11 +740,14 @@ do the same like: tar --format=v7 -cJf foo.txz directory ``` -See [Rule 17](rules.html#rule17) and also the +See +[Rule 17 Packaging](rules.html#rule-17-packaging) +and also the FAQ on "[maximum number of files](../faq.html#max-files)". If you do not follow these points, you -are at a great risk of violating [Rule 17](rules.html#rule17)! +are at a great risk of violating +[Rule 17 Packaging](rules.html#rule-17-packaging)! **NOTE**: if you want to include a test-suite that requires a lot of files, please suggest this in your `remarks.md` and if your submission wins it can @@ -750,7 +768,8 @@ Jump to: [top](#) As an important part of its algorithm, [txzchk(1)](#txzchk) directly executes `fnamchk(1)`. If the filename is invalid (or the filename does not match the directory name of the tarball) then it is an **error** and you risk violating -[Rule 17](rules.html#rule17). Nevertheless, you can run the tool manually, +[Rule 17 Packaging](rules.html#rule-17-packaging). +Nevertheless, you can run the tool manually, should you wish to. For more information on `fnamchk` and how to manually validate your submission @@ -758,8 +777,9 @@ tarball filename, see the FAQ on "[fnamchk](../faq.html#fnamchk)". It is extremely unlikely that `fnamchk(1)` reporting an invalid filename is a -bug in `fnamchk(1)` and as such, ignoring such an issue risks violating [Rule -17](rules.html#rule17) which is a big risk. Of course, using `mkiocccentry(1)` +bug in `fnamchk(1)` and as such, ignoring such an issue risks violating +[Rule 17 Packaging](rules.html#rule-17-packaging) +which is a big risk. Of course, using `mkiocccentry(1)` would prevent this from happening as it would not create such a file anyway. If `mkiocccentry(1)` was used it would rather suggest a bug in one of the tools and you should [report it as a bug at the mkiocccentry issues @@ -772,7 +792,9 @@ the risk of stating the obvious, you run **A VERY BIG RISK** of having your submission rejected if you package your own tarball, and there are **ANY problems**. For instance, if `chksubmit(1)` found a problem in your `.info.json` file, the `mkiocccentry(1)` tool would not package it. But if you were to package -it manually, you would be violating [Rule 17](rules.html#rule17). But even if +it manually, you would be violating +[Rule 17 Packaging](rules.html#rule-17-packaging). +But even if everything checks out OK you should **NOT** assume that everything **IS** OK.
    @@ -1076,7 +1098,8 @@ Even if you did manage to get dot files or dot directories in the tarball 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](rules.html#rule17)! +**WILL BE REJECTED** for violating +[Rule 17 Packaging](rules.html#rule-17-packaging)! 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 @@ -1412,8 +1435,9 @@ large data files to get around the source code size limit.

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

    @@ -1428,8 +1452,10 @@ of code, and the other that is formatted more like a typical C program, we tend to favor the second version. Of course, a third version of the same program that is formatted in an interesting 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 9](rules.html#rule9)). +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)). We suggest that you avoid trying for the '**smallest self-replicating**' source. The smallest, a [zero byte entry](../1994/smr/index.html), won in @@ -1574,7 +1600,8 @@ If you do `#include ` make **CERTAIN** you link in curses (i.e. `-lcurses`) and not ncurses (i.e. `-lncurses`).

    -[Rule 13](rules.html#rule13) no longer discourages the use of UTF-8 +[Rule 13 Newlines](rules.html#rule-13-newlines) +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 @@ -1610,14 +1637,16 @@ Howe](../authors.html#Anthony_C_Howe), in which case it is original! :-) Submitting source code that uses the contents of [iocccsize.c](https://github.com/ioccc-src/mkiocccentry/blob/master/iocccsize.c), _unless_ you are [Anthony C Howe](../authors.html#Anthony_C_Howe), might run the -risk of violating [Rule 7](rules.html#rule7). +risk of violating +[Rule 7 Original Work](rules.html#rule-7-original-work). The IOCCC submission tarball validator source is not an original work, unless you are [Cody Boone Ferguson](../authors.html#Cody_Boone_Ferguson), in which case it is original! :-) Submitting source code that uses the contents of [txzchk.c](https://github.com/ioccc-src/mkiocccentry/blob/master/txzchk.c), _unless_ you are [Cody Boone Ferguson](../authors.html#Cody_Boone_Ferguson), might -run the risk of violating [Rule 7](rules.html#rule7). +run the risk of violating +[Rule 7 Original Work](rules.html#rule-7-original-work). In addition to the above tools, none of the [mkiocccentry tools](https://github.com/ioccc-src/mkiocccentry), _including, **but not @@ -1641,7 +1670,7 @@ are original! :-) Submitting source code that uses the content of any of these library, _unless_ you are [Cody Boone Ferguson](../authors.html#Cody_Boone_Ferguson) or [Landon Curt Noll](http://www.isthe.com/chongo/index.html), might run the risk of violating -[Rule 7](rules.html#rule7). +[Rule 7 Original Work](rules.html#rule-7-original-work). And unless you are [Landon Curt Noll](https://en.wikipedia.org/wiki/Landon_Curt_Noll), the code in @@ -1649,9 +1678,11 @@ the code in [dyn_array](https://github.com/ioccc-src/mkiocccentry/tree/master/dyn_array) are not original works. Submitting source code that uses the contents of those libraries, _unless_ you [Landon Curt Noll](https://en.wikipedia.org/wiki/Landon_Curt_Noll), -might run the risk of violating [Rule 7](rules.html#rule7). +might run the risk of violating +[Rule 7 Original Work](rules.html#rule-7-original-work). -[Rule 7](rules.html#rule7) does not prohibit you from writing your own +[Rule 7 Original Work](rules.html#rule-7-original-work) +does not prohibit you from writing your own obfuscated versions of these tools, unless of course you are [Landon Curt Noll](http://www.isthe.com/chongo/index.html), in which case you _probably_ won't win since [IOCCC judges](../judges.html) should not enter the IOCCC! :-) @@ -1660,14 +1691,17 @@ However, **_if_** you do write your own version, you **_might_** wish to make it tools' algorithms. Even so, we do not recommend you try and submit a JSON parser due to -the fact it will likely exceed [the source code size limit](rules.html#rule2) +the fact it will likely exceed +[Rule 2 Size](rules.html#rule-2-size) and because you likely can't beat [flex](https://github.com/westes/flex) and [bison](https://www.gnu.org/software/bison/) in obfuscation. This isn't to say that [the so-called JSON spec](https://github.com/xexyl/jparse/blob/master/json_README.md#so-called-json-spec) is not obfuscated, but unless you have some really clever way to compact and obfuscate a JSON parser more than [flex](https://github.com/westes/flex) and [bison](https://www.gnu.org/software/bison/) you will likely not win, either -because of the [source code size limit](rules.html#rule2) or because it is not +because of the +[Rule 2 Size](rules.html#rule-2-size) +or because it is not as obfuscated as the [flex](https://github.com/westes/flex) and [bison](https://www.gnu.org/software/bison/) generated code of [jparse](https://github.com/ioccc-src/mkiocccentry/blob/master/jparse). @@ -1759,7 +1793,9 @@ character tab stop. **PLEASE** observe our [IOCCC markdown guidelines](../markdown.html) 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 19](rules.html#rule19) and our +those files. See also +[Rule 4 Files](rules.html#rule-4-files), +and the FAQ on "[markdown](../faq.html#markdown)". We **LIKE** reading `remarks.md` files, especially if they contain @@ -1807,8 +1843,11 @@ As there is no guarantee that you will succeed, you might consider submitting an alternate version that conforms to the [IOCCC rules](rules.html). -If you do bypass the `mkiocccentry(1)` warnings about [Rule -2a](rules.html#rule2a) and/or about [Rule 2b](rules.html#rule2b) or any other +If you do bypass the `mkiocccentry(1)` warnings about +[Rule 2a Gross Size](rules.html#rule-2a-gross-size) +and/or about +[Rule 2b Next 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 violation, and you would be wise to do this towards the top of your `remarks.md` @@ -2031,7 +2070,9 @@ submission that abuses the [IOCCC guidelines](guidelines.html) in an interesting or that stretches the contest [rules](rules.html) that while legal, it nevertheless goes against the **intent** of the [rules](rules.html). -Nevertheless, see [Rule 12](rules.html#rule12). +Nevertheless, see +[Rule 10 Privileges](rules.html#rule-10-privileges). + In the end, we traditionally pick one submission as '**best**'. Sometimes such a submission simply far exceeds any of the other submissions. More often, the diff --git a/next/rules.html b/next/rules.html index a3c7fba3b..f1e04b7a8 100644 --- a/next/rules.html +++ b/next/rules.html @@ -473,633 +473,266 @@ mastodon feed page and/or mastodon app from time to time to view IOCCC mastodon updates.

    -

    28th International Obfuscated C Code Contest Official Rules

    -

    -Copyright © 2024-2025 Leonid A. Broukhis and Landon Curt Noll. -

    +

    29th International Obfuscated C Code Contest Official Rules

    +

    Copyright © 2024-2025 Leonid A. Broukhis and Landon Curt Noll.

    All Rights Reserved. Permission for personal, education or non-profit use is granted provided this this copyright and notice are included in its entirety -and remains unaltered. All other uses must receive prior permission in +and remains unaltered. All other uses MUST receive prior permission in writing by contacting the judges.

    -

    Jump to: top

    -
    -
    -

    IOCCC Rules version

    -
    -
    -

    -These IOCCC rules are version 28.31 2025-11-17. -

    -

    The markdown form of these rules is -available for download.

    -

    IMPORTANT: Be sure to read the IOCCC guidelines.

    -

    Jump to: top

    -
    -

    Change marks

    -
    -

    -← Lines that start with this symbol indicate a change from the previous IOCCC -

    -

    -Most lines that were modified since the previous IOCCC start with a solid -4 pixel black left border (or, in the case of a code block or blockquote, -just a vertical bar). We say most lines because we sometimes forget -to bar modified sections. -

    -

    Jump to: top

    -
    -

    Obfuscate defined:

    -
    -

    tr.v. -cated, -cating, -cates. -

    -1a. To render obscure.
    -1b. To darken. -

    -2. To confuse: his emotions obfuscated his judgment.
    -    [LLat. obfuscare, to darken : ob(intensive) + Lat. fuscare,
    -    to darken < fuscus, dark.] -obfuscation n. obfuscatory adj.

    -

    Jump to: top

    -
    -

    Goals of the IOCCC (International Obfuscated C Code Contest)

    -
    -

    -See the IOCCC goals. -

    -

    Jump to: top

    -
    -

    Important IOCCC dates

    -
    -

    -This IOCCC runs from 2024-12-29 23:58:13.213455 UTC to 2025-06-05 04:03:02.010099 UTC. -This IOCCC marks the 40th anniversary of the contest! -

    -

    -This contest will enter the open state on 2025-03-05 23:19:17.131107 UTC. -

    -

    -This contest will enter the judging state on 2025-06-05 04:03:02.010099 UTC. -

    -

    -IMPORTANT NOTE: Until the contest enters the open state, any or all -of the above dates and times may change! -

    -

    See the -FAQ on “obtaining and compiling the mkiocccentry tools” -and the -FAQ on “how to enter the IOCCC” -as that FAQ has important details on -how to register -as well as -how to upload your submission to the IOCCC.

    -

    Jump to: top

    -
    -

    IOCCC RULES

    -
    -

    To help us with the volume of submissions, we ask that you follow the rules below.

    -
    -

    A warning about rule abuse

    -
    -

    WARNING: Abusing these rules comes with a fair amount of risk -that your submission will be rejected. If you do plan to abuse the -rules, then you MUST CLEARLY EXPLAIN THE RATIONALE in your remarks.md file, -as to why you think your rule abuse should be allowed, and as to why you think -your submission should not be rejected for a rule violation. -Nevertheless, even if you do explain this in your remarks.md file -you submission may still be rejected.

    -

    If you use the most recently released official IOCCC submission packaging tool -(hereby referred to as mkiocccentry(1)), which we STRONGLY recommend you -do, then the mkiocccentry(1) tool will warn you if there appears to be a -violation in certain rules (not all can be detected). The mkiocccentry(1) -tool also runs chksubmit(1) and txzchk(1), the latter of which runs -fnamchk(1). Overriding problems detected by any of these tools comes with a -fair amount of risk that your submission will be rejected.

    -

    If you do override a rule violation warning from the mkiocccentry(1) or -another related IOCCC tool, or otherwise plan to abuse the rules, then you -MUST CLEARLY EXPLAIN THE RATIONALE of why you are attempting to abuse the -rules in your remarks.md file. Even if you do explain this in your -remarks.md file your submission may still be rejected.

    -

    HINT: If you do submit such a rule abusing / rule violating -submission, then consider also submitting an alternate version in a -different submission server slot that does NOT violate the rules -in case your rule abuse excuse is rejected.

    -

    IMPORTANT: if you do submit such an alternate non-rule abusing version, -PLEASE indicate that in your remarks.md file of your non-rule abusing -version so that the IOCCC judges do not think you uploaded a -duplicate into a wrong slot by mistake.

    -

    Uploading a tarball not formed by mkiocccentry(1) puts you at a very big risk of -violating Rule 17, especially as mkiocccentry(1) does a -great number of things that are required, and it also runs many checks, and if -any of those checks fail, you are at a very great risk of having your submission -rejected for violating Rule 17.

    -

    See also Rule 12.

    -

    Jump to: top

    -
    -

    Rule 0

    -
    -

    Just as C starts at 0, so the IOCCC starts at Rule 0. :-)

    -

    The “Important IOCCC dates” section above is part of this rule.

    -

    Jump to: top

    -
    -

    Rule 1

    -
    -

    Your submission must be a C program.

    -

    You see, the contest is not called the International Obfuscated JSON Contest -(IOJSONC), even if the so-called JSON -spec might be called obfuscated -by some people. :-)

    -

    Jump to: top

    -
    -

    Rule 2

    -
    -

    Rule 2 requires that your submission satisfy BOTH Rule -2a AND Rule 2b.

    -

    You may check your code with respect to Rule 2a and Rule -2b prior to submitting your code by giving the filename -as a command like argument to the iocccsize(1) tool. For example:

    -
        iocccsize prog.c
    -

    The source to iocccsize(1) may be found in the -mkiocccentry repo.

    -

    See also the -FAQ on “how to further test your submission” -for more more thorough testing, including Rule 2.

    -

    See also Rule 2a, Rule 2b, and Rule 17.

    -

    Jump to: top

    -
    -

    Rule 2a

    -
    -

    -The size of your program source MUST NOT exceed 4993 bytes. -

    -

    Jump to: top

    -
    -

    Rule 2b

    -
    -

    When the filename of your program source is given as a command line argument to -the latest version of the official IOCCC size tool (hereby referred to as -iocccsize(1)), the value printed MUST NOT exceed 2503.

    -

    See also Rule 17.

    -

    Jump to: top

    -
    -

    Rule 3

    -
    -

    You must register in order to submit your entry to the IOCCC. -You may register while the contest is either -pending or open.

    -

    When the contest is open, the submit server -will email you your submit server -Username and Initial password. Please be patient as it may take some time, -perhaps as much as a few days, for your registration to be processed and for that email to be sent.

    -

    Those who register while the contest status is pending -will receive their email (containing their submit server Username -and Initial password), later: usually a few days around the time when the contest status -becomes open.

    -

    Once that email with your Username and Initial password is sent, you -will have fortnight (14 days) to change your submit server initial password.

    -

    If you do not change your Initial password in time, you will have to -send email to the IOCCC judges -to ask for your password to be reset.

    -

    Because it takes time (maybe even a few days) to process your registration -and for the server to email you your initial login and password, you -should MAKE SURE you give yourself enough time to register well -before the contest closes. In other words, DO NOT WAIT UNTIL THE FINAL DAYS -of the contest to register! The IOCCC judges -are NOT responsible for delayed or lost email, or for those who wait -until the last minute to try to register!

    -

    See the -FAQ on “how to register and submit to the IOCCC” -for instructions on registering and participating in the IOCCC, as the process -may change from contest to contest.

    -

    See also Rule 8.

    -

    Jump to: top

    -
    -

    Rule 4

    -
    -

    If your submission is selected as a winning entry, then your submission may be modified in order -to fit into the structure of the Official IOCCC winner website.

    -

    For example, your submission’s Makefile will be modified and your remarks.md -will become a README.md which will be used to generate an index.html file.

    -

    Your source code will be the file prog.c. The compiled binary -will be called prog. If you submission requires different filenames, -then modify your submission’s Makefile to COPY (NOT move!) the files -accordingly.

    -

    Of course your program may also do this, as long as it works, but you’re welcome -to use your Makefile as well.

    -

    See also Rule 5, Rule 18 and Rule 21.

    -

    Jump to: top

    -
    -

    Rule 5

    -
    -

    Your submission must NOT modify the content OR filename of ANY -part of your original submission including, but not limited to prog.c, the -Makefile or any data files you submit.

    -

    If you submission needs (or wishes :-) ) to modify such content, it MUST -first copy the file to a new filename and then modify that copy.

    -

    You may use your submission (program) to form a copy, or you can make use of -your Makefile to form that copy.

    -

    If you do make a copy of a submission file, PLEASE be sure that -the clobber rule of your Makefile removes that copy in order to -restore your submission to its original submission state.

    -

    Jump to: top

    -
    -

    Rule 6

    -
    -

    I am not a rule, I am a free(void *human); ‼️

    -

            while (!(ioccc(rule(you(are(number(6)))))) {
    -                ha_ha_ha();
    -        }

    -

    Jump to: top

    -
    -

    Rule 7

    -
    -

    The obfuscated C program must be your own original work.

    -

    You (the author(s)) MUST own the contents of your submission OR -you MUST have permission from the owner(s) to submit their content.

    -

    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.

    -

    Please note that the tools in mkiocccentry -repo are NOT original works, -unless of course you’re the original authors, in which case they are original. :-)

    -

    Nevertheless tools such as those listed are NOT obfuscated. If submitted, they -would probably violate a number of rules. :-)

    - +

    Rules version

    +

    These IOCCC Rules are version 29.00 2025-11-19.

    +

    Be sure to read the IOCCC guidelines.

    +

    Rule 0 Dates

    +

    This IOCCC runs from ${START_DATE_TIME} UTC to ${CLOSE_DATE_TIME} UTC.

    +

    This contest will enter the open state on ${OPEN_DATE_TIME} UTC.

    +

    This contest will enter the judging state on ${JUDGMENT_DATE_TIME} UTC.

    +

    The above dates are subject to change until the contest is officially open.

    +

    NOTE: As of this draft, the above dates are TBD (to be determined).

    +

    Rule 1 Program

    +

    Your submission MUST be C program.

    +

    Rule 2 Size

    +

    Rule 2 requires that your submission satisfy BOTH +Rule 2a Gross Size +and +Rule 2b Next Size. +During development this can be checked using iocccsize(1):

    +

    iocccsize prog.c

    +

    Rule 2a Gross Size

    +

    The overall maximum size of your prog.c program source MUST NOT +exceed 4993 bytes.

    +

    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 +NOT exceed 2503.

    +

    Rule 3 Register

    +

    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.

    +

    A few days after registering, you’ll receive your UUID username and +temporary password, which you MUST change within 14 days. If you +fail to change it in a timely manner, you’ll need to +contact the Judges by email to request a reset.

    +

    It can take a few days to process your registration and for the server to +email your details, therefore make sure to allow yourself ample time to +register and submit your entries; DO NOT WAIT UNTIL THE FINAL DAYS +to register! The judges are NOT responsible for delayed or lost +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.

    +

    See Rule 8 Submission.

    +

    Rule 4 Files

    +

    The submission MUST include at least these files: Makefile, prog.c, +remarks.md,.info.json, and .auth.json. The last two MUST be +generated by mkiocccenty(1) when packing a submission, and MUST +pass the chksubmit(1) tests.

    +

    The Makefile, remarks.md,.info.json, and .auth.json MUST +have a file size greater than 0.

    +

    Your submitted source code MUST be called prog.c. When the Makefile +compiles your code, the executable (if applicable) MUST be called prog.

    +

    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, prog.alt, +prog.alt.o, prog.o, prog, prog.orig.c, README.md, nor index.html +as those files reserved by IOCCC.

    +

    Your submission may NOT have a file in the top directory that matches +a file glob pattern of the 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.

    +

    All directories MUST have a file 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. +We recommend that markdown files observe our +IOCCC markdown guidelines.

    +

    All filenames are treated as case insensitive. For example, REMARKS.MD, +and Remarks.md, and remarks.md are considered by mkiocccenty(1) +to be the SAME file. If you are preparing your submission on a case +sensitive filesystem, ensure that your submission will work on +a case insensitive filesystem.

    +

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

    +

    See Rule 17 Packaging.

    +

    Rule 5 Purity

    +

    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.

    +

    Rule 6 Free

    +

    I am NOT a Rule, I am a free(void *human); ‼️

    +
        while (!(ioccc(rule(you(are(number(6)))))) {
    +        ha(); ha(); ha();
    +    }
    +

    See Rule 19 Prime.

    +

    Rule 7 Original Work

    +

    In short: You wrote it, you own it, and its an original work.

    +

    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.

    The IOCCC has a rich history of remarkable winning entries created by -authors who skillfully employed various techniques to develop their code. -While it is NOT required, you are allowed to use tools to develop -and test your submission. These tools may include, but are not limited -to code generators, code analysis tools, static code analysis tools, -runtime analysis tools, machine learning tools, natural language models, -code copilot tools, so-called AI services, large language models (LLMs), etc. -If you do make use of such tools or services, then we ENCOURAGE you to describe -what tools and how you used those tools, in your remarks.md file.

    -

    See also Rule 5, Rule 18 and Rule 21.

    -

    Jump to: top

    -
    -

    Rule 8

    -
    -

    Submissions may only be uploaded to the IOCCC submit server -while the contest is open.

    -

    If you have registered and received by email your submit -server Username and Initial password you may -upload your submission to the submit server but -ONLY while the contest is open.

    -

    The submit server, in accordance with Rule -17, places a limit of 3999971 bytes on the size of your -upload.

    -

    Once the contest is in the judging state (or -closed state), you may NOT upload submissions.

    -

    While the contest is open or in the -judging state, the IOCCC judges -MAY (but are not required to) modify the slot comment of your submission to -indicate that they have received it. If uploaded submission is malformed, the -IOCCC judges MAY (but are not required to) modify the slot -comment accordingly.

    -

    You are STRONGLY advised to use the mkiocccentry(1) tool -as found in the mkiocccentry repo -to form the file to upload to the submit server.

    -

    The submit server will become active when the -contest is open. Until the contest status becomes -open, the submit server may -be offline and/or unresponsive.

    -

    See the -FAQs on “obtaining, compiling, installing and using the latest release of the mkiocccentry tools” -for more information about the mkiocccentry(1) tool.

    -

    See the “Important IOCCC dates” section above for when these contest states are scheduled.

    -

    See also Rule 3 and Rule 17.

    -

    Jump to: top

    -
    -

    Rule 9

    -
    -

    Each PERSON may register ONLY ONE account and each account may submit up to -and including 10.000000 (ten in base 10) submissions PER contest.

    -

    Each submission must be submitted separately.

    -

    If this seems unreasonable we suggest you wait until the next contest and in -the interim ponder this (modified or not) quote said by Bill Gates:

    -
    -

    640K submissions ought to be enough for anybody.

    -

    – Bill Gates s/640K/10/ (allegedly :-) )

    -
    -

    Jump to: top

    -
    -

    Rule 10

    -
    -

    Entries requiring human interaction to be initially compiled are not -permitted. However, see the guidelines.

    -

    Jump to: top

    -
    -

    Rule 11

    -
    -

    Programs that require special privileges (setuid(2), setgid(2), -super-user, special owner, special group, etc.) are still HIGHLY -DISCOURAGED. We do not guarantee these functions will behave as -you expect on our test platforms. If your program needs special -permissions you MUST document this fact, and explain why -it is needed in your submission’s remarks.md file.

    -

    Furthermore, if you need a supplementary program that you include, to have these -permissions, you will also have to explain this, because these bits are not -allowed in submissions and those bits will not be copied by mkiocccentry(1).

    -

    See also Rule 17.

    -

    Jump to: top

    -
    -

    Rule 12

    -
    -

    Legal abuse of the rules is somewhat encouraged. A submission that, in -the opinion of the judges, violates the rules WILL BE DISQUALIFIED. -Submissions that attempt to abuse the rules MUST try to justify why -their rule abuse is legal, in the remarks.md file.

    -

    See also the warning about rule abuse.

    -

    Jump to: top

    -
    -

    Rule 13

    -
    -

    7 out of 13 UTF-8 characters in C code agree that this rule number is lucky -enough to be a prime number.

    -

    Fun fact: the fear of the number 13 is called triskaidekaphobia.

    -

    Jump to: top

    -
    -

    Rule 14

    -
    -

    Any C source that fails to compile because of lines with trailing -control-M’s (i.e., lines with a trailing byte 015) might be rejected.

    -

    Please do NOT put trailing control-M’s on prog.c, Makefile, or -remarks.md files but instead end lines with a trailing newline (i.e., -byte 012) character.

    -

    As we do NOT use DOS, please also be sure that the Makefile and -remarks.md files end in final newline (i.e., byte 012) character.

    -

    You are permitted, in order to try and squeeze your prog.c under -a Rule 2a and/or Rule 2b limit, to NOT -end your prog.c with a newline (i.e., byte 012) character. -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.

    -

    Jump to: top

    -
    -

    Rule 15

    -
    -

    In order to register for the IOCCC, you MUST have a valid email address.

    -

    The judges are NOT responsible for delays in email, so please plan -enough time accordingly.

    -

    See the -FAQ on “how to register” -for details.

    -

    Jump to: top

    -
    -

    Rule 16

    -
    -

    Submissions that are similar to previous winning IOCCC entries are discouraged.

    -

    You are allowed to resubmit to a later contest, a submission that -did not 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 did not previously win, then -you are encouraged to mention this in your remarks.md file -as this sometimes helps.

    -

    Resubmitting an improved submission that did not become an -IOCCC winning entry is a time honored tradition of the IOCCC. -There are some IOCCC winning entries that were submitted to multiple contests -before they were improved enough to “climb over” (as the expression -goes) all the other submissions for a given contest.

    -

    Jump to: top

    -
    -

    Rule 17

    -
    -

    Your submission must be in the form of a xz compressed tarball that -the current released version of the mkiocccentry(1) tool would generate. -The files, directories, and paths MUST conform to the limits imposed -by mkiocccentry(1) including but NOT LIMITED to their names, count, -path length, directory tree depth and permissions.

    -

    Your xz compressed tarball must be larger than 0 bytes and no larger -than 3999971 bytes.

    -

    The sum of the byte lengths of all files, after the xz compressed tarball is untarred, -must NOT exceed 27651*1024 bytes.

    -

    Your xz compressed tarball submission file MUST pass the tests performed by -the current version of txzchk(1).

    -

    Your xz compressed tarball submission filename MUST pass the tests -performed by the current version of fnamchk(1).

    -

    When your xz compressed tarball submission file is untarred, the -resulting directory MUST pass the checks performed by the current version -of chksubmit(1).

    -

    The resulting prog.c file MUST pass the Rule 2 size checks performed by the current -version of iocccsize(1).

    -

    The .auth.json and .info.json MUST be compatible with what the -current version of the mkiocccentry(1) tool would produce. They MUST -ALSO pass the tests performed by the current version of chksubmit(1).

    -

    The required Makefile must NOT be empty.

    -

    The required remarks.md must NOT be empty.

    -

    You may NOT submit a tarball created by the -d or -s seed option of +authors who skilfully employed various techniques to develop their code. +While it isn’t required, you are allowed to use tools to develop and +test your submission. These tools may include, but aren’t limited to +code generators, code analysis tools, static code analysis tools, runtime +analysis tools, machine learning tools, natural language models, code +copilot tools, so-called AI services, large language models (LLMs), etc. +If you do make use of such tools or services, then we encourage you to +describe what tools and how you used those tools, in your remarks.md file.

    +

    See Rule 16 Anonymous.

    +

    Rule 8 Submission

    +

    The Submit Server will only accept submissions from those who have +registered and only while the contest is open.

    +

    The Submit Server places a total submission size limit of 3999971 bytes.

    +

    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).

    +

    See +Rule 3 Register, +Rule 15 Building, +and +Rule 17 Packaging.

    +

    Rule 9 No hands

    +

    Entries requiring human interaction to be initially compiled are NOT +permitted. However, see the guidelines. Each entry MUST automated the +its build process using bash, gmake, gcc, clang, under a SUS +environment.

    +

    Note references to gmake can be any GNU Make compatible tool.

    +

    See Rule 17 Building.

    +

    Rule 10 Privileges

    +

    Programs that require special privileges (setuid(2), setgid(2), +super-user, special owner, special group, etc.) are HIGHLY DISCOURAGED. +We do NOT guarantee these functions will behave as you expect on our +test platforms. If your program needs special permissions you MUST +document this fact and explain why it is needed in your submission’s +remarks.md file.

    +

    Furthermore, if you need a supplementary program that you include to +have these permissions, you will also have to explain this, because these +bits are NOT allowed in submissions and those bits will NOT be copied by mkiocccentry(1).

    -

    -The maximum number of files your submission tarball may contain, not counting -the free files (prog.c, remarks.md, Makefile, prog.alt.c, try.sh, -try.alt.sh and the two files generated by mkiocccentry, .info.json and -.auth.json) is 31. -

    -

    -The maximum number of directories your submission may have is 13 and the maximum -depth a path may have is 4. -

    -

    -The maximum filename length (a component of a path) is 38 which means the -maximum length total of a path is 60 characters. -

    -

    See the -FAQ on “what extra files are and how to include more” -as well as the guidelines on extra files -for more details.

    -

    TL;DR Rule 17 - Use mkiocccentry(1) to form your submission

    -

    Let the current version of the mkiocccentry(1) tool form your xz -compressed tarball submission file.

    -

    Warning

    -

    Using command line flags or input prompts to override checks and -limits made by the above mentioned tools is NOT recommended -and may result in your submission being rejected by the IOCCC -submit server and/or the IOCCC Judges.

    -

    See the -FAQ on the “mkiocccentry toolkit -for how to obtain and use the above mentioned tools.

    -

    IMPORTANT: See the -FAQ on “Rule 17” -for very important details behind this rule.

    -

    Jump to: top

    -
    -

    Rule 18

    -
    -

    The entirety of your submission must be submitted under the following license:

    -
    -

    CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0 International

    -
    -

    See also Rule 7.

    -

    Jump to: top

    -
    -

    Rule 19

    -
    -

    The remarks.md file, a required non-empty file, must be written in -Markdown format.

    -

    We currently use pandoc(1) to automatically -convert markdown to HTML. Please try to avoid submitting an HTML file -translation to any markdown file. If you MUST submit such an HTML -translation, PLEASE mention this in your remarks.md file.

    -

    For any submission that wins the contest, we modify your remarks.md file and -rename it as README.md and then use pandoc(1) -to generate the index.html file in the top level directory of your submission. -For this reason, mkiocccentry(1) will NOT package such files (in the top -level submission directory) and both txzchk(1) and chksubmit(1) will flag -them as errors (in the top level submission directory) as well, so please do -NOT try and slip these files in the top level directory where your -remarks.md resides.

    -

    See the Markdown Cheat Sheet -for a handy quick reference to the Markdown syntax.

    -

    See the Markdown guide -for free and open-source reference guide that explains -how to use markdown.

    -

    See also the Daring Fireball Markdown: -Basics for -information on the markdown format.

    -

    PLEASE see our -FAQ on “remarks.md” -AND the -IOCCC markdown guidelines for additional markdown guidance.

    -

    Jump to: top

    -
    -

    Rule 20

    -
    -

    The how to build instructions must be in GNU Makefile format. See the -FAQ about “make(1) compatibility the IOCCC supports -for more details.

    -

    You are ENCOURAGED to use the -Makefile example, renamed as Makefile of course, for help in constructing your -Makefile. See the Makefile section in the -guidelines for more details.

    -

    The target of the Makefile must be called prog. The original -C source file must be called prog.c.

    -

    To invoke the C compiler, use ${CC}. To invoke the C preprocessor use -${CPP}.

    -

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

    -

    When make clobber is invoked, we request that your submission directory be restored -to its original submission state. For example, any temporary files -created during the build process, or during execution should be -removed by the clobber rule.

    -

    Your Makefile MUST use a syntax that is compatible with bash(1) -AND GNU make(1). You are ENCOURAGED to use SHELL= bash in -your Makefile. Please add a space between the = and the value.

    -

    Assume that commands commonly found in Single UNIX -Specification -environments and systems that conform to the Single UNIX -Specification are -available in the $PATH search path.

    -

    Jump to: top

    -
    -

    Rule 21

    -
    -

    Your submission MUST NOT create or modify files ABOVE the current directory -with the exception of the /tmp and the /var/tmp directories. Your submission -MAY create subdirectories below the submission directory, or in /tmp, -or in /var/tmp provided that . is NOT the first byte in any -directory name or filename you create.

    -

    If you do create files and directories, PLEASE be sure that -the clobber rule of your Makefile removes such created files -in order to restore your submission to its original submission state.

    -

    See also Rule 5.

    -

    Jump to: top

    -
    -

    Rule 22

    -
    -

    Catch 22:

    -

    Your source code, data files, remarks and program output MUST NOT -identify the authors of your code. The judges STRONGLY PREFER to -NOT know who is submitting entries to the IOCCC.

    -

    Even if you are a previous IOCCC winner, catch 22 still applies.

    -

    Identifying the author(s) of your submission in an obvious way anywhere -within your code, data, remarks or program output (unless you are -Peter Honeyman or pretending to be Peter Honeyman) will be grounds -for disqualification of your submission.

    -

    And don’t assume that we won’t be able to determine your name even if it’s not -obvious, because you stand a significant chance of violating this rule if you -do.

    -

    Yes, Virginia, WE REALLY MEAN IT!

    -

    Jump to: top

    -
    -

    Rule 23

    -
    -

    This prime rule number is reserved for future use.

    -

    Jump to: top

    -
    -

    Rule 24

    -
    -

    Even though 24 is not prime, you should still see Rule 23.

    -

    Jump to: top

    -
    -

    Rule 25

    -
    -

    -The IOCCC rule set needs more than 5^2 rules: see Rule 26. -

    -

    Jump to: top

    -
    -

    Rule 26

    -
    -
    -

    “The quick brown fox jumps over the lazy dog”.
    -“Pack my box with five dozen liquor jugs.”
    -“How vexingly quick daft zebras jump!”
    -“Sphinx of black quartz, judge my vow.”
    -“Waltz, bad nymph, for quick jigs vex.”
    -“Mr. Jock, TV quiz PhD, bags few lynx.”
    -“abcdefg, hijklmnop, qrstu&v, wxy&z.”

    -
    -

    Jump to: top

    -
    -

    Rule 27

    -
    -

    Unless otherwise needed, Rule 27 is reserved for something cubic. :-)

    -

    Jump to: top

    -
    -

    Rule 28

    -
    -

    Rule 28 is a perfect way to end the list of IOCCC rules -as we do NOT plan to have 496 rules. :-)

    -

    Jump to: top

    -
    -
    -

    FOR MORE INFORMATION:

    -
    -
    -

    For questions or comments about the contest, see Contacting the IOCCC.

    -

    Be SURE to review the IOCCC Rules and Guidelines as they -may (and often do) change from year to year.

    -

    PLEASE be SURE you have the current IOCCC rules and -IOCCC guidelines prior to submitting to the contest.

    -

    See the Official IOCCC website news for additional information.

    -

    For the updates and breaking IOCCC news, you are encouraged to follow -the IOCCC on Mastodon account. See our -FAQ on “Mastodon” -for more information. Please do note that unless -you are mentioned by us you will NOT get a notification from the app so you -should refresh the page even if you do follow us.

    -

    Check out the Official IOCCC winner website in general.

    -

    Consider joining the IOCCC discord community via this link: -https://discord.gg/Wa42Qujwnw

    -

    See the -FAQ on “obtaining, compiling, installing and using the mkiocccentry tools” -and the -FAQ on “how to enter the IOCCC” -as that FAQ has important details on -how to register -as well as -how to upload your submission for the IOCCC.

    -

    Jump to: top

    -

    Leonid A. Broukhis
    -chongo (Landon Curt Noll) /\cc/\

    -
    -

    Jump to: top +

    See Rule 4 Files, +and +Rule 5 Purity.

    +

    Rule 11 Abuse

    +

    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 +risks that the submission will be rejected.

    +

    If you do submit a rule abusing or violating submission, then consider +also submitting an alternate version in a different submission server +slot that does NOT violate the rules in case your rule abuse excuse +is rejected.

    +

    IMPORTANT: If you do submit such an alternate non-rule abusing +version, please indicate that in your remarks.md file of your non-rule +abusing version so that the Judges don’t think you uploaded a duplicate +into a wrong slot by mistake.

    +

    Rule 12 UTF-8

    +

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

    +

    Rule 13 Newlines

    +

    Any C source that fails to compile because lines contain carriage-returns +(CTRL+M, \r) in particular as part of DOS/Windows style newlines might +be rejected. Please do NOT put trailing CTRL+M in prog.c, Makefile, +or remarks.md files, but instead end lines with Unix newline (line-feed, +CTRL+J, \n).

    +

    You are permitted, in order to try and squeeze your prog.c under a +Rule 2a Gross Size and/or +Rule 2b Next 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.

    +

    Rule 14 Resubmit

    +

    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.

    +

    Rule 15 Building

    +

    The Makefile MUST adhere to GNU Make file syntax. Its recommended +that you copy and rename the Makefile.example as 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 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 Makefile MUST use a syntax that is compatible with +bash(1) and GNU make(1). You are encouraged to use SHELL= bash in your Makefile; please add a space between the = and +the value. Assume that commands commonly found in +Single UNIX Specification +environments and systems are available in the search $PATH. +Avoid command options that aren’t part of +SUS, +such as GNU long name options --example or extensions like grep -P.

    +

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

    +

    See Rule 4 Files.

    +

    Rule 16 Anonymous

    +

    Your source code, data files, remarks, and program output MUST NOT +identify the author(s) of your code (unless you are Peter Honeyman +or pretending to be Peter Honeyman). In order to be impartial the +Judges 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.

    +

    Rule 17 Packaging

    +

    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 +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.

    +

    The submission MUST be a .txz compressed tarball as constructed by +mkiocccentry(1), which MUST be within [1..3999971] bytes in size. +The sum of all file lengths, after unpacking from the tarball, MUST be +less than 27651*1024 bytes.

    +

    The tarball file MUST pass all txzchk(1) checks and the tarball +filename MUST pass all fnamchk(1) checks. You may NOT submit a tarball +created by the -d or -s seed options of mkiocccentry(1).

    +

    The unpacked submission directory MUST pass the checks performed by the +current version of chksubmit(1).

    +

    The prog.c file MUST pass the Rule 2 Size +size checks performed by iocccsize(1). The Makefile and remarks.md files cannot +be empty. The .auth.json and .info.json files MUST be compatible with what +mkiocccentry(1) generates.

    +

    Submissions that package using older versions of the mkiocccentry +toolkit to are HIGHLY LIKELY to be REJECTED! Be sure +that you are using the latest tools from the +mkiocccentry toolkit +GitHub repo.

    +

    In summary it is best to use mkioccentry(1) to package your submission, rather than roll-it-by-hand.

    +

    See Rule 4 Files.

    +

    Rule 18 License

    +

    The entirety of your submission MUST be submitted under the following license:

    +

    CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0 International

    +

    See Rule 7 Original Work.

    +

    Rule 19 Prime

    +

    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.

    +

    Further Reading

    +

    Please read the Guidelines next for further +commentary on The Rules.

    +

    See also the FAQ.

    +

    Consider joining our Discord +server for discussions about The Rules, questions for the Judges, and +C in general.

    +

    Leonid A. Broukhis +chongo (Landon Curt Noll) /\cc/\

    diff --git a/next/rules.md b/next/rules.md index 22205df0d..bea2a7ceb 100644 --- a/next/rules.md +++ b/next/rules.md @@ -26,934 +26,419 @@ app from time to time to view IOCCC mastodon updates. -# 28th International Obfuscated C Code Contest Official Rules -

    -Copyright © 2024-2025 Leonid A. Broukhis and Landon Curt Noll. -

    +29th International Obfuscated C Code Contest Official Rules +------------------------------------------------------------ + +Copyright © 2024-2025 Leonid A. Broukhis and Landon Curt Noll. All Rights Reserved. Permission for personal, education or non-profit use is granted provided this this copyright and notice are included in its entirety -and remains unaltered. All other uses must receive prior permission in +and remains unaltered. All other uses **MUST** receive prior permission in writing by [contacting the judges](../contact.html). -Jump to: [top](#) +Rules version +------------- + +These IOCCC Rules are version **29.00 2025-11-19**. + +Be sure to read the [IOCCC guidelines](guidelines.html). -
    -
    -## IOCCC Rules version -
    -
    +Rule 0 Dates +------------ -

    -These [IOCCC rules](rules.html) are version **28.31 2025-11-17**. -

    +This IOCCC runs from ${START_DATE_TIME} UTC to ${CLOSE_DATE_TIME} UTC. -The markdown form of these rules is -available for download. +This contest will enter the open state on ${OPEN_DATE_TIME} UTC. -**IMPORTANT**: Be sure to read the [IOCCC guidelines](guidelines.html). +This contest will enter the judging state on ${JUDGMENT_DATE_TIME} UTC. + +The above dates are subject to change until the contest is officially open. + +**NOTE**: As of this draft, the above dates are TBD (to be determined). -Jump to: [top](#) +Rule 1 Program +--------------- + +Your submission **MUST** be C program. -
    -### Change marks -
    +Rule 2 Size +----------- -

    -**← Lines that start with this symbol indicate a change from the previous IOCCC** -

    +`Rule 2` requires that your submission satisfy **BOTH** +[Rule 2a Gross Size](rules.html#rule-2a-gross-size) +and +[Rule 2b Next Size](rules.html#rule-2b-net-size). +During development this can be checked using `iocccsize(1)`: -

    -Most lines that were modified since the previous IOCCC start with a solid -4 pixel black left border (or, in the case of a code block or blockquote, -just a vertical bar). We say _most lines_ because we sometimes forget -to bar modified sections. -

    - - -Jump to: [top](#) - - -
    -# Obfuscate defined: -
    - -tr.v. -cated, -cating, -cates. -

    -**1a.** To render obscure.
    -**1b.** To darken. -

    -**2.** To confuse: his emotions obfuscated his judgment.
    -    [LLat. obfuscare, to darken : ob(intensive) + Lat. fuscare,
    -    to darken < fuscus, dark.] -obfuscation n. obfuscatory adj. - - -Jump to: [top](#) - - -
    -# Goals of the IOCCC (International Obfuscated C Code Contest) -
    - -

    -See the [IOCCC goals](../index.html#goals). -

    - -Jump to: [top](#) - - -
    -# Important IOCCC dates -
    - -

    -This IOCCC runs from **2024-12-29 23:58:13.213455 UTC** to **2025-06-05 04:03:02.010099 UTC**. -This IOCCC marks the **40th anniversary** of the contest! -

    - -

    -This contest will enter the **[open](../faq.html#open)** state on **2025-03-05 23:19:17.131107 UTC**. -

    - -

    -This contest will enter the **[judging](../faq.html#judging)** state on **2025-06-05 04:03:02.010099 UTC**. -

    - -

    -**IMPORTANT NOTE**: Until the contest enters the **[open](../faq.html#open)** state, any or all -of the above **dates and times may change**! -

    - -See the -FAQ on "[obtaining and compiling the mkiocccentry tools](../faq.html#mkiocccentry)" -and the -FAQ on "[how to enter the IOCCC](../quick-start.html#enter)" -as that FAQ has important details on -[how to register](../next/register.html) -as well as -[how to upload your submission](../next/submit.html) to the IOCCC. - - -Jump to: [top](#) - - -
    -# IOCCC RULES -
    - -To help us with the volume of submissions, we ask that you follow the rules below. - -
    -#### A warning about rule abuse -
    - -**WARNING:** Abusing these rules comes with a **fair amount of risk** -that your submission will be rejected. If you do plan to abuse the -rules, then you **MUST CLEARLY EXPLAIN THE RATIONALE** in your `remarks.md` file, -as to why you think your rule abuse should be allowed, and as to why you think -your submission should not be rejected for a rule violation. -**Nevertheless, _even if you do_ explain this in your `remarks.md` file -you submission may still be rejected**. - -If you use the most recently released official IOCCC submission packaging tool -(hereby referred to as `mkiocccentry(1)`), which we **STRONGLY recommend you -do**, then the `mkiocccentry(1)` tool will warn you if there appears to be a -violation in certain rules (not all can be detected). The `mkiocccentry(1)` -tool also runs `chksubmit(1)` and `txzchk(1)`, the latter of which runs -`fnamchk(1)`. Overriding problems detected by any of these tools comes with a -**fair amount of risk** that your submission will be rejected. - -If you do override a rule violation warning from the `mkiocccentry(1)` or -another related IOCCC tool, or otherwise plan to abuse the rules, then you -**MUST CLEARLY EXPLAIN THE RATIONALE** of why you are attempting to abuse the -rules in your `remarks.md` file. **_Even if you do_ explain this in your -`remarks.md` file your submission may still be rejected**. - -**HINT:** If you do submit such a rule abusing / rule violating -submission, then consider also submitting an alternate version in a -**different submission** server slot that does **NOT** violate the rules -in case your rule abuse excuse is rejected. - -**IMPORTANT**: if you do submit such an alternate non-rule abusing version, -**PLEASE** indicate that in your `remarks.md` file of your non-rule abusing -version so that the [IOCCC judges](../judges.html) do not think you uploaded a -duplicate into a wrong slot by mistake. - -Uploading a tarball not formed by `mkiocccentry(1)` puts you at a very big risk of -violating [Rule 17](rules.html#rule17), especially as `mkiocccentry(1)` does a -great number of things that are required, and it also runs many checks, and if -any of those checks fail, you are at a very great risk of having your submission -rejected for violating [Rule 17](rules.html#rule17). - -See also [Rule 12](#rule13). - - -Jump to: [top](#) - - -
    -## Rule 0 -
    - -Just as C starts at 0, so the IOCCC starts at [Rule 0](#rule0). :-) - -The "[Important IOCCC dates](#dates)" section above is part of this rule. - - -Jump to: [top](#) - - -
    -## Rule 1 -
    - -Your submission must be a C program. - -You see, the contest is not called the **International Obfuscated JSON Contest** -(**IOJSONC**), even if the [so-called JSON -spec](https://github.com/xexyl/jparse/blob/master/json_README.md#so-called-json-spec) might be called obfuscated -by some people. :-) - - -Jump to: [top](#) - - -
    -## Rule 2 -
    - -[Rule 2](#rule2) requires that your submission satisfy **BOTH** [Rule -2a](#rule2a) **AND** [Rule 2b](#rule2b). - -You may check your code with respect to [Rule 2a](#rule2a) and [Rule -2b](#rule2b) prior to submitting your code by giving the filename -as a command like argument to the `iocccsize(1)` tool. For example: - -``` iocccsize prog.c + +### Rule 2a Gross Size + +The overall maximum size of your `prog.c` program source **MUST NOT** +exceed **4993** bytes. + + +### 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 +NOT** exceed **2503**. + + +Rule 3 Register +--------------- + +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**. + +A few days after registering, you'll receive your UUID username and +temporary password, which you **MUST** change within 14 days. If you +fail to change it in a timely manner, you'll need to +[contact the Judges](../contact.html) by email to request a reset. + +It can take a few days to process your registration and for the server to +email your details, therefore make sure to allow yourself ample time to +register and submit your entries; **DO NOT WAIT UNTIL THE FINAL DAYS** +to register! The judges are **NOT** responsible for delayed or lost +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). + + +Rule 4 Files +------------ + +The submission **MUST** include at least these files: `Makefile`, `prog.c`, +`remarks.md`,`.info.json`, and `.auth.json`. The last two **MUST** be +generated by `mkiocccenty(1)` when packing a submission, and **MUST** +pass the `chksubmit(1)` tests. + +The `Makefile`, `remarks.md`,`.info.json`, and `.auth.json` **MUST** +have a file size **greater than 0**. + +Your submitted source code **MUST** be called `prog.c`. When the `Makefile` +compiles your code, the executable (if applicable) **MUST** be called `prog`. + +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`, `prog.alt`, +`prog.alt.o`, `prog.o`, `prog`, `prog.orig.c`, `README.md`, nor `index.html` +as those files reserved by IOCCC. + +Your submission may **NOT** have a file in the top directory that matches +a file glob pattern of the 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. + +All directories **MUST** have a file 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. +We recommend that markdown files observe our +[IOCCC markdown guidelines](../markdown.html). + +All filenames are treated as case insensitive. For example, `REMARKS.MD`, +and `Remarks.md`, and `remarks.md` are considered by `mkiocccenty(1)` +to be the **SAME** file. If you are preparing your submission on a case +sensitive filesystem, ensure that your submission will work on +a case insensitive filesystem. + +The `remarks.md` and `Makefile` are explained in more detail in the Guidelines. + +See [Rule 17 Packaging](rules.html#rule-17-packaging). + + +Rule 5 Purity +------------- + +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. + + +Rule 6 Free +----------- + +I am **NOT** a Rule, I am a `free(void *human);` ‼️ + +```c + while (!(ioccc(rule(you(are(number(6)))))) { + ha(); ha(); ha(); + } ``` -The source to `iocccsize(1)` may be found in the -[mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry). - -See also the -FAQ on "[how to further test your submission](../faq.html#mkiocccentry_test)" -for more more thorough testing, including [Rule 2](#rule2). +See [Rule 19 Prime](rules.html#rule-19-prime). -See also [Rule 2a](#rule2a), [Rule 2b](#rule2b), and [Rule 17](#rule17). +Rule 7 Original Work +-------------------- -Jump to: [top](#) +In short: You wrote it, you own it, and its an original work. - -
    -## Rule 2a -
    - -

    -The size of your program source **MUST NOT exceed 4993 bytes**. -

    - -Jump to: [top](#) - - -
    -## Rule 2b -
    - -When the filename of your program source is given as a command line argument to -the latest version of the official IOCCC size tool (hereby referred to as -`iocccsize(1)`), the value printed **MUST NOT exceed _2503_**. - -See also [Rule 17](#rule17). - -Jump to: [top](#) - - -
    -## Rule 3 -
    - -You must [register](../next/register.html) in order to submit your entry to the IOCCC. -You may [register](../next/register.html) while the contest is either -**[pending](../faq.html#pending)** or **[open](../faq.html#open)**. - -When the contest is **[open](../faq.html#open)**, the [submit server](https://submit.ioccc.org) -will email you your [submit server](https://submit.ioccc.org) -**Username** and **Initial password**. **Please be patient** as it may take some time, -perhaps as much as a few days, for your registration to be processed and for that email to be sent. - -Those who [register](../next/register.html) while the contest status is **[pending](../faq.html#pending)** -will receive their email (containing their [submit server](https://submit.ioccc.org) **Username** -and **Initial password**), later: usually a few days around the time when the contest status -becomes **[open](../faq.html#open)**. - -Once that email with your **Username** and **Initial password** is sent, you -will have fortnight (**14 days**) to [change your submit server initial password](../next/pw-change.html). - -If you do not change your **Initial password** in time, you will have to -[send email to the IOCCC judges](../contact.md#if-you-really-need-to-send-email-the-ioccc-judges) -to ask for your password to be reset. - -Because it takes time (maybe even a few days) to process your registration -and for the server to email you your initial login and password, you -should **MAKE SURE** you give yourself enough time to register well -before the contest closes. In other words, **DO NOT WAIT UNTIL THE FINAL DAYS** -of the contest to register! The [IOCCC judges](../judges.html) -are **NOT** responsible for delayed or lost email, or for those who wait -until the last minute to try to register! - -See the -FAQ on "[how to register and submit to the IOCCC](../quick-start.html#enter)" -for instructions on registering and participating in the IOCCC, as the process -may change from contest to contest. - -See also [Rule 8](#rule8). - - -Jump to: [top](#) - - -
    -## Rule 4 -
    - -If your submission is selected as a winning entry, then your submission may be modified in order -to fit into the structure of the [Official IOCCC winner website](https://www.ioccc.org/index.html). - -For example, your submission's `Makefile` will be modified and your `remarks.md` -will become a `README.md` which will be used to generate an `index.html` file. - -Your source code will be the file `prog.c`. The compiled binary -will be called `prog`. If you submission requires different filenames, -then modify your submission's `Makefile` to **COPY** (**NOT** move!) the files -accordingly. - -Of course your program may also do this, as long as it works, but you're welcome -to use your `Makefile` as well. - -See also [Rule 5](#rule5), [Rule 18](#rule18) and [Rule 21](#rule21). - - -Jump to: [top](#) - - -
    -## Rule 5 -
    - -Your submission must **NOT** modify the _content_ **OR** _filename_ of **ANY** -part of your original submission including, but not limited to `prog.c`, the -`Makefile` or any data files you submit. - -If you submission needs (or wishes :-) ) to modify such content, it **MUST** -first copy the file to a new filename and then modify that copy. - -You may use your submission (program) to form a copy, or you can make use of -your `Makefile` to form that copy. - -If you do make a copy of a submission file, **PLEASE** be sure that -the `clobber` rule of your `Makefile` removes that copy in order to -restore your submission to its original submission state. - - -Jump to: [top](#) - - -
    -## Rule 6 -
    - -I am not a rule, I am a `free(void *human);` ‼️ - -        `while (!(ioccc(rule(you(are(number(6)))))) {`
    -                `ha_ha_ha();`
    -        `}` - - -Jump to: [top](#) - - -
    -## Rule 7 -
    - -The obfuscated C program must be your own original work. - -You (the author(s)) **MUST** own the contents of your submission **OR** -you **MUST** have permission from the owner(s) to submit their content. - -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. - -Please note that the tools in [mkiocccentry -repo](https://github.com/ioccc-src/mkiocccentry) are **NOT** original works, -unless of course you're the original authors, in which case they are original. :-) - -Nevertheless tools such as those listed are **NOT** obfuscated. If submitted, they -would probably violate a number of rules. :-) - -- [mkiocccentry(1)](https://github.com/ioccc-src/mkiocccentry/blob/master/mkiocccentry.c) -- [iocccsize(1)](https://github.com/ioccc-src/mkiocccentry/blob/master/iocccsize.c) -- [chksubmit(1)](https://github.com/ioccc-src/mkiocccentry/blob/master/chksubmit.c) -- [txzchk(1)](https://github.com/ioccc-src/mkiocccentry/blob/master/txzchk.c) -- [location(1)](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/location_main.c) -- [jparse repo as cloned by the mkiocccentry repo](https://github.com/xexyl/jparse) -- [dbg repo as cloned by the mkiocccentry repo](https://github.com/lcn2/dbg) -- [dyn_array repo as cloned by the mkiocccentry repo](https://github.com/lcn2/dyn_array) +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. The IOCCC has a rich history of remarkable winning entries created by -authors who skillfully employed various techniques to develop their code. -While it is **NOT** required, you are _allowed_ to use tools to develop -and test your submission. These tools may include, but are not limited -to code generators, code analysis tools, static code analysis tools, -runtime analysis tools, machine learning tools, natural language models, -code copilot tools, so-called AI services, large language models (LLMs), etc. -If you do make use of such tools or services, then we **ENCOURAGE you to describe -what tools and how you used those tools**, in your `remarks.md` file. +authors who skilfully employed various techniques to develop their code. +While it isn't required, you are allowed to use tools to develop and +test your submission. These tools may include, but aren't limited to +code generators, code analysis tools, static code analysis tools, runtime +analysis tools, machine learning tools, natural language models, code +copilot tools, so-called AI services, large language models (LLMs), etc. +If you do make use of such tools or services, then we encourage you to +describe what tools and how you used those tools, in your `remarks.md` file. -See also [Rule 5](#rule5), [Rule 18](#rule18) and [Rule 21](#rule21). +See [Rule 16 Anonymous](rules.html#rule-16-anonymous). -Jump to: [top](#) +Rule 8 Submission +----------------- + +The Submit Server will only accept submissions from those who have +registered and only while the contest is open. + +The Submit Server places a total submission size limit of **3999971** bytes. + +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)`. + +See +[Rule 3 Register](rules.html#rule-3-register), +[Rule 15 Building](rules.html#rule-15-building), +and +[Rule 17 Packaging](rules.html#rule-17-packaging). -
    -## Rule 8 -
    +Rule 9 No hands +---------------- -Submissions may only be uploaded to the [IOCCC submit server](https://submit.ioccc.org) -while the contest is **[open](../faq.html#open)**. +Entries requiring human interaction to be initially compiled are **NOT** +permitted. However, see the guidelines. Each entry **MUST** automated the +its build process using `bash`, `gmake`, `gcc`, `clang`, under a [SUS +environment](https://pubs.opengroup.org/onlinepubs/9799919799/). -If you have [registered](../next/register.html) and received by email your [submit -server](https://submit.ioccc.org) **Username** and **Initial password** you may -upload your submission to the [submit server](https://submit.ioccc.org) but -**ONLY** while the contest is **[open](../faq.html#open)**. +Note references to `gmake` can be any GNU Make compatible tool. -The [submit server](https://submit.ioccc.org), in accordance with [Rule -17](rules.html#rule17), places a limit of **3999971** bytes on the size of your -upload. - -Once the contest is in the **[judging](../faq.html#judging)** state (or -**[closed](../faq.html#closed)** state), you may **NOT** upload submissions. - -While the contest is **[open](../faq.html#open)** or in the -**[judging](../faq.html#judging)** state, the [IOCCC judges](../judges.html) -**MAY** (but are not required to) modify the slot comment of your submission to -indicate that they have received it. If uploaded submission is malformed, the -[IOCCC judges](../judges.html) **MAY** (but are not required to) modify the slot -comment accordingly. - -You are **STRONGLY** advised to use the `mkiocccentry(1)` tool -as found in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry) -to form the file to upload to the [submit server](https://submit.ioccc.org). - -The [submit server](https://submit.ioccc.org) will become active when the -contest is **[open](../faq.html#open)**. Until the contest status becomes -**[open](../faq.html#open)**, the [submit server](https://submit.ioccc.org) may -be offline and/or unresponsive. - -See the -FAQs on "[obtaining, compiling, installing and using the latest release of the mkiocccentry tools](../faq.html#mkiocccentry)" -for more information about the `mkiocccentry(1)` tool. - -See the "[Important IOCCC dates](#dates)" section above for when these contest states are scheduled. - -See also [Rule 3](#rule3) and [Rule 17](#rule17). +See [Rule 17 Building](rules.html#rule-17-building). -Jump to: [top](#) +Rule 10 Privileges +------------------ + +Programs that require special privileges (setuid(2), setgid(2), +super-user, special owner, special group, etc.) are HIGHLY DISCOURAGED. +We do **NOT** guarantee these functions will behave as you expect on our +test platforms. If your program needs special permissions you **MUST** +document this fact and explain why it is needed in your submission’s +`remarks.md` file. + +Furthermore, if you need a supplementary program that you include to +have these permissions, you will also have to explain this, 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), +and +[Rule 5 Purity](rules.html#rule-5-purity). -
    -## Rule 9 -
    +Rule 11 Abuse +------------- -Each **PERSON** may register **ONLY ONE** account and each account may submit up to -and including **10.000000** (ten in base 10) submissions **PER** contest. +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. -**Each submission _must be submitted separately_**. +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 +risks that the submission will be rejected. -If this seems unreasonable we suggest you wait until the next contest and in -the interim ponder this (modified or not) quote said by Bill Gates: +If you do submit a rule abusing or violating submission, then consider +also submitting an alternate version in a different submission server +slot that does **NOT** violate the rules in case your rule abuse excuse +is rejected. -> 640K submissions ought to be enough for anybody. -> -> -- Bill Gates s/640K/10/ (allegedly :-) ) +**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. -Jump to: [top](#) +Rule 12 UTF-8 +------------- + +Use of UTF-8 is supported by `C89` standard and its updates and so too by the IOCCC. -
    -## Rule 10 -
    +Rule 13 Newlines +---------------- +Any C source that fails to compile because lines contain carriage-returns +(CTRL+M, `\r`) in particular as part of DOS/Windows style newlines might +be rejected. Please do **NOT** put trailing CTRL+M in `prog.c`, `Makefile`, +or `remarks.md` files, but instead end lines with Unix newline (line-feed, +CTRL+J, `\n`). -Entries requiring human interaction to be initially compiled **are not -permitted**. However, see the [guidelines](guidelines.html). - - -Jump to: [top](#) - - -
    -## Rule 11 -
    - -Programs that require special privileges (`setuid(2)`, `setgid(2)`, -super-user, special owner, special group, etc.) are still **HIGHLY -DISCOURAGED**. We do not guarantee these functions will behave as -you expect on our test platforms. If your program needs special -permissions you **MUST** document this fact, and explain why -it is needed in your submission's `remarks.md` file. - -Furthermore, if you need a supplementary program that you include, to have these -permissions, you will also have to explain this, because these bits are not -allowed in submissions and those bits will not be copied by `mkiocccentry(1)`. - -See also [Rule 17](#rule17). - -Jump to: [top](#) - - -
    -## Rule 12 -
    - -**Legal** abuse of the rules is somewhat encouraged. **A submission that, in -the opinion of the [judges](../judges.html), violates the rules WILL BE DISQUALIFIED**. -Submissions that attempt to abuse the rules **MUST** try to justify why -their rule abuse is legal, in the `remarks.md` file. - -See also [the warning about rule abuse](#rule_abuse). - -Jump to: [top](#) - - -
    -## Rule 13 -
    - -7 out of 13 UTF-8 characters in C code agree that this rule number is lucky -enough to be a prime number. - -Fun fact: the fear of the number 13 is called _triskaidekaphobia_. - - -Jump to: [top](#) - - -
    -## Rule 14 -
    - -Any C source that fails to compile because of lines with trailing -control-M's (i.e., lines with a trailing byte `015`) **might** be rejected. - -Please do **NOT** put trailing control-M's on `prog.c`, `Makefile`, or -`remarks.md` files but instead end lines with a trailing newline (i.e., -byte `012`) character. - -As we do **NOT** use DOS, please also be sure that the `Makefile` and -`remarks.md` files end in final newline (i.e., byte `012`) character. - -You are permitted, in order to try and squeeze your `prog.c` under -a [Rule 2a](#rule2a) and/or [Rule 2b](#rule2b) limit, to **NOT** -end your `prog.c` with a newline (i.e., byte `012`) character. -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 +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 +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. -Jump to: [top](#) +Rule 14 Resubmit +---------------- +Submissions that are substantially similar to previous winning IOCCC +entries are discouraged. -
    -## Rule 15 -
    +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. -In order to register for the IOCCC, you **MUST** have a valid email address. -The [judges](../judges.html) **are NOT responsible for delays in email**, so please plan -enough time accordingly. +Rule 15 Building +---------------- -See the -FAQ on "[how to register](../quick-start.html#register)" -for details. +The `Makefile` **MUST** adhere to GNU Make file syntax. Its recommended +that you copy and rename the `Makefile.example` as 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 `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. -Jump to: [top](#) +The `Makefile` **MUST** use a syntax that is compatible with +`bash(1)` and GNU `make(1)`. You are encouraged to use `SHELL= +bash` in your `Makefile`; please add a space between the `=` and +the value. 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 +[SUS](https://en.wikipedia.org/wiki/Single_UNIX_Specification), +such as GNU long name options `--example` or extensions like `grep -P`. +Do **NOT** assume that `.` (current directory) is in the `$PATH` environment variable. -
    -## Rule 16 -
    +See [Rule 4 Files](rules.html#rule-4-files). -Submissions that are similar to previous winning IOCCC entries are discouraged. -You are allowed to resubmit to a later contest, a submission that -did not 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 did not previously win, then -you are **encouraged** to mention this in your `remarks.md` file -as this **sometimes** helps. +Rule 16 Anonymous +----------------- -Resubmitting an improved submission that did not become an -IOCCC winning entry is a **time honored** tradition of the IOCCC. -There are some IOCCC winning entries that were submitted to multiple contests -before they were improved enough to "climb over" (as the expression -goes) all the other submissions for a given contest. +Your source code, data files, remarks, and program output **MUST NOT** +identify the author(s) of your code (unless you are **Peter Honeyman** +or pretending to be **Peter Honeyman**). In order to be impartial the +[Judges](https://www.ioccc.org/judges.html) do **NOT** know who is submitting +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.*** -Jump to: [top](#) +Rule 17 Packaging +----------------- -
    -## Rule 17 -
    +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. -Your submission must be in the form of a **xz compressed tarball** that -the **current released version** of the `mkiocccentry(1)` tool would generate. -The files, directories, and paths **MUST** conform to the limits imposed -by `mkiocccentry(1)` including but **NOT LIMITED** to their names, count, -path length, 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 +`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**. -Your **xz compressed tarball** must be larger than **0** bytes and no larger -than **3999971** bytes. +The submission **MUST** be a `.txz` compressed tarball as constructed by +`mkiocccentry(1)`, which **MUST** be within **[1..3999971]** bytes in size. +The sum of all file lengths, after unpacking from the tarball, **MUST** be +less than `27651*1024` bytes. -The sum of the byte lengths of all files, after the **xz compressed tarball** is untarred, -must **NOT** exceed `27651*1024` bytes. +The tarball file **MUST** pass all `txzchk(1)` checks and the tarball +filename **MUST** pass all `fnamchk(1)` checks. You may **NOT** submit a tarball +created by the `-d` or `-s` seed options of `mkiocccentry(1)`. -Your **xz compressed tarball** submission _file_ **MUST** pass the tests performed by -the current version of `txzchk(1)`. +The unpacked submission directory **MUST** pass the checks performed by the +current version of `chksubmit(1)`. -Your **xz compressed tarball** submission _filename_ **MUST** pass the tests -performed by the current version of `fnamchk(1)`. +The `prog.c` file **MUST** pass the [Rule 2 Size](rules.html#rule-2-size) +size checks performed by `iocccsize(1)`. The `Makefile` and `remarks.md` files cannot +be empty. The `.auth.json` and `.info.json` files **MUST** be compatible with what +`mkiocccentry(1)` generates. -When your **xz compressed tarball** submission file is untarred, the -resulting _directory_ **MUST** pass the checks performed by the current version -of `chksubmit(1)`. +Submissions that package using older versions of the mkiocccentry +toolkit to are **HIGHLY LIKELY** to be **REJECTED**! Be sure +that you are using the latest tools from the +[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) +GitHub repo. -The resulting `prog.c` file **MUST** pass the [Rule 2](#rule2) size checks performed by the current -version of `iocccsize(1)`. +In summary it is best to use `mkioccentry(1)` to package your submission, rather than roll-it-by-hand. -The `.auth.json` and `.info.json` **MUST** be compatible with what the -current version of the `mkiocccentry(1)` tool would produce. They **MUST -ALSO** pass the tests performed by the current version of `chksubmit(1)`. +See [Rule 4 Files](rules.html#rule-4-files). -The required `Makefile` must **NOT** be empty. -The required `remarks.md` must **NOT** be empty. +Rule 18 License +--------------- -You may **NOT** submit a tarball created by the `-d` or `-s seed` option of -`mkiocccentry(1)`. +The entirety of your submission **MUST** be submitted under the following license: -

    -The maximum number of files your submission tarball may contain, not counting -the free files (`prog.c`, `remarks.md`, `Makefile`, `prog.alt.c`, `try.sh`, -`try.alt.sh` and the two files generated by `mkiocccentry`, `.info.json` and -`.auth.json`) is 31. -

    + [CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/) -

    -The maximum number of directories your submission may have is 13 and the maximum -depth a path may have is 4. -

    +See [Rule 7 Original Work](rules.html#rule-7-original-work). -

    -The maximum filename length (a component of a path) is 38 which means the -maximum length total of a path is 60 characters. -

    -See the -FAQ on "[what extra files are and how to include more](../faq.html#extra-files)" -as well as the [guidelines on extra files](guidelines.html#extra-files) -for more details. +Rule 19 Prime +------------- -### TL;DR Rule 17 - Use `mkiocccentry(1)` to form your submission +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. -Let the current version of the `mkiocccentry(1)` tool form your **xz -compressed tarball** submission file. +See [Rule 6 Free](rules.html#rule-6-free). -### Warning -Using command line flags or input prompts to override checks and -limits made by the above mentioned tools is **NOT** recommended -and may result in your submission being rejected by the [IOCCC -submit server](https://submit.ioccc.org) and/or the [IOCCC Judges](../judges.html). +Further Reading +--------------- -See the -FAQ on the "[mkiocccentry toolkit](../faq.html#mkiocccentry) -for how to obtain and use the above mentioned tools. +Please read the [Guidelines](guidelines.html) next for further +commentary on The Rules. -**IMPORTANT**: See the -FAQ on "[Rule 17](../faq.html#rule17)" -for very important details behind this rule. +See also the [FAQ](../faq.html). +Consider joining our Discord +server for discussions about The Rules, questions for the Judges, and +`C` in general. -Jump to: [top](#) - -
    -## Rule 18 -
    - -The entirety of your submission must be submitted under the following license: - -> **[CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/)** - -See also [Rule 7](#rule7). - - -Jump to: [top](#) - - -
    -## Rule 19 -
    - -The `remarks.md` file, a required non-empty file, must be written in -[Markdown format](https://www.markdownguide.org/basic-syntax/). - -We currently use [pandoc(1)](https://pandoc.org) to automatically -convert markdown to HTML. Please try to avoid submitting an HTML file -translation to any markdown file. If you **MUST** submit such an HTML -translation, **PLEASE** mention this in your `remarks.md` file. - -For any submission that wins the contest, we modify your `remarks.md` file and -rename it as `README.md` and then use [pandoc(1)](https://pandoc.org) -to generate the `index.html` file in the top level directory of your submission. -For this reason, `mkiocccentry(1)` will **NOT** package such files (in the top -level submission directory) and both `txzchk(1)` and `chksubmit(1)` will flag -them as errors (in the top level submission directory) as well, so please do -**NOT** try and slip these files in the top level directory where your -`remarks.md` resides. - -See the [Markdown Cheat Sheet](https://www.markdownguide.org/cheat-sheet/) -for a handy quick reference to the Markdown syntax. - -See the [Markdown guide](https://www.markdownguide.org) -for free and open-source reference guide that explains -how to use markdown. - -See also the [Daring Fireball Markdown: -Basics](http://daringfireball.net/projects/markdown/basics) for -information on the markdown format. - -**PLEASE** see our -FAQ on "[remarks.md](../faq.html#remarks_md)" -**AND** the -[IOCCC markdown guidelines](../markdown.html) for additional markdown guidance. - - -Jump to: [top](#) - - -
    -## Rule 20 -
    - -The how to build instructions must be in GNU Makefile format. See the -FAQ about "[make(1) compatibility the IOCCC supports](../faq.html#make_compatibility) -for more details. - -You are **ENCOURAGED** to use the -Makefile example, renamed as `Makefile` of course, for help in constructing your -`Makefile`. See the [Makefile section](guidelines.html#makefile) in the -guidelines for more details. - -The target of the `Makefile` must be called `prog`. The original -C source file must be called `prog.c`. - -To invoke the C compiler, use `${CC}`. To invoke the C preprocessor use -`${CPP}`. - -Do **NOT** assume that `.` (the current directory) is in the `$PATH`. - -When `make clobber` is invoked, we request that your submission directory be restored -to its original submission state. For example, any temporary files -created during the build process, or during execution should be -removed by the `clobber` rule. - -Your `Makefile` **MUST** use a syntax that is compatible with `bash(1)` -**AND** GNU `make(1)`. You are **ENCOURAGED** to use `SHELL= bash` in -your `Makefile`. Please add a space between the `=` and the value. - -Assume that commands commonly found in [Single UNIX -Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) -environments and systems that conform to the [Single UNIX -Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) are -available in the `$PATH` search path. - - -Jump to: [top](#) - - -
    -## Rule 21 -
    - -Your submission **MUST NOT** create or modify files **ABOVE** the current directory -_with the exception of_ the `/tmp` and the `/var/tmp` directories. Your submission -**MAY** create subdirectories **below** the submission directory, or in `/tmp`, -or in `/var/tmp` provided that `.` is **NOT** the first byte in any -directory name or filename you create. - -If you do create files and directories, **PLEASE** be sure that -the `clobber` rule of your `Makefile` removes such created files -in order to restore your submission to its original submission state. - -See also [Rule 5](#rule5). - - -Jump to: [top](#) - - -
    -## Rule 22 -
    - -Catch 22: - -Your source code, data files, remarks and program output **MUST NOT** -identify the authors of your code. The [judges](../judges.html) **STRONGLY PREFER** to -**NOT** know who is submitting entries to the IOCCC. - -Even if you are a previous IOCCC winner, catch 22 still applies. - -Identifying the author(s) of your submission in an obvious way anywhere -within your code, data, remarks or program output (unless you are -**Peter Honeyman** or pretending to be **Peter Honeyman**) will be grounds -for disqualification of your submission. - -And don't assume that we won't be able to determine your name even if it's not -obvious, because you stand a significant chance of violating this rule if you -do. - -Yes, Virginia, **WE REALLY MEAN IT!** - - -Jump to: [top](#) - - -
    -## Rule 23 -
    - -This prime rule number is reserved for future use. - - -Jump to: [top](#) - - -
    -## Rule 24 -
    - -Even though 24 is not prime, you should still see [Rule 23](#rule23). - - -Jump to: [top](#) - - -
    -## Rule 25 -
    - -

    -The [IOCCC rule set](rules.html) needs more than `5^2` rules: see [Rule 26](#rule26). -

    - - -Jump to: [top](#) - - -
    -## Rule 26 -
    - -> "The quick brown fox jumps over the lazy dog".
    -> "Pack my box with five dozen liquor jugs."
    -> "How vexingly quick daft zebras jump!"
    -> "Sphinx of black quartz, judge my vow."
    -> "Waltz, bad nymph, for quick jigs vex."
    -> "Mr. Jock, TV quiz PhD, bags few lynx."
    -> "abcdefg, hijklmnop, qrstu&v, wxy&z." - -Jump to: [top](#) - - -
    -## Rule 27 -
    - -Unless otherwise needed, [Rule 27](#rule27) is reserved for something cubic. :-) - - -Jump to: [top](#) - - -
    -## Rule 28 -
    - -[Rule 28](#rule28) is a perfect way to end the list of [IOCCC rules](rules.html) -as we do **NOT** plan to have **496** rules. :-) - - -Jump to: [top](#) - -
    -
    -# FOR MORE INFORMATION: -
    -
    - -For questions or comments about the contest, see [Contacting the IOCCC](../contact.html). - -**Be SURE** to review the [IOCCC Rules and Guidelines](index.html) as they -may (and **often do**) change from year to year. - -**PLEASE** be **SURE** you have the **current** [IOCCC rules](rules.html) and -[IOCCC guidelines](guidelines.html) prior to submitting to the contest. - -See the [Official IOCCC website news](../news.html) for additional information. - -For the updates and breaking IOCCC news, you are encouraged to follow -the [IOCCC on Mastodon](https://fosstodon.org/@ioccc) account. See our -FAQ on "[Mastodon](../faq.html#try_mastodon)" -for more information. Please do note that unless -you are mentioned by us you will **NOT** get a notification from the app _so you -should refresh the page **even if you do follow us**_. - -Check out the [Official IOCCC winner website](https://www.ioccc.org/index.html) in general. - -Consider joining the IOCCC discord community via this link: -[https://discord.gg/Wa42Qujwnw](https://discord.gg/Wa42Qujwnw) - -See the -FAQ on "[obtaining, compiling, installing and using the mkiocccentry tools](../faq.html#mkiocccentry)" -and the -FAQ on "[how to enter the IOCCC](../quick-start.html#enter)" -as that FAQ has important details on -[how to register](../next/register.html) -as well as -[how to upload your submission](../next/submit.html) for the IOCCC. - - -Jump to: [top](#) - - -**Leonid A. Broukhis**
    -**chongo (Landon Curt Noll) `/\cc/\`** - - -
    - - -Jump to: [top](#) +Leonid A. Broukhis +chongo (Landon Curt Noll) /\\cc/\\ diff --git a/next/submit.html b/next/submit.html index 4c18569e9..dfca6f01e 100644 --- a/next/submit.html +++ b/next/submit.html @@ -517,8 +517,8 @@ the file selection step.

    • the status of the submission
    • the filename, which will be in the correct format, assuming you used -mkiocccentry(1) which is HIGHLY recommended so that you do not break Rule -17!
    • +mkiocccentry(1) which is HIGHLY recommended so that you do not break +Rule 17 Packaging!
    • the file length, which txzchk(1) will also verify (the file itself and the tarball listing).
    • the upload date.
    • @@ -575,8 +575,8 @@ To see any status updates, you should logout and log back in later.

    … or ANY other error then you MUST FIX your submission, repackage your tarball with mkiocccentry and upload to the same slot again! If you do not fix -this your submission WILL BE REJECTED for violating Rule -17!

    +this your submission WILL BE REJECTED for violating +Rule 17 Packaging!

    If the format test went well, then you will see:

    Status: submit file received by the IOCCC judges. Passed both txzchk and chksubmit tests.

    @@ -585,8 +585,9 @@ this your submission WILL BE REJECTED for violating Rule 17, even if the -tests passed.

    +submission rejected for violating +Rule 17 Packaging, +even if the tests passed.

    For details on txzchk, see the FAQ on “txzchk”.

    For details on chksubmit, see the diff --git a/next/submit.md b/next/submit.md index b0b340e9c..a3f440c3b 100644 --- a/next/submit.md +++ b/next/submit.md @@ -86,8 +86,8 @@ And in the slot it will give you important details like: - the status of the submission - the filename, which will be in the correct format, assuming you used -`mkiocccentry(1)` which is **HIGHLY** recommended so that you do not break [Rule -17](rules.html#rule17)! +`mkiocccentry(1)` which is **HIGHLY** recommended so that you do not break +[Rule 17 Packaging](rules.html#rule-17-packaging)! - the file length, which `txzchk(1)` will also verify (the file itself and the tarball listing). - the upload date. @@ -157,8 +157,8 @@ Or: ... or **ANY** other error then you **MUST FIX** your submission, repackage your tarball with `mkiocccentry` and upload to the same slot again! If you do not fix -this your submission **WILL BE REJECTED** for violating [Rule -17](rules.html#rule17)! +this your submission **WILL BE REJECTED** for violating +[Rule 17 Packaging](rules.html#rule-17-packaging)! If the format test went well, then you will see: @@ -168,8 +168,9 @@ If the format test went well, then you will see: rules or that everything is OK once the tarball is extracted; it simply means the tests performed by the tools passed. If you find a flaw in a tool and abuse it and the tests pass then you stand a significant chance of having your -submission rejected for violating [Rule 17](rules.html#rule17), even if the -tests passed. +submission rejected for violating +[Rule 17 Packaging](rules.html#rule-17-packaging), +even if the tests passed. For details on `txzchk`, see the FAQ on "[txzchk](../faq.html#txzchk)". diff --git a/quick-start.html b/quick-start.html index 53321d71e..6ffd1c2c7 100644 --- a/quick-start.html +++ b/quick-start.html @@ -565,12 +565,14 @@ for more info.

    NOTE: Please see our IOCCC markdown guide for important information on using markdown in the IOCCC.

    If the mkiocccentry tool indicates that there is a problem with your -submission, especially if it identifies a Rule 2, or -any other rule, related problem, you are strongly encouraged to revise and +submission, especially if it identifies a +Rule 2 Size, +or any other rule, related problem, you are strongly encouraged to revise and correct your entry and then re-run the mkiocccentry tool.

    If you choose to risk violating Rules, be sure and explain your reason for doing so in your remarks.md file.

    -

    See also Rule 17!

    +

    See also +Rule 17 Packaging!

    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 you have an earlier version and you have not installed the tools and run the @@ -578,7 +580,8 @@ tools from outside the repo directory, you will have to use the options to the tools to set the path to the required tools.

    Do remember to make sure you have the latest vers chksubmit(1), txzchk(1) and fnamchk(1). And remember to make sure you have -the latest version so you do not violate Rule 17. +the latest version so you do not violate +Rule 17 Packaging. See the FAQ on “obtaining the latest mkiocccentry tools”, the diff --git a/quick-start.md b/quick-start.md index 78d4212bc..9727c7287 100644 --- a/quick-start.md +++ b/quick-start.md @@ -161,14 +161,16 @@ Three files are required to exist in `topdir`: **NOTE**: Please see our [IOCCC markdown guide](markdown.html) for **important information** on using markdown in the IOCCC. If the `mkiocccentry` tool indicates that there is a problem with your -submission, especially if it identifies a [Rule 2](next/rules.html#rule2), or -any other [rule](next/rules.html), related problem, you are **strongly** encouraged to revise and +submission, especially if it identifies a +[Rule 2 Size](next/rules.html#rule-2-size), +or any other [rule](next/rules.html), related problem, you are **strongly** encouraged to revise and correct your entry and then re-run the `mkiocccentry` tool. If you choose to risk violating [Rules](next/rules.html), be sure and explain your reason for doing so in your `remarks.md` file. -See also [Rule 17](next/rules.html#rule17)! +See also +[Rule 17 Packaging](next/rules.html#rule-17-packaging)! **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 @@ -178,7 +180,8 @@ tools to set the path to the required tools. Do remember to make sure you have the latest vers `chksubmit(1)`, `txzchk(1)` and `fnamchk(1)`. And remember to make sure you have -the latest version so you do not violate [Rule 17](next/rules.html#rule17). +the latest version so you do not violate +[Rule 17 Packaging](next/rules.html#rule-17-packaging). See the FAQ on "[obtaining the latest mkiocccentry tools](faq.html#obtaining_mkiocccentry)", the diff --git a/sitemap.xml b/sitemap.xml index 3786f98bb..1d49e7ab4 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -14954,7 +14954,7 @@ https://www.ioccc.org/2024/index.html - 2025-08-07T01:59:28+00:00 + 2025-11-20T06:14:33+00:00 https://www.ioccc.org/2024/kramer/2024_kramer.tar.bz2 @@ -15374,7 +15374,7 @@ https://www.ioccc.org/2024/README.md - 2025-08-07T01:59:28+00:00 + 2025-11-20T04:29:28+00:00 https://www.ioccc.org/2024/rules.html @@ -16758,11 +16758,11 @@ https://www.ioccc.org/faq.html - 2025-11-18T18:05:36+00:00 + 2025-11-20T06:07:42+00:00 https://www.ioccc.org/faq.md - 2025-11-18T18:05:36+00:00 + 2025-11-20T05:27:40+00:00 https://www.ioccc.org/inc/index.html @@ -16818,19 +16818,19 @@ https://www.ioccc.org/news.html - 2025-08-07T03:07:24+00:00 + 2025-11-20T06:14:39+00:00 https://www.ioccc.org/news.md - 2025-08-07T03:07:11+00:00 + 2025-11-20T06:10:33+00:00 https://www.ioccc.org/next/guidelines.html - 2025-11-17T20:14:15+00:00 + 2025-11-20T06:07:45+00:00 https://www.ioccc.org/next/guidelines.md - 2025-11-17T20:14:15+00:00 + 2025-11-20T06:03:36+00:00 https://www.ioccc.org/next/index.html @@ -16870,19 +16870,19 @@ https://www.ioccc.org/next/rules.html - 2025-11-17T20:14:15+00:00 + 2025-11-20T06:38:36+00:00 https://www.ioccc.org/next/rules.md - 2025-11-17T20:14:15+00:00 + 2025-11-20T06:32:43+00:00 https://www.ioccc.org/next/submit.html - 2025-11-17T20:14:15+00:00 + 2025-11-20T06:07:47+00:00 https://www.ioccc.org/next/submit.md - 2025-11-17T20:14:15+00:00 + 2025-11-20T06:04:29+00:00 https://www.ioccc.org/next/try.alt.sh @@ -16902,11 +16902,11 @@ https://www.ioccc.org/quick-start.html - 2025-11-17T20:14:15+00:00 + 2025-11-20T06:07:47+00:00 https://www.ioccc.org/quick-start.md - 2025-11-17T20:14:15+00:00 + 2025-11-20T06:06:04+00:00 https://www.ioccc.org/README.html @@ -16938,11 +16938,11 @@ https://www.ioccc.org/status.html - 2025-11-18T18:10:17+00:00 + 2025-11-20T06:38:54+00:00 https://www.ioccc.org/status.json - 2025-08-07T03:07:20+00:00 + 2025-11-20T06:15:00+00:00 https://www.ioccc.org/status.md diff --git a/status.html b/status.html index eaaec3c44..33ab655c2 100644 --- a/status.html +++ b/status.html @@ -461,7 +461,7 @@ "no_comment" : "mandatory comment: because comments were removed from the original JSON spec", "IOCCC_status_version" : "1.0 2024-03-09", "contest_status" : "closed", - "news_update" : "2025-08-07T03:07:11+00:00", + "news_update" : "2025-11-20T06:10:33+00:00", "status_update" : "2025-08-01T19:38:14+00:00" } diff --git a/status.json b/status.json index f3fdc4fc2..bbf516359 100644 --- a/status.json +++ b/status.json @@ -2,6 +2,6 @@ "no_comment" : "mandatory comment: because comments were removed from the original JSON spec", "IOCCC_status_version" : "1.0 2024-03-09", "contest_status" : "closed", - "news_update" : "2025-08-07T03:07:11+00:00", + "news_update" : "2025-11-20T06:10:33+00:00", "status_update" : "2025-08-01T19:38:14+00:00" }