diff --git a/2024/README.md b/2024/README.md index da448866cf..f1cbf3f723 100644 --- a/2024/README.md +++ b/2024/README.md @@ -73,7 +73,9 @@ submitting to the IOCCC have become more adept in obfuscation and have 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](../faq.html#size_rule_history) increased by about 21%, we received many submissions that were well under the new diff --git a/2024/index.html b/2024/index.html index 1315058026..a8d8bc71e7 100644 --- a/2024/index.html +++ b/2024/index.html @@ -510,7 +510,9 @@

Increased submission quantity people extra time to improve their submissions, we also believe that people submitting to the IOCCC have become more adept in obfuscation and have 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 including a fair number of quality diff --git a/next/guidelines.html b/next/guidelines.html index 2c1b2071bd..96ab7b4357 100644 --- a/next/guidelines.html +++ b/next/guidelines.html @@ -456,19 +456,21 @@

29th Int

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

-

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

+

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

Guidelines Version

-These Guidelines are version 29.06 2025-12-01. +These Guidelines are version 29.07 2025-12-02.

-The | symbol indicates an change from the previous IOCCC. +The | symbol +indicates an change from the previous IOCCC.

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

Be sure to read the Rules.

@@ -477,34 +479,39 @@

Guidelines for -While you submission MUST be a C program, there is nothing wrong if your prog.c -file happens to also be a code for another language. +While you submission MUST be a C program, there is nothing wrong if +your prog.c file happens to also be a code for another language, say +an interpreter of JavaScript.

-We would prefer if you do not use #include statements, -especially #include statements just to include lots of data, -to get around the -Rule 2 - Size restrictions -in an excessive way. +We would prefer if you do not use #include statements just to include +lots of data to circumvent Rule 2 - Size +restrictions in an excessive way. This is what +they invented fopen(3) for. :-)

-We would prefer if you do not require lots and lots of implicit defines on the C compiler command line -(i.e., lots of -Dfoo, and -Dcurds=whey style command line args to the C compiler) -to get around the -Rule 2 - Size restrictions -in an excessive way. +We would prefer if you do not require lots and lots of implicit defines +on the C compiler command line (i.e., lots of -Dfoo, and +-Dcurds=whey style command line args to the C compiler in the +Makefile) to get around the Rule 2 - Size +restrictions in an excessive way.

-Some use of #include statements and/or implicit defines on the C compiler command line is perfectly reasonable. +Some use of #include statements (i.e. -include stdio.h) and/or +implicit #defines (i.e. -Dfoo=bar) on the C compiler command line +is perfectly reasonable..

-As a guide, consider the level of #include statements and/or implicit defines on the C compiler command line -that are found in -winning Entries, and try to NOT set a new record. +As a guide, consider the level of #include statements and/or implicit +defines on the C compiler command line that are found in winning +Entries, and try to NOT set a +new record.

-If you believe you need to significantly abuse #include statements and/or implicit defines on the C compiler command line, -then try to make a case for why in your submission’s remarks.md file: maybe the Judges won’t reject your submission. +If you believe you need to significantly abuse #include statements +and/or implicit defines on the C compiler command line, then try to +make a case for why in your submission’s remarks.md file: maybe the +Judges won’t reject your submission.

Jump to: top

@@ -513,43 +520,45 @@

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

Your submission must satisfy BOTH the Rule 2a - Gross Size AND Rule 2b - Net Size rules.

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

+Rule 2 - Size restrictions, use the +iocccentry(1) tool. For example:

    iocccsize prog.c

The iocccsize(1) algorithm can be summarized as follows:

-

The size tool counts most C reserved words (keyword, secondary, and selected -preprocessor keywords) as 1. The size tool counts all other bytes as 1 -excluding ASCII whitespace, and excluding any ‘;’, ‘{’ or ‘}’ followed by -ASCII whitespace, and excluding any ‘;’, ‘{’ or ‘}’ byte immediately -before the end of file.

-

ASCII whitespace includes ASCII tab, ASCII space, ASCII newline, ASCII formfeed, and ASCII carriage return.

-

When ‘;’, ‘{’ or ‘}’ are within a C string, they may still not be -counted by the IOCCC size tool.

+

The size tool counts most C reserved words (keyword, secondary, and +selected preprocessor keywords) as 1. The size tool counts all other +bytes as 1 excluding ASCII whitespace, and excluding any ‘;’, ‘{’ +or ‘}’ followed by ASCII whitespace, and excluding any ‘;’, ‘{’ +or ‘}’ byte immediately before the end of file.

+

ASCII whitespace includes ASCII tab, ASCII space, ASCII newline, +ASCII formfeed, and ASCII carriage return.

+

When ‘;’, ‘{’ or ‘}’ are within a C string, they may still not +be counted by the IOCCC size tool.

In cases where the above summary and the algorithm implemented by -iocccsize(1) conflict, the algorithm implemented -by the minimum required version of iocccsize(1) is preferred by the Judges.

+iocccsize(1) conflict, the algorithm implemented by the minimum +required version of iocccsize(1) is preferred by the +Judges.

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

NOTE: by default iocccsize will only report the size, unless the code surpasses the limit.

-

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

+

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

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

Don’t expect the Rule 2 - Size restrictions to change any time soon.

-

See the -FAQ on “How has the Rule 2 size restrictions rule changed over the years?”.

+

See the FAQ on “How has the Rule 2 size restrictions rule changed over +the years?”.

Jump to: top

@@ -557,38 +566,44 @@

Guidelines for -If a group of people work on a submission, then they should -register for the IOCCC -using either a valid group email address, or an email address for one of the authors. +If a group of people work on a submission, then they should register +for the IOCCC using either a valid group +email address, or an email address for one of the authors.

Processing your registration is an activity overseen by a Judge. Please be patient while a Judge processes your registration.

-

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!

+

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!

-If after a few days you believe your registration hasn’t been process, then -contact the Judges. +If after a few days you believe your registration hasn’t been process, +then contact the Judges.

-After your UUID and temporary password are emailed to you, you have -up to fortnight (14 days) to login and change your temporary password. -If you fail to change your temporary password by that deadline, then you’ll need to -contact the Judges by email to request a reset. +After your UUID and temporary password are emailed to you, you have up +to fortnight (14 days) to login and change your temporary password. +If you fail to change your temporary password by that deadline, then +you’ll need to contact the Judges by email to +request a reset.

-

See How to register for the IOCCC.

-

See Entering the IOCCC: the bare minimum you need to know.

+

See the +FAQ on “How to register for the IOCCC”.

+

See the +FAQ on “Entering the IOCCC: the bare minimum you need to +know”.

Jump to: top

Guidelines for Rule 7 - Original Work

-

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

+

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

-

Don’t forget that the building of your program should be done -WITHOUT human intervention. So don’t do things such as:

+

Don’t forget that the building of your program should be done WITHOUT +human intervention. So don’t do things such as:

    prog: prog.c
         #echo this next line requires data from standard input
         cat > prog.c
         ${CC} prog.c -o prog
-

However, you can do something cute such as making your program -do something dumb (or cute) when it is built ‘automatically’, and -when it is run with a human involved, do something more clever. -For example, one could put in their Makefile:

+

However, you can do something cute such as making your program do +something dumb (or cute) when it is built ‘automatically’, and when it +is run with a human involved, do something more clever. For example, +one could put in their Makefile:

    prog: prog.c
         ${CC} prog.c -DNON_HUMAN_COMPILE -o prog
         @echo "See remarks section about alternate ways to compile"
-

and then include special notes in your remarks.md file for -alternate / human intervention based building.

+

and then include special notes in your remarks.md file for alternate +/ human intervention based building.

Jump to: top

-

We do realize that there are holes in the Rules, and invite -submitters to attempt to apply creative rule interpretation. A rule abuse though, even -if not rewarded, may result in a subsequent rule change for future contests.

-

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

-

When we do need to plug a hole in the Rules -or Guidelines, we will attempt to use a very small plug, -if not smaller.

+

We do realize that there are holes in the Rules, and +invite submitters to attempt to apply creative rule interpretation. A +rule abuse though, even if not rewarded, may result in a subsequent +rule change for future contests.

+

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

+

When we do need to plug a hole in the Rules or +Guidelines, we will attempt to use a very small +plug, if not smaller.

Or, maybe not. :-)

-

Legal rule abuse may involve, but is not limited to, doing things that are -technically allowed by the Rules and yet do not fit the spirit of what -we intended to be submitted.

-

Legal abuse of the Rules is NOT an invitation to violate -the Rules (especially Rule 17 - -Use mkiocccentry). A submission that violates the -rules in the opinion of the Judges, -WILL be disqualified. RULE ABUSE CARRIES A CERTAIN LEVEL OF RISK!

-

If you intend to abuse the Rules, -indicate so in your remarks.md file. You MUST try to justify, plead, beg, -why you consider your rule abuse to be allowed under the -Rules. Humor 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 Rules, if it might -otherwise be interesting; one that does not abuse the Rules -and one that does, making sure to note in the one that does not abuse the rules -that this is another version, so that the Judges do not assume you uploaded it -by mistake.

+

Legal rule abuse may involve, but is not limited to, doing things that +are technically allowed by the Rules and yet do not fit +the spirit of what we intended to be submitted.

+

Legal abuse of the Rules is NOT an invitation to +violate the Rules (especially Rule 17 - Use +mkiocccentry). A submission that +violates the rules in the opinion of the +Judges, WILL be disqualified. RULE ABUSE +CARRIES A CERTAIN LEVEL OF RISK!

+

If you intend to abuse the Rules, indicate so in your +remarks.md file. You MUST try to justify, plead, beg, why you +consider your rule abuse to be allowed under the Rules. +Humor 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 +Rules, if it might otherwise be interesting; one that +does not abuse the Rules and one that does, making sure +to note in the one that does not abuse the rules that this is another +version, so that the Judges do not assume you uploaded it by mistake.

If you do bypass the mkiocccentry(1) warnings about Rule 2a - Gross Size and/or about Rule 2b - Net Size -or any other -rule and submit a submission anyway, you MUST try to justify why the +or any other +rule and submit it anyway, you MUST try to justify why the 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 -file so as not to be overlooked.

-

We are often asked why the contest Rules and Guidelines seem strange or contain mistakes, flaws, or -grammatical errors. One reason is that we sometimes make genuine mistakes, but -in many cases such problems, flaws or areas of confusion are deliberate.

+violation, and you would be wise to do this towards the top of your +remarks.md file so as not to be overlooked.

+

We are often asked why the contest Rules and +Guidelines seem strange or contain mistakes, flaws, +or grammatical errors. One reason is that we sometimes make genuine +mistakes, but in many cases such problems, flaws or areas of confusion +are deliberate.

Changes to Rules and Guidelines in response to rule abuses, are done in a minimal fashion. Often we will -deliberately leave behind holes (or introduce new ones) so that future rule -abuse can continue. A clever author should be able to read and “drive a -truck through the holes” in the Rules and Guidelines.

-

At the risk of stating the obvious, this contest is a parody of the software -development process. The Rules and Guidelines -are only part of the overall contest. Even so, one might think the -contest Rules and Guidelines process as a parody -of the sometimes tragic mismatch between what a customer (or marketing) wants -and what engineering delivers. Real programmers must face obfuscated and -sometimes conflicting, ballooning specifications, and requirements from marketing, sales, -product management and even from customers themselves on an all too regular basis. -This is one of the reasons why the Rules and -Guidelines are written in obfuscated form.

+deliberately leave behind holes (or introduce new ones) so that future +rule abuse can continue. A clever author should be able to read and +“drive a truck through the holes” in the Rules and +Guidelines.

+

At the risk of stating the obvious, this contest is a parody of the +software development process. The Rules and +Guidelines are only part of the overall contest. +Even so, one might think the contest Rules and +Guidelines process as a parody of the sometimes +tragic mismatch between what a customer (or marketing) wants and what +engineering delivers. Real programmers must face obfuscated and +sometimes conflicting, ballooning specifications, and requirements from +marketing, sales, product management and even from customers themselves +on an all too regular basis. This is one of the reasons why the +Rules and Guidelines are written in +obfuscated form.

Jump to: top

Guidelines for Rule 12 - UTF-8

-

The IOCCC no longer discourages the use of multibyte UTF-8 characters in C code.

+

The IOCCC no longer discourages the use of multibyte UTF-8 characters +in C code.

-

We DISLIKE C code with trailing control-M’s (\r or \015) that results -in compilation failures.

+

We DISLIKE C code with trailing control-M’s (\r or \015) that +results in compilation failures.

Some non-UNIX/non-Linux tools such as MS Visual C and MS Visual C++ leave trailing control-M’s on lines. Users of such tools should strip -off such control-M’s before submitting their submissions. In some cases -tools have a “Save As” option that will prevent such trailing control-M’s -being added.

+off such control-M’s before submitting their submissions. In some +cases tools have a “Save As” option that will prevent such trailing +control-M’s being added.

-If your prog.c is near the -Rule 2a Gross Size and/or -Rule 2b Net Size -limit, you are permitted to NOT end source with a newline. -If you need to do this, please document that in your remarks.md file. +If your prog.c is near the Rule 2a Gross +Size and/or Rule 2b Net +Size limit, you are permitted to NOT +end source with a newline. If you need to do this, please document +that in your remarks.md file.

-If your complains about about not ending in a newline, please this in your remarks.md file. +If your compiler complains about about not ending in a newline, please +note this in your remarks.md file, and if possible add an appropriate +-Wno- to the CSILENCE variable in your Makefile.

Jump to: top

@@ -734,23 +763,26 @@

Guidelines for <

Guidelines for Rule 15 - GNU Makefile

-

Submissions will be judged in an environment that has no IDE. -Any submission that fails to compile/build because it requires -an IDE will be rejected.

-

-We will use the GNU make(1) tool, your Makefile, as well as tools found in the -Single UNIX Specification -(UNIX-like) environments, and commonly found on systems that reasonably conform to the -Single UNIX Specification +

Submissions will be judged in an environment that has no IDE. Any +submission that fails to compile/build because it requires an IDE +will be rejected.

+

+We will use the GNU make(1) tool, your Makefile, as well as tools +found in the Single UNIX +Specification +(UNIX-like) environments, and commonly found on systems that reasonably +conform to the Single UNIX +Specification in the building and compiling of your submission.

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

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

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

Jump to: top

@@ -760,78 +792,89 @@

Guidelines for We STRONGLY recommend you do install the most recent release of mkiocccentry toolkit -because use of older versions of the mkiocccentry toolkit are HIGHLY LIKELY to be REJECTED! +because use of older versions of the mkiocccentry toolkit are HIGHLY +LIKELY to be REJECTED!

If you submit your own JSON files (OTHER THAN .auth.json and -.info.json) then they do NOT have to be valid JSON. +.info.json!) then they do NOT have to be valid JSON. +

+

+However, if you do provide invalid JSON files, PLEASE document and +clearly explain this in your remarks.md file.

-However, if you do provide invalid JSON files, PLEASE -document and clearly explain this in your remarks.md file. +An extra file is defined as a file that is not prog.c, +prog.alt.c, try.sh, try.alt.sh, remarks.md, Makefile, +.auth.json and .info.json: unless it’s not in the top level +directory, in which case it IS an extra file.

-An extra file is defined as a file that is not prog.c, prog.alt.c, -try.sh, try.alt.sh, remarks.md, Makefile, .auth.json and .info.json: -unless it’s not in the top level directory, in which case it IS an extra -file. +The non-extra files are considered free files, and do not count +towards the Rule 17 - Use +mkiocccentry limit of 31 extra +files.

-The non-extra files (prog.c, prog.alt.c, -try.sh, try.alt.sh, remarks.md, Makefile, .auth.json and .info.json) -are considered free files, and do not count towards the -Rule 17 - Use mkiocccentry -limit of 31 extra files. +If you use an optional filename for something other than their intended +use in order to get past the file limit, we will consider that an abuse +of rules.

-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. +The mkiocccentry generated tarball does NOT reveal who you are! +For this reason, the tarball MUST be a v7 format tarball.

-The mkiocccentry generated tarball does NOT reveal who you are! For this -reason, the tarball MUST be a v7 format tarball. +You should NOT use a tarball as an extra file for a test-suite unless +you have a very good reason for this: if you do include a tarball as an +extra file, then you MUST specify why in your remarks.md file.

-You should NOT use a tarball as an extra file for a test-suite unless you -have a very good reason for this: if you do include a tarball as an extra file, -then you MUST specify why in your remarks.md file. +If you DO include a tarball as an extra file, and the build +process or the program extracts said tarball(s), the make clobber +rule MUST remove the extracted files.

-If you DO include a tarball as an extra file, and the build process or the -program extracts said tarball(s), the make clobber rule MUST remove the -extracted files. +Instead of including a large test-suite that requires a lot of files as +part of your submission, if your submission doesn’t require the +test-suite to be available to run, then in your remarks.md you could +include URL where such a test-suite may be downloaded from and how to +use the test-suite to test your submission, assuming it does not reveal +who you are, i.e. DO NOT use a GitHub URL which contains your +username, in case the judges know who you are. See Rule 16 - Anonymous +judging.

-Instead of including a large test-suite that requires a lot of files as part of -your submission, if your submission doesn’t require the test-suite to be -available to run, then in your remarks.md you could include URL where such a -test-suite may be downloaded from and how to use the test-suite to test your -submission, assuming it is not reveal who you are, eg. do not use a GitHub URL -which contains your username. +If you DO include a tarball then make sure it uses the v7 format. +This is because it will not reveal who you are.

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

We recommend that all markdown files in your submission observe our IOCCC markdown guidelines.

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

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

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

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

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

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

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

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

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

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

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

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

Jump to: top

General Guidelines

@@ -839,28 +882,33 @@

General Guidelines

Overall Guidelines

-

These Guidelines are hints and suggestions, NOT Rules.

-

While submissions that violate the Guidelines are allowed, -submissions that remain within the Guidelines are preferred.

+

These Guidelines are hints and suggestions, +NOT Rules.

+

While submissions that violate the Guidelines are +allowed, submissions that remain within the +Guidelines are preferred.

You are encouraged to review the following FAQs:

While the contest is open, you may modify your previously uploaded submission by rebuilding your submission with the -mkiocccentry toolkit, -and then re-uploading it to the same slot number on the -submit server.

+mkiocccentry toolkit, and +then re-uploading it to the same slot number on the submit +server.

The official locale of the IOCCC is C.

-

You are encouraged to examine the winners of previous contests.

-

Because the Rules change from year to year, some past winning entries -may be rejected this year. What was was unique and novel one year might be ‘old’ the next year.

-

A submission is usually examined in a number of ways. We typically apply -a number of tests to a submission:

+

You are encouraged to examine the winners of previous +contests.

+

Because the Rules change from year to year, some past +winning entries may be rejected this year. What was +was unique and novel one year might be ‘old’ the next year.

+

A submission is usually examined in a number of ways. We typically +apply a number of tests to a submission:

  • look at the original source
  • C pre-process the source ignoring #include lines
  • @@ -870,44 +918,48 @@

    Overall Guidelines

  • compile it (with flags to enable all warnings)
  • execute it
-

You should consider how your submission looks in each of the above tests. -You should ask yourself if your submission remains obscure after it has been -‘cleaned up’ by the C pre-processor and a C beautifier.

-

Your submission need not pass all of the above tests as in certain cases, -a test is not important.

-

Submissions that compete for the -‘strangest/most creative source layout’ need not do as well as -others in terms of their algorithm.

+

You should consider how your submission looks in each of the above +tests. You should ask yourself if your submission remains obscure +after it has been ‘cleaned up’ by the C pre-processor and a C +beautifier.

+

Your submission need not pass all of the above tests as in certain +cases, a test is not important.

+

Submissions that compete for the ‘strangest/most creative source +layout’ need not do as well as others in terms of their algorithm.

Given two submissions, we are more inclined to pick the submission that does something interesting when it’s executed.

-

IMPORTANT: Be sure that your submission works as documented in your remarks.md file.

-

We sometimes make an effort to debug a submission -that has a slight problem, particularly in or near the final round. -On the other hand, we have seen some otherwise excellent submissions -fall down because they didn’t work as documented.

-

If you submission has bugs and/or mis-features, you are MUCH BETTER off -documenting such bugs and/or mis-features in your remarks.md file.

-

Consider an example of a prime number -printing program that claims that 16 is a prime number. -Noting such a bug in your remarks.md file could save your submission:

+

IMPORTANT: Be sure that your submission works as documented in +your remarks.md file.

+

We sometimes make an effort to debug a submission that has a slight +problem, particularly in or near the final round. On the other hand, +we have seen some otherwise excellent submissions fall down because +they didn’t work as documented.

+

If you submission has bugs and/or mis-features, you are MUCH BETTER +off documenting such bugs and/or mis-features in your remarks.md +file.

+

Consider an example of a prime +number printing program +that claims that 16 is a prime number. Noting such a bug in your +remarks.md file could save your submission:

this submission sometimes prints the 4th power of a prime by mistake

-

Sometimes a strange bug or (mis-)feature can even help the submission! Of course, a correctly -working submission might be better.

-

We tend to look down on a -prime number -printer that claims that 16 is a prime number. -Clever people will note that 16 might be prime under certain conditions. ;-) -Wise people, when submitting something clever -will fully explain such cleverness in their submission’s remarks.md file.

+

Sometimes a strange bug or (mis-)feature can even help the submission! +Of course, a correctly working submission might be better.

+

We tend to look down on a prime +number printer that claims +that 16 is a prime number. Clever people will note that 16 might be +prime under certain conditions. ;-) Wise people, when submitting +something clever will fully explain such cleverness in their +submission’s remarks.md file.

People who are considering to just use some complex mathematical function or state machine to spell out something such as “hello, -world!really really, and we do mean REALLY, do need to be more creative.

+world!” really really, and we do mean REALLY, do need to be more +creative.

Consider using misleading or subtle tricks layered on top of or under an appropriate level of obfuscation.

-

A clean looking program with misleading comments and variable names might be a -VERY GOOD START to a great submission!

+

A clean looking program with misleading comments and variable names +might be a VERY GOOD START to a great submission!

Jump to: top

@@ -915,46 +967,56 @@

Our Likes and Dislikes

We VERY MUCH LIKE submissions that use an edited variant of the -example Makefile, as described and linked to in the Makefile section, -renamed as Makefile of course. This makes it easier for the Judges -to test your submission. And if your submissions wins, it makes it easier to integrate it into -the Official IOCCC winner website.

-

We VERY MUCH LIKE submissions that have some educational value. This does NOT mean -that your submission should not be obfuscated but rather that the IOCCC has moved away from -the idea of “spoilers”. You should not encrypt or rot13 content in your remarks.md file.

-

The above statement does not mean encryption/decryption tools will not win, nor -does it mean that if you have such a submission that you could not encrypt some -remarks (such as obfuscation details), but if you do so please put them in a -separate file and indicate how to undo it. Please do NOT use any cipher to -encrypt your remarks.md.

-

It is VERY MUCH appreciated if your remarks have some educational -value. And although educational value is not required, it is an -EXCELLENT bonus.

-

We LIKE submissions that use an edited version of the -try.sh example script (and if you have alternate code, -the same applies with the try.alt.sh script):

+example Makefile, as described and linked to in the +FAQ on “What are the detailed recommendations for a submission +Makefile?, +renamed as Makefile of course.

+

This makes it easier for the Judges to test your +submission. And if your submissions wins, it makes it easier to +integrate it into the Official IOCCC winner +website.

+

We VERY MUCH LIKE submissions that have some educational value. +This does NOT mean that your submission should not be obfuscated +but rather that the IOCCC has moved away from the idea of “spoilers”. +You should not encrypt or rot13 content in your remarks.md file.

+

The above statement does not mean encryption/decryption tools will not +win, nor does it mean that if you have such a submission that you could +not encrypt some remarks (such as obfuscation details), but if you do +so please put them in a separate file and indicate how to decipher it. +Please do NOT use any cipher to encrypt your remarks.md.

