From 49609b0eada4ce6b28096d253c8be090b384ebbe Mon Sep 17 00:00:00 2001 From: Cody Boone Ferguson <53008573+xexyl@users.noreply.github.com> Date: Tue, 4 Mar 2025 12:11:08 -0800 Subject: [PATCH] Final edits before IOCCC28 (I hope :-) ) Renamed some FAQs (typos and/or other things). Fix a number of typos in various files (including markdown format errors). Rules and guidelines should be relatively good although as there is a lot to get through and not much time left maybe I missed something (I also kind of cheated doing the final checks with the guidelines rather than going through them all again). The next/try.sh and next/try.alt.sh scripts have had updates as well and the next/Makefile.example was modified too. The index.html page now has an anchor for goals of the contest so that the goals in the rules could simply link to it in index.html. Although some text had to be added (and some corrected) a reasonable amount of text was also removed as it was elsewhere or was extraneous in some way. --- faq.html | 164 +++++++++---------- faq.md | 163 ++++++++++--------- index.html | 35 ++++- index.md | 34 +++- markdown.html | 2 +- markdown.md | 2 +- next/Makefile.example | 27 ++-- next/guidelines.html | 122 +++------------ next/guidelines.md | 141 +++-------------- next/rules.html | 329 ++++++++++++++++++++------------------- next/rules.md | 354 +++++++++++++++++++++--------------------- next/try.alt.sh | 11 +- next/try.sh | 12 +- 13 files changed, 645 insertions(+), 751 deletions(-) diff --git a/faq.html b/faq.html index 778135307..d1b183c3c 100644 --- a/faq.html +++ b/faq.html @@ -451,7 +451,7 @@
  • Q 1.3: How do I report bugs in an mkiocccentry tool?
  • Q 1.4: How may I use subdirectories in my submission if Rule 17 disallows them?
  • Q 1.5: How can I check if my submission passes tests without having to answer questions?
  • -
  • Q 1.6: How may I include additional files beyond the max allowed?
  • +
  • Q 1.6: What are extra files and how may I include additional files beyond the max allowed?
  • Q 1.7: May I use AI, Virtual coding assistants, or similar tools to write my submission?
  • Q 1.8: What are the details behind Rule 17?
  • @@ -559,7 +559,7 @@
  • Q 10.3: What is the purpose of the .top, .allyear, .year and .path files?
  • Q 10.4: What is the current meaning of the IOCCC terms Author, Entry, and Submission?
  • Q 10.5: Am I allowed to use IOCCC content?
  • -
  • Q 10.6: What is Mastodon and why does IOCCC use it?
  • +
  • Q 10.6: What is Mastodon and why does the IOCCC use it?
  • Q 10.7: How do I set certain tabstops for viewing source code in vi(m)?
  • Q 10.8: How do the menus on the website work and what can I do if they don’t work?
  • Q 10.9: How do I find more information about a winning author of an entry?
  • @@ -714,7 +714,7 @@ and will not work from any directory, however.

    Q 0.1.5: How do I use mkiocccentry?

    -

    Once you have registered, you will need to package your entry with the +

    Once you have registered, you will need to package your submission with the mkiocccentry tool. If you have not already obtained the toolkit, see the FAQ on “obtaining the most recent mkiocccentry toolkit”, @@ -917,7 +917,7 @@ but we do enjoy interesting and creative uses of submissions.

    try.alt.sh template as well.

    We recommend that you include the use of these scripts in the try rule in the example Makefile that you modify for your submission. See the -FAQ on “submission Makefiles.

    +FAQ on “submission Makefiles”.

    Jump to: top

    Q 0.6: What permissions may my files be and what if I need different permissions?

    @@ -1037,12 +1037,16 @@ for more thorough details on bug reporting.

    Q 1.4: How may I use subdirectories in my submission if Rule 17 disallows them?

    In order to submit a subdirectory, you may simply include a tarball. As long as -the total size of your submission does not exceed the size limit, defined in -limit_ioccc.h -as MAX_TARBALL_LEN and your total number of files in your xz compressed -tarball does not exceed the limit, defined as MAX_FILE_COUNT in -limit_ioccc.h, -you can include tarballs with subdirectories or other files.

    +the maximum depth of all files does not exceed the maximum, defined as +MAX_PATH_DEPTH, the maximum filename length (a single component not counting +the /) of all files does not exceed MAX_FILENAME_LEN and +the maximum path length (all components) of all files does not exceed +MAX_PATH_LEN. These macros are defined in +limit_ioccc.h.

    +

    See also the +FAQ on “Rule 17”, +the guidelines and Rule 17 +itself.

    Q 1.5: How can I check if my submission passes tests without having to answer questions?

    @@ -1054,7 +1058,7 @@ answers.

    Please note that the tool will NOT delete the directory it makes so if you do have to try again you’ll have to remove it.

    An example use of this option is:

    -
        mkiocccentry -d test_work prog.c Makefile remarks.md
    +
        mkiocccentry -d workdir topdir

    This will run the tests that mkiocccentry(1), write the JSON files, use chkentry(1), package the tarball and run txzchk(1) on it.

    See also the @@ -1073,18 +1077,24 @@ and the FAQ on “fnamchk” for more details.

    -

    How may I include additional files beyond the max allowed?

    +

    What are extra files and how may I include additional files beyond the max allowed?

    -

    The rules state:

    -
    -

    The maximum number of files your submission tarball may contain, not counting -the optional files (prog.alt.c, try.sh, try.alt.sh) and the mandatory -files (prog.c, Makefile, remarks.md) is 31.

    -
    -

    If you need to include more files than this, you may include a tarball as an -EXTRA file.

    -

    This file does NOT need to pass the txzchk(1) tests; only your submission -tarball needs to pass these tests.

    +

    +Extra files are defined as files that are not the required files (prog.c, +Makefile, remarks.md and the two generated by mkiocccentry(1) .info.json +and .auth.json) and files that are also not the optional files (try.sh, +prog.alt.c and try.alt.sh). +

    +

    +NOTE: optional filenames are only optional if they are in the submission top +level directory. +

    +

    +If you need to include more files than this, you may include a tarball that +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. +

    Please pay careful attention to Rule 17 and in particular the part about the maximum number of files per submission, which not only discusses the maximum @@ -1100,21 +1110,22 @@ The mkiocccentry(1) tool creates a v7 format tarball to prevent thi

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

    Jump to: top

    -

    Q 1.7: May I use AI, Virtual coding assistants, or similar tools to write my submission?

    +
    +

    Q 1.7: May I use AI, LLM, Virtual coding assistants, or similar tools to write my submission?

    +

    You are free to use whatever tools you wish to write your code. -This includes tools that are AI based, Virtual coding assistants, code -generators, or similar tools, as well as your own tools. The IOCCC -judges do not discriminate on the -basis of the tools used to write obfuscated C code so long as you are -the ultimate author of the code you submit.

    -

    If you do use such tools, PLEASE mention which tools you used as well -as how you them to help write you submission in your remarks.md file.

    +This includes tools that are AI based, LLM (large language model), Virtual +coding assistants, code generators, or similar tools, as well as your own tools. +The IOCCC judges do not discriminate on the +basis of the tools used to write obfuscated C code so long as you are the +ultimate author of the code you submit.

    +

    If you do use such tools, PLEASE mention in your remarks.md which tools +you used as well as how you used them to help write your submission.

    Jump to: top

    Q 1.8: What are details behind Rule 17?

    -

    The following are the details behind Rule 17.

    TL;DR Rule 17 - Use mkiocccentry(1)

    This is a COMPLEX rule. Violating this rule will cause your submission to @@ -1129,54 +1140,41 @@ contains IMPORTANT tools and libraries such as:

    The above mentioned tools will help you verify that your submission -conforms to Rule 17. -

    -

    -Each above mentioned 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. +conforms to Rule 17. 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 maximum number of extra files section below for finer details and the -FAQ on “including additional files” -if you need to include more files than this maximum. -

    -

    -Extra files are defined as files that are not the required files (prog.c, -Makefile, remarks.md and the two generated by mkiocccentry(1) .info.json -and .auth.json) and files that are also not the optional files (try.sh, -prog.alt.c and try.alt.sh). -

    -

    -NOTE: optional filenames are only optional if they are in the submission top -level directory. +FAQ on “what extra files are and how to include additional files”, +should you need to include more files than this maximum.

    Jump to: top

    Rule 17 - The COMPLEX details

    -

    Each submission MUST be in the form of a xz compressed tarball. -The xz compressed tarball filename must be of the form: +

    Each submission MUST be in the form of an xz compressed tarball. +The xz compressed tarball filename MUST be of the form: ^submit.username-slot_num.[1-9][0-9]{9,}.txz$.

    … where username is your IOCCC registration username in the form of a @@ -1189,11 +1187,10 @@ details), and where slot_num is a single decimal digit int In particular, username is in the form of: xxxxxxxx-xxxx-4xxx-Nxxx-xxxxxxxxxxxx where 'x' is a hex digit in the range of [0-9a-f], 4 is the UUID version, and N is one of 8, 9, a, or b. -And yes, there is a 4 (UUID version 4) and the variants 0x8, 0x9, 0xa and -0xb in there.

    -Your xz compressed tarball MUST contain, at a minimum, the following files: +Your xz compressed tarball MUST contain, at a minimum, the following +files, in the TOP LEVEL directory:

    -

    Be do not limit ourselves to this list. For example, a few submissions are so +

    We do not limit ourselves to this list. For example, a few submissions are so good/bad that they are declared winners at the start of the final round. We will invent awards categories for them, if necessary.

    In the final round process, we perform the difficult tasks of @@ -2501,7 +2423,7 @@ Often, winning entries are published in selected magazines from around the world. Winners have appeared in books (‘The New Hacker's Dictionary’, ‘Obfuscated C and Other Mysteries’, ‘Pointers On C’, others) and on t-shirts (sometimes by the author(s) themselves). There have been multiple classes -that have focused in part, on IOCCC winning entries. And More than one winner has been turned +that have focused in part, on IOCCC winning entries. And more than one winner has been turned into a tattoo!

    Last, but not least, winners receive international fame and flames! :-)

    @@ -2540,7 +2462,7 @@ Consider joining the IOCCC discord community via this link:

    See the -FAQ on “obtaining and compiling the mkiocccentry tools” +FAQs 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 diff --git a/next/guidelines.md b/next/guidelines.md index 366506733..cd835373e 100644 --- a/next/guidelines.md +++ b/next/guidelines.md @@ -49,7 +49,7 @@ Jump to: [top](#)

    -These [IOCCC guidelines](guidelines.html) are version **28.42 2025-03-03**. +These [IOCCC guidelines](guidelines.html) are version **28.44 2025-03-04**.

    @@ -147,51 +147,6 @@ considered** provisional **BETA** versions and **may be adjusted _AT ANY TIME_** before the contest status becomes **[open](../faq.html#open)**.

    -

    -You **MUST** [register](register.html) in order to participate in the IOCCC. -You may [register](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](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**), much later: usually a few days around the time when the contest status -becomes **[open](../faq.html#open)**. -

    - -

    -Once that email you your **Username** and **Initial password** is sent, you -will have 72 hours to [change your submit server initial password](pw-change.html). -

    - -

    -If you do not change your **Initial password** in time, you will have -to [contact an IOCCC judge](../contact.html) by email and ask them to reset -your password. Not only is this a hassle for everyone involved, it will -delay your IOCCC registration process, perhaps by a number of days that -`egrep(1)` would be able to pattern match. By `egrep(1)`, we refer to the -long standing **UNIX** utility that should just run and **NOT** whine about -the command being allegedly deprecated. -

    - -

    -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)" @@ -199,61 +154,6 @@ for instructions on registering and participating in the IOCCC, as the process may change from contest to contest.

    -

    -If you have [registered](register.html) and received by email your -[submit server](https://submit.ioccc.org) **Username** and **Initial password** -from an [IOCCC judge](../judges.html), you may upload your submission to -the [submit server](https://submit.ioccc.org) **ONLY** while the -contest is **[open](../faq.html#open)**. -

    - -

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

    - -

    -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 un-tarred, -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 un-tarred, the -resulting directory must pass the checks performed by the current version of `chkentry(1)`. -

    - -

    -The resulting `prog.c` file must pass the [Rule 2](#rule2) 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 `chkentry(1)`. -

    - -

    -The required `Makefile` must **NOT** be empty. -

    - -

    -The required `remarks.md` must **NOT** be empty. -

    -

    To assist in the formation of the xz compressed tarball for submission, use the `mkiocccentry(1)` tool as found in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry). @@ -266,7 +166,7 @@ See FAQs regarding:

    - [obtaining the latest mkiocccentry tools](../faq.html#obtaining_mkiocccentry) - [compiling the mkiocccentry tools](../faq.html#compiling_mkiocccentry) -- [installing the mkiocccentry tools](../faq.html#installing) +- [installing the mkiocccentry tools](../faq.html#install) - [using the mkiocccentry tools](../faq.html#using_mkiocccentry)

    @@ -374,7 +274,7 @@ counted by the IOCCC size tool. This is a **feature**, not a bug!

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

    @@ -449,7 +349,7 @@ 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, etc. +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 how you used such tools** in your `remarks.md` file.

    @@ -467,7 +367,7 @@ an **IDE** will be rejected.

    -We will use `make(1)` tool, your `Makefile`, and other tools found in +We will use the `make(1)` tool, your `Makefile`, and other tools 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) @@ -703,7 +603,7 @@ Jump to: [top](#) `.info.json`. These files contain information about the author(s) and about the submission. After these files are formed, the `chkentry(1)` tool will be run on the submission directory; this tool not only validates the two JSON files -(running specific checks on them after validating the JSON), but it also +(and runs specific checks on them after validating the JSON), but it also verifies that what is in the manifest in `.info.json` matches the contents of the directory, in addition to other checks. If `chkentry(1)` fails to validate anything at all, your submission **WILL BE** rejected! @@ -711,8 +611,9 @@ anything at all, your submission **WILL BE** rejected!

    **IMPORTANT**: although `chkentry(1)` validates the files in the directory, it -only inspects the contents of the two JSON files; it performs other checks on -the other files, and those checks are run on the two JSON files as well. +only inspects the contents of the two JSON files; it performs other kinds of +checks on the other files, and those checks are run on the two JSON files as +well.

    @@ -847,9 +748,9 @@ FAQ on "[reporting mkiocccentry bugs](../faq.html#mkiocccentry_bugs)".

    As part of its algorithm, `txzchk(1)` will run `fnamchk(1)` on the -_tarball_ to verify that the filename is valid. See the +_tarball_ to verify that the _filename_ is valid. See the FAQ on "[fnamchk](../faq.html#fnamchk)" -and [fnamchk below](#fnamchk) for more details on this tool. +and the [fnamchk section](#fnamchk) below for more details on this tool.

    @@ -861,8 +762,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, you could still be violating [Rule -17](rules.html#rule17). +manually package your submission tarball and/or find and exploit a missing +check, you could still be violating [Rule 17](rules.html#rule17).

    @@ -895,7 +796,7 @@ In other words, the actual amount of **EXTRA** files is **31**.

    -If you use the optional file for something other than their intended use +If you use an optional filename for something other than their intended use in order to get past the file limit, we will consider that an abuse of rules. For more details on the optional files, see the FAQ on the "[try.sh script system](../faq.html#try_script)" @@ -1074,6 +975,12 @@ See the [optimiser section](#optimiser) for details for changing optimiser flags.

    +

    +For more fun when it comes to optimisers breaking code, see +[1986/marshall/compilers.html](1986/marshall/compilers.html). +

    + +
    ## Default compiler
    @@ -1285,7 +1192,7 @@ to:

    Some compilers have reported this as an error, however, and if you have such a compiler you might want to not add it, or at least note in your -`remarks.md` file, which OS, OS version, compiler and compiler version for +`remarks.md` file, which OS, OS version, compiler and compiler version that has such a problem.

    @@ -2396,7 +2303,7 @@ FAQ on "[Xorg being deprecated](../faq.html#Xorg_deprecated)")

    * **worst/best abuse of the rules** (or some variation) * (anything else so strange that it deserves an award) -Be do not limit ourselves to this list. For example, a few submissions are so +We do not limit ourselves to this list. For example, a few submissions are so good/bad that they are declared winners at the start of the final round. We will invent awards categories for them, if necessary. @@ -2572,7 +2479,7 @@ Often, winning entries are published in selected magazines from around the world. Winners have appeared in books ('`The New Hacker's Dictionary`', '`Obfuscated C and Other Mysteries`', '`Pointers On C`', others) and on t-shirts (sometimes by the author(s) themselves). There have been multiple classes -that have focused in part, on IOCCC winning entries. And More than one winner has been turned +that have focused in part, on IOCCC winning entries. And more than one winner has been turned into a tattoo!

    @@ -2624,7 +2531,7 @@ Consider joining the IOCCC discord community via this link:

    See the -FAQ on "[obtaining and compiling the mkiocccentry tools](../faq.html#mkiocccentry)" +FAQs 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 diff --git a/next/rules.html b/next/rules.html index 3a6c781fe..d5848e1c4 100644 --- a/next/rules.html +++ b/next/rules.html @@ -461,7 +461,7 @@ writing by contacting the judges.

    -These IOCCC rules are version 28.29 2025-03-03. +These IOCCC rules are version 28.30 2025-03-03.

    The markdown form of these rules is @@ -495,28 +495,18 @@ to bar modified sections.     to darken < fuscus, dark.] -obfuscation n. obfuscatory adj.

    Jump to: top

    -

    Goals of the Contest

    +

    Goals of the IOCCC (International Obfuscated C Code Contest)

    -

    The goals of the IOCCC:

    - +

    +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 contest will enter the pending state on or about -2024-12-29 23:58:13.213455 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. @@ -529,24 +519,6 @@ This contest will enter the judgingdates and times may change!

    -Those who register while the contest status is pending -will receive email with their submit server Username and Initial password -from an IOCCC judge shortly after the contest status becomes open. -

    -

    -Once an IOCCC judge emails you your Username and Initial password, you -will have 72 hours to change your submit server initial password. -If you do not change your Initial password in time, you will have to re-register. -

    -

    -Because it takes time (maybe even a few days) for an IOCCC judge -to process your registration and email you your initial login and password, -you should MAKE SURE you give yourself enough time 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 “obtaining and compiling the mkiocccentry tools” and the @@ -570,34 +542,36 @@ 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 +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 rule violation. The mkiocccentry(1) tool -also runs the fnamchk(1), txzchk(1) and chkentry(1) tools. -Overriding problems detected by any of these tools comes with a +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 chkentry(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 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. +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. 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. +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 @@ -636,7 +610,23 @@ by some people. :-)

    Rule 2

    -

    Rule 2 requires that your submission satisfy BOTH Rule 2a and Rule 2b.

    +

    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.

    @@ -647,17 +637,6 @@ See also Rule 2a, Rule 2b, and The size of your program source should NOT exceed 4993 bytes.

    -

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

    -
        iocccsize prog.c
    -

    -Alternatively, you may use the mkiocccentry(1) option -d to verify that -things check out okay (i.e. no problems are detected) without having to answer -all the questions. See the -FAQ on “how to rule test your submission” for more details. -

    Jump to: top

    Rule 2b

    @@ -668,20 +647,6 @@ the latest version of the official IOCCC size tool (hereby referred to as iocccsize(1)), the value printed should NOT exceed 2503.

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

    -

    -If you use the mkiocccentry(1) tool, which we STRONGLY recommend -you do then mkiocccentry(1) will invoke the iocccsize(1) checks before packaging -your submission. -

    -

    -You may check your code prior to submission by giving the filename -as a command like argument to the iocccsize(1) tool. For example: -

    -
        iocccsize prog.c
    -

    See also Rule 17.

    Jump to: top

    @@ -702,16 +667,16 @@ perhaps as much as a few days, for your registration to be processed and for tha

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

    -Once that email you your Username and Initial password is sent, you -will have 72 hours to change your submit server initial password. +Once that email with your Username and Initial password is sent, you +will have 72 hours to change your submit server initial password.

    -If you do not change your Initial password in time, you will have -to contact an IOCCC judge by email and ask them to reset +If you do not change your Initial password in time, you will have +to contact an IOCCC judge by email and ask them to reset your password. Not only is this a hassle for everyone involved, it will delay your IOCCC registration process, perhaps by a number of days that egrep(1) would be able to pattern match. By egrep(1), we refer to the @@ -755,15 +720,19 @@ then modify your submission’s Makefile to COPY ( 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 -as well as any data files you submit.

    +

    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.

    @@ -773,7 +742,7 @@ 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 -in order restore your submission to its original submission state. +restore your submission to its original submission state.

    Jump to: top

    @@ -795,18 +764,18 @@ I am not a rule, I am a free(void *human); ‼️ 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. +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 in your remarks.md file. +permission you obtained from them, in your remarks.md file.

    -Please note that mkiocccentry toolkit -are NOT original works, unless of course you’re the respective authors, in -which case they are original. :-) +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 @@ -814,10 +783,11 @@ would probably violate a number of rules. :-)

      -
    • mkioccentry(1)
    • -
    • iooccsize(1)
    • +
    • mkiocccentry(1)
    • +
    • iocccsize(1)
    • chkentry(1)
    • txzchk(1)
    • +
    • location(1)
    • jparse repo as cloned by the mkiocccentry repo
    • dbg repo as cloned by the mkiocccentry repo
    • dyn_array repo as cloned by the mkiocccentry repo
    • @@ -826,13 +796,13 @@ would probably violate a number of rules. :-)

      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 +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, etc. +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 -how you used such tools in your remarks.md file. +what tools and how you used those tools, in your remarks.md file.

      See also Rule 5, Rule 18 and Rule 21. @@ -846,25 +816,27 @@ Submissions may only be uploaded to the IOCCC while the contest is open.

      -If you have registered and received by email your -submit server Username and Initial password -from an IOCCC judge, you may upload your submission to -the submit server ONLY 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. +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), you may NOT upload submissions. +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. +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 @@ -872,13 +844,14 @@ as found in the mkiocccentry 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. +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 -FAQ on “obtaining and compiling the mkiocccentry tools” +FAQs on “obtaining, compiling, installing and using the latest release of the mkiocccentry tools” for more information about the mkiocccentry(1) tool.

      @@ -897,13 +870,13 @@ and including 10.000000 (ten in base 10) submissions PE

      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 quote purportedly said by Bill Gates: +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:

      -

      10 submissions ought to be enough for anybody. :-)

      -

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

      +

      640K submissions ought to be enough for anybody.

      +

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

      Jump to: top

      @@ -922,6 +895,14 @@ 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

      @@ -950,7 +931,7 @@ Fun fact: the fear of the number 13 is called triskaidekaphobia.

      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. +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 @@ -958,14 +939,16 @@ Please do NOT put trailing control-M’s on prog.c byte 012) character.

      -As we do NOT DOS, please also be sure that the Makefile and +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. +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

      @@ -989,15 +972,15 @@ for details.

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

      -You are allowed to re-submit to a later contest, a submission that +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 re-submit something that did not previously win, then +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. +as this sometimes helps.

      -Re-submitting an improved submission that did not become an +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 @@ -1009,36 +992,40 @@ goes) all the other submissions for a given contest.

    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 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 and directory tree depth. +path length, directory tree depth and permissions.

    -Your xz compressed tarball must be larger than 0 bytes and no larger than 3999971 bytes. +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 un-tarred, -must not exceed 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.

    -Your xz compressed tarball submission file must pass the tests performed by the current version of txzchk(1). +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). +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 un-tarred, the -resulting directory must pass the checks performed by the current version of chkentry(1). +When your xz compressed tarball submission file is untarred, the +resulting directory MUST pass the checks performed by the current version +of chkentry(1).

    -The resulting prog.c file must pass the Rule 2 size checks performed by the current +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 chkentry(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 chkentry(1).

    The required Makefile must NOT be empty. @@ -1047,8 +1034,18 @@ 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 mkiocccentry(1). +You may NOT submit a tarball created by the -d or -s seed option of +mkiocccentry(1).

    +

    +The maximum number of files your submission tarball may contain, not counting +the optional files (prog.alt.c, try.sh, try.alt.sh) and the mandatory +files (prog.c, Makefile, remarks.md) is 31. +

    +

    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 @@ -1063,7 +1060,7 @@ submit server and/or the IOCCC Judges.

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

    @@ -1093,16 +1090,20 @@ 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. +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, please do NOT submit a README.md file, NOR an index.html -file in the top level directory where your remarks.md file resides. +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 chkentry(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 @@ -1119,16 +1120,18 @@ Basics for information on the markdown format.

    -Please see our FAQ “remarks.md” and the IOCCC markdown -guidelines for additional markdown guidance. +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 Makefile format. See the FAQ about -make(1) compatibility the IOCCC -supports for more details.

    +

    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 @@ -1141,15 +1144,15 @@ C source file must be called prog.c.

    ${CPP}.

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

    -When make clobber is invoked, we request that submission directory be restored +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. +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 @@ -1162,15 +1165,17 @@ available in the $PATH search path.

    -

    Your submission MUST NOT create or modify files ABOVE the current directory +

    +Your submission MUST NOT create or modify files ABOVE the current directory with the exception of the /tmp and the /var/tmp directories. Your submission -MAY create subdirectories below the current directory, or in /tmp, +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.

    +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 restore your submission to its original submission state. +in order to restore your submission to its original submission state.

    See also Rule 5. @@ -1209,7 +1214,7 @@ do.

    Rule 25

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

    Jump to: top

    @@ -1253,7 +1258,7 @@ For questions or comments about the contest, see Conta may (and often do) change from year to year.

    -PLEASE be sure you have the current IOCCC rules and +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.

    @@ -1274,7 +1279,7 @@ Consider joining the IOCCC discord community via this link:

    See the -FAQ on “obtaining and compiling the mkiocccentry tools” +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 diff --git a/next/rules.md b/next/rules.md index 3da2fd2ce..a6b0dd524 100644 --- a/next/rules.md +++ b/next/rules.md @@ -51,7 +51,7 @@ Jump to: [top](#)

    -These [IOCCC rules](rules.html) are version **28.29 2025-03-03**. +These [IOCCC rules](rules.html) are version **28.30 2025-03-03**.

    @@ -102,19 +102,12 @@ Jump to: [top](#)

    -# Goals of the Contest +# Goals of the IOCCC (International Obfuscated C Code Contest)
    -The goals of the IOCCC: - -* To write the most Obscure/Obfuscated C program within the [IOCCC rules](rules.html). -* To show the importance of programming style, in an ironic way. -* To emphasize the value of perspicuous code by use of negative examples. -* To stress C compilers with unusual code. -* To illustrate some of the subtleties of the C language. -* To provide a safe forum for poor C code. :-) -* To have fun with C! - +

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

    Jump to: [top](#) @@ -125,11 +118,7 @@ Jump to: [top](#)

    This IOCCC runs from **2024-12-29 23:58:13.213455 UTC** to **2025-06-05 04:03:02.010099 UTC**. -

    - -

    -This contest will enter the **[pending](../faq.html#pending)** state on or about -**2024-12-29 23:58:13.213455 UTC**. +This IOCCC marks the **40th anniversary** of the contest!

    @@ -145,27 +134,6 @@ This contest will enter the **[judging](../faq.html#judging)** state on **2025-0 of the above **dates and times may change**!

    -

    -Those who [register](register.html) while the contest status is **[pending](../faq.html#pending)** -will receive email with their [submit server](https://submit.ioccc.org) **Username** and **Initial password** -from an [IOCCC judge](../judges.html) shortly after the contest status becomes **[open](../faq.html#open)**. -

    - -

    -Once an [IOCCC judge](../judges.html) emails you your **Username** and **Initial password**, you -will have 72 hours to [change your submit server initial password](pw-change.html). -If you do not change your **Initial password** in time, you will have to [re-register](register.html). -

    - -

    -Because it takes time (maybe even a few days) for an [IOCCC judge](../judges.html) -to process your registration and email you your initial login and password, -you should **MAKE SURE** you give yourself enough time 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 "[obtaining and compiling the mkiocccentry tools](../faq.html#mkiocccentry)" @@ -197,37 +165,39 @@ 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 +**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 rule violation. The `mkiocccentry(1)` tool -also runs the `fnamchk(1)`, `txzchk(1)` and `chkentry(1)` tools. -Overriding problems detected by any of these tools comes with a +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 `chkentry(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 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**. +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. 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. +**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.

    @@ -285,7 +255,30 @@ Jump to: [top](#) ## Rule 2 -[Rule 2](#rule2) requires that your submission satisfy **BOTH** [Rule 2a](#rule2a) and [Rule 2b](#rule2b). +[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 +``` + +

    +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 also [Rule 2a](#rule2a), [Rule 2b](#rule2b), and [Rule 17](#rule17). @@ -302,22 +295,6 @@ Jump to: [top](#) The size of your program source **should NOT exceed 4993 bytes**.

    -

    -You may check your code with respect to [Rule 2](#rule2) prior to submission by giving the filename -as a command like argument to the `iocccsize(1)` tool. For example: -

    - -``` - iocccsize prog.c -``` - -

    -Alternatively, you may use the `mkiocccentry(1)` option `-d` to verify that -things check out okay (i.e. no problems are detected) without having to answer -all the questions. See the -FAQ on "[how to rule test your submission](../faq.html#mkiocccentry_test)" for more details. -

    - Jump to: [top](#) @@ -331,31 +308,10 @@ the latest version of the official IOCCC size tool (hereby referred to as `iocccsize(1)`), the value printed **should NOT exceed _2503_**.

    -

    -The source to `iocccsize(1)` may be found in the -[mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry). -

    - -

    -If you use the `mkiocccentry(1)` tool, which we **STRONGLY recommend -you do** then `mkiocccentry(1)` will invoke the `iocccsize(1)` checks before packaging -your submission. -

    - -

    -You may check your code prior to submission by giving the filename -as a command like argument to the `iocccsize(1)` tool. For example: -

    - -``` - iocccsize prog.c -``` -

    See also [Rule 17](#rule17).

    - Jump to: [top](#) @@ -379,18 +335,18 @@ perhaps as much as a few days, for your registration to be processed and for tha

    Those who [register](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**), much later: usually a few days around the time when the contest status +and **Initial password**), later: usually a few days around the time when the contest status becomes **[open](../faq.html#open)**.

    -Once that email you your **Username** and **Initial password** is sent, you -will have 72 hours to [change your submit server initial password](pw-change.html). +Once that email with your **Username** and **Initial password** is sent, you +will have **72 hours** to [change your submit server initial password](pw-change.html).

    -If you do not change your **Initial password** in time, you will have -to [contact an IOCCC judge](../contact.html) by email and ask them to reset +If you do not change your **Initial password** in time, **you will have +to [contact an IOCCC judge](../contact.html)** by email and ask them to reset your password. Not only is this a hassle for everyone involved, it will delay your IOCCC registration process, perhaps by a number of days that `egrep(1)` would be able to pattern match. By `egrep(1)`, we refer to the @@ -444,6 +400,11 @@ 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).

    @@ -456,9 +417,9 @@ 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` -as well as any data files you submit. +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. @@ -471,7 +432,7 @@ 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 -in order restore your submission to its original submission state. +restore your submission to its original submission state.

    @@ -505,20 +466,20 @@ 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. +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** in your `remarks.md` file. +permission you obtained from them**, in your `remarks.md` file.

    -Please note that [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) -are **NOT** original works, unless of course you're the respective authors, in -which case they are original. :-) +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. :-)

    @@ -527,10 +488,11 @@ would probably violate a number of rules. :-)

    -- [mkioccentry(1)](https://github.com/ioccc-src/mkiocccentry/blob/master/mkiocccentry.c) -- [iooccsize(1)](https://github.com/ioccc-src/mkiocccentry/blob/master/iocccsize.c) +- [mkiocccentry(1)](https://github.com/ioccc-src/mkiocccentry/blob/master/mkiocccentry.c) +- [iocccsize(1)](https://github.com/ioccc-src/mkiocccentry/blob/master/iocccsize.c) - [chkentry(1)](https://github.com/ioccc-src/mkiocccentry/blob/master/chkentry.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) @@ -539,13 +501,13 @@ would probably violate a number of rules. :-)

    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 +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, etc. +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 -how you used such tools** in your `remarks.md` file. +what tools and how you used those tools**, in your `remarks.md` file.

    @@ -566,28 +528,30 @@ while the contest is **[open](../faq.html#open)**.

    -If you have [registered](register.html) and received by email your -[submit server](https://submit.ioccc.org) **Username** and **Initial password** -from an [IOCCC judge](../judges.html), you may upload your submission to -the [submit server](https://submit.ioccc.org) **ONLY** while the -contest is **[open](../faq.html#open)**. +If you have [registered](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)**.

    -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. +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)**), you may **NOT** upload submissions. +**[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. +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.

    @@ -597,14 +561,15 @@ 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. +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 -FAQ on "[obtaining and compiling the mkiocccentry tools](../faq.html#mkiocccentry)" +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.

    @@ -632,14 +597,14 @@ 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 quote purportedly said by Bill Gates: +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:

    -> 10 submissions ought to be enough for anybody. :-) +> 640K submissions ought to be enough for anybody. > -> -- Bill Gates s/640K/10/ (allegedly) +> -- Bill Gates s/640K/10/ (allegedly :-) )

    @@ -668,6 +633,15 @@ 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](#) @@ -685,7 +659,6 @@ their rule abuse is legal, in the `remarks.md` file. See also [the warning about rule abuse](#rule_abuse).

    - Jump to: [top](#) @@ -712,7 +685,7 @@ Jump to: [top](#)

    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. +control-M's (i.e., lines with a trailing byte `015`) **might** be rejected.

    @@ -722,7 +695,7 @@ byte `012`) character.

    -As we do **NOT** DOS, please also be sure that the `Makefile` and +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.

    @@ -730,7 +703,9 @@ As we do **NOT** DOS, please also be sure that the `Makefile` and 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. +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.

    @@ -767,23 +742,22 @@ Jump to: [top](#) Submissions that are similar to previous winning IOCCC entries are discouraged.

    -You are allowed to re-submit to a later contest, a submission that +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 re-submit something that did not previously win, then +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. +as this **sometimes** helps.

    -Re-submitting an improved submission that did not become an +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](#) @@ -793,43 +767,47 @@ Jump to: [top](#)

    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 **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 and directory tree depth. +path length, directory tree depth and permissions.

    -Your **xz compressed tarball** must be larger than **0** bytes and no larger than **3999971** bytes. +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 un-tarred, -must not exceed **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.

    -Your **xz compressed tarball** submission file must pass the tests performed by the current version of `txzchk(1)`. +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)`. +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 un-tarred, the -resulting directory must pass the checks performed by the current version of `chkentry(1)`. +When your **xz compressed tarball** submission file is untarred, the +resulting _directory_ **MUST** pass the checks performed by the current version +of `chkentry(1)`.

    -The resulting `prog.c` file must pass the [Rule 2](#rule2) size checks performed by the current +The resulting `prog.c` file **MUST** pass the [Rule 2](#rule2) 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 `chkentry(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 `chkentry(1)`.

    @@ -841,9 +819,20 @@ The required `remarks.md` must **NOT** be empty.

    -You may **NOT** submit a tarball created by the `-d` or `-s seed` option of `mkiocccentry(1)`. +You may **NOT** submit a tarball created by the `-d` or `-s seed` option of +`mkiocccentry(1)`.

    +

    +The maximum number of files your submission tarball may contain, not counting +the optional files (`prog.alt.c`, `try.sh`, `try.alt.sh`) and the mandatory +files (`prog.c`, `Makefile`, `remarks.md`) is 31. +

    + +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. ### TL;DR Rule 17 - Use `mkiocccentry(1)` to form your submission @@ -863,7 +852,7 @@ submit server](https://submit.ioccc.org) and/or the [IOCCC Judges](../judges.htm

    See the -FAQ on the "[mkiocccentry tool](../faq.html#mkiocccentry) +FAQ on the "[mkiocccentry toolkit](../faq.html#mkiocccentry) for how to obtain and use the above mentioned tools.

    @@ -905,17 +894,21 @@ The `remarks.md` file, a required non-empty file, must be written in

    -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. +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, please do **NOT** submit a `README.md` file, **NOR** an `index.html` -file in the top level directory where your `remarks.md` file resides. +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 `chkentry(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.

    @@ -936,8 +929,10 @@ information on the markdown format.

    -Please see our FAQ "[remarks.md](../faq.html#remarks_md)" and the [IOCCC markdown -guidelines](../markdown.html) for additional markdown guidance. +**PLEASE** see our +FAQ on "[remarks.md](../faq.html#remarks_md)" +**AND** the +[IOCCC markdown guidelines](../markdown.html) for additional markdown guidance.

    @@ -948,9 +943,9 @@ Jump to: [top](#) ## Rule 20 -The how to build instructions must be in Makefile format. See [the FAQ about -make(1) compatibility the IOCCC -supports](../faq.html#make_compatibility) for more details. +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 @@ -968,7 +963,7 @@ To invoke the C compiler, use `${CC}`. To invoke the C preprocessor use Do **NOT** assume that `.` (the current directory) is in the `$PATH`.

    -When `make clobber` is invoked, we request that submission directory be restored +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. @@ -976,8 +971,8 @@ 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`. +**AND** GNU `make(1)`. You are **ENCOURAGED** to use `SHELL= bash` in +your `Makefile`. Please add a space between the `=` and the value.

    @@ -996,16 +991,18 @@ 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 current directory, or in `/tmp`, +**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 restore your submission to its original submission state. +in order to restore your submission to its original submission state.

    @@ -1070,7 +1067,7 @@ Jump to: [top](#)

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

    @@ -1089,7 +1086,6 @@ Jump to: [top](#) > "Mr. Jock, TV quiz PhD, bags few lynx."
    > "abcdefg, hijklmnop, qrstu&v, wxy&z." - Jump to: [top](#) @@ -1133,7 +1129,7 @@ may (and **often do**) change from year to year.

    -**PLEASE** be sure you have the current [IOCCC rules](rules.html) and +**PLEASE** be **SURE** you have the **current** [IOCCC rules](rules.html) and [IOCCC guidelines](guidelines.html) prior to submitting to the contest.

    @@ -1159,7 +1155,7 @@ Consider joining the IOCCC discord community via this link:

    See the -FAQ on "[obtaining and compiling the mkiocccentry tools](../faq.html#mkiocccentry)" +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 diff --git a/next/try.alt.sh b/next/try.alt.sh index d825182cb..6f3a33df4 100755 --- a/next/try.alt.sh +++ b/next/try.alt.sh @@ -1,8 +1,7 @@ #!/usr/bin/env bash # # try.alt.sh - demonstrate IOCCC entry YYYY/foo alternate code -# XXX - try.alt.sh example version: 1.0.0-1 11-28-2024 - XXX -# +# XXX - try.alt.sh example version: 28.0.0-0 2024-03-04 - XXX # XXX - NOTE: if your submission wins and becomes an entry, then - XXX # XXX - YYYY/foo will be changed to the 4 digit year and directory - XXX # XXX - name. - XXX @@ -43,8 +42,8 @@ clear # XXX - Examples follow. - XXX -# XXX - if the prompt will not be too long, say more than 80 chars - XXX -# XXX - or so: - XXX +# XXX - if the prompt will not be too long, say no more than 80-100 - XXX +# XXX - chars or so: - XXX read -r -n 1 -p "Press any key to run: ./prog.alt: " echo 1>&2 ./prog.alt @@ -54,3 +53,7 @@ echo "$ ./prog.alt some long command line" read -r -n 1 -p "Press any key to continue: " ./prog.alt some long command line +# XXX - of course, if the prompt needs to be long, or it will be - XXX +# XXX - longer no matter what or you have some other purpose, you - XXX +# XXX - can do it the other way or another way entirely. The point - XXX +# XXX - is to make it easy to use and see but still fit your ideas. - XXX diff --git a/next/try.sh b/next/try.sh index ac6952211..974e54f36 100755 --- a/next/try.sh +++ b/next/try.sh @@ -1,8 +1,7 @@ #!/usr/bin/env bash # # try.sh - demonstrate IOCCC entry YYYY/foo -# XXX - try.sh example version: 1.0.0-1 11-28-2024 - XXX - +# XXX - try.sh example version: 28.0.0-0 2024-03-04 - XXX # XXX - NOTE: if your submission wins and becomes an entry, then - XXX # XXX - YYYY/foo will be changed to the 4 digit year and directory - XXX # XXX - name. - XXX @@ -45,8 +44,8 @@ clear # XXX - Examples follow. - XXX -# XXX - if the prompt will not be too long, say more than 80 chars - XXX -# XXX - or so: - XXX +# XXX - if the prompt will not be too long, say no more than 80-100 - XXX +# XXX - chars or so: - XXX read -r -n 1 -p "Press any key to run: ./prog: " echo 1>&2 ./prog @@ -55,3 +54,8 @@ echo 1>&2 echo "$ ./prog some long command line" read -r -n 1 -p "Press any key to continue: " ./prog some long command line + +# XXX - of course, if the prompt needs to be long, or it will be - XXX +# XXX - longer no matter what or you have some other purpose, you - XXX +# XXX - can do it the other way or another way entirely. The point - XXX +# XXX - is to make it easy to use and see but still fit your ideas. - XXX