+

It is VERY MUCH appreciated if your remarks or prog.c have some +educational value. And although educational value is not required, it +is an EXCELLENT bonus.

+

We LIKE submissions that use an edited version of the try.sh +example script (and if you have alternate code, the same applies with +the try.alt.sh script):

-

Of course, it is quite possible that only one invocation is -possible, so it is not necessarily detrimental to your submission if you do not -include one, though we do like interesting and creative uses of submissions. See -also the -FAQ on “submitting try.sh and try.alt.sh scripts”.

+

Of course, it is quite possible that only one invocation is possible, +so it is not necessarily detrimental to your submission if you do not +include one, though we do like interesting and creative uses of +submissions. See also the FAQ on “submitting try.sh and try.alt.sh +scripts”.

-Even if it only has one invocation we still LIKE the try scripts. +Even if it only has one invocation we still LIKE the try scripts +because we use them during judging and in publishing the winning +entries.

-If you do include a try.sh then PLEASE remove the try rule in the Makefile. +If you do include a try.sh then PLEASE remove the try rule in +the Makefile.

-If you do include a try.alt.sh then PLEASE remove the try.alt rule in the Makefile. +If you do include a try.alt.sh then PLEASE remove the try.alt +rule in the Makefile.

-If you don’t have a prog.alt.c, then PLEASE remove the try.alt rule as well. +If you don’t have a prog.alt.c, then PLEASE remove the try.alt +rule as well.

Jump to: top

@@ -962,54 +1024,58 @@

About C preprocessor

Doing masses of #defines to obscure the source has become ‘old’. We tend to ‘see thru’ masses of #defines due to our pre-processor tests -that we apply. Simply abusing #defines or -Dfoo=bar won’t go as far -as a program that is more well rounded in confusion.

+that we apply. Simply abusing #defines or -Dfoo=bar won’t go as +far as a program that is more well rounded in confusion.

Many C compilers DISLIKE the following code, and so do we:

    #define d define
     #d foo             /* <-- don't expect this to turn into #define foo */

In other words, it is a compilation error, and in order to get older -IOCCC winning entries that did this to compile, we had to update them to not do this.

+IOCCC winning entries that did this to compile, we had to update them +to not do this.

When declaring local or global variables, you should declare the type:

    int this_is_fine;

and NOT like this:

    this_is_not;       /* <-- Try to avoid implicit type declarations */
-

We really DISLIKE submissions that make blatant use of #include of -large data files to get around the source code size limit. This does not mean -#include of standard header files, just data files you provide.

-

On 28 January 2007, the Judges rescinded the requirement that the -# in a C preprocessor directive must be the 1st non-whitespace byte.

+

We really DISLIKE submissions that make blatant use of #include +of large data files to get around the source code size limit. This does +not mean #include of standard header files, just data files you +provide.

+

On 28 January 2007, the Judges rescinded the requirement that the # +in a C preprocessor directive must be the 1st non-whitespace byte.

About compilers

-

We tend to like less a submission that requires either -gcc OR clang. We prefer submissions that can compile -under BOTH gcc AND clang. Hint!

-

We RECOMMEND that the compiler flags you use in your -submission’s Makefile are supported by BOTH gcc AND clang.

-

We DISLIKE the use of obscure compiler flags, especially -if gcc and/or clang do not support it. We suggest -that you not use any really obscure compiler flags if you can help it.

+

We tend to like less a submission that requires either gcc +OR clang. We prefer submissions that can compile under +BOTH gcc AND clang. Hint!

+

We RECOMMEND that the compiler flags you use in your submission’s +Makefile are supported by BOTH gcc AND clang.

+

We DISLIKE the use of obscure compiler flags, especially if gcc +and/or clang do not support it. We suggest that you not use any +really obscure compiler flags if you can help it.

About nested functions

-

One side effect of the above is that you cannot assume the use -of nested functions such as:

+

One side effect of the above is that you cannot assume the use of +nested functions such as:

     int main() {
 |        void please_dont_submit_this() {
 |           printf("The machine that goes BING!!\n");
          }
 |        please_dont_submit_this();
      }
-

On 2012 July 20, the Judges rescinded the encouragement of -nested functions. Such constructions, while interesting and sometimes -amusing, will have to wait until they are required by a C standard that are -actually implemented in BOTH gcc AND clang.

-

We DISLIKE submissions that require the use of -fnested-functions.

+

On 2012 July 20, the Judges rescinded the +encouragement of nested functions. Such constructions, while +interesting and sometimes amusing, will have to wait until they are +required by a C standard that are actually implemented in BOTH +gcc AND clang.

+

We DISLIKE submissions that require the use of +-fnested-functions.

About variadic functions

If your submission uses functions that have a variable number of -arguments, be careful. Systems implement va_list in a wide variety -of ways. Because of this, a number of operations using va_list are -not portable and must not be used:

+arguments, be careful. Systems implement va_list in a wide +variety of ways. Because of this, a number of operations using +va_list are not portable and must not be used:

  • assigning a non-va_list variable to/from a va_list variable
  • casting a non-va_list variable into/from a va_list variable
  • @@ -1020,58 +1086,75 @@

    About variadic functions

In particular, do not treat va_list variables as if they were a char **.

We DISLIKE the use of varargs.h. Use stdarg.h instead.

-

About I/O

+
+

About I/O functions

+

We DISLIKE the use of gets(3). Use fgets(3) instead.

About tarballs

-

We tend to DISLIKE the blatant use of tarballs in an attempt to simply get -around the extra file number limit. We realize there may be cases where a -tarball containing a number of extra files may be needed. Such a need for a -tarball MUST be explained in the remarks.md file.

+

We tend to DISLIKE the blatant use of tarballs in an attempt to +simply get around the extra file number limit. We realize there may be +cases where a tarball containing a number of extra files may be needed. +Such a need for a tarball MUST be explained in the remarks.md +file.

+
+

-Using a mass of gotos to obfuscate your code has become ‘old’ and is unlikely -to make it through the final rounds, if it even gets that far. +Using a mass of gotos to obfuscate your code has become ‘old’ and is +unlikely to make it through the final rounds, if it even gets that far.

+
+
-

About stdlib

+
+

About exit(3)

-

The exit(3) function returns void. Some broken systems have exit(3) -return int; your submission should assume that exit(3) returns a void.

+
+

The exit(3) function returns void. Some broken systems have +exit(3) return int; your submission should assume that exit(3) +returns a void.

What it means to be small

Small programs are best when they are short, obscure and concise. -While such programs are not as complex as other winners, they do -serve a useful purpose: they are often the only program that people -attempt to completely understand. For this reason, we look for -programs that are compact, and are instructional.

-

One line programs should be short one line programs: say around 80 to 132 -bytes long. Going well beyond 132 bytes is a bit too long to be called -a one-liner in our vague opinion.

+While such programs are not as complex as other winners, they do serve +a useful purpose: they are often the only program that people attempt +to completely understand. For this reason, we look for programs that +are compact, and are instructional.

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

-

Programs that claim to be the smallest C source that does something, really +

+

What a one-liner means

+
+

One line programs should be short one line programs: say around 80 +to 132 bytes long. Going well beyond 132 bytes is a bit too +long to be called a one-liner in our vague opinion. +Programs that claim to be the smallest C source that does something, really better be the smallest such program or they risk being rejected because they do not work as documented.

+
+

About blobs of code

+

We want to get away from source that is simply a compact blob of bytes. REALLY TRY to be more creative than blob coding. HINT!

Unless you are cramped for space, or unless you are entering the ‘Best one liner’ category, we suggest that you format your program in a more creative way than simply forming excessively long lines.

-

The Makefile should not be used to try and get around the size limit. It is -one thing to make use of a several -Ds on the compile line to help out, but it -is quite another to use many bytes of -Ds in order to try and squeeze the -source under the size limit.

-

Please do not use things like gzip(1) to get around the size limit. This was -done years ago; please try to be much more creative.

+

The Makefile should not be used to try and get around the size limit. +It is one thing to make use of a several -Ds on the compile line to +help out, but it is quite another to use many bytes of -Ds in order +to try and squeeze the source under the size limit.

+

Please do not use things like gzip(1) to get around the size limit. +This was done years ago; please try to be much more creative.

Your source code, post-pre-processing, should not exceed the size of -Microsoft Windows. :-)

+Microsoft Windows. +:-)

About environment

We tend to DISLIKE programs that:

  • are very hardware specific
  • -
  • are very OS version specific (index(3)/strchr(3) differences are OK, but -sockets/streams specific code is likely not to be)
  • +
  • are very OS version specific (index(3)/strchr(3) differences are +OK, but sockets/streams specific code is likely not to be)
  • dump core or have compiler warnings (it is OK only if you warn us in your remarks.md file)
  • won’t compile or run in a Single UNIX @@ -1090,9 +1173,9 @@

    About environment

  • are identical to previous losers :-)
  • that mandate the exclusive use of a specific Integrated Development Environment (IDE)
-

In order to encourage submission portability, we DISLIKE submissions that -fail to build unless one is using an IDE. For example, do not -mandate that one must use Microsoft Visual Studio to compile +

In order to encourage submission portability, we DISLIKE +submissions that fail to build unless one is using an IDE. For example, +do not mandate that one must use Microsoft Visual Studio to compile your submission.

The program must compile and link cleanly in a Single UNIX Specification @@ -1100,156 +1183,163 @@

About environment

windows.h include file:

    #include <windows.h>  /* we DISLIKE this */

-You should try to restrict commands used in the build file to commands found in -Single UNIX +You should try to restrict commands used in the build file to commands +found in Single UNIX Specification (UNIX-like) environments and systems that conform to the Single UNIX Specification.

-

You may compile and use your own programs. If you do, try to build and execute -from the current directory. This restriction is not a hard and +

You may compile and use your own programs. If you do, try to build and +execute from the current directory. This restriction is not a hard and absolute one. The intent is to ensure that the building of your program is reasonably portable.

We prefer programs that are portable across a wide variety of UNIX-like operating systems (e.g., Linux, GNU Hurd, BSD, UNIX, macOS, etc.).

-

Try to avoid submissions that play music that some people believe is copyrighted -music.

-

Did we remember to indicate that programs that blatantly use -some complex state machine to do something simple, are boring? -We think we did. :-)

-

Given two versions of the same program, one that is a compact blob -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 -Rules -for details (in particular, -Rule 8 - Submitting requirements).

-

Please note that the C source below, besides lacking in obfuscation, -is NOT the smallest C source file that when compiled and run, dumps core:

+

Try to avoid submissions that play music that some people believe is +copyrighted music.

+

Did we remember to indicate that programs that blatantly use some +complex state machine to do something simple, are boring? We think we +did. :-)

+

Given two versions of the same program, one that is a compact blob 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 +Rules for details (in particular, Rule 8 - Submitting +requirements).

+

Please note that the C source below, besides lacking in obfuscation, is +NOT the smallest C source file that when compiled and run, dumps +core:

    main;

Unless you specify -fwritable-strings (see COTHER in the example -Makefile, described in the Makefile section), do not assume this -sort of code will work:

+Makefile, described in the +FAQ on “What are the detailed recommendations for a submission +Makefile”), do not +assume this sort of code will work:

    char *T = "So many primes, so little time!";
     ...
     T[14] = ';';    /* modifying a string requires: -fwritable-strings */
-

Even so, one should probably not assume that this is universally accepted.

-

Initialized char arrays are OK to write over. For instance, this is OK:

+

Even so, one should probably not assume that this is universally +accepted.

+

Initialized char arrays are OK to write over. For instance, this is +OK:

    char b[] = "Is this OK";
     b[9] = 'k';     /* modifying an initialized char array is OK */
-

We prefer code that can run on either a 64-bit or 32-bit -processor. However, it is UNWISE to assume it will run on an -some Intel-like x86 architecture**.

-

While programs that only run in a specific word size are OK, if you have -to pick, choose a 64-bit word size.

-

If your submission MUST run only on a 64-bit or 32-bit architecture, -then you MUST specify the -arch on your command line -(see ARCH in the example -Makefile, described in Makefile section). Do not assume a -processor word size without specifying -arch. For example:

+

We prefer code that can run on either a 64-bit or 32-bit processor. +However, it is UNWISE to assume it will run on an some Intel-like +x86 architecture**.

+

While programs that only run in a specific word size are OK, if you +have to pick, choose a 64-bit word size.

+

If your submission MUST run only on a 64-bit or 32-bit +architecture, then you MUST specify the -arch on your command +line (see ARCH in the example Makefile, described in the FAQ on +“What are the detailed recommendations for a submission +Makefile?.

+

Do not assume a processor word size without specifying -arch. For +example:

    ARCH= -m64

Note, however, that some platforms will not necessarily support some -architectures. For instance, more recent versions of macOS do NOT support -32-bit, and more than zero Judges use it!

+architectures. For instance, more recent versions of macOS do NOT +support 32-bit, and more than zero Judges use it!

About X

-

X client submissions should be as portable as possible. Submissions that -adapt to a wide collection of environments will be favored. For -example, don’t depend on a particular type or size of display. -Don’t assume the use of a particular browser. Instead assume a -generic browser that forms to a widely used W3C standard. -Don’t assume a particular sound sub-system or video driver is installed -in the OS. Instead, make use of a well known and widely available open -source program (one that actually works) to display audio/visual data.

+

X client submissions should be as portable as possible. Submissions +that adapt to a wide collection of environments will be favored. For +example, don’t depend on a particular type or size of display. Don’t +assume the use of a particular browser. Instead assume a generic +browser that forms to a widely used W3C +standard. Don’t assume a particular +sound sub-system or video driver is installed in the OS. Instead, make +use of a well known and widely available open source program (one that +actually works) to display audio/visual data.

X client submissions should avoid using X related libraries and software that are not in wide spread use.

-

As of Red Hat RHEL9.0, the X.org server is deprecated. See the -FAQ on “Xorg deprecation”” -for more details. This does not mean that a submission using this will -necessarily be rejected, but it would be better if it can support Wayland in -some way or another.

-

We DISLIKE submissions that use proprietary toolkits such as the M*tif, -Xv*ew, or OpenL*ok toolkits, since not everyone has them. Use an -open source toolkit that is widely and freely available instead.

+

As of Red Hat RHEL9.0, the X.org server is deprecated. See the FAQ on +“Xorg deprecation”” for more details. +This does not mean that a submission using this will necessarily be +rejected, but it would be better if it can support Wayland in some way +or another.

+

We DISLIKE submissions that use proprietary toolkits such as the +M*tif, Xv*ew, or OpenL*ok toolkits, since not everyone has them. +Use an open source toolkit that is widely and freely available instead.

X client submissions should try to not to depend on particular items in -.Xdefaults. If you must do so, be sure to note the required lines -in the your remarks.md file. They should also not depend on any +.Xdefaults. If you must do so, be sure to note the required lines in +the your remarks.md file. They should also not depend on any particular window manager.

-

About Curses

+
+

About libcurses

+

One should restrict libcurses to portable features found on both BSD and Linux curses.

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

Jump to: top

About ASCII TAB

-

We DISLIKE the use of ASCII tab characters in markdown files, such as in the required remarks.md file.

-

We don’t mind the use of ASCII tab characters in your C code. Feel free -to use ASCII tab characters if that suits your obfuscation needs. If is -perfectly OK to use tab characters elsewhere in your submission, just not in -markdown files as this tends annoy us when it comes time to -rendering your markdown content as it complicates the process.

-

If you do use ASCII tab characters in your non-markdown files, be -aware that some people may use a tab stop that is different than the common 8 +

We DISLIKE the use of ASCII tab characters in markdown files, such +as in the required remarks.md file.

+

We don’t mind the use of ASCII tab characters in your C code. Feel +free to use ASCII tab characters if that suits your obfuscation needs. +If is perfectly OK to use tab characters elsewhere in your +submission, just not in markdown files as this tends annoy us when it +comes time to rendering your markdown content as it complicates the +process.

+

If you do use ASCII tab characters in your non-markdown files, be aware +that some people may use a tab stop that is different than the common 8 character tab stop.

-

PLEASE observe our 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 4 - Required files, -and the -FAQ on “markdown”.

+

PLEASE observe our 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 4 - Required files, +and the FAQ on “markdown”.

Jump to: top

About remarks.md

You are better off explaining what your submission does in your remarks.md file section rather than leaving it obscure for the -Judges as we might miss something and/or be too tired to -notice.

-

We freely admit that interesting, creative or humorous comments in -your remarks.md file help your chances of winning. If you had to -read so many twisted submissions, you too would enjoy a good laugh or two. -We think the readers of the contest winners do as well. We do read -your remarks.md content during the judging process, so it is worth your +Judges as we might miss something and/or be too tired +to notice.

+

We freely admit that interesting, creative or humorous comments in your +remarks.md file help your chances of winning. If you had to read so +many twisted submissions, you too would enjoy a good laugh or two. We +think the readers of the contest winners do as well. We do read your +remarks.md content during the judging process, so it is worth your while to write a remarkable remarks.md file.

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 -your submission has some very subtle obfuscations that we might -otherwise overlook. <<– Hint!

-

Anyone can format their code into a dense blob. A really clever -author will try format their submission using a “normal” formatting style -such that at first glance (if you squint and don’t look at the details) -the code might pass for non-obfuscated C. Deceptive comments, -and misleading formatting, in some cases, may be a plus. On the -other hand, a misleading code style requires more source bytes.

-

If you do elect to use misleading formatting and comments, we -suggest you remark on this point in your remarks.md where you talk -about why you think your submission is obfuscated. On the other hand, -if you are pushing up against the size limits, you may be forced -into creating a dense blob. Such are the trade-offs that obfuscators face!

-

If there are limitations in your submission, you are highly encouraged -to note such limitations in your remarks.md file. For example if your -submission factors values up to a certain size, you might want to state:

+think your submission is obfuscated. This is particularly true if your +submission has some very subtle obfuscations that we might otherwise +overlook. <<– Hint!

+

Anyone can format their code into a dense blob. A really clever author +will try format their submission using a “normal” formatting style such +that at first glance (if you squint and don’t look at the details) the +code might pass for non-obfuscated C. Deceptive comments, and +misleading formatting, in some cases, may be a plus. On the other +hand, a misleading code style requires more source bytes.

+

If you do elect to use misleading formatting and comments, we suggest +you remark on this point in your remarks.md where you talk about why +you think your submission is obfuscated. On the other hand, if you are +pushing up against the size limits, you may be forced into creating a +dense blob. Such are the trade-offs that obfuscators face!

We LIKE reading remarks.md files, especially if they contain -useful, informative, and even humorous content about your submission. Yes, this -is a hint. :-)

-

We RECOMMEND you put a reasonable amount effort into the content of the -remarks.md file: it is a required file for a reason. :-)

+useful, informative, and even humorous content about your submission. +Yes, this is a hint. :-)

+

We RECOMMEND you put a reasonable amount effort into the content of +the remarks.md file: it is a required file for a reason. :-)

Try to be even more creative!

Jump to: top

Miscellaneous

-

While we recognize that UNIX is not a universal operating system, the contest -does have a bias towards such systems. In an effort to expand the scope of the -contest, we phrase our bias to favor the Single UNIX +

While we recognize that UNIX is not a universal operating system, the +contest does have a bias towards such systems. In an effort to expand +the scope of the contest, we phrase our bias to favor the Single UNIX Specification (UNIX-like).

-

You are well advised to submit code that conforms to the Single UNIX -Specification Version 4.

+

You are well advised to submit code that conforms to the Single +UNIX Specification Version 4.

To quote the Judges:

We LIKE programs that:

    @@ -1264,66 +1354,83 @@

    Miscellaneous

    Some types of programs can’t excel (anti-tm) in some areas. Your program doesn’t have to excel in all areas, but doing well in several areas really does help.

    +

    If there are limitations in your submission, you are highly encouraged +to note such limitations in your remarks.md file. For example if +your submission factors values up to a certain size, you might want to +state:

    -

    This submission factors values up 2305567963945518424753102147331756070. -Attempting to factor larger values will produce unpredictable results.

    +

    This submission factors values up +2305567963945518424753102147331756070. Attempting to factor larger +values will produce unpredictable results.

    -

    The Judges might try to factor the value -5, so you want to might state:

    +

    The Judges might try to factor the value -5, so you +want to might state:

    This submission factors positive values up -2305567963945518424753102147331756070. Attempting to factor large values will -produce unpredictable results.

    +2305567963945518424753102147331756070. Attempting to factor large +values will produce unpredictable results.

    -

    However the Judges might try to also factor 0, so you might want to state:

    +

    However the Judges might try to also factor 0, so you +might want to state:

    This submission factors values between 1 and -2305567963945518424753102147331756070. Attempting to factor values outside -that range will produce unpredictable results.

    +2305567963945518424753102147331756070. Attempting to factor values +outside that range will produce unpredictable results.

    -

    Moreover they might try to also factor 3.5 or 0x7, or Fred, so you want to might state:

    +

    Moreover they might try to also factor 3.5 or 0x7, or Fred, so you want +to might state:

    This submission factors integers between 1 and -2305567963945518424753102147331756070. Attempting to factor anything else -will produce unpredictable results.

    +2305567963945518424753102147331756070. Attempting to factor anything +else will produce unpredictable results.

    -

    You submission might be better off catching the attempt to factor bogus values -and doing something interesting. So you might want to code accordingly and state:

    +

    You submission might be better off catching the attempt to factor bogus +values and doing something interesting. So you might want to code +accordingly and state:

    -

    This submission factors integers between 1 and 2305567963945518424753102147331756070. -Attempting to factor anything else will cause the program to insult your pet fish Eric.

    +

    This submission factors integers between 1 and +2305567963945518424753102147331756070. Attempting to factor anything +else will cause the program to insult your pet fish Eric.

    -

    The Judges might not have a pet fish named Eric, so you might want to state:

    +

    The Judges might not have a pet fish named Eric, so +you might want to state:

    This submission factors integers between 1 and -2305567963945518424753102147331756070. Attempting to factor anything else -will cause the program to insult your pet fish Eric, or in the case that you -lack such a pet, will insult the pet that you do not have.

    +2305567963945518424753102147331756070. Attempting to factor anything +else will cause the program to insult your pet fish Eric, or in the +case that you lack such a pet, will insult the pet that you do not +have.

    -

    When all other things are equal, a submission with fewer limitations will be judged -better than a submission with lots of limitations. So you might want to code accordingly -and state:

    +

    When all other things are equal, a submission with fewer limitations +will be judged better than a submission with lots of limitations. So +you might want to code accordingly and state:

    -

    This submission attempts to a factor value of any size provided that the -program is given enough time and memory. If the value is not a proper integer, -the program might insult a fish named Eric.

    +

    This submission attempts to a factor value of any size provided +that the program is given enough time and memory. If the value is not +a proper integer, the program might insult a fish named Eric.

    +

    Do not fear if you’re not 100% sure of the significance of +2305567963945518424753102147331756070 as it is not of prime +importance: or is it? :-)

    Jump to: top

    Guidelines for the mkiocccentry toolkit

    -

    The IOCCC submit server, and related services -use the most recent version of the -mkiocccentry toolkit: -submissions that package using older versions of the -mkiocccentry toolkit -are LIKELY to be REJECTED!

    +

    The IOCCC submit server, and related +services use the most recent version of the mkiocccentry +toolkit: submissions that +package using older versions of the mkiocccentry +toolkit are LIKELY to +be REJECTED!

    You REALLY SHOULD use the latest mkiocccentry -toolkit to package your submission -as submissions that use an older version are LIKELY to be REJECTED!

    +toolkit to package your +submission as submissions that use an older version are WILL +be REJECTED!

    The mkiocccentry(1) tool runs a number of checks by way of these -mkiocccentry toolkit tools:

    +mkiocccentry toolkit +tools:

    • iocccsize(1)
    • txzchk(1)
    • @@ -1331,93 +1438,104 @@

      Guidelines for the mkiocccentry
    • chksubmit(1)
    • chkentry(1)
    -

    Do NOT use txzchk(1) or fnamchk(1) command line options that are labeled -“for TESTING purposes” in their respective man pages.

    -

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

    -

    Do NOT use chksubmit(1) command line options that are labeled “for the use by the Judges only” -in the chksubmit(1) man page. -Similarly do NOT use chkentry(1) command line options marked “for the use -by the Judges only” in the chkentry(1) man page.

    -

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

    +

    Do NOT use txzchk(1) or fnamchk(1) command line options that +are labelled “for TESTING purposes” in their respective man pages.

    +

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

    +

    Do NOT use chksubmit(1) command line options that are labelled +“for the use by the Judges only” in the chksubmit(1) man page.

    +

    Similarly do NOT use chkentry(1) command line options marked +“for the use by the Judges only” in the chkentry(1) man page.

    +

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

        man soup/man/man1/mkiocccentry.1
         man soup/man/man1/iocccsize.1
         man soup/man/man1/txzchk.1
         man test_ioccc/man/man1/fnamchk.1
         man soup/man/man1/chksubmit.1
         man soup/man/man1/chkentry.1
    -

    The above man(1) commands will show the toolkit man pages without having to install them first.

    -

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

    -

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

    -

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

    -

    Use mkiocccentry -Y -i answers .. to force a yes answers with great caution -because it might force a yes answer to something you do NOT want, such as a -change in your code that violates a detected rule. -The mkiocccentry -i answers .. will still be required to confirm “Yes/No” questions. -While mkiocccentry -Y -i answers .. will force yes answers, use with great caution, -because it might force a yes answer to something you do NOT want.

    -

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

    -

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

    +

    The above man(1) commands will show the toolkit man pages without +having to install them first.

    +

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

    +

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

    +

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

    +

    Use mkiocccentry -Y -i answers .. to force a yes answers with great +caution because it might force a yes answer to something you do +NOT want, such as a change in your code that violates a detected +rule.

    +

    The mkiocccentry -i answers .. will still be required to confirm +“Yes/No” questions. While mkiocccentry -Y -i answers .. will force +yes answers, use with great caution, because it might force a yes +answer to something you do NOT want.

    +

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

    +

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

        mkiocccentry -d workdir topdir

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

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

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

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

    +

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

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

    -

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

    -

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

    +

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

    +

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

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

    -The same can be said of mkiocccentry -Y ... , and to a lesser extent mkiocccentry -y ...: -the -y is mostly for the test script and the -Y is like -y but even more aggressive. +The same can be said of mkiocccentry -Y ... , and to a lesser extent +mkiocccentry -y ...: the -y is mostly for the test script and the +-Y is like -y but even more aggressive.

    -

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

    -

    If you encounter a bug with the -mkiocccentry toolkit -PLEASE run the bug_report.sh script to help us out here!

    +

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

    +

    If you encounter a bug with the mkiocccentry +toolkit PLEASE run the +bug_report.sh script to help us out here!

    -While you don’t have to install the -mkiocccentry toolkit, -if you don’t, in order to run a tool outside the repo directory -you will have to specify mkiocccentry(1) command line options to locate required tools -such as chkentry(1) (mkiocccentry -C chkentry ...), txzchk(1) (mkiocccentry -T txzchk ...), -and fnamchk(1) (mkiocccentry -F fnamchk ...). +While you don’t have to install the mkiocccentry +toolkit, if you don’t, in +order to run a tool outside the repo directory you will have to specify +mkiocccentry(1) command line options to locate required tools such as +chkentry(1) (mkiocccentry -C chkentry ...), txzchk(1) +(mkiocccentry -T txzchk ...), and fnamchk(1) (mkiocccentry -F fnamchk ...).

    -The mkiocccentry(1) tool will ignore any filename or directory that begins with a period (.). +The mkiocccentry(1) tool will ignore any filename or directory that +begins with a period (.).

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

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

      @@ -1431,26 +1549,27 @@

      Guidelines for the mkiocccentry

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

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

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

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

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

    The mkiocccentry(1) tool will ignore all symlinks. @@ -1463,87 +1582,93 @@

    Guidelines for the mkiocccentry mkiocccentry(1) tool to abort with a fatal error.

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

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

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

    -

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

    -

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

    -

    See +

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

    +

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

    +

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

    -

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

    -

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

    +

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

    +

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

    Jump to: top

    Fun😄damental Guidelines

    -

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

    -

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

    -

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

    +

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

    +

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

    +

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

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

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

    -

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

    -

    We prefer programs that do not require a fish license: crayons and -cat detector vans not withstanding.

    +

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

    +

    We prefer programs that do not require a fish license: crayons and cat +detector vans not withstanding.

    This guideline has a change mark at the very start of this line.

    While those who are used to temperatures found on dwarf -planets -(yes Virginia, dwarf planets ARE planets!), such as -Pluto, might be able to -explain to the Walrus why our seas are boiling hot, the question of +planets (yes Virginia, +dwarf planets ARE planets!), such as +Pluto, might be able +to explain to the Walrus why our seas are boiling hot, the question of whether pigs have wings is likely to remain a debatable point to most.

    At least one judge prefers to maintain the use of the -leap-second -as part of the world’s time standard. If your code prints time -with seconds, we prefer that your code be capable of printing the -time of day during a leap-second where the value in seconds -after the minute mark is 60.

    +leap-second as part of the +world’s time standard. If your code prints time with seconds, we +prefer that your code be capable of printing the time of day during a +leap-second where the value in seconds after the minute mark is 60.

    Other windows, on the other hand, might be OK: especially where “X -marks the spot”. Yet on the third hand, windows are best when they are -“unseen” (i.e., not dirty). :-)

    -

    The Judges, as a group, have a history giving wide degree of latitude -to reasonable submissions. And recently they have had as much longitudinal -variation as it is possible to have on Earth. :-) -Other windows, on the other hand, might be OK: especially where “X -marks the spot”. Yet on the third hand, windows are best when they are -“unseen” (i.e., not dirty). :-)

    -

    The Judges, as a group, have a history giving wide degree of latitude -to reasonable submissions. And recently they have had as much longitudinal -variation as it is possible to have on Earth. :-)

    +marks the spot”. Yet on the third hand, windows are best when they +are “unseen” (i.e., not dirty). :-)

    +

    The Judges, as a group, have a history giving wide +degree of latitude to reasonable submissions. And recently they have +had as much longitudinal variation as it is possible to have on +Earth. :-) Other windows, on the +other hand, might be OK: especially where “X marks the spot”. Yet +on the third hand, windows are best when they are “unseen” (i.e., not +dirty). :-)

    +

    The Judges, as a group, have a history giving wide +degree of latitude to reasonable submissions. And recently they have +had as much longitudinal variation as it is possible to have on +Earth. :-)

    You are in a maze of twisty guidelines, all different.

    There are at least zero Judges who think that -Fideism has little -or nothing to do with the Judging process.

    +Fideism has little or nothing +to do with the Judging process.

    All generalizations are false, including this one. – Mark Twain

    @@ -1552,25 +1677,29 @@

    Fun😄damental Guidelines

    This could be the only guideline that contains the word fizzbin.

    -

    However, do you know how to play fizzbin? +

    However, do you know how to play +fizzbin? You do?!? (Except on Tuesday?)

    OK, there are actually 2 guidelines that contain the word fizzbin, unless you count this one, in which case there are 3. :-)

    -

    NOTE: The previous guideline in this spot has been replaced by this guideline:

    +

    NOTE: The previous guideline in this spot has been replaced by +this guideline:

    -You very well might not be completely prohibited from failing to not partly -misunderstand this particular guideline, but of course, we could not possibly -comment! Nevertheless, you are neither prohibited, nor are you fully or partly -required to determine that this or the previous sentence is either false and/or -perhaps misleading. Therefore, it might be wise for you to not fail to consider -to not do so, accordingly. Thank you very much (allegedly). +You very well might not be completely prohibited from failing to not +partly misunderstand this particular guideline, but of course, we +could not possibly comment! Nevertheless, you are neither prohibited, +nor are you fully or partly required to determine that this or the +previous sentence is either false and/or perhaps misleading. +Therefore, it might be wise for you to not fail to consider to not do +so, accordingly. Thank you very much (allegedly).

    Any complaints about the above guideline could be addressed to the Speaker of the House of Commons, or to the speaker of your national parliament should you have one.

    -Please try to avoid this specific individual guideline, if it is at all possible. +Please try to avoid this specific individual guideline, if it is at +all possible.

    We believe that Mark Twain’s quote:

    @@ -1578,31 +1707,37 @@

    Fun😄damental Guidelines

    … is a good motto for those writing code for the IOCCC.

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

    -The -mkiocccentry toolkit -is not an original work, unless you one of the -several mkiocccentry toolkit contributors. -in which case it is original! :-) -Even so, most of the programs in the toolkit exceed the -Rule 2 - Size restrictions -so they wouldn’t qualify for the contest anyway. +The IOCCC size tool +iocccsize +is not an original work unless you are Anthony C +Howe, in which case it is original. +:-)

    -If the IOCCC judges are feeling like it, they -might choose to compile your program for running on an Arduino or -a PDP-11. Heck, should we ever find an emulator of 60-bit CDC Cyber -CPU, we might just try your submission on that emulator as well :-) +The IOCCC tarball validator +txzchk +is not an original work unless you are Cody Boone +Ferguson, in which case it is +original. :-) +

    +

    +Even so, those tools exceed the Rule 2 - Size +restrictions so they wouldn’t qualify for the +contest anyway. +

    +

    +If the IOCCC judges are feeling like it, they might +choose to compile your program for running on an Arduino or a PDP-11. +Heck, should we ever find an emulator of 60-bit CDC Cyber CPU, we might +just try your submission on that emulator as well :-)

    -

    Do not fear if you’re not 100% sure of the significance of -2305567963945518424753102147331756070 as it is not of prime importance: or is -it? :-)

    With respect to nested functions, try chkentry -b.

    @@ -1612,15 +1747,20 @@

    Fun😄damental Guidelines

    Further Reading

-

See the Official IOCCC website news for additional information.

-

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

-

Be SURE to review the current IOCCC Rules and Guidelines as they -often change year to year. Especially prior to submitting to the contest.

-

For the latest IOCCC news, follow the IOCCC on Mastodon. See our -FAQ on “Mastodon” -for more information.

-

Also consider joining the IOCCC Discord Server -for the latest news, discussions about The Rules, questions for the Judges, and C in general.

+

See the Official IOCCC website news for additional +information.

+

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

+

Be SURE to review the current IOCCC Rules and +Guidelines as they often change year to year. Especially +prior to submitting to the contest.

+

For the latest IOCCC news, follow the IOCCC on +Mastodon. See our FAQ on +“Mastodon” for more information.

+

Also consider joining the IOCCC Discord +Server for the latest news, +discussions about The Rules, questions for the Judges, and C in +general.


Jump to: top

diff --git a/next/guidelines.md b/next/guidelines.md index ae8daf1b65..e9e53ecef8 100644 --- a/next/guidelines.md +++ b/next/guidelines.md @@ -4,24 +4,26 @@ Copyright © 2025 Leonid A. Broukhis and Landon Curt Noll.

-All Rights Reserved. Permission for personal, education or non-profit use is -granted provided this copyright and notice are included in its entirety -and remains unaltered. All other uses must receive prior permission in -writing by [contacting the Judges](../contact.html). +All Rights Reserved. Permission for personal, education or non-profit +use is granted provided this copyright and notice are included in its +entirety and remains unaltered. All other uses must receive prior +permission in writing by [contacting the Judges](../contact.html). # Guidelines Version

-These Guidelines are version **29.06 2025-12-01**. +These Guidelines are version **29.07 2025-12-02**.

-The | symbol indicates an **change** from the previous IOCCC. +The | symbol +indicates an **change** from the previous IOCCC.

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

Be sure to read the [Rules](rules.html). @@ -34,39 +36,44 @@ Be sure to read the [Rules](rules.html).

-While you submission **MUST** be a C program, there is nothing wrong if your `prog.c` -file happens to also be a code for another language. +While you submission **MUST** be a C program, there is nothing wrong if +your `prog.c` file happens to also be a code for another language, say +an interpreter of JavaScript.

-We would prefer if you do not use `#include` statements, -especially `#include` statements just to include lots of data, -to get around the -[Rule 2 - Size restrictions](rules.html#rule2-size) -in an excessive way. +We would prefer if you do not use `#include` statements just to include +lots of data to circumvent [Rule 2 - Size +restrictions](rules.html#rule2-size) in an excessive way. This is what +they invented `fopen(3)` for. :-)

-We would prefer if you do not require lots and lots of implicit defines on the C compiler command line -(i.e., lots of `-Dfoo`, and `-Dcurds=whey` style command line args to the C compiler) -to get around the -[Rule 2 - Size restrictions](rules.html#rule2-size) -in an excessive way. +We would prefer if you do not require lots and lots of implicit defines +on the C compiler command line (i.e., lots of `-Dfoo`, and +`-Dcurds=whey` style command line args to the C compiler in the +Makefile) to get around the [Rule 2 - Size +restrictions](rules.html#rule2-size) in an excessive way.

-Some use of `#include` statements and/or implicit defines on the C compiler command line is perfectly reasonable. +Some use of `#include` statements (i.e. `-include stdio.h`) and/or +implicit `#define`s (i.e. `-Dfoo=bar`) on the C compiler command line +is perfectly reasonable..

-As a guide, consider the level of `#include` statements and/or implicit defines on the C compiler command line -that are found in -[winning Entries](https://www.ioccc.org/years.html), and try to **NOT** set a new record. +As a guide, consider the level of `#include` statements and/or implicit +defines on the C compiler command line that are found in [winning +Entries](https://www.ioccc.org/years.html), and try to **NOT** set a +new record.

-If you believe you need to significantly abuse `#include` statements and/or implicit defines on the C compiler command line, -then try to make a case for why in your submission's `remarks.md` file: maybe the Judges won't reject your submission. +If you believe you need to significantly abuse `#include` statements +and/or implicit defines on the C compiler command line, then try to +make a case for why in your submission's `remarks.md` file: maybe the +Judges won't reject your submission.

@@ -80,8 +87,8 @@ Jump to: [top](#)

-You should pay attention to our observations on -[code size and Rule 2 remarks for IOCCC28](../2024/index.html#code-size-and-rule-2). +You should pay attention to our observations on [code size and Rule 2 +remarks for IOCCC28](../2024/index.html#code-size-and-rule-2).

Your submission must satisfy **BOTH** the @@ -90,8 +97,8 @@ Your submission must satisfy **BOTH** the [Rule 2b - Net Size](rules.html#rule2b-net-size) rules. To check your code against -[Rule 2 - Size restrictions](rules.html#rule2-size), use the `iocccentry(1)` tool. -For example: +[Rule 2 - Size restrictions](rules.html#rule2-size), use the +`iocccentry(1)` tool. For example: ``` iocccsize prog.c @@ -99,38 +106,40 @@ For example: The `iocccsize(1)` algorithm can be summarized as follows: -> The size tool counts most C reserved words (keyword, secondary, and selected -preprocessor keywords) as 1. The size tool counts all other bytes as 1 -excluding ASCII whitespace, and excluding any '`;`', '`{`' or '`}`' followed by -ASCII whitespace, and excluding any '`;`', '`{`' or '`}`' byte immediately -before the end of file. +> The size tool counts most C reserved words (keyword, secondary, and +selected preprocessor keywords) as 1. The size tool counts all other +bytes as 1 excluding ASCII whitespace, and excluding any '`;`', '`{`' +or '`}`' followed by ASCII whitespace, and excluding any '`;`', '`{`' +or '`}`' byte immediately before the end of file. > -> ASCII whitespace includes ASCII tab, ASCII space, ASCII newline, ASCII formfeed, and ASCII carriage return. +> ASCII whitespace includes ASCII tab, ASCII space, ASCII newline, +ASCII formfeed, and ASCII carriage return. > -> When '`;`', '`{`' or '`}`' are within a C string, they may still not be -counted by the IOCCC size tool. +> When '`;`', '`{`' or '`}`' are within a C string, they may still not +be counted by the IOCCC size tool. In cases where the above summary and the algorithm implemented by -`iocccsize(1)` conflict, the algorithm implemented -by the minimum required version of `iocccsize(1)` is preferred by the [Judges](../judges.html). +`iocccsize(1)` conflict, the algorithm implemented by the minimum +required version of `iocccsize(1)` is preferred by the +[Judges](../judges.html). Make sure `iocccsize` does not flag any issues with your `prog.c`. **NOTE**: by default `iocccsize` will only report the size, unless the code surpasses the limit. -There a much less need to `#define` C reserved words in an effort -to get around the size limits of -[Rule 2 - Size restrictions](rules.html#rule2-size) -because of the `iocccsize(1)` algorithm. +There a much less need to `#define` C reserved words in an effort to +get around the size limits of [Rule 2 - Size +restrictions](rules.html#rule2-size) because of the `iocccsize(1)` +algorithm. Yes Virginia, **the previous guideline sentence is an important hint**! Don't expect the [Rule 2 - Size restrictions](rules.html#rule2-size) to [change any time soon](../faq.html#size_slow_change). -See the -FAQ on "[How has the Rule 2 size restrictions rule changed over the years?](../faq.html#size_rule_history)". +See the FAQ on "[How has the Rule 2 size restrictions rule changed over +the years?](../faq.html#size_rule_history)". Jump to: [top](#) @@ -143,9 +152,9 @@ Jump to: [top](#)

-If a group of people work on a submission, then they should -[register for the IOCCC](../quick-start.html#enter) -using either a valid group email address, or an email address for one of the authors. +If a group of people work on a submission, then they should [register +for the IOCCC](../quick-start.html#enter) using either a valid group +email address, or an email address for one of the authors.

@@ -153,27 +162,32 @@ Processing your registration is an activity overseen by a Judge. Please be **patient** while a Judge processes your registration.

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

-If after a few days you believe your registration hasn't been process, then -[contact the Judges](../contact.html). +If after a few days you believe your registration hasn't been process, +then [contact the Judges](../contact.html).

-After your UUID and temporary password are emailed to you, you have -up to fortnight (**14 days**) to login and change your temporary password. -If you fail to change your temporary password by that deadline, then you'll need to -[contact the Judges](../contact.html) by email to request a reset. +After your UUID and temporary password are emailed to you, you have up +to fortnight (**14 days**) to login and change your temporary password. +If you fail to change your temporary password by that deadline, then +you'll need to [contact the Judges](../contact.html) by email to +request a reset.

-See [How to register for the IOCCC](register.html). +See the +FAQ on "[How to register for the IOCCC](register.html)". -See [Entering the IOCCC: the bare minimum you need to know](../quick-start.html#enter). +See the +FAQ on "[Entering the IOCCC: the bare minimum you need to +know](../quick-start.html#enter)". Jump to: [top](#) @@ -185,7 +199,8 @@ Jump to: [top](#) -While it is **NOT** required, you are allowed to use tools or services such as: +While it is **NOT** required, you are allowed to use tools or services +such as: * Code generators * Static and runtime code analysis tools @@ -197,16 +212,19 @@ While it is **NOT** required, you are allowed to use tools or services such as: * Etc. The IOCCC has a rich history of remarkable winning entries created by -authors who skillfully employed various techniques to develop their code. -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. +authors who skillfully employed various techniques to develop their +code. 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.

-In short: You created it, you own it, its an original work, or you have explicit permission to the work. +In short: you created it, you own it, its an original work **OR** you have +explicit permission to the work that you document in your remarks.

See the -FAQ on "[May I use AI, LLM, Virtual coding assistants, or similar tools to write my submission?](../faq.html#ai)". +FAQ on "[May I use AI, LLM, Virtual coding assistants, or similar tools +to write my submission?](../faq.html#ai)". Jump to: [top](#) @@ -218,7 +236,8 @@ Jump to: [top](#) -Do **NOT** register more than one account just to try and get around the limit on the number of submission slots. +Do **NOT** register more than one account just to try and get around +the limit on the number of submission slots. Jump to: [top](#) @@ -232,8 +251,8 @@ Jump to: [top](#) -Don't forget that the building of your program should be done -**WITHOUT human intervention**. So don't do things such as: +Don't forget that the building of your program should be done **WITHOUT +human intervention**. So don't do things such as: ``` prog: prog.c @@ -242,10 +261,10 @@ Don't forget that the building of your program should be done ${CC} prog.c -o prog ``` -However, you can do something cute such as making your program -do something dumb (or cute) when it is built 'automatically', and -when it is run with a human involved, do something more clever. -For example, one could put in their `Makefile`: +However, you can do something cute such as making your program do +something dumb (or cute) when it is built 'automatically', and when it +is run with a human involved, do something more clever. For example, +one could put in their `Makefile`: ``` prog: prog.c @@ -253,8 +272,8 @@ For example, one could put in their `Makefile`: @echo "See remarks section about alternate ways to compile" ``` -and then include special notes in your `remarks.md` file for -alternate / human intervention based building. +and then include special notes in your `remarks.md` file for alternate +/ human intervention based building. Jump to: [top](#) @@ -266,72 +285,79 @@ Jump to: [top](#) -We do realize that there are holes in the [Rules](rules.html), and invite -submitters to attempt to apply creative rule interpretation. A rule abuse though, even -if not rewarded, may result in a subsequent rule change for future contests. +We do realize that there are holes in the [Rules](rules.html), and +invite submitters to attempt to apply creative rule interpretation. A +rule abuse though, even if not rewarded, may result in a subsequent +rule change for future contests. -We sometime award '**Best abuse of the rules**' or '**Worst abuse of the rules**', -or some variation, to a submission that creatively attempts to exploit a holes in the -[Rules](rules.html). +We sometime award '**Best abuse of the rules**' or '**Worst abuse of +the rules**', or some variation, to a submission that creatively +attempts to exploit a holes in the [Rules](rules.html). -When we do need to plug a hole in the [Rules](rules.html) -or [Guidelines](guidelines.html), we will attempt to use a very small plug, -if not smaller. +When we do need to plug a hole in the [Rules](rules.html) or +[Guidelines](guidelines.html), we will attempt to use a very small +plug, if not smaller. Or, maybe not. :-) -Legal rule abuse may involve, but is not limited to, doing things that are -technically allowed by the [Rules](rules.html) and yet do not fit the spirit of what -we intended to be submitted. - -Legal abuse of the [Rules](rules.html) is **NOT** an invitation to violate -the [Rules](rules.html) (especially [Rule 17 - -Use mkiocccentry](./rules.html#rule17-mkiocccentry)). A submission that violates the -[rules](rules.html) in the opinion of the [Judges](../judges.html), -**WILL** be disqualified. **_RULE ABUSE CARRIES A CERTAIN LEVEL OF RISK!_** - -If you intend to abuse the [Rules](rules.html), -indicate so in your `remarks.md` file. You **MUST** try to justify, plead, beg, -why you consider your rule abuse to be allowed under the -[Rules](rules.html). Humor 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 [Rules](rules.html), if it might -otherwise be interesting; one that does not abuse the [Rules](rules.html) -and one that does, making sure to note in the one that does not abuse the rules -that this is another version, so that the Judges do not assume you uploaded it -by mistake. +Legal rule abuse may involve, but is not limited to, doing things that +are technically allowed by the [Rules](rules.html) and yet do not fit +the spirit of what we intended to be submitted. + +Legal abuse of the [Rules](rules.html) is **NOT** an invitation to +violate the [Rules](rules.html) (especially [Rule 17 - Use +mkiocccentry](./rules.html#rule17-mkiocccentry)). A submission that +violates the [rules](rules.html) in the opinion of the +[Judges](../judges.html), **WILL** be disqualified. **_RULE ABUSE +CARRIES A CERTAIN LEVEL OF RISK!_** + +If you intend to abuse the [Rules](rules.html), indicate so in your +`remarks.md` file. You **MUST** try to justify, plead, beg, why you +consider your rule abuse to be allowed under the [Rules](rules.html). +Humor 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 +[Rules](rules.html), if it might otherwise be interesting; one that +does not abuse the [Rules](rules.html) and one that does, making sure +to note in the one that does not abuse the rules that this is another +version, so that the Judges do not assume you uploaded it by mistake. If you do bypass the `mkiocccentry(1)` warnings about [Rule 2a - Gross Size](rules.html#rule2a-gross-size) and/or about [Rule 2b - Net Size](rules.html#rule2b-net-size) -or any other -rule and submit a submission anyway, you **MUST** try to justify why the +**or any other +rule** and submit it anyway, you **MUST** try to justify why the [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` -file so as not to be overlooked. +violation, and **you would be wise** to do this towards the top of your +`remarks.md` file so as not to be overlooked. -We are often asked why the contest [Rules](rules.html) and [Guidelines](guidelines.html) seem strange or contain mistakes, flaws, or -grammatical errors. One reason is that we sometimes make genuine mistakes, but -in many cases such problems, flaws or areas of confusion are deliberate. +We are often asked why the contest [Rules](rules.html) and +[Guidelines](guidelines.html) seem strange or contain mistakes, flaws, +or grammatical errors. One reason is that we sometimes make genuine +mistakes, but in many cases such problems, flaws or areas of confusion +are deliberate. Changes to [Rules](rules.html) and [Guidelines](guidelines.html) in response to rule abuses, are done in a minimal fashion. Often we will -deliberately leave behind holes (or introduce new ones) so that future rule -abuse can continue. A clever author should be able to read and "drive a -truck through the holes" in the [Rules](rules.html) and [Guidelines](guidelines.html). - -At the risk of stating the obvious, this contest is a parody of the software -development process. The [Rules](rules.html) and [Guidelines](guidelines.html) -are only part of the overall contest. Even so, one might think the -contest [Rules](rules.html) and [Guidelines](guidelines.html) process as a parody -of the sometimes tragic mismatch between what a customer (or marketing) wants -and what engineering delivers. Real programmers must face obfuscated and -sometimes conflicting, ballooning specifications, and requirements from marketing, sales, -product management and even from customers themselves on an all too regular basis. -This is one of the reasons why the [Rules](rules.html) and -[Guidelines](guidelines.html) are written in obfuscated form. +deliberately leave behind holes (or introduce new ones) so that future +rule abuse can continue. A clever author should be able to read and +"drive a truck through the holes" in the [Rules](rules.html) and +[Guidelines](guidelines.html). + +At the risk of stating the obvious, this contest is a parody of the +software development process. The [Rules](rules.html) and +[Guidelines](guidelines.html) are only part of the overall contest. +Even so, one might think the contest [Rules](rules.html) and +[Guidelines](guidelines.html) process as a parody of the sometimes +tragic mismatch between what a customer (or marketing) wants and what +engineering delivers. Real programmers must face obfuscated and +sometimes conflicting, ballooning specifications, and requirements from +marketing, sales, product management and even from customers themselves +on an all too regular basis. This is one of the reasons why the +[Rules](rules.html) and [Guidelines](guidelines.html) are written in +obfuscated form. Jump to: [top](#) @@ -343,7 +369,8 @@ Jump to: [top](#) -The IOCCC no longer discourages the use of multibyte UTF-8 characters in `C` code. +The IOCCC no longer discourages the use of multibyte UTF-8 characters +in `C` code.
@@ -352,25 +379,27 @@ The IOCCC no longer discourages the use of multibyte UTF-8 characters in `C` cod
-We **DISLIKE** C code with trailing control-M's (`\r` or `\015`) that results -in compilation failures. +We **DISLIKE** C code with trailing control-M's (`\r` or `\015`) that +results in compilation failures. Some non-UNIX/non-Linux tools such as MS Visual C and MS Visual C++ leave trailing control-M's on lines. Users of such tools should strip -off such control-M's before submitting their submissions. In some cases -tools have a "Save As" option that will prevent such trailing control-M's -being added. +off such control-M's before submitting their submissions. In some +cases tools have a "Save As" option that will prevent such trailing +control-M's being added.

-If your `prog.c` is near the -[Rule 2a Gross Size](rules.html#rule2a-gross-size) and/or -[Rule 2b Net Size](rules.html#rule2b-net-size) -limit, you are permitted to **NOT** end source with a newline. -If you need to do this, please document that in your `remarks.md` file. +If your `prog.c` is near the [Rule 2a Gross +Size](rules.html#rule2a-gross-size) and/or [Rule 2b Net +Size](rules.html#rule2b-net-size) limit, you are permitted to **NOT** +end source with a newline. If you need to do this, please document +that in your `remarks.md` file.

-If your complains about about not ending in a newline, please this in your `remarks.md` file. +If your compiler complains about about not ending in a newline, please +note this in your `remarks.md` file, and if possible add an appropriate +`-Wno-` to the `CSILENCE` variable in your Makefile.

@@ -383,26 +412,29 @@ Jump to: [top](#) -Submissions will be judged in an environment that has no **IDE**. -Any submission that fails to compile/build because it requires -an **IDE** will be rejected. +Submissions will be judged in an environment that has no **IDE**. Any +submission that fails to compile/build because it requires an **IDE** +will be rejected.

-We will use the GNU `make(1)` tool, your `Makefile`, as well as tools found in the -[Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) -(UNIX-like) environments, and commonly found on systems that reasonably conform to the -[Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) +We will use the GNU `make(1)` tool, your `Makefile`, as well as tools +found in the [Single UNIX +Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) +(UNIX-like) environments, and commonly found on systems that reasonably +conform to the [Single UNIX +Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) in the building and compiling of your submission.

-Your `Makefile` **MUST** be compatible with GNU `make` and we suggest you use -[Makefile.example](Makefile.example) as a template, renamed as `Makefile` of -course. +Your `Makefile` **MUST** be compatible with GNU `make` and we suggest +you use [Makefile.example](Makefile.example) as a template, renamed as +`Makefile` of course.

See the -FAQ on "[What are the detailed recommendations for a submission Makefile?](../faq.html#makefile_details)". +FAQ on "[What are the detailed recommendations for a submission +Makefile?](../faq.html#makefile_details)". Jump to: [top](#) @@ -417,69 +449,76 @@ Jump to: [top](#)

We **STRONGLY** recommend you **do** install the most recent release of [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) -because use of older versions of the mkiocccentry toolkit are **HIGHLY LIKELY** to be **REJECTED**! +because use of older versions of the mkiocccentry toolkit are **HIGHLY +LIKELY** to be **REJECTED**!

If you submit your own JSON files (**OTHER THAN** `.auth.json` and -`.info.json`) then they do **NOT** have to be valid JSON. +`.info.json`!) then they do **NOT** have to be valid JSON.

-However, if you do provide invalid JSON files, **PLEASE** -document and **clearly explain** this in your `remarks.md` file. +However, if you do provide invalid JSON files, **PLEASE** document and +**clearly explain** this in your `remarks.md` file.

-An _extra file_ is defined as a file that is not `prog.c`, `prog.alt.c`, -`try.sh`, `try.alt.sh`, `remarks.md`, `Makefile`, `.auth.json` and `.info.json`: -unless it's not in the top level directory, in which case it **IS** an _extra -file_. +An _extra file_ is defined as a file that is not `prog.c`, +`prog.alt.c`, `try.sh`, `try.alt.sh`, `remarks.md`, `Makefile`, +`.auth.json` and `.info.json`: unless it's not in the top level +directory, in which case it **IS** an _extra file_.

-The non-extra files (`prog.c`, `prog.alt.c`, -`try.sh`, `try.alt.sh`, `remarks.md`, `Makefile`, `.auth.json` and `.info.json`) -are considered _free files_, and do not count towards the -[Rule 17 - Use mkiocccentry](rules.html#rule17-mkiocccentry) -limit of **31** _extra files_. +The **non**-extra files are considered _free files_, and do not count +towards the [Rule 17 - Use +mkiocccentry](rules.html#rule17-mkiocccentry) limit of **31** _extra +files_.

-If you use an optional filename for something other than their intended use -in order to get past the file limit, we will consider that an abuse of rules. +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.

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

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

-If you **DO** include a tarball as an _extra file_, and the build process or the -program extracts said tarball(s), the make `clobber` rule **MUST** remove the -extracted files. +If you **DO** include a tarball as an _extra file_, and the build +process or the program extracts said tarball(s), the make `clobber` +rule **MUST** remove the extracted files.

-Instead of including a large test-suite that requires a lot of files as part of -your submission, if your submission doesn't require the test-suite to be -available to run, then in your `remarks.md` you could include URL where such a -test-suite may be downloaded from and how to use the test-suite to test your -submission, assuming it is not reveal who you are, eg. do not use a GitHub URL -which contains your username. +Instead of including a large test-suite that requires a lot of files as +part of your submission, if your submission doesn't require the +test-suite to be available to run, then in your `remarks.md` you could +include URL where such a test-suite may be downloaded from and how to +use the test-suite to test your submission, assuming it does not reveal +who you are, i.e. **DO NOT** use a GitHub URL which contains your +username, in case the judges know who you are. See [Rule 16 - Anonymous +judging](rules.html#rule16-anonymous-judging).

-If you **DO** include a tarball then make sure it uses the v7 format. See the -FAQ on "[extra files](../faq.html#extra-files)" -for details on how to make a v7 tarball. +If you **DO** include a tarball then make sure it uses the v7 format. +This is because it will not reveal who you are. +

+ +

+See the FAQ on "[extra files](../faq.html#extra-files)" for details on +how to make a v7 tarball.

@@ -488,7 +527,8 @@ We recommend that all markdown files in your submission observe our

See the -FAQ on "[What should I do with the `try.sh` and `try.alt.sh` scripts?](../faq.html#try_scripts)". +FAQ on "[What should I do with the `try.sh` and `try.alt.sh` +scripts?](../faq.html#try_scripts)". See the FAQ on "[What is a `.auth.json` file?](../faq.html#auth_json)". @@ -497,16 +537,20 @@ See the FAQ on "[What is a `.info.json` file?](../faq.html#info_json)". See the -FAQ on "[How can I validate my submission directory?](../faq.html#chksubmit)". +FAQ on "[How can I validate my submission +directory?](../faq.html#chksubmit)". See the -FAQ on "[What permissions may my files be and what if I need different permissions?](../faq.html#file_perms)". +FAQ on "[What permissions may my files be and what if I need different +permissions?](../faq.html#file_perms)". See the -FAQ on "[What are the detailed recommendations for a submission Makefile?](../faq.html#makefile_details)". +FAQ on "[What are the detailed recommendations for a submission +Makefile?](../faq.html#makefile_details)". See the -FAQ on "[What are the details behind Rule 17 - Use mkiocccentry?](../faq.html#rule17)". +FAQ on "[What are the details behind Rule 17 - Use +mkiocccentry?](../faq.html#rule17)". Jump to: [top](#) @@ -525,36 +569,41 @@ Jump to: [top](#) -These [Guidelines](guidelines.html) are **hints** and **suggestions**, **NOT** [Rules](rules.html). +These [Guidelines](guidelines.html) are **hints** and **suggestions**, +**NOT** [Rules](rules.html). -While submissions that violate the [Guidelines](guidelines.html) are allowed, -submissions that remain within the [Guidelines](guidelines.html) are preferred. +While submissions that violate the [Guidelines](guidelines.html) are +allowed, submissions that remain within the +[Guidelines](guidelines.html) are preferred. You are encouraged to review the following [FAQs](../faq.html): * [How to enter the IOCCC](../quick-start.html#enter) -* [Obtaining and compiling the most recent mkiocccentry toolkit](../faq.html#mkiocccentry) +* [Obtaining and compiling the most recent mkiocccentry +toolkit](../faq.html#mkiocccentry) * [How to upload your submission](./submit.html) While the contest is **[open](../faq.html#open)**, you may modify your previously uploaded submission by rebuilding your submission with the -[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry), -and then re-uploading it to **the same slot number** on the -[submit server](https://submit.ioccc.org). +[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry), and +then re-uploading it to **the same slot number** on the [submit +server](https://submit.ioccc.org).

The **official locale** of the **IOCCC** is **C**.

-You are **encouraged** to examine the [winners of previous contests](../years.html). +You are **encouraged** to examine the [winners of previous +contests](../years.html). -Because the [Rules](rules.html) change from year to year, some [past winning entries](../years.html) -may be rejected this year. What was _was_ unique and novel one year _might be 'old' the next year_. +Because the [Rules](rules.html) change from year to year, some [past +winning entries](../years.html) may be rejected this year. What was +_was_ unique and novel one year _might be 'old' the next year_. -A submission is usually examined in a number of ways. We typically apply -a number of tests to a submission: +A submission is usually examined in a number of ways. We typically +apply a number of tests to a submission: * look at the original source * C pre-process the source ignoring `#include` lines @@ -564,55 +613,59 @@ a number of tests to a submission: * compile it (with flags to enable all warnings) * execute it -You should consider how your submission looks in each of the above tests. -You should ask yourself if your submission remains obscure after it has been -'_cleaned up_' by the C pre-processor and a C beautifier. +You should consider how your submission looks in each of the above +tests. You should ask yourself if your submission remains obscure +after it has been '_cleaned up_' by the C pre-processor and a C +beautifier. -Your submission need not pass all of the above tests as in certain cases, -a test is not important. +Your submission need not pass all of the above tests as in certain +cases, a test is not important. -Submissions that compete for the -'**strangest/most creative source layout**' need not do as well as -others in terms of their algorithm. +Submissions that compete for the '**strangest/most creative source +layout**' need not do as well as others in terms of their algorithm. Given two submissions, we are more inclined to pick the submission that does something interesting when it's executed. -**IMPORTANT:** Be sure that **your submission works** as documented in your `remarks.md` file. +**IMPORTANT:** Be sure that **your submission works** as documented in +your `remarks.md` file. -We sometimes make an effort to debug a submission -that has a slight problem, particularly in or near the final round. -On the other hand, we have seen some otherwise excellent submissions -fall down because they didn't work as documented. +We sometimes make an effort to debug a submission that has a slight +problem, particularly in or near the final round. On the other hand, +we have seen some otherwise excellent submissions fall down because +they didn't work as documented. -If you submission has bugs and/or mis-features, you are **MUCH BETTER** off -documenting such bugs and/or mis-features in your `remarks.md` file. +If you submission has bugs and/or mis-features, you are **MUCH BETTER** +off documenting such bugs and/or mis-features in your `remarks.md` +file. -Consider an example of a [prime number](https://en.wikipedia.org/wiki/Prime_number) -printing program that claims that 16 is a prime number. -Noting such a bug in your `remarks.md` file could save your submission: +Consider an example of a [prime +number](https://en.wikipedia.org/wiki/Prime_number) printing program +that claims that 16 is a prime number. Noting such a bug in your +`remarks.md` file could save your submission: > "_this submission sometimes prints the 4th power of a prime by mistake_" -Sometimes a strange bug or (mis-)feature can even help the submission! Of course, a correctly -working submission might be better. +Sometimes a strange bug or (mis-)feature can even help the submission! +Of course, a correctly working submission might be better. -We tend to look down on a -[prime number](https://en.wikipedia.org/wiki/Prime_number) -printer that claims that 16 is a prime number. -Clever people will note that 16 might be prime under certain conditions. ;-) -Wise people, when submitting something clever -will **fully explain such cleverness** in their submission's `remarks.md` file. +We tend to look down on a [prime +number](https://en.wikipedia.org/wiki/Prime_number) printer that claims +that 16 is a prime number. Clever people will note that 16 might be +prime under certain conditions. ;-) Wise people, when submitting +something clever will **fully explain such cleverness** in their +submission's `remarks.md` file. People who are considering to just use some complex mathematical function or state machine to spell out something such as "_hello, -world!_" **really really, _and we do mean REALLY_, do need to be more creative**. +world!_" **really really, _and we do mean REALLY_, do need to be more +creative**. Consider using misleading or subtle tricks layered on top of or under an appropriate level of obfuscation. -A clean looking program with misleading comments and variable names might be a -**VERY GOOD START** to a great submission! +A clean looking program with misleading comments and variable names +might be a **VERY GOOD START** to a great submission! Jump to: [top](#) @@ -625,28 +678,34 @@ Jump to: [top](#) We **VERY MUCH LIKE** submissions that use an edited variant of the -example `Makefile`, as described and linked to in the [Makefile section](#makefile), -renamed as `Makefile` of course. This makes it easier for the [Judges](../judges.html) -to test your submission. And if your submissions wins, it makes it easier to integrate it into -the [Official IOCCC winner website](https://www.ioccc.org/index.html). - -We **VERY MUCH LIKE** submissions that have some educational value. This does **NOT** mean -that your submission should not be obfuscated but rather that the IOCCC has moved away from -the idea of "spoilers". You should not encrypt or rot13 content in your `remarks.md` file. - -The above statement does not mean encryption/decryption tools will not win, nor -does it mean that if you have such a submission that you could not encrypt some -remarks (such as obfuscation details), but if you do so please put them in a -separate file and indicate how to undo it. Please do **NOT** use any cipher to -encrypt your `remarks.md`. - -It is **VERY MUCH** appreciated if your remarks have some educational -value. And although educational value is not required, it is an -**EXCELLENT** bonus. - -We **LIKE** submissions that use an edited version of the -`try.sh` example script (and if you have alternate code, -the same applies with the `try.alt.sh` script): +example `Makefile`, as described and linked to in the +FAQ on "[What are the detailed recommendations for a submission +Makefile?](../faq.html#makefile_details), +renamed as `Makefile` of course. + +This makes it easier for the [Judges](../judges.html) to test your +submission. And if your submissions wins, it makes it easier to +integrate it into the [Official IOCCC winner +website](https://www.ioccc.org/index.html). + +We **VERY MUCH LIKE** submissions that have some educational value. +This does **NOT** mean that your submission should not be obfuscated +but rather that the IOCCC has moved away from the idea of "spoilers". +You should not encrypt or rot13 content in your `remarks.md` file. + +The above statement does not mean encryption/decryption tools will not +win, nor does it mean that if you have such a submission that you could +not encrypt some remarks (such as obfuscation details), but if you do +so please put them in a separate file and indicate how to decipher it. +Please do **NOT** use any cipher to encrypt your `remarks.md`. + +It is **VERY MUCH** appreciated if your remarks or `prog.c` have some +educational value. And although educational value is not required, it +is an **EXCELLENT** bonus. + +We **LIKE** submissions that use an edited version of the `try.sh` +example script (and if you have alternate code, the same applies with +the `try.alt.sh` script): - [view example try.sh](%%REPO_URL%%/next/try.sh) - download example try.sh @@ -654,26 +713,32 @@ the same applies with the `try.alt.sh` script): - [view example try.alt.sh](%%REPO_URL%%/next/try.alt.sh) - download example try.alt.sh -Of course, it is quite possible that only one invocation is -possible, so it is not necessarily detrimental to your submission if you do not -include one, though we do like interesting and creative uses of submissions. See -also the -FAQ on "[submitting try.sh and try.alt.sh scripts](../faq.html#try_scripts)". +Of course, it is quite possible that only one invocation is possible, +so it is not necessarily detrimental to your submission if you do not +include one, though we do like interesting and creative uses of +submissions. See also the FAQ on "[submitting try.sh and try.alt.sh +scripts](../faq.html#try_scripts)". +

-Even if it only has one invocation we still **LIKE** the try scripts. +Even if it only has one invocation we still **LIKE** the try scripts +because we use them during judging and in publishing the winning +entries.

-If you do include a `try.sh` then **PLEASE** remove the `try` rule in the Makefile. +If you do include a `try.sh` then **PLEASE** remove the `try` rule in +the Makefile.

-If you do include a `try.alt.sh` then **PLEASE** remove the `try.alt` rule in the Makefile. +If you do include a `try.alt.sh` then **PLEASE** remove the `try.alt` +rule in the Makefile.

-If you don't have a prog.alt.c, then **PLEASE** remove the `try.alt` rule as well. +If you don't have a prog.alt.c, then **PLEASE** remove the `try.alt` +rule as well.

@@ -686,8 +751,8 @@ Jump to: [top](#) Doing masses of `#define`s to obscure the source has become 'old'. We tend to 'see thru' masses of `#define`s due to our pre-processor tests -that we apply. Simply abusing `#define`s or `-Dfoo=bar` won't go as far -as a program that is more well rounded in confusion. +that we apply. Simply abusing `#define`s or `-Dfoo=bar` won't go as +far as a program that is more well rounded in confusion. **Many** C compilers **DISLIKE** the following code, and so do we: @@ -697,7 +762,8 @@ as a program that is more well rounded in confusion. ``` In other words, it is a compilation error, and in order to get older -IOCCC winning entries that did this to compile, we had to update them to not do this. +IOCCC winning entries that did this to compile, we had to update them +to not do this. When declaring local or global variables, you should declare the type: @@ -711,28 +777,29 @@ and **NOT** like this: this_is_not; /* <-- Try to avoid implicit type declarations */ ``` -We really **DISLIKE** submissions that make blatant use of `#include` of -large data files to get around the source code size limit. This does not mean -`#include` of standard header files, just data files you provide. +We really **DISLIKE** submissions that make blatant use of `#include` +of large data files to get around the source code size limit. This does +not mean `#include` of standard header files, just data files you +provide. -On 28 January 2007, the Judges rescinded the requirement that the -`#` in a C preprocessor directive must be the 1st non-whitespace byte. +On 28 January 2007, the Judges rescinded the requirement that the `#` +in a C preprocessor directive must be the 1st non-whitespace byte.
### About compilers
-We tend to **like _less_** a submission that requires either -`gcc` **OR** `clang`. **We _prefer_ submissions** that can compile -under **BOTH** `gcc` **AND** `clang`. **Hint!** +We tend to **like _less_** a submission that requires either `gcc` +**OR** `clang`. **We _prefer_ submissions** that can compile under +**BOTH** `gcc` **AND** `clang`. **Hint!** -We **RECOMMEND** that the compiler flags you use in your -submission's `Makefile` are supported by **BOTH** `gcc` **AND** `clang`. +We **RECOMMEND** that the compiler flags you use in your submission's +`Makefile` are supported by **BOTH** `gcc` **AND** `clang`. -We **DISLIKE** the use of obscure compiler flags, especially -if `gcc` and/or `clang` do not support it. We **suggest** -that you not use any really obscure compiler flags if you can help it. +We **DISLIKE** the use of obscure compiler flags, especially if `gcc` +and/or `clang` do not support it. We **suggest** that you not use any +really obscure compiler flags if you can help it.
@@ -741,8 +808,8 @@ that you not use any really obscure compiler flags if you can help it.
-One side effect of the above is that you cannot assume the use -of nested functions such as: +One side effect of the above is that you cannot assume the use of +nested functions such as: ``` int main() { @@ -753,12 +820,14 @@ of nested functions such as: } ``` -On 2012 July 20, the [Judges](../judges.html) rescinded the encouragement of -nested functions. Such constructions, while interesting and sometimes -amusing, will have to wait until they are required by a C standard that are -actually implemented in **BOTH** `gcc` **AND** `clang`. +On 2012 July 20, the [Judges](../judges.html) rescinded the +encouragement of nested functions. Such constructions, while +interesting and sometimes amusing, will have to wait until they are +required by a C standard that are actually implemented in **BOTH** +`gcc` **AND** `clang`. -We **DISLIKE** submissions that require the use of `-fnested-functions`. +We **DISLIKE** submissions that require the use of +`-fnested-functions`.
@@ -766,9 +835,9 @@ We **DISLIKE** submissions that require the use of `-fnested-functions`.
If your submission uses functions that have a variable number of -arguments, **be careful**. Systems implement `va_list` in a wide variety -of ways. Because of this, a number of operations using `va_list` **are -not portable and _must not_ be used**: +arguments, **be careful**. Systems implement `va_list` in a wide +variety of ways. Because of this, a number of operations using +`va_list` **are not portable and _must not_ be used**: * assigning a non-`va_list` variable to/from a `va_list` variable * casting a non-`va_list` variable into/from a `va_list` variable @@ -777,13 +846,14 @@ not portable and _must not_ be used**: * performing arithmetic on `va_list` variables * using `va_list` as a structure or union -In particular, do not treat `va_list` variables as if they were a `char **`. +In particular, do not treat `va_list` variables as if they were a `char +**`. We **DISLIKE** the use of `varargs.h`. Use `stdarg.h` instead.
-### About I/O +### About I/O functions
We **DISLIKE** the use of `gets(3)`. Use `fgets(3)` instead. @@ -793,23 +863,31 @@ We **DISLIKE** the use of `gets(3)`. Use `fgets(3)` instead. ### About tarballs -We tend to **DISLIKE** the blatant use of tarballs in an attempt to simply get -around the extra file number limit. We realize there may be cases where a -tarball containing a number of extra files may be needed. Such a need for a -tarball **MUST** be explained in the `remarks.md` file. +We tend to **DISLIKE** the blatant use of tarballs in an attempt to +simply get around the extra file number limit. We realize there may be +cases where a tarball containing a number of extra files may be needed. +Such a need for a tarball **MUST** be explained in the `remarks.md` +file. +
+

-Using a mass of `goto`s to obfuscate your code has become 'old' and is unlikely -to make it through the final rounds, if it even gets that far. +Using a mass of `goto`s to obfuscate your code has become 'old' and is +unlikely to make it through the final rounds, if it even gets that far.

+
+
-### About stdlib +
+### About `exit(3)` +
-The `exit(3)` function returns `void`. Some broken systems have `exit(3)` -return `int`; your submission should assume that `exit(3)` returns a `void`. +The `exit(3)` function returns `void`. Some broken systems have +`exit(3)` return `int`; your submission should assume that `exit(3)` +returns a `void`.
@@ -817,40 +895,49 @@ return `int`; your submission should assume that `exit(3)` returns a `void`.
Small programs are best when they are short, obscure and concise. -While such programs are not as complex as other winners, they do -serve a useful purpose: they are often the only program that people -attempt to completely understand. For this reason, we look for -programs that are compact, and are instructional. - -One line programs should be short one line programs: say around **80** to **132** -bytes long. Going well beyond **132** bytes is a bit too long to be called -a one-liner in our vague opinion. +While such programs are not as complex as other winners, they do serve +a useful purpose: they are often the only program that people attempt +to completely understand. For this reason, we look for programs that +are compact, and are instructional. We suggest that you avoid trying for the '**smallest self-replicating**' source. The smallest, a [zero byte entry](../1994/smr/index.html), won in [1994](../years.html#1994). + +
+### What a one-liner means +
+ +One line programs should be short one line programs: say around **80** +to **132** bytes long. Going well beyond **132** bytes is a bit too +long to be called a one-liner in our vague opinion. Programs that claim to be the smallest C source that does something, really better be the smallest such program or they risk being rejected because they do not work as documented. +
+### About blobs of code +
+ We want to get away from source that is simply a compact blob of -bytes. **REALLY TRY** to be more creative than blob coding. **HINT!** +bytes. **REALLY TRY** to be more creative than blob coding. **HINT!** Unless you are cramped for space, or unless you are entering the '**Best one liner**' category, we suggest that you format your program in a more creative way than simply forming excessively long lines. -The `Makefile` should not be used to try and get around the size limit. It is -one thing to make use of a several `-D`s on the compile line to help out, but it -is quite another to use many bytes of `-D`s in order to try and squeeze the -source under the size limit. +The `Makefile` should not be used to try and get around the size limit. +It is one thing to make use of a several `-D`s on the compile line to +help out, but it is quite another to use many bytes of `-D`s in order +to try and squeeze the source under the size limit. -Please do not use things like `gzip(1)` to get around the size limit. This was -done years ago; please try to be much more creative. +Please do not use things like `gzip(1)` to get around the size limit. +This was done years ago; please try to be much more creative. Your source code, post-pre-processing, should not exceed the size of -[Microsoft Windows](https://en.wikipedia.org/wiki/Microsoft_Windows). :-) +[Microsoft Windows](https://en.wikipedia.org/wiki/Microsoft_Windows). +:-)
@@ -860,8 +947,8 @@ Your source code, post-pre-processing, should not exceed the size of We tend to **DISLIKE** programs that: * are very hardware specific -* are very OS version specific (`index(3)`/`strchr(3)` differences are OK, but -sockets/streams specific code is likely not to be) +* are very OS version specific (`index(3)`/`strchr(3)` differences are +OK, but sockets/streams specific code is likely not to be) * dump core or have compiler warnings (it is OK only if you warn us in your `remarks.md` file) * won't compile or run in a [Single UNIX @@ -880,9 +967,9 @@ Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) * are **identical** to **[previous losers](https://en.wikipedia.org/wiki/Null_device)** :-) * that mandate the exclusive use of a specific Integrated Development Environment (IDE) -In order to encourage submission portability, we **DISLIKE** submissions that -fail to build unless one is using an IDE. For example, do not -mandate that one must use Microsoft Visual Studio to compile +In order to encourage submission portability, we **DISLIKE** +submissions that fail to build unless one is using an IDE. For example, +do not mandate that one must use Microsoft Visual Studio to compile your submission. The program must compile and link cleanly in a [Single UNIX @@ -895,48 +982,51 @@ Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) ```

-You should try to restrict commands used in the build file to commands found in -[Single UNIX +You should try to restrict commands used in the build file to commands +found in [Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) (UNIX-like) environments and systems that conform to the [Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification).

-You may compile and use your own programs. If you do, try to build and execute -from the current directory. This restriction is not a hard and +You may compile and use your own programs. If you do, try to build and +execute from the current directory. This restriction is not a hard and absolute one. The intent is to ensure that the building of your program is reasonably portable. We prefer programs that are portable across a wide variety of UNIX-like operating systems (e.g., Linux, GNU Hurd, BSD, UNIX, macOS, etc.). -Try to avoid submissions that play music that some people believe is copyrighted -music. +Try to avoid submissions that play music that some people believe is +copyrighted music. + +Did we remember to indicate that programs that blatantly use some +complex state machine to do something simple, are boring? We think we +did. :-) -Did we remember to indicate that programs that blatantly use -some complex state machine to do something simple, are boring? -We think we did. :-) +Given two versions of the same program, one that is a compact blob 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! -Given two versions of the same program, one that is a compact blob -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 -[Rules](rules.html) -for details (in particular, -[Rule 8 - Submitting requirements](rules.html#rule8-submitting-requirements)). +[Rules](rules.html) for details (in particular, [Rule 8 - Submitting +requirements](rules.html#rule8-submitting-requirements)). -Please note that the C source below, besides lacking in obfuscation, -is **NOT** the smallest C source file that when compiled and run, dumps core: +Please note that the C source below, besides lacking in obfuscation, is +**NOT** the smallest C source file that when compiled and run, dumps +core: ``` main; ``` Unless you specify `-fwritable-strings` (see `COTHER` in the example -Makefile, described in the [Makefile section](#makefile)), do not assume this -sort of code will work: +Makefile, described in the +FAQ on "[What are the detailed recommendations for a submission +Makefile](../faq.html#makefile_details)"), do not +assume this sort of code will work: ``` char *T = "So many primes, so little time!"; @@ -944,79 +1034,85 @@ sort of code will work: T[14] = ';'; /* modifying a string requires: -fwritable-strings */ ``` -Even so, one should probably not assume that this is universally accepted. +Even so, one should probably not assume that this is universally +accepted. -Initialized char arrays are OK to write over. For instance, this is OK: +Initialized char arrays are OK to write over. For instance, this is +OK: ``` char b[] = "Is this OK"; b[9] = 'k'; /* modifying an initialized char array is OK */ ``` -We prefer code that can run on either a 64-bit or 32-bit -processor. However, it is **UNWISE **to assume it will run on an -some Intel-like x86 architecture**. +We prefer code that can run on either a 64-bit or 32-bit processor. +However, it is **UNWISE **to assume it will run on an some Intel-like +x86 architecture**. -While programs that only run in a specific word size are OK, if you have -to pick, choose a 64-bit word size. +While programs that only run in a specific word size are OK, if you +have to pick, choose a 64-bit word size. -If your submission **MUST** run only on a 64-bit or 32-bit architecture, -then you **MUST** specify the `-arch` on your command line -(see `ARCH` in the example -Makefile, described in [Makefile section](#makefile)). Do not assume a -processor word size without specifying `-arch`. For example: +If your submission **MUST** run only on a 64-bit or 32-bit +architecture, then you **MUST** specify the `-arch` on your command +line (see `ARCH` in the example Makefile, described in the FAQ on +"[What are the detailed recommendations for a submission +Makefile?](../faq.html#makefile_details). + +Do not assume a processor word size without specifying `-arch`. For +example: ``` ARCH= -m64 ``` Note, however, that some platforms will not necessarily support some -architectures. For instance, more recent versions of `macOS` do **NOT** support -32-bit, and more than zero Judges use it! +architectures. For instance, more recent versions of `macOS` do **NOT** +support 32-bit, and more than zero Judges use it!
### About X
-X client submissions should be as portable as possible. Submissions that -adapt to a wide collection of environments will be favored. For -example, don't depend on a particular type or size of display. -Don't assume the use of a particular browser. Instead assume a -generic browser that forms to a widely used [W3C standard](https://www.w3.org/standards/). -Don't assume a particular sound sub-system or video driver is installed -in the OS. Instead, make use of a well known and widely available open -source program (one that actually works) to display audio/visual data. +X client submissions should be as portable as possible. Submissions +that adapt to a wide collection of environments will be favored. For +example, don't depend on a particular type or size of display. Don't +assume the use of a particular browser. Instead assume a generic +browser that forms to a widely used [W3C +standard](https://www.w3.org/standards/). Don't assume a particular +sound sub-system or video driver is installed in the OS. Instead, make +use of a well known and widely available open source program (one that +actually works) to display audio/visual data. X client submissions should avoid using X related libraries and software that are not in wide spread use. -As of Red Hat RHEL9.0, the X.org server is deprecated. See the -FAQ on "[Xorg deprecation"](../faq.html#Xorg_deprecated)" -for more details. This does not mean that a submission using this will -necessarily be rejected, but it would be better if it can support Wayland in -some way or another. +As of Red Hat RHEL9.0, the X.org server is deprecated. See the FAQ on +"[Xorg deprecation"](../faq.html#Xorg_deprecated)" for more details. +This does not mean that a submission using this will necessarily be +rejected, but it would be better if it can support Wayland in some way +or another. -We **DISLIKE** submissions that use proprietary toolkits such as the `M*tif`, -`Xv*ew`, or `OpenL*ok` toolkits, since not everyone has them. Use an -open source toolkit that is widely and freely available instead. +We **DISLIKE** submissions that use proprietary toolkits such as the +`M*tif`, `Xv*ew`, or `OpenL*ok` toolkits, since not everyone has them. +Use an open source toolkit that is widely and freely available instead. X client submissions should try to not to depend on particular items in -`.Xdefaults`. If you must do so, be sure to note the required lines -in the your `remarks.md` file. They should also not depend on any +`.Xdefaults`. If you must do so, be sure to note the required lines in +the your `remarks.md` file. They should also not depend on any particular window manager.
-### About Curses +### About libcurses
One should restrict libcurses to portable features found on both BSD and Linux curses.

-If you do `#include ` make **CERTAIN** you link in curses (i.e. -`-lcurses`) and not ncurses (i.e. `-lncurses`). +If you do `#include ` make **CERTAIN** you link in curses +(i.e. `-lcurses`) and not ncurses (i.e. `-lncurses`).

Jump to: [top](#) @@ -1026,26 +1122,27 @@ Jump to: [top](#) ### About ASCII TAB
-We **DISLIKE** the use of ASCII tab characters in markdown files, such as in the required `remarks.md` file. +We **DISLIKE** the use of ASCII tab characters in markdown files, such +as in the required `remarks.md` file. -We don't mind the use of ASCII tab characters in your C code. Feel free -to use ASCII tab characters if that suits your obfuscation needs. If is -perfectly **OK** to use tab characters elsewhere in your submission, just not in -markdown files as this tends annoy us when it comes time to -rendering your markdown content as it complicates the process. +We don't mind the use of ASCII tab characters in your C code. Feel +free to use ASCII tab characters if that suits your obfuscation needs. +If is perfectly **OK** to use tab characters elsewhere in your +submission, just not in markdown files as this tends annoy us when it +comes time to rendering your markdown content as it complicates the +process. -If you do use ASCII tab characters in your non-markdown files, be -aware that some people may use a tab stop that is different than the common 8 +If you do use ASCII tab characters in your non-markdown files, be aware +that some people may use a tab stop that is different than the common 8 character tab stop. -**PLEASE** observe our [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 4 - Required files](rules.html#rule4-required-files), -and the -FAQ on "[markdown](../faq.html#markdown)". +**PLEASE** observe our [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 4 - Required files](rules.html#rule4-required-files), +and the FAQ on "[markdown](../faq.html#markdown)". Jump to: [top](#) @@ -1055,44 +1152,40 @@ Jump to: [top](#) You are better off explaining what your submission does in your `remarks.md` file section rather than leaving it obscure for the -[Judges](../judges.html) as we might miss something and/or be too tired to -notice. - -We freely admit that interesting, creative or humorous comments in -your `remarks.md` file help your chances of winning. If you had to -read so many twisted submissions, you too would enjoy a good laugh or two. -We think the readers of the contest winners do as well. We do read -your `remarks.md` content during the judging process, so it is worth your +[Judges](../judges.html) as we might miss something and/or be too tired +to notice. + +We freely admit that interesting, creative or humorous comments in your +`remarks.md` file help your chances of winning. If you had to read so +many twisted submissions, you too would enjoy a good laugh or two. We +think the readers of the contest winners do as well. We do read your +`remarks.md` content during the judging process, so it is worth your while to write a remarkable `remarks.md` file. 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 -your submission has some very subtle obfuscations that we might -otherwise overlook. **<<-- Hint!** - -Anyone can format their code into a dense blob. A really clever -author will try format their submission using a "normal" formatting style -such that at first glance (if you squint and don't look at the details) -the code might pass for non-obfuscated C. Deceptive comments, -and misleading formatting, in some cases, may be a plus. On the -other hand, a misleading code style requires more source bytes. - -If you do elect to use misleading formatting and comments, we -suggest you remark on this point in your `remarks.md` where you talk -about why you think your submission is obfuscated. On the other hand, -if you are pushing up against the size limits, you may be forced -into creating a dense blob. Such are the trade-offs that obfuscators face! - -If there are limitations in your submission, you are highly encouraged -to note such limitations in your `remarks.md` file. For example if your -submission factors values up to a certain size, you might want to state: +think your submission is obfuscated. This is particularly true if your +submission has some very subtle obfuscations that we might otherwise +overlook. **<<-- Hint!** + +Anyone can format their code into a dense blob. A really clever author +will try format their submission using a "normal" formatting style such +that at first glance (if you squint and don't look at the details) the +code might pass for non-obfuscated C. Deceptive comments, and +misleading formatting, in some cases, may be a plus. On the other +hand, a misleading code style requires more source bytes. + +If you do elect to use misleading formatting and comments, we suggest +you remark on this point in your `remarks.md` where you talk about why +you think your submission is obfuscated. On the other hand, if you are +pushing up against the size limits, you may be forced into creating a +dense blob. Such are the trade-offs that obfuscators face! We **LIKE** reading `remarks.md` files, especially if they contain -useful, informative, and even humorous content about your submission. Yes, this -is a **hint**. :-) +useful, informative, and even humorous content about your submission. +Yes, this is a **hint**. :-) -We **RECOMMEND** you put a reasonable amount effort into the content of the -`remarks.md` file: it is a required file for a reason. :-) +We **RECOMMEND** you put a reasonable amount effort into the content of +the `remarks.md` file: it is a required file for a reason. :-) Try to be even more creative! @@ -1103,14 +1196,14 @@ Jump to: [top](#) ### Miscellaneous -While we recognize that UNIX is not a universal operating system, the contest -does have a bias towards such systems. In an effort to expand the scope of the -contest, we phrase our bias to favor the [Single UNIX +While we recognize that UNIX is not a universal operating system, the +contest does have a bias towards such systems. In an effort to expand +the scope of the contest, we phrase our bias to favor the [Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) (UNIX-like). -You are **well advised** to submit code that conforms to the [Single UNIX -Specification Version 4](https://unix.org/version4/overview.html). +You are **well advised** to submit code that conforms to the [Single +UNIX Specification Version 4](https://unix.org/version4/overview.html). To quote the [Judges](../judges.html): @@ -1128,47 +1221,64 @@ Some types of programs can't excel (anti-tm) in some areas. Your program doesn't have to excel in all areas, but doing well in several areas really does help. -> This submission factors values up `2305567963945518424753102147331756070`. -Attempting to factor larger values will produce unpredictable results. +If there are limitations in your submission, you are highly encouraged +to note such limitations in your `remarks.md` file. For example if +your submission factors values up to a certain size, you might want to +state: + +> This submission factors values up +`2305567963945518424753102147331756070`. Attempting to factor larger +values will produce unpredictable results. -The [Judges](../judges.html) might try to factor the value -5, so you want to might state: +The [Judges](../judges.html) might try to factor the value -5, so you +want to might state: > This submission factors positive values up -`2305567963945518424753102147331756070`. Attempting to factor large values will -produce unpredictable results. +`2305567963945518424753102147331756070`. Attempting to factor large +values will produce unpredictable results. -However the [Judges](../judges.html) might try to also factor 0, so you might want to state: +However the [Judges](../judges.html) might try to also factor 0, so you +might want to state: > This submission factors values between 1 and -`2305567963945518424753102147331756070`. Attempting to factor values outside -that range will produce unpredictable results. +`2305567963945518424753102147331756070`. Attempting to factor values +outside that range will produce unpredictable results. -Moreover they might try to also factor 3.5 or 0x7, or Fred, so you want to might state: +Moreover they might try to also factor 3.5 or 0x7, or Fred, so you want +to might state: > This submission factors integers between 1 and -`2305567963945518424753102147331756070`. Attempting to factor anything else -will produce unpredictable results. +`2305567963945518424753102147331756070`. Attempting to factor anything +else will produce unpredictable results. -You submission might be better off catching the attempt to factor bogus values -and doing something interesting. So you might want to code accordingly and state: +You submission might be better off catching the attempt to factor bogus +values and doing something interesting. So you might want to code +accordingly and state: -> This submission factors integers between 1 and `2305567963945518424753102147331756070`. -> Attempting to factor anything else will cause the program to insult your pet fish Eric. +> This submission factors integers between 1 and +`2305567963945518424753102147331756070`. Attempting to factor anything +else will cause the program to insult your pet fish Eric. -The [Judges](../judges.html) might not have a pet fish named Eric, so you might want to state: +The [Judges](../judges.html) might not have a pet fish named Eric, so +you might want to state: > This submission factors integers between 1 and -`2305567963945518424753102147331756070`. Attempting to factor anything else -will cause the program to insult your pet fish Eric, or in the case that you -lack such a pet, will insult the pet that you do not have. +`2305567963945518424753102147331756070`. Attempting to factor anything +else will cause the program to insult your pet fish Eric, or in the +case that you lack such a pet, will insult the pet that you do not +have. -When all other things are equal, a submission with fewer limitations will be judged -better than a submission with lots of limitations. So you might want to code accordingly -and state: +When all other things are equal, a submission with fewer limitations +will be judged better than a submission with lots of limitations. So +you might want to code accordingly and state: -> This submission attempts to a factor value of any size provided that the -program is given enough time and memory. If the value is not a proper integer, -the program might insult a fish named Eric. +> This submission attempts to a factor value of any size provided +that the program is given enough time and memory. If the value is not +a proper integer, the program might insult a fish named Eric. + +Do not fear if you're not 100% sure of the significance of +`2305567963945518424753102147331756070` as it is not of prime +importance: or is it? :-) Jump to: [top](#) @@ -1179,19 +1289,21 @@ Jump to: [top](#) -The [IOCCC submit server](https://submit.ioccc.org), and related services -use the **most recent version** of the -[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry): -submissions that package using older versions of the -[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) -are **LIKELY** to be **REJECTED**! +The [IOCCC submit server](https://submit.ioccc.org), and related +services use the **most recent version** of the [mkiocccentry +toolkit](https://github.com/ioccc-src/mkiocccentry): submissions that +package using older versions of the [mkiocccentry +toolkit](https://github.com/ioccc-src/mkiocccentry) are **LIKELY** to +be **REJECTED**! You **REALLY SHOULD** use the latest [mkiocccentry -toolkit](https://github.com/ioccc-src/mkiocccentry) to package your submission -as submissions that use an older version are **LIKELY** to be **REJECTED**! +toolkit](https://github.com/ioccc-src/mkiocccentry) to package your +submission as submissions that use an older version are **WILL** +be **REJECTED**! The `mkiocccentry(1)` tool runs a number of checks by way of these -[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) tools: +[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) +tools: * iocccsize(1) * txzchk(1) @@ -1199,19 +1311,21 @@ The `mkiocccentry(1)` tool runs a number of checks by way of these * chksubmit(1) * chkentry(1) -Do **NOT** use `txzchk(1)` or `fnamchk(1)` command line options that are labeled -"**for TESTING purposes**" in their respective man pages. +Do **NOT** use `txzchk(1)` or `fnamchk(1)` command line options that +are labelled "**for TESTING purposes**" in their respective man pages. -Do **NOT** use `fnamchk(1)` command line options that are labeled "**for TESTING purposes**" -in the `fnamchk(1)` man page. +Do **NOT** use `fnamchk(1)` command line options that are labelled +"**for TESTING purposes**" in the `fnamchk(1)` man page. -Do **NOT** use `chksubmit(1)` command line options that are labeled "**for the use by the Judges only**" -in the `chksubmit(1)` man page. -Similarly do **NOT** use `chkentry(1)` command line options marked "**for the use -by the Judges only**" in the `chkentry(1)` man page. +Do **NOT** use `chksubmit(1)` command line options that are labelled +"**for the use by the Judges only**" in the `chksubmit(1)` man page. -To view [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) man pages, -while your current directory is the top of the source tree: +Similarly do **NOT** use `chkentry(1)` command line options marked +"**for the use by the Judges only**" in the `chkentry(1)` man page. + +To view [mkiocccentry +toolkit](https://github.com/ioccc-src/mkiocccentry) man pages, while +your current directory is the top of the source tree: ``` man soup/man/man1/mkiocccentry.1 @@ -1222,31 +1336,38 @@ while your current directory is the top of the source tree: man soup/man/man1/chkentry.1 ``` -The above `man(1)` commands will show the toolkit man pages without having to install them first. +The above `man(1)` commands will show the toolkit man pages without +having to install them first. + +So that you do not have to repeatedly answer all the `mkiocccentry(1)` +questions, use `mkiocccentry -a answers ...` to create a file +containing the answers you first give, so later enter `mkiocccentry -i +answers ...` to reuse those same answers. -So that you do not have to repeatedly answer all the `mkiocccentry(1)` questions, -use `mkiocccentry -a answers ...` to create a file containing the answers you first give, -so later enter `mkiocccentry -i answers ...` to reuse those same answers. +The `mkiocccentry -A answers ...` does the same thing except that the +**answers file will be overwritten**. -The `mkiocccentry -A answers ...` does the same thing except that the **answers file will be overwritten**. +The `mkiocccentry -i answers ...` will still be required to confirm +"_Yes/No_" questions. -The `mkiocccentry -i answers ...` will still be required to confirm "_Yes/No_" questions. +Use `mkiocccentry -Y -i answers ..` to force a yes answers with **great +caution** because it might force a yes answer to something you do +**NOT** want, such as a change in your code that violates a detected +rule. -Use `mkiocccentry -Y -i answers ..` to force a yes answers with **great caution** -because it might force a yes answer to something you do **NOT** want, such as a -change in your code that violates a detected rule. -The `mkiocccentry -i answers ..` will still be required to confirm "_Yes/No_" questions. -While `mkiocccentry -Y -i answers ..` will force yes answers, use with **great caution**, -because it might force a yes answer to something you do **NOT** want. +The `mkiocccentry -i answers ..` will still be required to confirm +"_Yes/No_" questions. While `mkiocccentry -Y -i answers ..` will force +yes answers, use with **great caution**, because it might force a yes +answer to something you do **NOT** want. -To help with not having to repeatedly enter a UUID, put your UUID into a file and use -`mkiocccentry -u uuidfile ...`, or use `mkiocccentry -U UUID ...` to give the `UUID` -on the command line. +To help with not having to repeatedly enter a UUID, put your UUID into +a file and use `mkiocccentry -u uuidfile ...`, or use `mkiocccentry -U +UUID ...` to give the `UUID` on the command line. -If you wish to **test** that your submission passes the `mkiocccentry(1)` tests -without having to type in answers each time, you can use the `-d` or `-s seed` -option to `mkiocccentry` for the tool to pseudo-randomly create answers for you. -For example: +If you wish to **test** that your submission passes the +`mkiocccentry(1)` tests without having to type in answers each time, +you can use the `-d` or `-s seed` option to `mkiocccentry` for the tool +to pseudo-randomly create answers for you. For example: ``` mkiocccentry -d workdir topdir @@ -1254,71 +1375,78 @@ For example:

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

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

``` cd workdir/UUID-slot_num && tar --format=v7 -cJf submit.UUID-slot_num.timestamp.txz UUID-slot_num ``` -In many places the `mkiocccentry(1)` tool will prompt you to verify what you input, allowing you to -correct details as you go along. +In many places the `mkiocccentry(1)` tool will prompt you to verify +what you input, allowing you to correct details as you go along.

-Pressing the "_enter key_" at the `mkiocccentry(1)` tool prompts will allow you -to proceed with a default, however make sure the default is the **CORRECT** answer. +Pressing the "_enter key_" at the `mkiocccentry(1)` tool prompts will +allow you to proceed with a default, however make sure the default is +the **CORRECT** answer.

-The `mkiocccentry(1)` tool will use code from `iocccsize(1)` which detects a number of -issues (such as [Rule 2 - Size restrictions](rules.html#rule2-size)) that you may ignore, -however ignoring such issues **comes with a SIGNIFICANT level of risk!** +The `mkiocccentry(1)` tool will use code from `iocccsize(1)` which +detects a number of issues (such as [Rule 2 - Size +restrictions](rules.html#rule2-size)) that you may ignore, however +ignoring such issues **comes with a SIGNIFICANT level of risk!** -Once the tarball is packaged it will -run `txzchk(1)`, which will also run `fnamchk(1)`, as part of its algorithm. +Once the tarball is packaged it will run `txzchk(1)`, which will also +run `fnamchk(1)`, as part of its algorithm.

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

-The same can be said of `mkiocccentry -Y ...` , and to a lesser extent `mkiocccentry -y ...`: -the `-y` is mostly for the test script and the `-Y` is like `-y` but even more aggressive. +The same can be said of `mkiocccentry -Y ...` , and to a lesser extent +`mkiocccentry -y ...`: the `-y` is mostly for the test script and the +`-Y` is like `-y` but even more aggressive.

-If `mkiocccentry` encounters an **error**, the program will exit and the xz -compressed tarball **will NOT be generated**: this is a **feature, not a bug**! +If `mkiocccentry` encounters an **error**, the program will exit and +the xz compressed tarball **will NOT be generated**: this is a +**feature, not a bug**! -If you encounter a **bug** with the -[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) -**PLEASE run the `bug_report.sh` script to help us out here!** +If you encounter a **bug** with the [mkiocccentry +toolkit](https://github.com/ioccc-src/mkiocccentry) **PLEASE run the +`bug_report.sh` script to help us out here!**

-While you don't have to install the -[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry), -if you don't, in order to run a tool outside the repo directory -you will have to specify `mkiocccentry(1)` command line options to locate required tools -such as `chkentry(1)` (`mkiocccentry -C chkentry ...`), `txzchk(1)` (`mkiocccentry -T txzchk ...`), -and `fnamchk(1)` (`mkiocccentry -F fnamchk ...`). +While you don't have to install the [mkiocccentry +toolkit](https://github.com/ioccc-src/mkiocccentry), if you don't, in +order to run a tool outside the repo directory you will have to specify +`mkiocccentry(1)` command line options to locate required tools such as +`chkentry(1)` (`mkiocccentry -C chkentry ...`), `txzchk(1)` +(`mkiocccentry -T txzchk ...`), and `fnamchk(1)` (`mkiocccentry +-F fnamchk ...`).

-The `mkiocccentry(1)` tool will ignore any filename or directory that begins with a period (`.`). +The `mkiocccentry(1)` tool will ignore any filename or directory that +begins with a period (`.`).

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

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

@@ -1332,30 +1460,31 @@ the top level directory (`topdir`):

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

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

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

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

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

@@ -1371,37 +1500,41 @@ or `try.sh` is **NOT** a good idea and will likely cause the

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

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

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

-See -FAQ on "[How do I report bugs in an `mkiocccentry` tool?](../faq.html#mkiocccentry_bugs)". +See the +FAQ on "[How do I report bugs in an `mkiocccentry` +tool?](../faq.html#mkiocccentry_bugs)". -See [Rule 11 - Legal rule abuse](rules.html#rule11-legal-rule-abuse) for warnings about ignoring `mkiocccentry(1)` tool warnings. +See [Rule 11 - Legal rule abuse](rules.html#rule11-legal-rule-abuse) +for warnings about ignoring `mkiocccentry(1)` tool warnings. -See +See the FAQ on "[What is the `fnamchk` tool?](../faq.html#fnamchk)". -See -FAQ on "[What is mkiocccentry in simple terms?](../faq.html#about_mkiocccentry)". +See the +FAQ on "[What is mkiocccentry in simple +terms?](../faq.html#about_mkiocccentry)". -See -FAQ on "[What is the mkiocccentry tool, how do I obtain it and how do I use it](../faq.html#mkiocccentry)". +See the +FAQ on "[What is the mkiocccentry tool, how do I obtain it and how do I +use it](../faq.html#mkiocccentry)". Jump to: [top](#) @@ -1411,15 +1544,16 @@ Jump to: [top](#) ## Fun😄damental Guidelines -The reason for the times of day are so that key IOCCC events are **calculated** -to be a **fun**ctional UTC time. :-) +The reason for the times of day are so that key IOCCC events are +**calculated** to be a **fun**ctional UTC time. :-) -At least 2 of several reasons for selecting the prime, 2503, for -[Rule 2b - Net Size](rules.html#rule2b-net-size) -may be found on the ["Curios!" about 2503](https://t5k.org/curios/page.php/2503.html). +At least 2 of several reasons for selecting the prime, 2503, for [Rule +2b - Net Size](rules.html#rule2b-net-size) may be found on the +["Curios!" about 2503](https://t5k.org/curios/page.php/2503.html). -The 2503 value for [Rule 2b - Net Size](rules.html#rule2b-net-size) is a decimal anagram -of the number of the kernel disk pack of one of the judge's [BESM-6](https://en.wikipedia.org/wiki/BESM-6). +The 2503 value for [Rule 2b - Net Size](rules.html#rule2b-net-size) is +a decimal anagram of the number of the kernel disk pack of one of the +judge's [BESM-6](https://en.wikipedia.org/wiki/BESM-6).

There may or may not be fewer than 2^7+1 reasons why these @@ -1427,55 +1561,56 @@ There may or may not be fewer than 2^7+1 reasons why these

-Excessively "_dotty"_ use of the `chksubmit(1)` or `chkentry(1)` commands suggests that -either you like silly things, or that you [RTFS](https://en.wikipedia.org/wiki/RTFM) -with some level of care. +Excessively "_dotty"_ use of the `chksubmit(1)` or `chkentry(1)` +commands suggests that either you like silly things, or that you +[RTFS](https://en.wikipedia.org/wiki/RTFM) with some level of care.

-Some people might question what actually constitutes a valid JSON file, given -the state of the "_so-called_" JSON spec. :-) +Some people might question what actually constitutes a valid JSON file, +given the state of the "_so-called_" JSON spec. :-) -We prefer programs that do not require a fish license: crayons and -cat detector vans not withstanding. +We prefer programs that do not require a fish license: crayons and cat +detector vans not withstanding.

This _guideline_ has a change mark at the very start of this line.

While those who are used to temperatures found on [dwarf -planets](https://science.nasa.gov/dwarf-planets/) -(**yes Virginia, dwarf planets _ARE_ planets!**), such as -[Pluto](https://science.nasa.gov/dwarf-planets/pluto/), might be able to -explain to the Walrus why our seas are boiling hot, the question of +planets](https://science.nasa.gov/dwarf-planets/) (**yes Virginia, +dwarf planets _ARE_ planets!**), such as +[Pluto](https://science.nasa.gov/dwarf-planets/pluto/), might be able +to explain to the Walrus why our seas are boiling hot, the question of whether pigs have wings is likely to remain a debatable point to most. At least one judge prefers to maintain the use of the -[leap-second](https://en.wikipedia.org/wiki/Leap_second) -as part of the world's time standard. If your code prints time -with seconds, we prefer that your code be capable of printing the -time of day during a leap-second where the value in seconds -after the minute mark is **60**. +[leap-second](https://en.wikipedia.org/wiki/Leap_second) as part of the +world's time standard. If your code prints time with seconds, we +prefer that your code be capable of printing the time of day during a +leap-second where the value in seconds after the minute mark is **60**. Other windows, on the other hand, might be OK: especially where "**X -marks the spot**". Yet on the third hand, windows are best when they are -"unseen" (i.e., not dirty). :-) - -The [Judges](../judges.html), as a group, have a history giving wide degree of latitude -to reasonable submissions. And recently they have had as much longitudinal -variation as it is possible to have on [Earth](https://science.nasa.gov/earth/). :-) -Other windows, on the other hand, might be OK: especially where "**X -marks the spot**". Yet on the third hand, windows are best when they are -"unseen" (i.e., not dirty). :-) - -The [Judges](../judges.html), as a group, have a history giving wide degree of latitude -to reasonable submissions. And recently they have had as much longitudinal -variation as it is possible to have on [Earth](https://science.nasa.gov/earth/). :-) +marks the spot**". Yet on the third hand, windows are best when they +are "unseen" (i.e., not dirty). :-) + +The [Judges](../judges.html), as a group, have a history giving wide +degree of latitude to reasonable submissions. And recently they have +had as much longitudinal variation as it is possible to have on +[Earth](https://science.nasa.gov/earth/). :-) Other windows, on the +other hand, might be OK: especially where "**X marks the spot**". Yet +on the third hand, windows are best when they are "unseen" (i.e., not +dirty). :-) + +The [Judges](../judges.html), as a group, have a history giving wide +degree of latitude to reasonable submissions. And recently they have +had as much longitudinal variation as it is possible to have on +[Earth](https://science.nasa.gov/earth/). :-) > You are in a maze of twisty _guidelines_, all different. There are at least zero [Judges](../judges.html) who think that -[Fideism](https://en.wikipedia.org/wiki/Fideism) has little -or nothing to do with the Judging process. +[Fideism](https://en.wikipedia.org/wiki/Fideism) has little or nothing +to do with the Judging process. > All generalizations are false, including this one. -- **Mark Twain** @@ -1486,22 +1621,25 @@ There are more than about 1 typos in this very sentence. This could be the only _guideline_ that contains the word [fizzbin](https://en.wikipedia.org/wiki/List_of_games_in_Star_Trek#Fizzbin). -However, do you know how to play [fizzbin](https://en.wikipedia.org/wiki/List_of_games_in_Star_Trek#Fizzbin)? +However, do you know how to play +[fizzbin](https://en.wikipedia.org/wiki/List_of_games_in_Star_Trek#Fizzbin)? You do?!? (Except on Tuesday?) OK, there are actually 2 _guidelines_ that contain the word [fizzbin](https://en.wikipedia.org/wiki/List_of_games_in_Star_Trek#Fizzbin), unless you count this one, in which case there are 3. :-) -**NOTE**: The previous _guideline_ in this spot has been replaced by this _guideline_: +**NOTE**: The previous _guideline_ in this spot has been replaced by +this _guideline_:

-You very well might not be completely prohibited from failing to not partly -misunderstand this particular _guideline_, but of course, we could not possibly -comment! Nevertheless, you are neither prohibited, nor are you fully or partly -required to determine that this or the previous sentence is either false and/or -perhaps misleading. Therefore, it might be wise for you to not fail to consider -to not do so, accordingly. Thank you very much (allegedly). +You very well might not be completely prohibited from failing to not +partly misunderstand this particular _guideline_, but of course, we +could not possibly comment! Nevertheless, you are neither prohibited, +nor are you fully or partly required to determine that this or the +previous sentence is either false and/or perhaps misleading. +Therefore, it might be wise for you to not fail to consider to not do +so, accordingly. Thank you very much (allegedly).

Any complaints about the above _guideline_ could be addressed to the @@ -1509,7 +1647,8 @@ Speaker of the House of Commons, or to the speaker of your national parliament should you have one.

-Please try to avoid this specific individual _guideline_, if it is at all possible. +Please try to avoid this specific individual _guideline_, if it is at +all possible.

We believe that Mark Twain's quote: @@ -1519,37 +1658,46 @@ We believe that Mark Twain's quote: ... is a good motto for those writing code for the IOCCC.

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

-The -[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) -is not an original work, unless you one of the -[several mkiocccentry toolkit contributors](https://github.com/ioccc-src/mkiocccentry/graphs/contributors). -in which case it is original! :-) -Even so, most of the programs in the toolkit exceed the -[Rule 2 - Size restrictions](rules.html#rule2-size) -so they wouldn't qualify for the contest anyway. +The IOCCC size tool +[iocccsize](https://github.com/ioccc-src/mkiocccentry/blob/master/iocccsize.c) +is not an original work unless you are [Anthony C +Howe](../authors.html#Anthony_C_Howe), in which case it is original. +:-)

-If the [IOCCC judges](../judges.html) are feeling like it, they -might choose to compile your program for running on an Arduino or -a PDP-11. Heck, should we ever find an emulator of 60-bit CDC Cyber -CPU, we might just try your submission on that emulator as well :-) +The IOCCC tarball validator +[txzchk](https://github.com/ioccc-src/mkiocccentry/blob/master/txzchk.c) +is not an original work unless you are [Cody Boone +Ferguson](../authors.html#Cody_Boone_Ferguson), in which case it is +original. :-) +

+ +

+Even so, those tools exceed the [Rule 2 - Size +restrictions](rules.html#rule2-size) so they wouldn't qualify for the +contest anyway. +

+ +

+If the [IOCCC judges](../judges.html) are feeling like it, they might +choose to compile your program for running on an Arduino or a PDP-11. +Heck, should we ever find an emulator of 60-bit CDC Cyber CPU, we might +just try your submission on that emulator as well :-)

-Do not fear if you're not 100% sure of the significance of -`2305567963945518424753102147331756070` as it is not of prime importance: or is -it? :-)

-With respect to [nested functions](#nested-functions), try `chkentry -b`. +With respect to [nested functions](#nested-functions), try `chkentry +-b`.

@@ -1562,19 +1710,24 @@ Jump to: [top](#) -See the [Official IOCCC website news](../news.html) for additional information. +See the [Official IOCCC website news](../news.html) for additional +information. -For questions or comments about the contest, see [Contacting the IOCCC](../contact.html). +For questions or comments about the contest, see [Contacting the +IOCCC](../contact.html). -**Be SURE** to review the current [IOCCC Rules and Guidelines](index.html) as they -often change year to year. Especially prior to submitting to the contest. +**Be SURE** to review the current [IOCCC Rules and +Guidelines](index.html) as they often change year to year. Especially +prior to submitting to the contest. -For the latest IOCCC news, follow the [IOCCC on Mastodon](https://fosstodon.org/@ioccc). See our -FAQ on "[Mastodon](../faq.html#try_mastodon)" -for more information. +For the latest IOCCC news, follow the [IOCCC on +Mastodon](https://fosstodon.org/@ioccc). See our FAQ on +"[Mastodon](../faq.html#try_mastodon)" for more information. -Also consider joining the [IOCCC Discord Server](https://discord.com/invite/Wa42Qujwnw) -for the latest news, discussions about The Rules, questions for the Judges, and `C` in general. +Also consider joining the [IOCCC Discord +Server](https://discord.com/invite/Wa42Qujwnw) for the latest news, +discussions about The Rules, questions for the Judges, and `C` in +general.
Jump to: [top](#) diff --git a/next/rules.html b/next/rules.html index 953d2fbefa..d0891aca2d 100644 --- a/next/rules.html +++ b/next/rules.html @@ -455,22 +455,23 @@

IOCCC Rules

The IOCCC is closed

The IOCCC is NOT accepting new submissions at this time. See the -IOCCC winning entries page for the entries that have won the -IOCCC in the past.

-

These rules are a TENTATIVE proposal for the next IOCCC -and are likely be to be updated before the next IOCCC.

+IOCCC winning entries page for the entries that have +won the IOCCC in the past.

+

These rules are a TENTATIVE proposal for the next IOCCC and are +likely be to be updated before the next IOCCC.

See our FAQ on “rules, guidelines, tools feedback” as well as our FAQ on “about asking questions” -about these rules. You might also find the FAQ in general useful, especially the +about these rules. You might also find the FAQ in general useful, +especially the FAQ on “how to enter the IOCCC”.

-

Watch both the IOCCC status page and the -@IOCCC mastodon feed for information about +

Watch both the IOCCC status page and the @IOCCC +mastodon feed for information about future IOCCC openings.

HINT to mastodon users: You may wish to refresh the @IOCCC -mastodon feed page and/or mastodon -app from time to time to view IOCCC mastodon updates.

+mastodon feed page and/or mastodon app +from time to time to view IOCCC mastodon updates.

29th International Obfuscated C Code Contest Official Rules

@@ -480,12 +481,14 @@

29th Internat and remains unaltered. All other uses MUST receive prior permission in writing by contacting the judges.

Rules Version

-

These IOCCC Rules are version 29.13 2025-12-01.

+

These IOCCC Rules are version 29.14 2025-12-02.

-The | symbol indicates an change from the previous IOCCC. +The | symbol +indicates a change from the previous IOCCC.

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

Reminder: be SURE to read the IOCCC guidelines.

@@ -495,24 +498,30 @@

Rule 0 - Dates

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

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

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

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

-

The above dates and times may change AT ANY TIME until the contest status is open.

+

The above dates and times may change AT ANY TIME until the +contest status is open.

The above timestamps are in “YYYY-MM-DD HH:MM:SS.micros UTC” format.

-

See Entering the IOCCC: the bare minimum you need to know.

+

See Entering the IOCCC: the bare minimum you need to +know.

See -FAQ on “How can I comment or make a suggestion on IOCCC rules, guidelines and tools?”.

+FAQ on “How can I comment or make a suggestion on IOCCC rules, +guidelines and tools?”.

Rule 1 - C program

@@ -521,7 +530,8 @@

Rule 1 - C program

Your submission MUST be a C program.

-

See the Guidelines for Rule 1 - C program.

+

See the Guidelines for Rule 1 - C +program.

@@ -529,13 +539,13 @@

Rule 2 - Size restrictions

-

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

+

Rule 2 requires that your submission satisfy BOTH Rule 2a +(Gross Size) and Rule 2b (Net +Size).

+

During development this can be checked using iocccsize(1):

    iocccsize prog.c
-

See the Guidelines for Rule 2 - Size restrictions.

+

See the Guidelines for Rule 2 - Size +restrictions.

Rule 2a - Gross Size

@@ -543,17 +553,15 @@

Rule 2a - Gross Size

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

-

See Entering the IOCCC: the bare minimum you need to know.

+

See Entering the IOCCC: the bare minimum you need to +know.

Rule 2b - Net Size

-

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

-

NOTE: iocccsize does NOT calculate the filename length.

+

Check your source code using the latest official IOCCC size tool, +iocccsize(1). The value printed MUST NOT exceed 2503.

See Rule 17 - Use mkiocccentry.

@@ -561,107 +569,120 @@

Rule 3 - Register for the IOCCC

You MUST register, using a valid email address, in order to submit -to the IOCCC. You may register while the contest is pending or open.

+to the IOCCC. You may register while the contest is pending or +open.

A few days after registering, you’ll receive your UUID username and temporary password, which you MUST change within 14 days.

See How to register for the IOCCC.

-

See Entering the IOCCC: the bare minimum you need to know.

-

See Guidelines for Rule 3 - Register for the IOCCC.

+

See Entering the IOCCC: the bare minimum you need to +know.

+

See Guidelines for Rule 3 - Register for the +IOCCC.

Rule 4 - Required files

-Your submission MUST include at least these files: Makefile, prog.c, -remarks.md,.info.json, and .auth.json, the latter two of which are -generated by mkiocccentry(1). See Rule 17 - -Use mkiocccentry. +Your submission MUST include at least these files: Makefile, +prog.c, remarks.md,.info.json, and .auth.json, the latter two +of which are generated by mkiocccentry(1). See Rule 17 - Use +mkiocccentry.

-At a minimum the following requirements apply. Additional requirements -may be imposed by mkiocccentry(1) updates that have yet to be listed -below: +At a minimum the following requirements apply. Additional +requirements may be imposed by mkiocccentry(1) updates that have yet +to be listed below:

|   -* .info.json and .auth.json MUST be generated by mkiocccenty(1) -when packing a submission. When chksubmit(1) is run on the submission -directory ALL tests must pass and if there is ANY problem with these -JSON files or if either is missing it will fail. See Rule 17 - use -mkiocccentry.

+* .info.json and .auth.json MUST be generated by +mkiocccenty(1) when packing a submission. When chksubmit(1) is run +on the submission directory ALL tests must pass and if there is +ANY problem with these JSON files or if either is missing it will +fail. See Rule 17 - use mkiocccentry.

|   * The Makefile, remarks.md,.info.json, and .auth.json MUST -have a file size greater than 0 and MUST have content. Note that -mkiocccentry(1) will check for file size but will NOT check for -content.

+have a file size greater than 0 and MUST have content. Note +that mkiocccentry(1) will check for file size but will NOT +check for content.

|   -* Your submitted source code MUST be called prog.c. When the Makefile -compiles your code, the executable (if applicable) MUST be called prog. -The Makefile may compile your source code into other filenames as well, if you want.

+* Your submitted source code MUST be called prog.c. When the +Makefile compiles your code, the executable (if applicable) MUST +be called prog. The Makefile may compile your source code into +other filenames as well, if you want.

|   * As prog, prog.alt, prog.alt.o, prog.o may be created by your -Makefile, your submission MUST NOT include those files in your top directory.

+Makefile, your submission MUST NOT include those files in your +top directory.

|   * Your submission may NOT have any file that starts with COPYING, COPYRIGHT, or LICENSE as those files are reserved by IOCCC.

|   -* Your submission may NOT have in the top directory: prog.orig.c, -README.md or index.html as those files are reserved by the IOCCC.

+* Your submission may NOT have in the top directory: +prog.orig.c, README.md or index.html as those files are reserved +by the IOCCC.

|   * Your submission may NOT have in the top directory any file that matches a file glob pattern form [0-9][0-9][0-9][0-9]_*.tar.bz2 as those files are reserved by IOCCC.

|   -* Your submission may ONLY contain files and directories. Other file -types such as symlinks, sockets etc. are NOT allowed.

+* Your submission may ONLY contain files and directories. Other +file types such as symlinks, sockets etc. are NOT allowed.

|   -* All directories MUST have permission mode of 0755. All files -MUST have the file mode of 0444, EXCEPT for files that +* All directories MUST have permission mode of 0755. All +files MUST have the file mode of 0444, EXCEPT for files that end in .sh which must have a mode of 0555.

|   * All files that end in .md MUST be in markdown format.

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

-NOTE: by ‘top directory’ we mean the directory with prog.c, Makefile, -remarks.md and the mkiocccentry(1) generated files .auth.json and -.info.json and NOT the topdir arg to mkiocccentry(1). +NOTE: by ‘top directory’ we mean the directory with prog.c, +Makefile, remarks.md and the mkiocccentry(1) generated files +.auth.json and .info.json and NOT the topdir arg to +mkiocccentry(1).

-NOTE: mkiocccentry(1) will reject any directory which has prohibited files. +NOTE: mkiocccentry(1) will reject any directory which has +prohibited files.

-

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

+

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

See IOCCC markdown guidelines.

See Rule 17 - Use mkiocccentry.

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

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

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

-

See the Guidelines on the mkiocccentry toolkit.

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

+

See the Guidelines on the mkiocccentry +toolkit.

-

Rule 5 - Do NOT modify submitted files or filenames or parent directories

-
-
-

Your submission MUST NOT modify the filenames or content of any of your -original submission, such as prog.c, Makefile, or ANY other supplied -files. To modify files, your program can make a copy or you can use the -Makefile to setup working copies. Any working copies MUST be cleaned up -by the Makefile clobber target, so as to restore the directory to its -original state.

-

Your submission MUST NOT create or modify directories and files -ABOVE the current directory (with the exception of the /tmp and the /var/tmp -directories and as long as the directory name or filename does NOT start -with a . (dot)).

+

Rule 5 - Do NOT modify submitted files, filenames or parent directories

+
+
+

Your submission MUST NOT modify the filenames or content of any of +your original submission, such as prog.c, Makefile, or ANY +other supplied files. To modify files, your program can make a copy or +you can use the Makefile to setup working copies. Any working copies +MUST be cleaned up by the Makefile clobber target, so as to +restore the directory to its original state.

+

With the exception of the /tmp and the /var/tmp directories, +assuming the directory name or filename does NOT start with a . +(dot), your submission MUST NOT create or modify directories and +files ABOVE the current directory.

The Makefile clobber target MUST restore your submission to its -original form, including the removal of any created files and directories.

+original form, including the removal of any created files and +directories.

-Your code should be able to run under a -SUS environment. +Your code should be able to run under a SUS +environment.

@@ -679,72 +700,88 @@

Rule 7 - Original Work

-You, the author(s), MUST own the contents of your submission, OR, IF you -do NOT own the work, then you MUST have permission from the original -owner(s) to its use. If you submit ANY content that is owned by others, you -MUST detail that ownership, i.e., who owns what, and document the permission -you obtained from them in your remarks.md file. +You, the author(s), MUST own the contents of your submission, +OR, IF you do NOT own the work, then you MUST have +permission from the original owner(s) to its use. If you submit +ANY content that is owned by others, you MUST detail that +ownership, i.e., who owns what, and document the permission you +obtained from them in your remarks.md file.

You are permitted to use tools to write your code.

See Rule 16 - Anonymous Judging, and -Guidelines for Rule 7 - Original Work.

+Guidelines for Rule 7 - Original +Work.

Rule 8 - Submitting requirements

The submit server will accept submissions ONLY from those who have -registered and ONLY while the contest is open.

-

The submit server places a total size limit of 3999971 bytes PER -submission.

-

-Each account has ten (10.000) submission slots (0..9). Each submission -slot should be annotated by the server as to whether its was received, -processed, malformed, etc. Please take note of any errors, rectify, -and resubmit. In order to avoid potential packaging errors, it is highly -recommended to use mkiocccentry(1), AND to check from time to time the -status on the submit server, to see if any tests run by the server failed to -validate your submission. +registered and ONLY while the contest is open and ONLY after +you have changed your initial password.

+

The submit server places a total size limit of 3999971 bytes +PER submission.

+

+Each account has ten (10.000) submission slots (0..9). +

+

+Each submission slot should be annotated by the server as to whether it +was received, processed, malformed, etc. Please take note of any +errors, rectify, and resubmit. +

+

+In order to avoid potential packaging errors, it is highly +recommended to use mkiocccentry(1), AND to check from time to +time the status on the submit server, to see if any tests run by the +server failed to validate your submission.

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

-

See Guidelines for Rule 8 - Submitting requirements.

+

See Guidelines for Rule 8 - Submitting +requirements.

Rule 9 - No interactive compiling allowed

Entries requiring human interaction to be initially compiled are NOT -permitted. However, see the guidelines. Each entry MUST automate the -build process using bash, gmake, gcc and/or clang and other commonly -available tools under an SUS +permitted. However, see the guidelines on rule +9 as you +may suggest alternative compilation steps to do something fun or +cute.

+

Each entry MUST automate the build process using bash, gmake, +gcc and/or clang and other commonly available tools under an SUS environment.

-

NOTE: The references to gmake(1) can be any GNU Make compatible tool.

-

NOTE: it is better to use the ${MAKE} variable as then one may override -the make command.

-

NOTE: it is better and more portable to NOT modify the ${CC} variable -in the Makefile.

+

NOTE: any reference to gmake(1) can be any GNU Make compatible +tool.

+

NOTE: it is better to use the ${MAKE} variable as then one may +override the make command.

+

NOTE: it is better to NOT modify ${CC} in your Makefile as +this makes your program more portable.

See Rule 15 - GNU Makefile.

-

See Guidelines for Rule 9 - No interactive compiling allowed.

+

See Guidelines for Rule 9 - No interactive compiling +allowed.

Rule 10 - Program file permissions

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

+super-user, special owner, special group, etc.) are HIGHLY +DISCOURAGED. We do NOT guarantee these functions will behave as +you expect on our test platforms.

+

If your program needs special permissions you MUST document this +fact and explain why it is needed in your submission’s remarks.md +file, preferably close to the top, because mkiocccentry(1) will +NOT set those modes.

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

+have these permissions, you will also have to explain this as well, +because these bits are NOT allowed in submissions and those bits +will NOT be copied by mkiocccentry(1) either.

See Rule 4 - Required files, and Rule 5 - Do NOT modify files.

@@ -753,95 +790,111 @@

Rule 10 - Program file permissionsRule 11 - Legal rule 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.

+

Legal abuse of the rules is somewhat encouraged, but comes with +risks. A submission that, in the opinion of the Judges, violates +the rules WILL BE DISQUALIFIED. Submissions that plan to abuse the +rules MUST justify why their rule abuse is legal (or interesting) +in the remarks.md file.

Submission packaging abuse will NOT be tolerated and for this reason, -amongst many others, it is recommended that you use mkiocccentry(1). During -development you can check your prog.c size limits using iocccsize(1), e.g., -iocccsize -v1 prog.c. Overriding problems detected by any of the IOCCC tools -risks that the submission will be rejected.

+amongst many other reasons, it is recommended that you use +mkiocccentry(1). See also Rule 17 - use +mkiocccentry.

+

During development you can check your prog.c size limits using +iocccsize(1), e.g., iocccsize -v1 prog.c. Overriding problems +detected by any of the IOCCC tools risks that the submission will be +rejected.

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

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

-

See Guidelines for Rule 11 - Legal rule abuse.

+version, PLEASE indicate that in your remarks.md file of your +non-rule abusing version so that the Judges don’t think you uploaded a +duplicate into a wrong slot by mistake.

+

See Guidelines for Rule 11 - Legal rule +abuse.

Rule 12 - UTF-8

-

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

+

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

See Guidelines for Rule 12 - UTF-8.

Rule 13 - No carriage returns in prog.c

-

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

+

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 Net Size -limits, to NOT end source with a newline. If you -need to do this, please document that in your remarks.md file and if -your compiler complains about this, document this too and update your -Makefile to account for this.

-

See Guidelines for Rule 13 - No carriage returns in prog.c.

+Rule 2a Gross Size and/or 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.

+

See Guidelines for Rule 13 - No carriage returns in +prog.c.

Rule 14 - Resubmitting lost submissions

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.

+entries are discouraged. See the +FAQ on “What types of entries have been frequently submitted to the +IOCCC?.

+

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 - GNU Makefile

-The Makefile MUST adhere to GNU Makefile syntax. It’s highly recommended -that you copy the Makefile.example as a template, renaming -it to Makefile. The primary target of the Makefile MUST be prog and -the source file is prog.c. The C compiler and preprocessor MUST be -invoked using ${CC} and ${CPP} macros respectively. +The Makefile MUST adhere to GNU Makefile syntax. It’s highly +recommended that you copy the Makefile.example as a +template, renaming it to Makefile. The primary target of the +Makefile MUST be prog and the source file is prog.c. The C +compiler and preprocessor MUST be invoked using ${CC} and +${CPP} macros respectively.

-

The clobber target MUST clean and restore the submission directory tree to -its original state, such as removing temporary files or any modified data files. -Don’t assume that git tool chain is installed, i.e. do NOT expect git clean -f to work. To be clear: do NOT use git to clean out files as this -can cause problems in the winner repo!

+

The clobber target MUST clean and restore the submission +directory tree to its original state, such as removing temporary files +or any modified data files. Don’t assume that git tool chain is +installed, i.e. do NOT expect git clean -f to work. To be clear: +do NOT use git to clean out files as this WILL cause problems +in the winner repo!

-The Makefile MUST use a syntax that is compatible with -bash(1) and GNU make(1). You are encouraged to use SHELL= bash in your Makefile; please add a space between the = and -the value such as: +The Makefile MUST use a syntax that is compatible with bash(1) +and GNU make(1). You are encouraged to use SHELL= bash in your +Makefile; please add a space between the = and the value such as:

    SHELL= bash

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

+

+Avoid command options that aren’t part of SUS, such as GNU long name options (such as --example) or extensions like grep -P.

-

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

+

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

See Rule 4 - Required files.

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

-

See Guidelines for Rule 15 - GNU Makefile.

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

+

See Guidelines for Rule 15 - GNU +Makefile.

Rule 16 - Anonymous judging

@@ -850,79 +903,88 @@

Rule 16 - Anonymous judging

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 -programs to the IOCCC until final selection is made, and only submissions -that won.

+Judges do NOT know who is +submitting programs to the IOCCC until final selection is made, and +only submissions that won.

Even if you are a past winner, you MUST NOT reveal your identity -deliberately or by accident anywhere in your submission. Failure to comply -may result in the submission being disqualified.

+deliberately or by accident anywhere in your submission. Failure to +comply may result in the submission being disqualified.

Rule 17 - Use mkiocccentry

TL;DR: use mkiocccentry(1) to package your submission.

-

The files, directories, and paths MUST conform to the limits imposed by -mkiocccentry(1), including but NOT limited, to their names, count, path -length, directory tree depth, and permissions.

+

The 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. +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 (i.e., tarball compressed by xz(1)) -as constructed by mkiocccentry(1), which MUST be within [1..3999971] bytes in size.

-

The tarball MUST be a v7 format tarball, and any supplementary tarballs -you provide MUST also be v7 format.

-

The sum of all file lengths, after unpacking from the tarball, MUST be -less than 27651*1024 (28314624) bytes.

+

The submission MUST be a .txz compressed tarball (i.e., tarball +compressed by xz(1)) as constructed by mkiocccentry(1), which +MUST be within [1..3999971] bytes in size.

+

The tarball MUST be a v7 format tarball, and any supplementary +tarballs you provide MUST also be v7 format.

+

The sum of all file lengths, after unpacking from the tarball, MUST +be less than 27651*1024 (28314624) bytes.

-The submission MUST pass all txzchk(1) checks, and the tarball filename -MUST pass all fnamchk(1) checks as well. +The submission MUST pass all txzchk(1) checks, and the tarball +filename MUST pass all fnamchk(1) checks as well.

-You may NOT submit a tarball created by the -d, -e OR by the -s seed options of mkiocccentry(1). +You may NOT submit a tarball created by the -d, -e OR by +the -s seed options of mkiocccentry(1).

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

Submissions may NOT use a mkiocccentry -toolkit command line options that -are labelled as “for TESTING purposes”, OR labelled as “for the use by -the IOCCC judges only”, in their respective man pages. +toolkit command line +options that are labelled as “for TESTING purposes”, OR +labelled as “for the use by the IOCCC judges only”, in their +respective man pages.

Submissions may ONLY use mkiocccentry -toolkit command lines that confirm -to the command’s -hprint help message”, again notwithstanding the options -for testing and the IOCCC judges. +toolkit command lines that +confirm to the command’s -hprint help message”, again +notwithstanding the options for testing and the IOCCC judges.

-The prog.c file should pass the Rule 2 - Size restrictions -checks performed by iocccsize(1). +The prog.c file should pass the Rule 2 - Size +restrictions checks performed by +iocccsize(1).

-The .auth.json and .info.json files MUST be compatible with what -mkiocccentry(1) generates. +The .auth.json and .info.json files MUST be exactly +what the minimum required mkiocccentry(1) version generates.

-Any submission that fails to pass the checks performed by the minimum required -version of the mkiocccentry toolkit -WILL be rejected! +Any submission that fails to pass the checks performed by the minimum +required version of the mkiocccentry +toolkit WILL be +rejected!

See Rule 4 - Required files.

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

-

See the Guidelines for Rule 17 - Use mkiocccentry.

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

+

See the Guidelines for Rule 17 - Use +mkiocccentry.

Rule 18 - Submission license

-

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

-

CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0 International

+

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.

@@ -931,19 +993,22 @@

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. +Additional rules, both humorous and otherwise, may be added below this +rule in future contests.

See Rule 6 - Free Rule.

Further Reading

-

Please read the Guidelines next for further commentary on these rules.

+

Please read the Guidelines next for further +commentary on these rules.

Read the -Entering the IOCCC: the bare minimum you need to know +FAQ on “Entering the IOCCC: the bare minimum you need to +know” for an overview of how to enter the contest.

-

See also the FAQ.

+

See also the FAQ in general.

And now for something completely different.

-

Consider joining the IOCCC Discord Server -for discussions about The Rules, questions for the Judges, and C in general.

+

Consider joining the IOCCC 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 1d036387b0..980f1f515d 100644 --- a/next/rules.md +++ b/next/rules.md @@ -3,26 +3,27 @@ # The IOCCC is closed The IOCCC is **NOT** accepting new submissions at this time. See the -[IOCCC winning entries page](../years.html) for the entries that have won the -IOCCC in the past. +[IOCCC winning entries page](../years.html) for the entries that have +won the IOCCC in the past. -These rules are a **TENTATIVE proposal** for the next IOCCC -and are **likely be to be updated** before the next IOCCC. +These rules are a **TENTATIVE proposal** for the next IOCCC and are +**likely be to be updated** before the next IOCCC. See our FAQ on "[rules, guidelines, tools feedback](../faq.html#feedback)" as well as our FAQ on "[about asking questions](../faq.html#question)" -about these rules. You might also find the FAQ in general useful, especially the +about these rules. You might also find the FAQ in general useful, +especially the FAQ on "[how to enter the IOCCC](../quick-start.html#enter)". -Watch both [the IOCCC status page](../status.html) and the -[@IOCCC mastodon feed](https://fosstodon.org/@ioccc) for information about +Watch both [the IOCCC status page](../status.html) and the [@IOCCC +mastodon feed](https://fosstodon.org/@ioccc) for information about future IOCCC openings. **HINT to mastodon users**: You may wish to refresh the [@IOCCC -mastodon feed](https://fosstodon.org/@ioccc) page and/or mastodon -app from time to time to view IOCCC mastodon updates. +mastodon feed](https://fosstodon.org/@ioccc) page and/or mastodon app +from time to time to view IOCCC mastodon updates. @@ -39,14 +40,16 @@ writing by [contacting the judges](../contact.html). ## Rules Version -These IOCCC Rules are version **29.13 2025-12-01**. +These IOCCC Rules are version **29.14 2025-12-02**.

-The | symbol indicates an **change** from the previous IOCCC. +The | symbol +indicates a **change** from the previous IOCCC.

-Because the **IOCCC29** rules was a substantial rewrite, only **important changes** from **IOCCC28** have been marked. +Because the **IOCCC29** rules was a substantial rewrite, only +**important changes** from **IOCCC28** have been marked.

Reminder: be SURE to read the [IOCCC guidelines](guidelines.html). @@ -57,34 +60,41 @@ Reminder: be SURE to read the [IOCCC guidelines](guidelines.html).

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

-This contest will enter the [pending state](../faq.html#pending) on `2025-12-03 20:25:12.045045 UTC`, -allowing people to [register for the IOCCC](register.html). +This contest will enter the [pending state](../faq.html#pending) on +`2025-12-03 20:25:12.045045 UTC`, allowing people to [register for the +IOCCC](register.html).

-This contest will enter the [open state](../faq.html#open) on `2025-12-15 18:21:24.273033 UTC`, -allowing people to [upload submissions](submit.html). +This contest will enter the [open state](../faq.html#open) on +`2025-12-15 18:21:24.273033 UTC`, allowing people to [upload +submissions](submit.html).

-This contest will enter the [judging state](../faq.html#judging) on `2026-03-13 17:19:23.293137 UTC`, -when people will no longer be allowed to upload submissions. +This contest will enter the [judging state](../faq.html#judging) on +`2026-03-13 17:19:23.293137 UTC`, when people will no longer be allowed +to upload submissions.

-The above **dates and times may change _AT ANY TIME_** until the [contest status](../status.html) is **open**. +The above **dates and times may change _AT ANY TIME_** until the +[contest status](../status.html) is **open**.

The above timestamps are in "_YYYY-MM-DD HH:MM:SS.micros UTC_" format.

-See [Entering the IOCCC: the bare minimum you need to know](../quick-start.html#enter). +See [Entering the IOCCC: the bare minimum you need to +know](../quick-start.html#enter). See -FAQ on "[How can I comment or make a suggestion on IOCCC rules, guidelines and tools?](../faq.html#feedback)". +FAQ on "[How can I comment or make a suggestion on IOCCC rules, +guidelines and tools?](../faq.html#feedback)".
@@ -97,7 +107,8 @@ FAQ on "[How can I comment or make a suggestion on IOCCC rules, guidelines and t Your submission **MUST** be a C program.

-See the [Guidelines for Rule 1 - C program](guidelines.html#guideline1-c). +See the [Guidelines for Rule 1 - C +program](guidelines.html#guideline1-c).
@@ -108,17 +119,18 @@ See the [Guidelines for Rule 1 - C program](guidelines.html#guideline1-c).
-`Rule 2` requires that your submission satisfy **BOTH** -[Rule 2a (Gross Size)](rules.html#rule2a) -and -[Rule 2b (Net Size)](rules.html#rule2b). +`Rule 2` requires that your submission satisfy **BOTH** [Rule 2a +(Gross Size)](rules.html#rule2a) and [Rule 2b (Net +Size)](rules.html#rule2b). + During development this can be checked using `iocccsize(1)`: ``` iocccsize prog.c ``` -See the [Guidelines for Rule 2 - Size restrictions](guidelines.html#guideline2-size). +See the [Guidelines for Rule 2 - Size +restrictions](guidelines.html#guideline2-size).
@@ -130,7 +142,8 @@ See the [Guidelines for Rule 2 - Size restrictions](guidelines.html#guideline2-s The overall maximum size of your `prog.c` program source **MUST NOT** exceed **4993** bytes. -See [Entering the IOCCC: the bare minimum you need to know](../quick-start.html#enter). +See [Entering the IOCCC: the bare minimum you need to +know](../quick-start.html#enter).
@@ -139,12 +152,8 @@ See [Entering the IOCCC: the bare minimum you need to know](../quick-start.html#
-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**. - -**NOTE**: `iocccsize` does **NOT** calculate the filename length. +Check your source code using the latest official IOCCC size tool, +`iocccsize(1)`. The value printed **MUST NOT** exceed **2503**. See [Rule 17 - Use mkiocccentry](#rule17-mkiocccentry). @@ -156,16 +165,19 @@ See [Rule 17 - Use mkiocccentry](#rule17-mkiocccentry).
You **MUST** register, using a valid email address, in order to submit -to the IOCCC. You may register while the contest is **pending** or **open**. +to the IOCCC. You may register while the contest is **pending** or +**open**. A few days after registering, you'll receive your UUID username and temporary password, which you **MUST** change within 14 days. See [How to register for the IOCCC](register.html). -See [Entering the IOCCC: the bare minimum you need to know](../quick-start.html#enter). +See [Entering the IOCCC: the bare minimum you need to +know](../quick-start.html#enter). -See [Guidelines for Rule 3 - Register for the IOCCC](guidelines.html#guideline3-register). +See [Guidelines for Rule 3 - Register for the +IOCCC](guidelines.html#guideline3-register).
@@ -175,47 +187,50 @@ See [Guidelines for Rule 3 - Register for the IOCCC](guidelines.html#guideline3-

-Your submission **MUST** include at least these files: `Makefile`, `prog.c`, -`remarks.md`,`.info.json`, and `.auth.json`, the latter two of which are -generated by `mkiocccentry(1)`. See [Rule 17 - -Use mkiocccentry](#rule17-mkiocccentry). +Your submission **MUST** include at least these files: `Makefile`, +`prog.c`, `remarks.md`,`.info.json`, and `.auth.json`, the latter two +of which are generated by `mkiocccentry(1)`. See [Rule 17 - Use +mkiocccentry](#rule17-mkiocccentry).

-At a **minimum** the following requirements apply. Additional requirements -may be imposed by `mkiocccentry(1)` updates that have yet to be listed -below: +At a **minimum** the following requirements apply. Additional +requirements may be imposed by `mkiocccentry(1)` updates that have yet +to be listed below:

|   -* `.info.json` and `.auth.json` **MUST** be generated by `mkiocccenty(1)` -when packing a submission. When `chksubmit(1)` is run on the submission -directory **ALL** tests must pass and if there is **ANY** problem with these -JSON files or if either is missing it will fail. See [Rule 17 - use -mkiocccentry](#rule17-mkiocccentry). +* `.info.json` and `.auth.json` **MUST** be generated by +`mkiocccenty(1)` when packing a submission. When `chksubmit(1)` is run +on the submission directory **ALL** tests must pass and if there is +**ANY** problem with these JSON files or if either is missing it will +fail. See [Rule 17 - use mkiocccentry](#rule17-mkiocccentry). |   * The `Makefile`, `remarks.md`,`.info.json`, and `.auth.json` **MUST** -have a file size **greater than 0** and **MUST** have content. Note that -`mkiocccentry(1)` will check for file **size** but will **NOT** check for -content. +have a file size **greater than 0** and **MUST** have content. Note +that `mkiocccentry(1)` will check for file **size** but will **NOT** +check for content. |   -* Your submitted source code **MUST** be called `prog.c`. When the `Makefile` -compiles your code, the executable (if applicable) **MUST** be called `prog`. -The `Makefile` may compile your source code into other filenames as well, if you want. +* Your submitted source code **MUST** be called `prog.c`. When the +`Makefile` compiles your code, the executable (if applicable) **MUST** +be called `prog`. The `Makefile` may compile your source code into +other filenames as well, if you want. |   * As `prog`, `prog.alt`, `prog.alt.o`, `prog.o` may be created by your -`Makefile`, your submission **MUST NOT** include those files in your **top** directory. +`Makefile`, your submission **MUST NOT** include those files in your +**top** directory. |   * Your submission may **NOT** have any file that starts with `COPYING`, `COPYRIGHT`, or `LICENSE` as those files are reserved by IOCCC. |   -* Your submission may **NOT** have in the **top** directory: `prog.orig.c`, -`README.md` or `index.html` as those files are reserved by the IOCCC. +* Your submission may **NOT** have in the **top** directory: +`prog.orig.c`, `README.md` or `index.html` as those files are reserved +by the IOCCC. |   * Your submission may **NOT** have in the **top** directory any file @@ -223,73 +238,80 @@ that matches a file glob pattern form `[0-9][0-9][0-9][0-9]_*.tar.bz2` as those files are reserved by IOCCC. |   -* Your submission may **ONLY** contain files and directories. Other file -types such as symlinks, sockets etc. are **NOT** allowed. +* Your submission may **ONLY** contain files and directories. Other +file types such as symlinks, sockets etc. are **NOT** allowed. |   -* **All** directories **MUST** have permission mode of **0755**. All files -**MUST** have the file mode of **0444**, EXCEPT for files that +* **All** directories **MUST** have permission mode of **0755**. All +files **MUST** have the file mode of **0444**, EXCEPT for files that end in `.sh` which must have a mode of **0555**. |   * All files that end in `.md` **MUST** be in markdown format. |   -* All filenames are treated as case insensitive. For example, `REMARKS.MD`, -and `Remarks.md`, and `remarks.md` are considered by `mkiocccenty(1)` -to be the **SAME** file. When preparing a submission on a case -sensitive filesystem, ensure that the submission will work on +* All filenames are treated as case insensitive. For example, +`REMARKS.MD`, and `Remarks.md`, and `remarks.md` are considered by +`mkiocccenty(1)` to be the **SAME** file. When preparing a submission +on a case sensitive filesystem, ensure that the submission will work on a case insensitive filesystem.

-**NOTE**: by 'top directory' we mean the directory with `prog.c`, `Makefile`, -`remarks.md` and the `mkiocccentry(1)` generated files `.auth.json` and -`.info.json` and **NOT** the `topdir` arg to `mkiocccentry(1)`. +**NOTE**: by 'top directory' we mean the directory with `prog.c`, +`Makefile`, `remarks.md` and the `mkiocccentry(1)` generated files +`.auth.json` and `.info.json` and **NOT** the `topdir` arg to +`mkiocccentry(1)`.

-**NOTE**: `mkiocccentry(1)` will reject any directory which has prohibited files. +**NOTE**: `mkiocccentry(1)` will reject any directory which has +prohibited files.

-The `remarks.md` and `Makefile` are explained in more detail in the Guidelines. +The `remarks.md` and `Makefile` are explained in more detail in the +[Guidelines](guidelines.html). See [IOCCC markdown guidelines](../markdown.html). See [Rule 17 - Use mkiocccentry](rules.html#rule17-mkiocccentry). See the -FAQ on "[What permissions may my files be and what if I need different permissions?](../faq.html#file_perms)". +FAQ on "[What permissions may my files be and what if I need different +permissions?](../faq.html#file_perms)". See the -FAQ on "[What are the detailed recommendations for a submission Makefile?](../faq.html#makefile_details)". +FAQ on "[What are the detailed recommendations for a submission +Makefile?](../faq.html#makefile_details)". -See the [Guidelines on the mkiocccentry toolkit](guidelines.html#mkiocccentry_toolkit). +See the [Guidelines on the mkiocccentry +toolkit](guidelines.html#mkiocccentry_toolkit).
-## Rule 5 - Do NOT modify submitted files or filenames or parent directories +## Rule 5 - Do NOT modify submitted files, filenames or parent directories
-Your submission **MUST NOT** modify the filenames or content of any of your -original submission, such as `prog.c`, `Makefile`, or **ANY** other supplied -files. To modify files, your program can make a copy or you can use the -`Makefile` to setup working copies. Any working copies **MUST** be cleaned up -by the `Makefile` `clobber` target, so as to restore the directory to its -original state. +Your submission **MUST NOT** modify the filenames or content of any of +your original submission, such as `prog.c`, `Makefile`, or **ANY** +other supplied files. To modify files, your program can make a copy or +you can use the `Makefile` to setup working copies. Any working copies +**MUST** be cleaned up by the `Makefile` `clobber` target, so as to +restore the directory to its original state. -Your submission **MUST NOT** create or modify directories and files -ABOVE the current directory (with the exception of the `/tmp` and the `/var/tmp` -directories and as long as the directory name or filename does **NOT** start -with a `.` (dot)). +With the exception of the `/tmp` and the `/var/tmp` directories, +assuming the directory name or filename does **NOT** start with a `.` +(dot), your submission **MUST NOT** create or modify directories and +files ABOVE the current directory. The `Makefile` `clobber` target **MUST** restore your submission to its -original form, including the removal of any created files and directories. +original form, including the removal of any created files and +directories.

-Your code should be able to run under a -[SUS environment](https://pubs.opengroup.org/onlinepubs/9799919799/). +Your code should be able to run under a [SUS +environment](https://pubs.opengroup.org/onlinepubs/9799919799/).

@@ -316,11 +338,12 @@ See [Rule 19 - Prime](rules.html#rule19-prime).

-You, the author(s), **MUST** own the contents of your submission, **OR**, IF you -do **NOT** own the work, then you **MUST** have permission from the original -owner(s) to its use. If you submit **ANY** content that is owned by others, you -**MUST** detail that ownership, i.e., who owns what, and document the permission -you obtained from them in your `remarks.md` file. +You, the author(s), **MUST** own the contents of your submission, +**OR**, IF you do **NOT** own the work, then you **MUST** have +permission from the original owner(s) to its use. If you submit +**ANY** content that is owned by others, you **MUST** detail that +ownership, i.e., who owns what, and document the permission you +obtained from them in your `remarks.md` file.

@@ -329,7 +352,8 @@ You are permitted to use tools to write your code. See [Rule 16 - Anonymous Judging](rules.html#rule16-anonymous-judging), and -[Guidelines for Rule 7 - Original Work](guidelines.html#guideline7-original). +[Guidelines for Rule 7 - Original +Work](guidelines.html#guideline7-original).

@@ -339,19 +363,27 @@ and
The submit server will accept submissions **ONLY** from those who have -registered and **ONLY** while the contest is open. +registered and **ONLY** while the contest is open and **ONLY** after +you have changed your initial password. + +The submit server places a total size limit of **3999971** bytes +**PER** submission. + +

+Each account has ten (**10.000**) submission slots (**0..9)**. +

-The submit server places a total size limit of **3999971** bytes **PER** -submission. +

+Each submission slot should be annotated by the server as to whether it +was received, processed, malformed, etc. Please take note of any +errors, rectify, and resubmit. +

-Each account has ten (**10.000**) submission slots (**0..9)**. Each submission -slot should be annotated by the server as to whether its was received, -processed, malformed, etc. Please take note of any errors, rectify, -and resubmit. In order to avoid potential packaging errors, it is **highly -recommended** to use `mkiocccentry(1)`, **AND** to check from time to time the -status on the submit server, to see if any tests run by the server failed to -validate your submission. +In order to avoid potential packaging errors, it is **highly +recommended** to use `mkiocccentry(1)`, **AND** to check from time to +time the status on the submit server, to see if any tests run by the +server failed to validate your submission.

See @@ -360,7 +392,8 @@ See and [Rule 17 - Use mkiocccentry](rules.html#rule17-mkiocccentry). -See [Guidelines for Rule 8 - Submitting requirements](guidelines.html#guideline8-submitting). +See [Guidelines for Rule 8 - Submitting +requirements](guidelines.html#guideline8-submitting).
@@ -370,22 +403,28 @@ See [Guidelines for Rule 8 - Submitting requirements](guidelines.html#guideline8
Entries requiring human interaction to be initially compiled are **NOT** -permitted. However, see the guidelines. Each entry **MUST** automate the -build process using `bash`, `gmake`, `gcc` and/or `clang` and other commonly -available tools under an [SUS +permitted. However, see the [guidelines on rule +9](guidelines.html#guideline9-no-interactive) as you +**may** suggest alternative compilation steps to do something fun or +cute. + +Each entry **MUST** automate the build process using `bash`, `gmake`, +`gcc` and/or `clang` and other commonly available tools under an [SUS environment](https://pubs.opengroup.org/onlinepubs/9799919799/). -**NOTE**: The references to `gmake(1)` can be any GNU Make compatible tool. +**NOTE**: any reference to `gmake(1)` can be any GNU Make compatible +tool. -**NOTE**: it is better to use the `${MAKE}` variable as then one may override -the make command. +**NOTE**: it is better to use the `${MAKE}` variable as then one may +override the `make` command. -**NOTE**: it is better and more portable to **NOT** modify the `${CC}` variable -in the Makefile. +**NOTE**: it is better to **NOT** modify `${CC}` in your Makefile as +this makes your program more portable. See [Rule 15 - GNU Makefile](rules.html#rule15-gnu-makefile). -See [Guidelines for Rule 9 - No interactive compiling allowed](guidelines.html#guideline9-no-interactive). +See [Guidelines for Rule 9 - No interactive compiling +allowed](guidelines.html#guideline9-no-interactive).
@@ -393,16 +432,19 @@ See [Guidelines for Rule 9 - No interactive compiling allowed](guidelines.html#g
Programs that require special privileges (`setuid(2)`, `setgid(2)`, -super-user, special owner, special group, etc.) are **HIGHLY DISCOURAGED**. -We do **NOT** guarantee these functions will behave as you expect on our -test platforms. If your program needs special permissions you **MUST** -document this fact and explain why it is needed in your submission’s -`remarks.md` file, preferably close to the top. +super-user, special owner, special group, etc.) are **HIGHLY +DISCOURAGED**. We do **NOT** guarantee these functions will behave as +you expect on our test platforms. + +If your program needs special permissions you **MUST** document this +fact and explain why it is needed in your submission’s `remarks.md` +file, preferably close to the top, because `mkiocccentry(1)` will +**NOT** set those modes. Furthermore, if you need a supplementary program that you include to -have these permissions, you will also have to explain this as well, because these -bits are **NOT** allowed in submissions and those bits will **NOT** be copied by -`mkiocccentry(1)`. +have these permissions, you will also have to explain this as well, +because these bits are **NOT** allowed in submissions and those bits +will **NOT** be copied by `mkiocccentry(1)` either. See [Rule 4 - Required files](rules.html#rule4-required-files), and @@ -415,16 +457,21 @@ and -Legal abuse of the rules is **somewhat** encouraged, but comes with risks. -A submission that, in the opinion of the Judges, **violates** the rules **WILL -BE DISQUALIFIED**. Submissions that plan to abuse the rules **MUST** justify -why their rule abuse is legal (or interesting) in the `remarks.md` file. +Legal abuse of the rules is **somewhat** encouraged, but comes with +risks. A submission that, in the opinion of the Judges, **violates** +the rules **WILL BE DISQUALIFIED**. Submissions that plan to abuse the +rules **MUST** justify why their rule abuse is legal (or interesting) +in the `remarks.md` file. Submission packaging abuse will **NOT** be tolerated and for this reason, -amongst many others, it is recommended that you use `mkiocccentry(1)`. During -development you can check your `prog.c` size limits using `iocccsize(1)`, e.g., -`iocccsize -v1 prog.c`. Overriding problems detected by any of the IOCCC tools -risks that the submission will be rejected. +amongst many other reasons, it is recommended that you use +`mkiocccentry(1)`. See also [Rule 17 - use +mkiocccentry](#rule17-mkiocccentry). + +During development you can check your `prog.c` size limits using +`iocccsize(1)`, e.g., `iocccsize -v1 prog.c`. Overriding problems +detected by any of the IOCCC tools risks that the submission will be +rejected. If you do submit a rule abusing or violating submission, then consider also submitting an alternate version in a different submission server @@ -432,11 +479,12 @@ slot that does **NOT** violate the rules in case your rule abuse excuse is rejected. **IMPORTANT**: If you do submit such an alternate non-rule abusing -version, **PLEASE** indicate that in your `remarks.md` file of your non-rule -abusing version so that the Judges don't think you uploaded a duplicate into a -wrong slot by mistake. +version, **PLEASE** indicate that in your `remarks.md` file of your +non-rule abusing version so that the Judges don't think you uploaded a +duplicate into a wrong slot by mistake. -See [Guidelines for Rule 11 - Legal rule abuse](guidelines.html#guideline11-abuse). +See [Guidelines for Rule 11 - Legal rule +abuse](guidelines.html#guideline11-abuse).
@@ -445,8 +493,8 @@ See [Guidelines for Rule 11 - Legal rule abuse](guidelines.html#guideline11-abus
-Use of UTF-8 is supported by `C89` standard and its updates and so too by the -IOCCC. +Use of UTF-8 is supported by `C89` standard and its updates and so too +by the IOCCC. See [Guidelines for Rule 12 - UTF-8](guidelines.html#guideline12-utf8). @@ -457,21 +505,21 @@ See [Guidelines for Rule 12 - UTF-8](guidelines.html#guideline12-utf8). -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`). +Any C source that fails to compile because lines contain +carriage-returns (CTRL+M, `\r`) in particular as part of DOS/Windows +style newlines might be rejected. Please do **NOT** put trailing +CTRL+M in `prog.c`, `Makefile`, or `remarks.md` files, but instead end +lines with Unix newline (line-feed, CTRL+J, `\n`). You are permitted, in order to try and squeeze your `prog.c` under a -[Rule 2a Gross Size](rules.html#rule2a-gross-size) and/or -[Rule 2b Net Size](rules.html#rule2b-net-size) -limits, to **NOT** end source with a newline. If you -need to do this, please document that in your `remarks.md` file and if -your compiler complains about this, document this too and update your -`Makefile` to account for this. +[Rule 2a Gross Size](rules.html#rule2a-gross-size) and/or [Rule 2b Net +Size](rules.html#rule2b-net-size) limits, to **NOT** end source with a +newline. If you need to do this, please document that in your +`remarks.md` file and if your compiler complains about this, document +this too and update your `Makefile` to account for this. -See [Guidelines for Rule 13 - No carriage returns in prog.c](guidelines.html#guideline13-nocr). +See [Guidelines for Rule 13 - No carriage returns in +prog.c](guidelines.html#guideline13-nocr).
@@ -479,14 +527,15 @@ See [Guidelines for Rule 13 - No carriage returns in prog.c](guidelines.html#gui
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. +entries are discouraged. See the +FAQ on "[What types of entries have been frequently submitted to the +IOCCC?](../faq.html#frequent-themes). +You are allowed to resubmit to a later contest, a submission that +didn't win the IOCCC. If you do so, then you would be **WELL ADVISED** +to try and enhance and improve your submission. If you do resubmit +something that didn't previously win, then you are encouraged to +mention this in your `remarks.md` file as this **sometimes** helps.
@@ -495,24 +544,25 @@ win, then you are encouraged to mention this in your `remarks.md` file as this

-The `Makefile` **MUST** adhere to GNU Makefile syntax. It's highly recommended -that you copy the [Makefile.example](Makefile.example) as a template, renaming -it to `Makefile`. The primary target of the `Makefile` **MUST** be `prog` and -the source file is `prog.c`. The C compiler and preprocessor **MUST** be -invoked using `${CC}` and `${CPP}` macros respectively. +The `Makefile` **MUST** adhere to GNU Makefile syntax. It's highly +recommended that you copy the [Makefile.example](Makefile.example) as a +template, renaming it to `Makefile`. The primary target of the +`Makefile` **MUST** be `prog` and the source file is `prog.c`. The C +compiler and preprocessor **MUST** be invoked using `${CC}` and +`${CPP}` macros respectively.

-The `clobber` target **MUST** clean and restore the submission directory tree to -its original state, such as removing temporary files or any modified data files. -Don't assume that `git` tool chain is installed, i.e. do **NOT** expect `git -clean -f` to work. To be clear: do **NOT** use `git` to clean out files as this -can cause problems in the winner repo! +The `clobber` target **MUST** clean and restore the submission +directory tree to its original state, such as removing temporary files +or any modified data files. Don't assume that `git` tool chain is +installed, i.e. do **NOT** expect `git clean -f` to work. To be clear: +do **NOT** use `git` to clean out files as this **WILL** cause problems +in the winner repo!

-The `Makefile` **MUST** use a syntax that is compatible with -`bash(1)` and GNU `make(1)`. You are encouraged to use `SHELL= -bash` in your `Makefile`; please add a space between the `=` and -the value such as: +The `Makefile` **MUST** use a syntax that is compatible with `bash(1)` +and GNU `make(1)`. You are encouraged to use `SHELL= bash` in your +`Makefile`; please add a space between the `=` and the value such as:

``` @@ -523,19 +573,27 @@ the value such as: Assume that commands commonly found in [Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) environments and systems are available in the search -`$PATH`. Avoid command options that aren't part of +`$PATH`. +

+ +

+Avoid command options that aren't part of [SUS](https://en.wikipedia.org/wiki/Single_UNIX_Specification), such as -GNU long name options (such as `--example`) or extensions like `grep -P`. +GNU long name options (such as `--example`) or extensions like `grep +-P`.

-Do **NOT** assume that `.` (current directory) is in the `$PATH` environment variable. +Do **NOT** assume that `.` (current directory) is in the `$PATH` +environment variable. See [Rule 4 - Required files](rules.html#rule4-required-files). See -FAQ on "[What are the detailed recommendations for a submission Makefile?](../faq.html#makefile_details)". +FAQ on "[What are the detailed recommendations for a submission +Makefile?](../faq.html#makefile_details)". -See [Guidelines for Rule 15 - GNU Makefile](guidelines.html#guideline15-gnu-makefile). +See [Guidelines for Rule 15 - GNU +Makefile](guidelines.html#guideline15-gnu-makefile).
@@ -547,13 +605,13 @@ See [Guidelines for Rule 15 - GNU Makefile](guidelines.html#guideline15-gnu-make Your source code, data files, remarks, and program output **MUST NOT** identify the author(s) of your code (unless you are **Peter Honeyman** or pretending to be **Peter Honeyman**). In order to be impartial the -[Judges](https://www.ioccc.org/judges.html) do **NOT** know who is submitting -programs to the IOCCC until final selection is made, and **only** submissions -that won. +[Judges](https://www.ioccc.org/judges.html) do **NOT** know who is +submitting programs to the IOCCC until final selection is made, and +**only** submissions that won. Even if you are a past winner, you **MUST NOT** reveal your identity -deliberately or by accident anywhere in your submission. **_Failure to comply -may result in the submission being disqualified_**. +deliberately or by accident anywhere in your submission. **_Failure to +comply may result in the submission being disqualified_**.
@@ -564,87 +622,95 @@ may result in the submission being disqualified_**. TL;DR: use `mkiocccentry(1)` to package your submission. -The files, directories, and paths **MUST** conform to the limits imposed by -`mkiocccentry(1)`, including but **NOT** limited, to their names, count, path -length, directory tree depth, and permissions. +The 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**. +`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 (i.e., tarball compressed by `xz(1)`) -as constructed by `mkiocccentry(1)`, which **MUST** be within **[1..3999971]** bytes in size. +The submission **MUST** be a `.txz` compressed tarball (i.e., tarball +compressed by `xz(1)`) as constructed by `mkiocccentry(1)`, which +**MUST** be within **[1..3999971]** bytes in size. -The tarball **MUST** be a **v7 format** tarball, and any supplementary tarballs -you provide **MUST** also be **v7 format**. +The tarball **MUST** be a **v7 format** tarball, and any supplementary +tarballs you provide **MUST** also be **v7 format**. -The sum of all file lengths, after unpacking from the tarball, **MUST** be -less than `27651*1024` (**28314624**) bytes. +The sum of all file lengths, after unpacking from the tarball, **MUST** +be less than `27651*1024` (**28314624**) bytes.

-The submission **MUST** pass all `txzchk(1)` checks, and the tarball filename -**MUST** pass all `fnamchk(1)` checks as well. +The submission **MUST** pass all `txzchk(1)` checks, and the tarball +filename **MUST** pass all `fnamchk(1)` checks as well.

-You may **NOT** submit a tarball created by the `-d`, `-e` **OR** by the `-s -seed` options of `mkiocccentry(1)`. +You may **NOT** submit a tarball created by the `-d`, `-e` **OR** by +the `-s seed` options of `mkiocccentry(1)`.

-The unpacked submission directory **MUST** pass the checks performed by the -minimum required version of `chksubmit(1)`. +The unpacked submission directory **MUST** pass the checks performed by +the minimum required version of `chksubmit(1)`.

Submissions may **NOT** use a [mkiocccentry -toolkit](https://github.com/ioccc-src/mkiocccentry) command line options that -are labelled as "**for TESTING purposes**", **OR** labelled as "**for the use by -the IOCCC judges only**", in their respective man pages. +toolkit](https://github.com/ioccc-src/mkiocccentry) command line +options that are labelled as "**for TESTING purposes**", **OR** +labelled as "**for the use by the IOCCC judges only**", in their +respective man pages.

Submissions may **ONLY** use [mkiocccentry -toolkit](https://github.com/ioccc-src/mkiocccentry) command lines that confirm -to the command's `-h` "_print help message_", again notwithstanding the options -for testing and the IOCCC judges. +toolkit](https://github.com/ioccc-src/mkiocccentry) command lines that +confirm to the command's `-h` "_print help message_", again +notwithstanding the options for testing and the IOCCC judges.

-The `prog.c` file should pass the [Rule 2 - Size restrictions](rules.html#rule2-size) -checks performed by `iocccsize(1)`. +The `prog.c` file should pass the [Rule 2 - Size +restrictions](rules.html#rule2-size) checks performed by +`iocccsize(1)`.

-The `.auth.json` and `.info.json` files **MUST** be compatible with what -`mkiocccentry(1)` generates. +The `.auth.json` and `.info.json` files **MUST** be exactly +what the minimum required `mkiocccentry(1)` version generates.

-Any submission that fails to pass the checks performed by the minimum required -version of the [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) -**WILL be rejected**! +Any submission that fails to pass the checks performed by the minimum +required version of the [mkiocccentry +toolkit](https://github.com/ioccc-src/mkiocccentry) **WILL be +rejected**!

See [Rule 4 - Required files](rules.html#rule4-required-files). See the -FAQ on "[What is the mkiocccentry tool, how do I obtain it and how do I use it?](../faq.html#mkiocccentry)". +FAQ on "[What is the mkiocccentry tool, how do I obtain it and how do I +use it?](../faq.html#mkiocccentry)". -See the [Guidelines for Rule 17 - Use mkiocccentry](guidelines.html#guideline17-mkiocccentry). +See the [Guidelines for Rule 17 - Use +mkiocccentry](guidelines.html#guideline17-mkiocccentry).
## Rule 18 - Submission license
-The entirety of your submission **MUST** be submitted under the following license: +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/) +[CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0 +International](https://creativecommons.org/licenses/by-sa/4.0/). See [Rule 7 - Original Work](rules.html#rule7-original-work). @@ -657,8 +723,8 @@ See [Rule 7 - Original Work](rules.html#rule7-original-work).

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. +Additional rules, both humorous and otherwise, may be added below this +rule in future contests.

See [Rule 6 - Free Rule](rules.html#rule6-free-rule). @@ -666,18 +732,21 @@ See [Rule 6 - Free Rule](rules.html#rule6-free-rule). ## Further Reading -Please read the [Guidelines](guidelines.html) next for further commentary on these rules. +Please read the [Guidelines](guidelines.html) next for further +commentary on these rules. Read the -[Entering the IOCCC: the bare minimum you need to know](https://www.ioccc.org/quick-start.html#enter) +FAQ on "[Entering the IOCCC: the bare minimum you need to +know](https://www.ioccc.org/quick-start.html#enter)" for an overview of how to enter the contest. -See also the [FAQ](../faq.html). +See also the [FAQ](../faq.html) in general. And now [for something completely different](guidelines.html#fun). -Consider joining the [IOCCC Discord Server](https://discord.com/invite/Wa42Qujwnw) -for discussions about The Rules, questions for the Judges, and `C` in general. +Consider joining the [IOCCC Discord +Server](https://discord.com/invite/Wa42Qujwnw) for discussions about +The Rules, questions for the Judges, and `C` in general. Leonid A. Broukhis chongo (Landon Curt Noll) /\\cc/\\