Update FAQ and fix guidelines

The FAQ has a new item that is referred to in the guidelines updates.

The guidelines has some link fixes and other minor changes.

Some fun was corrected in the guidelines as well but kept a fair bit
shorter than before (i.e. shorter than IOCCC28). In particular because
some code from the mkiocccentry (from some contributors) is no longer
extant, and because said code was not even a complete program, only
refer to two programs that were strictly written by someone other than
the judges.  Those paragraphs are only one sentence (they used to be
more than one) and the rest of the mkiocccentry repos is not mentioned
(this was the longest one and it went into other things that while fun
were not relevant). This keeps it light, fun, very short and more
importantly correct both to the rule about submissions must be a
COMPLETE C program and other rules as well.

Some typo fixes were made.

I believe this commit resolves the problems from yesterday although I
did not go through the file extremely carefully as I know @SirWumpus
also wants to go through it and so does Landon, so I kind of rushed
through it.
This commit is contained in:
Cody Boone Ferguson committed 2025-11-30 04:31:43 -08:00
1 parent d53e0deffd
commit f3de2bdf14
4 files changed
+178 -141

No files matched your search

+10 -1
View File
@@ -453,7 +453,7 @@
<!-- BEFORE: 1st line of markdown file: faq.md --> <!-- BEFORE: 1st line of markdown file: faq.md -->
<h1 id="ioccc-faq-table-of-contents">IOCCC FAQ Table of Contents</h1> <h1 id="ioccc-faq-table-of-contents">IOCCC FAQ Table of Contents</h1>
<p>This is FAQ version <strong>29.02 2025-11-29</strong>.</p> <p>This is FAQ version <strong>29.03 2025-11-30</strong>.</p>
<h2 id="entering-the-ioccc-the-bare-minimum-you-need-to-know">0. <a href="#enter_questions">Entering the IOCCC: the bare minimum you need to know</a></h2> <h2 id="entering-the-ioccc-the-bare-minimum-you-need-to-know">0. <a href="#enter_questions">Entering the IOCCC: the bare minimum you need to know</a></h2>
<ul> <ul>
<li><strong>Q 0.0</strong>: <a class="normal" href="#enter">How can I enter the IOCCC?</a></li> <li><strong>Q 0.0</strong>: <a class="normal" href="#enter">How can I enter the IOCCC?</a></li>
@@ -486,6 +486,7 @@
<li><strong>Q 1.10</strong>: <a class="normal" href="#download_submission">Can I download my submission tarball from the submit server?</a></li> <li><strong>Q 1.10</strong>: <a class="normal" href="#download_submission">Can I download my submission tarball from the submit server?</a></li>
<li><strong>Q 1.11</strong>: <a class="normal" href="#del_submission">Can I delete a submission from the submit server?</a></li> <li><strong>Q 1.11</strong>: <a class="normal" href="#del_submission">Can I delete a submission from the submit server?</a></li>
<li><strong>Q 1.12</strong>: <a class="normal" href="#makefile_details">What are the detailed recommendations for a submission Makefile?</a></li> <li><strong>Q 1.12</strong>: <a class="normal" href="#makefile_details">What are the detailed recommendations for a submission Makefile?</a></li>
<li><strong>Q 1.13</strong>: <a class="normal" href="#github">May I use GitHub or other services to develop my submission?</a></li>
</ul> </ul>
<h2 id="ioccc-judging-process">2. <a href="#judging_process">IOCCC Judging process</a></h2> <h2 id="ioccc-judging-process">2. <a href="#judging_process">IOCCC Judging process</a></h2>
<ul> <ul>
@@ -1698,6 +1699,14 @@ directory. And although it is not an error if this fails, if it fails because th
Makefile does not have a clobber rule, it will be flagged by <code>mkiocccentry(1)</code> Makefile does not have a clobber rule, it will be flagged by <code>mkiocccentry(1)</code>
(you may ignore this but it does put you at a risk of violating the rules).</p> (you may ignore this but it does put you at a risk of violating the rules).</p>
<p>Jump to: <a href="#">top</a></p> <p>Jump to: <a href="#">top</a></p>
<div id="github">
<h3 id="q-1.13-may-i-use-github-or-other-services-to-develop-my-submission">Q 1.13: May I use GitHub or other services to develop my submission?</h3>
</div>
<p>While you may use your own git server or a publicly available service to develop
your submission, we <strong>DISLIKE</strong> submissions that require it. What’s more,
since it would possibly not be anonymous it would break the rules as you are
<strong>NOT</strong> allowed to reveal who you are.</p>
<p>Jump to: <a href="#">top</a></p>
<hr style="width:50%;text-align:left;margin-left:0"> <hr style="width:50%;text-align:left;margin-left:0">
<hr style="width:50%;text-align:left;margin-left:0"> <hr style="width:50%;text-align:left;margin-left:0">
<div id="judging_process"> <div id="judging_process">
+13 -1
View File
@@ -1,6 +1,6 @@
# IOCCC FAQ Table of Contents # IOCCC FAQ Table of Contents
This is FAQ version **29.02 2025-11-29**. This is FAQ version **29.03 2025-11-30**.
## 0. [Entering the IOCCC: the bare minimum you need to know](#enter_questions) ## 0. [Entering the IOCCC: the bare minimum you need to know](#enter_questions)
@@ -32,6 +32,7 @@ This is FAQ version **29.02 2025-11-29**.
- **Q 1.10**: <a class="normal" href="#download_submission">Can I download my submission tarball from the submit server?</a> - **Q 1.10**: <a class="normal" href="#download_submission">Can I download my submission tarball from the submit server?</a>
- **Q 1.11**: <a class="normal" href="#del_submission">Can I delete a submission from the submit server?</a> - **Q 1.11**: <a class="normal" href="#del_submission">Can I delete a submission from the submit server?</a>
- **Q 1.12**: <a class="normal" href="#makefile_details">What are the detailed recommendations for a submission Makefile?</a> - **Q 1.12**: <a class="normal" href="#makefile_details">What are the detailed recommendations for a submission Makefile?</a>
- **Q 1.13**: <a class="normal" href="#github">May I use GitHub or other services to develop my submission?</a>
## 2. [IOCCC Judging process](#judging_process) ## 2. [IOCCC Judging process](#judging_process)
@@ -1644,6 +1645,17 @@ Makefile does not have a clobber rule, it will be flagged by `mkiocccentry(1)`
Jump to: [top](#) Jump to: [top](#)
<div id="github">
### Q 1.13: May I use GitHub or other services to develop my submission?
</div>
While you may use your own git server or a publicly available service to develop
your submission, we **DISLIKE** submissions that require it. What's more,
since it would possibly not be anonymous it would break the rules as you are
**NOT** allowed to reveal who you are.
Jump to: [top](#)
<hr style="width:50%;text-align:left;margin-left:0"> <hr style="width:50%;text-align:left;margin-left:0">
<hr style="width:50%;text-align:left;margin-left:0"> <hr style="width:50%;text-align:left;margin-left:0">
+74 -67
View File
@@ -462,7 +462,7 @@ and remains unaltered. All other uses must receive prior permission in
writing by <a href="../contact.html">contacting the judges</a>.</p> writing by <a href="../contact.html">contacting the judges</a>.</p>
<h1 id="guidelines-version">Guidelines Version</h1> <h1 id="guidelines-version">Guidelines Version</h1>
<p class="leftbar"> <p class="leftbar">
These IOCCC guidelines are version <strong>29.01 2025-11-29</strong>. These IOCCC guidelines are version <strong>29.02 2025-11-30</strong>.
</p> </p>
<p class="leftbar"> <p class="leftbar">
The <span style="font-size:28px;"><b>|</b></span> symbol indicates an <strong>change</strong> from the previous IOCCC. The <span style="font-size:28px;"><b>|</b></span> symbol indicates an <strong>change</strong> from the previous IOCCC.
@@ -483,9 +483,9 @@ You should pay attention to our observations on
<a href="../2024/index.html#code-size-and-rule-2">code size and Rule 2 remarks for IOCCC28</a>. <a href="../2024/index.html#code-size-and-rule-2">code size and Rule 2 remarks for IOCCC28</a>.
</p> </p>
<p>Your submission must satisfy <strong>BOTH</strong> the <p>Your submission must satisfy <strong>BOTH</strong> the
<a href="rules.html#rule2a-gross-size">Rule 2a Gross Size</a> <a href="rules.html#rule2a-gross-size">Rule 2a - Gross Size</a>
<strong>AND</strong> <strong>AND</strong>
<a href="rules.html#rule2b-net-size">Rule 2b Net Size</a> rules.</p> <a href="rules.html#rule2b-net-size">Rule 2b - Net Size</a> rules.</p>
<p>To check your code against <p>To check your code against
<a href="rules.html#rule2-size">Rule 2 - Size restrictions</a>, use the <code>iocccentry(1)</code> tool. <a href="rules.html#rule2-size">Rule 2 - Size restrictions</a>, use the <code>iocccentry(1)</code> tool.
For example:</p> For example:</p>
@@ -512,13 +512,6 @@ to get around the size limits of
because of the <code>iocccsize(1)</code> algorithm.</p> because of the <code>iocccsize(1)</code> algorithm.</p>
<p>Yes Virginia, <strong>the previous guideline sentence is an important hint</strong>!</p> <p>Yes Virginia, <strong>the previous guideline sentence is an important hint</strong>!</p>
<p>Jump to: <a href="#">top</a></p> <p>Jump to: <a href="#">top</a></p>
<div id="guideline3">
<div id="guideline-3---register">
<h1 id="guidelines-for-rule-3---register-for-the-ioccc">Guidelines for <a href="rules.html#rule3-register">Rule 3 - Register for the IOCCC</a></h1>
</div>
</div>
<p>See FAQ on “<a href="../faq.html#author_handle_faq">What is an author handle?</a>”.</p>
<p>Jump to: <a href="#">top</a></p>
<div id="guideline7"> <div id="guideline7">
<div id="guideline-7---original-work"> <div id="guideline-7---original-work">
<h1 id="guidelines-for-rule-7---original-work">Guidelines for <a href="rules.html#rule7-original-work">Rule 7 - Original Work</a></h1> <h1 id="guidelines-for-rule-7---original-work">Guidelines for <a href="rules.html#rule7-original-work">Rule 7 - Original Work</a></h1>
@@ -540,7 +533,8 @@ authors who skillfully employed various techniques to develop their code.
If you do make use of such tools or services, then we <strong>ENCOURAGE you to If you do make use of such tools or services, then we <strong>ENCOURAGE you to
describe how you used such tools</strong> in your <code>remarks.md</code> file.</p> describe how you used such tools</strong> in your <code>remarks.md</code> file.</p>
<p>In short: You created it, you own it, its an original work, or you have explicit permission to the work.</p> <p>In short: You created it, you own it, its an original work, or you have explicit permission to the work.</p>
<p>See FAQ on “<a href="../faq.html#ai">May I use AI, LLM, Virtual coding assistants, or similar tools to write my submission?</a>”.</p> <p>See the
FAQ on “<a href="../faq.html#ai">May I use AI, LLM, Virtual coding assistants, or similar tools to write my submission?</a>”.</p>
<p>Jump to: <a href="#">top</a></p> <p>Jump to: <a href="#">top</a></p>
<div id="guideline11"> <div id="guideline11">
<div id="guideline-11---abuse"> <div id="guideline-11---abuse">
@@ -561,26 +555,24 @@ if not smaller.</p>
technically allowed by the <a href="rules.html">IOCCC rules</a> and yet do not fit the spirit of what technically allowed by the <a href="rules.html">IOCCC rules</a> and yet do not fit the spirit of what
we intended to be submitted.</p> we intended to be submitted.</p>
<p>Legal abuse of the <a href="rules.html">IOCCC rules</a> is <strong>NOT</strong> an invitation to violate <p>Legal abuse of the <a href="rules.html">IOCCC rules</a> is <strong>NOT</strong> an invitation to violate
the <a href="rules.html">IOCCC rules</a> (especailly <a href="./rules.html#rule-17---packaging">Rule 17 - the <a href="rules.html">IOCCC rules</a> (especially <a href="./rules.html#rule17-mkiocccentry">Rule 17 -
Packaging</a> ). A submission that violates the Use mkiocccentry</a>). A submission that violates the
<a href="rules.html">rules</a> in the opinion of the <a href="../judges.html">IOCCC judges</a>, <a href="rules.html">rules</a> in the opinion of the <a href="../judges.html">IOCCC judges</a>,
<strong>WILL</strong> be disqualified. <strong><em>RULE ABUSE CARRIES A CERTAIN LEVEL OF RISK!</em></strong></p> <strong>WILL</strong> be disqualified. <strong><em>RULE ABUSE CARRIES A CERTAIN LEVEL OF RISK!</em></strong></p>
<p>If you intend to abuse the <a href="rules.html">IOCCC rules</a>, <p>If you intend to abuse the <a href="rules.html">IOCCC rules</a>,
indicate so in your <code>remarks.md</code> file. You <strong>MUST</strong> try to justify, plead, beg, indicate so in your <code>remarks.md</code> file. You <strong>MUST</strong> try to justify, plead, beg,
why you consider your rule abuse to be allowed under the why you consider your rule abuse to be allowed under the
<a href="rules.html">IOCCC rules</a>. Humor or creativity help plead a case. <a href="rules.html">IOCCC rules</a>. Humor or creativity help plead a case.</p>
As there is no guarantee that you will succeed, you might consider <p>As there is no guarantee that you will succeed, you might consider submitting an
submitting an alternate version that conforms to the alternate version that conforms to the <a href="rules.html">IOCCC rules</a>, if it might
<a href="rules.html">IOCCC rules</a>.</p> otherwise be interesting; one that does not abuse the <a href="rules.html">IOCCC rules</a>
<p>If you have a submission that might otherwise be interesting, you might want to and one that does, making sure to note in the one that does not abuse the rules
submit two versions; one that does not abuse the <a href="rules.html">IOCCC rules</a> and that this is another version, so that the judges do not assume you uploaded it
one that does, making sure to note in the one that does not abuse the rules that by mistake.</p>
this is another version, so that the judges do not assume you uploaded it by
mistake.</p>
<p>If you do bypass the <code>mkiocccentry(1)</code> warnings about <p>If you do bypass the <code>mkiocccentry(1)</code> warnings about
<a href="rules.html#rule-2a-gross-size">Rule 2a - Gross Size</a> <a href="rules.html#rule2a-gross-size">Rule 2a - Gross Size</a>
and/or about and/or about
<a href="rules.html#rule-2b-net-size">Rule 2b - Net Size</a> <a href="rules.html#rule2b-net-size">Rule 2b - Net Size</a>
or any other or any other
rule and submit a submission anyway, you <strong>MUST</strong> try to justify why the IOCCC rule and submit a submission anyway, you <strong>MUST</strong> try to justify why the IOCCC
<a href="../judges.html">IOCCC judges</a> should not reject your submission due to a rule <a href="../judges.html">IOCCC judges</a> should not reject your submission due to a rule
@@ -593,7 +585,7 @@ in many cases such problems, flaws or areas of confusion are deliberate.</p>
<p>Changes to <a href="rules.html">IOCCC rules</a> and <a href="guidelines.html">IOCCC guidelines</a> in <p>Changes to <a href="rules.html">IOCCC rules</a> and <a href="guidelines.html">IOCCC guidelines</a> in
response to rule abuses, are done in a minimal fashion. Often we will 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 deliberately leave behind holes (or introduce new ones) so that future rule
abuse can continue. A clever author should be able to read them and “drive a abuse can continue. A clever author should be able to read and “drive a
truck through the holes” in the <a href="rules.html">IOCCC rules</a> and <a href="guidelines.html">IOCCC truck through the holes” in the <a href="rules.html">IOCCC rules</a> and <a href="guidelines.html">IOCCC
guidelines</a>.</p> guidelines</a>.</p>
<p>At the risk of stating the obvious, this contest is a parody of the software <p>At the risk of stating the obvious, this contest is a parody of the software
@@ -602,23 +594,22 @@ are only part of the overall contest. Even so, one might think the
contest <a href="rules.html">IOCCC rules</a> and <a href="guidelines.html">IOCCC guidelines</a> process as a parody contest <a href="rules.html">IOCCC rules</a> and <a href="guidelines.html">IOCCC guidelines</a> process as a parody
of the sometimes tragic mismatch between what a customer (or marketing) wants of the sometimes tragic mismatch between what a customer (or marketing) wants
and what engineering delivers. Real programmers must face obfuscated and and what engineering delivers. Real programmers must face obfuscated and
sometimes conflicting, balloning specifications, and requirements from marketing, sales, sometimes conflicting, ballooning specifications, and requirements from marketing, sales,
product management and even from customers themselves on an all too regular basis. product management and even from customers themselves on an all too regular basis.
This is one of the reasons why the <a href="rules.html">IOCCC rules</a> and This is one of the reasons why the <a href="rules.html">IOCCC rules</a> and
<a href="guidelines.html">IOCCC guidelines</a> are written in obfuscated form.</p> <a href="guidelines.html">IOCCC guidelines</a> are written in obfuscated form.</p>
<p>Jump to: <a href="#">top</a></p> <p>Jump to: <a href="#">top</a></p>
<div id="guideline15"> <div id="guideline15">
<div id="guideline-15---building"> <div id="guideline-15---building">
<div id="guideline15-gnu-makefile">
<h1 id="guidelines-for-rule-15---gnu-makefile">Guidelines for <a href="rules.html#rule15-gnu-makefile">Rule 15 - GNU Makefile</a></h1> <h1 id="guidelines-for-rule-15---gnu-makefile">Guidelines for <a href="rules.html#rule15-gnu-makefile">Rule 15 - GNU Makefile</a></h1>
</div> </div>
</div> </div>
<p>You may use <code>git,</code> or services such as <a href="https://www.github.com">GitHub</a> </div>
to develop and maintain your submission. However, we <strong>DISLIKE</strong>
submissions that <strong>require</strong> such services in order to build/compile your submission.</p>
<p>Submissions will be judged in an environment that has no <strong>IDE</strong>. <p>Submissions will be judged in an environment that has no <strong>IDE</strong>.
Any submission that fails to compile/build because it requires Any submission that fails to compile/build because it requires
an <strong>IDE</strong> will be rejected.</p> an <strong>IDE</strong> will be rejected.</p>
<p>We will use the <code>GNU make(1)</code> tool, your <code>Makefile</code>, as well as tools found in the <p>We will use the GNU <code>make(1)</code> tool, your <code>Makefile</code>, as well as tools found in the
<a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX Specification</a> <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX Specification</a>
environments, and commonly found on systems that reasonably conform to the environments, and commonly found on systems that reasonably conform to the
<a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX Specification</a> <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX Specification</a>
@@ -638,8 +629,8 @@ FAQ on “<a href="../faq.html#makefile_details">What are the detailed recommend
</div> </div>
<p>We <strong>STRONGLY</strong> recommend you <strong>do</strong> install the most recent release of <p>We <strong>STRONGLY</strong> recommend you <strong>do</strong> install the most recent release of
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a> <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>
As use of using older versions of the mkiocccentry toolkit to are <strong>HIGHLY LIKELY</strong> to be <strong>REJECTED</strong>!</p> because use of older versions of the mkiocccentry toolkit are <strong>HIGHLY LIKELY</strong> to be <strong>REJECTED</strong>!</p>
<p>If you submit your own JSON files (other than <code>.auth.json</code> and <p>If you submit your own JSON files (<strong>OTHER THAN</strong> <code>.auth.json</code> and
<code>.info.json</code>) then they do <strong>NOT</strong> have to be valid JSON.</p> <code>.info.json</code>) then they do <strong>NOT</strong> have to be valid JSON.</p>
<p>However, if you do provide invalid JSON files, <strong>PLEASE</strong> <p>However, if you do provide invalid JSON files, <strong>PLEASE</strong>
document and <strong>clearly explain</strong> this in your <code>remarks.md</code> file.</p> document and <strong>clearly explain</strong> this in your <code>remarks.md</code> file.</p>
@@ -652,7 +643,7 @@ file</em>.
<p class="leftbar"> <p class="leftbar">
The non-extra files (<code>prog.c</code>, <code>prog.alt.c</code>, The non-extra files (<code>prog.c</code>, <code>prog.alt.c</code>,
<code>try.sh</code>, <code>try.alt.sh</code>, <code>remarks.md</code>, <code>Makefile</code>, <code>.auth.json</code> and <code>.info.json</code>) <code>try.sh</code>, <code>try.alt.sh</code>, <code>remarks.md</code>, <code>Makefile</code>, <code>.auth.json</code> and <code>.info.json</code>)
are considered <em>free files</em>, and to not count towards the are considered <em>free files</em>, and do not count towards the
<a href="rules.html#rule17-mkiocccentry">Rule 17 - Use mkiocccentry</a> <a href="rules.html#rule17-mkiocccentry">Rule 17 - Use mkiocccentry</a>
limit of <strong>31</strong> <em>extra files</em>. limit of <strong>31</strong> <em>extra files</em>.
</p> </p>
@@ -663,12 +654,14 @@ reason, the tarball <strong>MUST</strong> be a <strong>v7 format</strong> tarbal
<p>You should NOT use a tarball as an <em>extra file</em> for a test-suite unless you <p>You should NOT use a tarball as an <em>extra file</em> for a test-suite unless you
have a very good reason for this: if you do include a tarball as an <em>extra file</em>, have a very good reason for this: if you do include a tarball as an <em>extra file</em>,
then you <strong>MUST</strong> specify why in your <code>remarks.md</code> file.</p> then you <strong>MUST</strong> specify why in your <code>remarks.md</code> file.</p>
<p>If you <strong>DO</strong> include a tarball an <em>extra file</em>, and the build process or the program extracts <p>If you <strong>DO</strong> include a tarball as an <em>extra file</em>, and the build process or the
said tarball(s), the make <code>clobber</code> rule <strong>MUST</strong> remove the extracted files.</p> program extracts said tarball(s), the make <code>clobber</code> rule <strong>MUST</strong> remove the
<p>Instead of including a large test-suite that requires a lot of files as part of your submission, extracted files.</p>
and your submission doesn’t require the test-suite to be available to run, <p>Instead of including a large test-suite that requires a lot of files as part of
then in your <code>remarks.md</code> a URL where such a test-suite may be downloaded from your submission, if your submission doesn’t require the test-suite to be
and how to use the test-suite to test your submission.</p> available to run, then in your <code>remarks.md</code> 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.</p>
<p>If you <strong>DO</strong> include a tarball then make sure it uses the v7 format. See the <p>If you <strong>DO</strong> include a tarball then make sure it uses the v7 format. See the
FAQ on “<a href="../faq.html#extra-files">extra files</a>” FAQ on “<a href="../faq.html#extra-files">extra files</a>”
for details on how to make a v7 tarball.</p> for details on how to make a v7 tarball.</p>
@@ -700,9 +693,9 @@ use the <strong>most recent version</strong> of the
submissions that package using older versions of the submissions that package using older versions of the
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a> <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>
are <strong>LIKELY</strong> to be <strong>REJECTED</strong>!</p> are <strong>LIKELY</strong> to be <strong>REJECTED</strong>!</p>
<p>You <strong>REALLY SHOULD</strong> use the latest <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a> <p>You <strong>REALLY SHOULD</strong> use the latest <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
are <strong>LIKELY</strong> to be <strong>REJECTED</strong>! So you <strong>REALLY SHOULD</strong> use the latest <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a> toolkit</a> to package your submission
to package your own submission.</p> as submissions that use an older version are <strong>LIKELY</strong> to be <strong>REJECTED</strong>!</p>
<p>The <code>mkiocccentry(1)</code> tool runs a number of checks by way of these <p>The <code>mkiocccentry(1)</code> tool runs a number of checks by way of these
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a> tools:</p> <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a> tools:</p>
<ul> <ul>
@@ -716,8 +709,8 @@ to package your own submission.</p>
“<strong>for TESTING purposes</strong>” in their respective man pages.</p> “<strong>for TESTING purposes</strong>” in their respective man pages.</p>
<p>Do <strong>NOT</strong> use <code>fnamchk(1)</code> command line options that are labeled “<strong>for TESTING purposes</strong>” <p>Do <strong>NOT</strong> use <code>fnamchk(1)</code> command line options that are labeled “<strong>for TESTING purposes</strong>”
in the <code>fnamchk(1)</code> man page.</p> in the <code>fnamchk(1)</code> man page.</p>
<p>Do <strong>NOT</strong> use <code>chkentry(1)</code> command line options that are labeled “<strong>for the use by the IOCCC judges only</strong>” <p>Do <strong>NOT</strong> use <code>chksubmit(1)</code> command line options that are labeled “<strong>for the use by the IOCCC judges only</strong>”
in the <code>chksubmit(1)</code> (or <code>chkentry(1)</code>) man page(s). in the <code>chksubmit(1)</code> man page.
Similarly do <strong>NOT</strong> use <code>chkentry(1)</code> command line options marked “<strong>for the use Similarly do <strong>NOT</strong> use <code>chkentry(1)</code> command line options marked “<strong>for the use
by the IOCCC judges only</strong>” in the <code>chkentry(1)</code> man page.</p> by the IOCCC judges only</strong>” in the <code>chkentry(1)</code> man page.</p>
<p>To view <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a> man pages, <p>To view <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a> man pages,
@@ -759,12 +752,15 @@ correct details as you go along.</p>
to proceed with a default, however make sure the default is the <strong>CORRECT</strong> to proceed with a default, however make sure the default is the <strong>CORRECT</strong>
answer.</p> answer.</p>
<p>The <code>mkiocccentry(1)</code> tool will use code from <code>iocccsize(1)</code> which detects a number of <p>The <code>mkiocccentry(1)</code> tool will use code from <code>iocccsize(1)</code> which detects a number of
issues (such as <a href="rules.html#rule2-size">Rule 2 - Size</a>) that you may ignore, issues (such as <a href="rules.html#rule2-size">Rule 2 - Size restrictions</a>) that you may ignore,
however ignoring such issues <strong>comes with a significant level of risk!</strong></p> however ignoring such issues <strong>comes with a SIGNIFICANT level of risk!</strong></p>
<p>Once the tarball is packaged it will <p>Once the tarball is packaged it will
run <code>txzchk(1)</code>, which will also run <code>fnamchk(1)</code>, as part of its algorithm.</p> run <code>txzchk(1)</code>, which will also run <code>fnamchk(1)</code>, as part of its algorithm.</p>
<p>The use of <code>mkiocccentry -W ....</code> is <strong>highly discouraged</strong> as this may ignore <p>The use of <code>mkiocccentry -W ....</code> is <strong>highly discouraged</strong> as this may ignore
warnings about a problem that may cause your submission to be <strong>REJECTED!</strong>”</p> warnings about a problem that may cause your submission to be <strong>REJECTED!</strong>”</p>
<p>The same can be said of the <code>-Y</code> option, and to a lesser extent <code>-y</code>: the <code>-y</code>
is mostly for the test script and the <code>-Y</code> is like <code>-y</code> but even more
aggressive.</p>
<p>If <code>mkiocccentry</code> encounters an <strong>error</strong>, the program will exit and the xz <p>If <code>mkiocccentry</code> encounters an <strong>error</strong>, the program will exit and the xz
compressed tarball <strong>will NOT be generated</strong>: this is a <strong>feature, not a bug</strong>!</p> compressed tarball <strong>will NOT be generated</strong>: this is a <strong>feature, not a bug</strong>!</p>
<p>If you encounter a <strong>bug</strong> with the <p>If you encounter a <strong>bug</strong> with the
@@ -772,7 +768,7 @@ compressed tarball <strong>will NOT be generated</strong>: this is a <strong>fea
<strong>PLEASE run the <code>bug_report.sh</code> script to help us out here!</strong></p> <strong>PLEASE run the <code>bug_report.sh</code> script to help us out here!</strong></p>
<p>While you don’t have to install the <p>While you don’t have to install the
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>, <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>,
then in order to run a tool outside the repo directory if you don’t, in order to run a tool outside the repo directory
you will have to specify <code>mkiocccentry(1)</code> command line options to locate required tools you will have to specify <code>mkiocccentry(1)</code> command line options to locate required tools
such as <code>chkentry(1)</code> (<code>mkiocccentry -C chkentry ..</code>), <code>txzchk(1)</code> (<code>mkiocccentry -T txzchk ..</code>), such as <code>chkentry(1)</code> (<code>mkiocccentry -C chkentry ..</code>), <code>txzchk(1)</code> (<code>mkiocccentry -T txzchk ..</code>),
and <code>fnamchk(1)</code> (<code>mkiocccentry -F fnamchk ..</code>).</p> and <code>fnamchk(1)</code> (<code>mkiocccentry -F fnamchk ..</code>).</p>
@@ -839,7 +835,7 @@ submissions that remain within the <a href="guidelines.html">IOCCC guidelines</a
<ul> <ul>
<li><p><a href="../quick-start.html#enter">How to enter the IOCCC</a></p></li> <li><p><a href="../quick-start.html#enter">How to enter the IOCCC</a></p></li>
<li><p><a href="../faq.html#mkiocccentry">Obtaining and compiling the most recent mkiocccentry toolkit</a></p></li> <li><p><a href="../faq.html#mkiocccentry">Obtaining and compiling the most recent mkiocccentry toolkit</a></p></li>
<li><p><a href="../next/submit.html">How to upload your submission</a></p></li> <li><p><a href="./submit.html">How to upload your submission</a></p></li>
</ul> </ul>
<p>While the contest is <strong><a href="../faq.html#open">open</a></strong>, you may modify your <p>While the contest is <strong><a href="../faq.html#open">open</a></strong>, you may modify your
previously uploaded submission by rebuilding your submission with the previously uploaded submission by rebuilding your submission with the
@@ -848,8 +844,8 @@ and then re-uploading it to <strong>the same slot number</strong> on the
<a href="https://submit.ioccc.org">submit server</a>.</p> <a href="https://submit.ioccc.org">submit server</a>.</p>
<p>The <strong>official locale</strong> of the <strong>IOCCC</strong> is <strong>C</strong>.</p> <p>The <strong>official locale</strong> of the <strong>IOCCC</strong> is <strong>C</strong>.</p>
<p>You are <strong>encouraged</strong> to examine the <a href="../years.html">winners of previous contests</a>.</p> <p>You are <strong>encouraged</strong> to examine the <a href="../years.html">winners of previous contests</a>.</p>
<p>Because <a href="rules.html">rules</a> change from year to year, some <a href="../years.html">winning entries</a> <p>Because <a href="rules.html">rules</a> change from year to year, some <a href="../years.html">past winning entries</a>
of the past may be rejected this year.</p> may be rejected this year.</p>
<p>What was <em>was</em> unique and novel one year <em>might be ‘old’ the next year</em>.</p> <p>What was <em>was</em> unique and novel one year <em>might be ‘old’ the next year</em>.</p>
<p>A submission is usually examined in a number of ways. We typically apply <p>A submission is usually examined in a number of ways. We typically apply
a number of tests to a submission:</p> a number of tests to a submission:</p>
@@ -898,9 +894,8 @@ function or state machine to spell out something such as “<em>hello,
world!</em>” <strong>really really, <em>and we do mean REALLY</em>, do need to be more creative</strong>.</p> world!</em>” <strong>really really, <em>and we do mean REALLY</em>, do need to be more creative</strong>.</p>
<p>Consider using misleading or subtle tricks layered on top of or under <p>Consider using misleading or subtle tricks layered on top of or under
an appropriate level of obfuscation.</p> an appropriate level of obfuscation.</p>
<p>A clean looking program with <p>A clean looking program with misleading comments and variable names might be a
misleading comments and variable names might be a <strong>VERY GOOD START</strong> <strong>VERY GOOD START</strong> to a great submission!</p>
to a great submission!</p>
<p>Jump to: <a href="#">top</a></p> <p>Jump to: <a href="#">top</a></p>
<div id="likes"> <div id="likes">
@@ -917,6 +912,11 @@ the <a href="https://www.ioccc.org/index.html">Official IOCCC winner website</a>
<p>We <strong>VERY MUCH LIKE</strong> submissions that have some educational value. This does <strong>NOT</strong> mean <p>We <strong>VERY MUCH LIKE</strong> submissions that have some educational value. This does <strong>NOT</strong> mean
that your submission should not be obfuscated but rather that the IOCCC has moved away from 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 <code>remarks.md</code> file.</p> the idea of “spoilers”. You should not encrypt or rot13 content in your <code>remarks.md</code> file.</p>
<p>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 <strong>NOT</strong> use any cipher to
encrypt your <code>remarks.md</code>.</p>
<p>It is <strong>VERY MUCH</strong> appreciated if your remarks have some educational <p>It is <strong>VERY MUCH</strong> appreciated if your remarks have some educational
value. And although educational value is not required, it is an value. And although educational value is not required, it is an
<strong>EXCELLENT</strong> bonus.</p> <strong>EXCELLENT</strong> bonus.</p>
@@ -956,8 +956,9 @@ as a program that is more well rounded in confusion.</p>
<p>In other words, it is a compilation error, and in order to get older <p>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.</p> IOCCC winning entries that did this to compile, we had to update them to not do this.</p>
<p>When declaring local or global variables, you should declare the type:</p> <p>When declaring local or global variables, you should declare the type:</p>
<pre><code> int this_is_fine; <pre><code> int this_is_fine;</code></pre>
this_is_not; /* &lt;-- Try to avoid implicit type declarations */</code></pre> <p>and <strong>NOT</strong> like this:</p>
<pre><code> this_is_not; /* &lt;-- Try to avoid implicit type declarations */</code></pre>
<p>We tend to <strong>like <em>less</em></strong> a submission that requires either <p>We tend to <strong>like <em>less</em></strong> a submission that requires either
<code>gcc</code> <strong>OR</strong> <code>clang</code>. <strong>We <em>prefer</em> submissions</strong> that can compile <code>gcc</code> <strong>OR</strong> <code>clang</code>. <strong>We <em>prefer</em> submissions</strong> that can compile
under <strong>BOTH</strong> <code>gcc</code> <strong>AND</strong> <code>clang</code>. <strong>Hint!</strong></p> under <strong>BOTH</strong> <code>gcc</code> <strong>AND</strong> <code>clang</code>. <strong>Hint!</strong></p>
@@ -1067,7 +1068,7 @@ from the current directory. This restriction is not a hard and
absolute one. The intent is to ensure that the building of your absolute one. The intent is to ensure that the building of your
program is reasonably portable.</p> program is reasonably portable.</p>
<p>We prefer programs that are portable across a wide variety of UNIX-like <p>We prefer programs that are portable across a wide variety of UNIX-like
operating systems (e.g., Linux, GNU Hurd, BSD, UNIX, etc.).</p> operating systems (e.g., Linux, GNU Hurd, BSD, UNIX, macOS, etc.).</p>
<p>Don’t forget that the building of your program should be done <p>Don’t forget that the building of your program should be done
<strong>WITHOUT human intervention</strong>. So don’t do things such as:</p> <strong>WITHOUT human intervention</strong>. So don’t do things such as:</p>
<pre><code> prog: prog.c <pre><code> prog: prog.c
@@ -1085,10 +1086,11 @@ For example, one could put in their <code>Makefile</code>:</p>
alternate / human intervention based building.</p> alternate / human intervention based building.</p>
<p>We want to get away from source that is simply a compact blob of <p>We want to get away from source that is simply a compact blob of
bytes. <strong>REALLY TRY</strong> to be more creative than blob coding. <strong>HINT!</strong></p> bytes. <strong>REALLY TRY</strong> to be more creative than blob coding. <strong>HINT!</strong></p>
<p>Please do not use things like <code>gzip(1)</code> to get around the size limit. <p>Please do not use things like <code>gzip(1)</code> to get around the size limit. This was
Please try to be much more creative.</p> done years ago; please try to be much more creative.</p>
<p>We really <strong>DISLIKE</strong> submissions that make blatant use of including <p>We really <strong>DISLIKE</strong> submissions that make blatant use of <code>#include</code> of
large data files to get around the source code size limit.</p> large data files to get around the source code size limit. This does not mean
<code>#include</code> of standard header files, just data files you provide.</p>
<p>Did we remember to indicate that programs that blatantly use <p>Did we remember to indicate that programs that blatantly use
some complex state machine to do something simple, are boring? some complex state machine to do something simple, are boring?
We think we did. :-)</p> We think we did. :-)</p>
@@ -1218,7 +1220,7 @@ processor word size without specifying <code>-arch</code>. For example:</p>
<pre><code> ARCH= -m64</code></pre> <pre><code> ARCH= -m64</code></pre>
<p>Note, however, that some platforms will not necessarily support some <p>Note, however, that some platforms will not necessarily support some
architectures. For instance, more recent versions of <code>macOS</code> do <strong>NOT</strong> support architectures. For instance, more recent versions of <code>macOS</code> do <strong>NOT</strong> support
32-bit!</p> 32-bit, and more than zero judges use it!</p>
<p>If there are limitations in your submission, you are highly encouraged <p>If there are limitations in your submission, you are highly encouraged
to note such limitations in your <code>remarks.md</code> file. For example if your to note such limitations in your <code>remarks.md</code> file. For example if your
submission factors values up to a certain size, you might want to state:</p> submission factors values up to a certain size, you might want to state:</p>
@@ -1302,7 +1304,7 @@ of the number of the kernel disk pack of one of the judge’s <a href="https://e
<p>There may or may not be fewer than 2^7+1 reasons why these <a href="guidelines.html">IOCCC <p>There may or may not be fewer than 2^7+1 reasons why these <a href="guidelines.html">IOCCC
guidelines</a> seem obfuscated.</p> guidelines</a> seem obfuscated.</p>
<p>Excessively “<em>dotty”</em> use of the <code>chksubmit(1)</code> or <code>chkentry(1)</code> commands suggests that <p>Excessively “<em>dotty”</em> use of the <code>chksubmit(1)</code> or <code>chkentry(1)</code> commands suggests that
either you like silly things, or that you ”<em>RTFS</em>” with some level of care.</p> either you like silly things, or that you”<em>RTFS</em>” with some level of care.</p>
<p>Some people might question what actually constitutes a valid JSON file, given <p>Some people might question what actually constitutes a valid JSON file, given
the state of the “<em>so-called</em>” JSON spec.. :-)</p> the state of the “<em>so-called</em>” JSON spec.. :-)</p>
<p>We prefer programs that do not require a fish license: crayons and <p>We prefer programs that do not require a fish license: crayons and
@@ -1381,11 +1383,16 @@ This isn’t to say that another highly compact and obfuscated
replacement of <code>init(8)</code> would not be an interesting submission. replacement of <code>init(8)</code> would not be an interesting submission.
</p> </p>
<p class="leftbar"> <p class="leftbar">
The The IOCCC size tool
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/iocccsize.c">iocccsize</a>
is not an original work, unless you one of the is not an original work, unless you are <a href="../authors.html#Anthony_C_Howe">Anthony C
<a href="https://github.com/ioccc-src/mkiocccentry/graphs/contributors">several mkiocccentry toolkit contributors</a>. Howe</a>, in which it is original! :-)
in which case it is original! :-) </p>
<p class="leftbar">
The IOCCC tarball validator
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/txzchk.c">txzchk</a> is not
an original work, unless you are <a href="../authors.html#Cody_Boone_Ferguson">Cody Boone
Ferguson</a>, in which case it is original! :-)
</p> </p>
<p>If the <a href="../judges.html">IOCCC judges</a> are feeling ornery we <p>If the <a href="../judges.html">IOCCC judges</a> are feeling ornery we
might choose to compile your program for running on an Arduino or might choose to compile your program for running on an Arduino or
+81 -72
View File
@@ -13,7 +13,7 @@ writing by [contacting the judges](../contact.html).
# Guidelines Version # Guidelines Version
<p class="leftbar"> <p class="leftbar">
These IOCCC guidelines are version **29.01 2025-11-29**. These IOCCC guidelines are version **29.02 2025-11-30**.
</p> </p>
<p class="leftbar"> <p class="leftbar">
@@ -41,9 +41,9 @@ You should pay attention to our observations on
</p> </p>
Your submission must satisfy **BOTH** the Your submission must satisfy **BOTH** the
[Rule 2a Gross Size](rules.html#rule2a-gross-size) [Rule 2a - Gross Size](rules.html#rule2a-gross-size)
**AND** **AND**
[Rule 2b Net Size](rules.html#rule2b-net-size) rules. [Rule 2b - Net Size](rules.html#rule2b-net-size) rules.
To check your code against To check your code against
[Rule 2 - Size restrictions](rules.html#rule2-size), use the `iocccentry(1)` tool. [Rule 2 - Size restrictions](rules.html#rule2-size), use the `iocccentry(1)` tool.
@@ -84,17 +84,6 @@ Yes Virginia, **the previous guideline sentence is an important hint**!
Jump to: [top](#) Jump to: [top](#)
<div id="guideline3">
<div id="guideline-3---register">
# Guidelines for [Rule 3 - Register for the IOCCC](rules.html#rule3-register)
</div>
</div>
See FAQ on "[What is an author handle?](../faq.html#author_handle_faq)".
Jump to: [top](#)
<div id="guideline7"> <div id="guideline7">
<div id="guideline-7---original-work"> <div id="guideline-7---original-work">
@@ -120,7 +109,8 @@ 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.
See FAQ on "[May I use AI, LLM, Virtual coding assistants, or similar tools to write my submission?](../faq.html#ai)". See the
FAQ on "[May I use AI, LLM, Virtual coding assistants, or similar tools to write my submission?](../faq.html#ai)".
Jump to: [top](#) Jump to: [top](#)
@@ -151,8 +141,8 @@ technically allowed by the [IOCCC rules](rules.html) and yet do not fit the spir
we intended to be submitted. we intended to be submitted.
Legal abuse of the [IOCCC rules](rules.html) is **NOT** an invitation to violate Legal abuse of the [IOCCC rules](rules.html) is **NOT** an invitation to violate
the [IOCCC rules](rules.html) (especailly [Rule 17 - the [IOCCC rules](rules.html) (especially [Rule 17 -
Packaging](./rules.html#rule-17---packaging) ). A submission that violates the Use mkiocccentry](./rules.html#rule17-mkiocccentry)). A submission that violates the
[rules](rules.html) in the opinion of the [IOCCC judges](../judges.html), [rules](rules.html) in the opinion of the [IOCCC judges](../judges.html),
**WILL** be disqualified. **_RULE ABUSE CARRIES A CERTAIN LEVEL OF RISK!_** **WILL** be disqualified. **_RULE ABUSE CARRIES A CERTAIN LEVEL OF RISK!_**
@@ -160,20 +150,18 @@ If you intend to abuse the [IOCCC rules](rules.html),
indicate so in your `remarks.md` file. You **MUST** try to justify, plead, beg, 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 why you consider your rule abuse to be allowed under the
[IOCCC rules](rules.html). Humor or creativity help plead a case. [IOCCC 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
[IOCCC rules](rules.html).
If you have a submission that might otherwise be interesting, you might want to As there is no guarantee that you will succeed, you might consider submitting an
submit two versions; one that does not abuse the [IOCCC rules](rules.html) and alternate version that conforms to the [IOCCC rules](rules.html), if it might
one that does, making sure to note in the one that does not abuse the rules that otherwise be interesting; one that does not abuse the [IOCCC rules](rules.html)
this is another version, so that the judges do not assume you uploaded it by and one that does, making sure to note in the one that does not abuse the rules
mistake. 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 If you do bypass the `mkiocccentry(1)` warnings about
[Rule 2a - Gross Size](rules.html#rule-2a-gross-size) [Rule 2a - Gross Size](rules.html#rule2a-gross-size)
and/or about and/or about
[Rule 2b - Net Size](rules.html#rule-2b-net-size) [Rule 2b - Net Size](rules.html#rule2b-net-size)
or any other or any other
rule and submit a submission anyway, you **MUST** try to justify why the IOCCC rule and submit a submission anyway, you **MUST** try to justify why the IOCCC
[IOCCC judges](../judges.html) should not reject your submission due to a rule [IOCCC judges](../judges.html) should not reject your submission due to a rule
@@ -188,7 +176,7 @@ in many cases such problems, flaws or areas of confusion are deliberate.
Changes to [IOCCC rules](rules.html) and [IOCCC guidelines](guidelines.html) in Changes to [IOCCC rules](rules.html) and [IOCCC guidelines](guidelines.html) in
response to rule abuses, are done in a minimal fashion. Often we will 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 deliberately leave behind holes (or introduce new ones) so that future rule
abuse can continue. A clever author should be able to read them and "drive a abuse can continue. A clever author should be able to read and "drive a
truck through the holes" in the [IOCCC rules](rules.html) and [IOCCC truck through the holes" in the [IOCCC rules](rules.html) and [IOCCC
guidelines](guidelines.html). guidelines](guidelines.html).
@@ -197,8 +185,8 @@ development process. The [IOCCC rules](rules.html) and [IOCCC guidelines](guide
are only part of the overall contest. Even so, one might think the are only part of the overall contest. Even so, one might think the
contest [IOCCC rules](rules.html) and [IOCCC guidelines](guidelines.html) process as a parody contest [IOCCC rules](rules.html) and [IOCCC guidelines](guidelines.html) process as a parody
of the sometimes tragic mismatch between what a customer (or marketing) wants of the sometimes tragic mismatch between what a customer (or marketing) wants
and what engineering delivers. Real programmers must face obfuscated and and what engineering delivers. Real programmers must face obfuscated and
sometimes conflicting, balloning specifications, and requirements from marketing, sales, sometimes conflicting, ballooning specifications, and requirements from marketing, sales,
product management and even from customers themselves on an all too regular basis. product management and even from customers themselves on an all too regular basis.
This is one of the reasons why the [IOCCC rules](rules.html) and This is one of the reasons why the [IOCCC rules](rules.html) and
[IOCCC guidelines](guidelines.html) are written in obfuscated form. [IOCCC guidelines](guidelines.html) are written in obfuscated form.
@@ -209,19 +197,17 @@ Jump to: [top](#)
<div id="guideline15"> <div id="guideline15">
<div id="guideline-15---building"> <div id="guideline-15---building">
<div id="guideline15-gnu-makefile">
# Guidelines for [Rule 15 - GNU Makefile](rules.html#rule15-gnu-makefile) # Guidelines for [Rule 15 - GNU Makefile](rules.html#rule15-gnu-makefile)
</div> </div>
</div> </div>
</div>
You may use `git,` or services such as [GitHub](https://www.github.com)
to develop and maintain your submission. However, we **DISLIKE**
submissions that **require** such services in order to build/compile your submission.
Submissions will be judged in an environment that has no **IDE**. Submissions will be judged in an environment that has no **IDE**.
Any submission that fails to compile/build because it requires Any submission that fails to compile/build because it requires
an **IDE** will be rejected. an **IDE** will be rejected.
We will use the `GNU make(1)` tool, your `Makefile`, as well as tools found in the 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) [Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification)
environments, and commonly found on systems that reasonably conform to the environments, and commonly found on systems that reasonably conform to the
[Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) [Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification)
@@ -249,9 +235,9 @@ Jump to: [top](#)
We **STRONGLY** recommend you **do** install the most recent release of We **STRONGLY** recommend you **do** install the most recent release of
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry)
As use of using older versions of the mkiocccentry toolkit to are **HIGHLY LIKELY** to be **REJECTED**! 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 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** However, if you do provide invalid JSON files, **PLEASE**
@@ -267,7 +253,7 @@ file_.
<p class="leftbar"> <p class="leftbar">
The non-extra files (`prog.c`, `prog.alt.c`, The non-extra files (`prog.c`, `prog.alt.c`,
`try.sh`, `try.alt.sh`, `remarks.md`, `Makefile`, `.auth.json` and `.info.json`) `try.sh`, `try.alt.sh`, `remarks.md`, `Makefile`, `.auth.json` and `.info.json`)
are considered _free files_, and to not count towards the are considered _free files_, and do not count towards the
[Rule 17 - Use mkiocccentry](rules.html#rule17-mkiocccentry) [Rule 17 - Use mkiocccentry](rules.html#rule17-mkiocccentry)
limit of **31** _extra files_. limit of **31** _extra files_.
</p> </p>
@@ -282,13 +268,15 @@ 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_, 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. then you **MUST** specify why in your `remarks.md` file.
If you **DO** include a tarball an _extra file_, and the build process or the program extracts If you **DO** include a tarball as an _extra file_, and the build process or the
said tarball(s), the make `clobber` rule **MUST** remove the extracted files. 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, Instead of including a large test-suite that requires a lot of files as part of
and your submission doesn't require the test-suite to be available to run, your submission, if your submission doesn't require the test-suite to be
then in your `remarks.md` a URL where such a test-suite may be downloaded from available to run, then in your `remarks.md` you could include URL where such a
and how to use the test-suite to test your submission. 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.
If you **DO** include a tarball then make sure it uses the v7 format. See the If you **DO** include a tarball then make sure it uses the v7 format. See the
FAQ on "[extra files](../faq.html#extra-files)" FAQ on "[extra files](../faq.html#extra-files)"
@@ -331,9 +319,9 @@ submissions that package using older versions of the
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry)
are **LIKELY** to be **REJECTED**! are **LIKELY** to be **REJECTED**!
You **REALLY SHOULD** use the latest [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) You **REALLY SHOULD** use the latest [mkiocccentry
are **LIKELY** to be **REJECTED**! So you **REALLY SHOULD** use the latest [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) toolkit](https://github.com/ioccc-src/mkiocccentry) to package your submission
to package your own submission. as submissions that use an older version are **LIKELY** to be **REJECTED**!
The `mkiocccentry(1)` tool runs a number of checks by way of these 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:
@@ -350,8 +338,8 @@ Do **NOT** use `txzchk(1)` or `fnamchk(1)` command line options that are labeled
Do **NOT** use `fnamchk(1)` command line options that are labeled "**for TESTING purposes**" Do **NOT** use `fnamchk(1)` command line options that are labeled "**for TESTING purposes**"
in the `fnamchk(1)` man page. in the `fnamchk(1)` man page.
Do **NOT** use `chkentry(1)` command line options that are labeled "**for the use by the IOCCC judges only**" Do **NOT** use `chksubmit(1)` command line options that are labeled "**for the use by the IOCCC judges only**"
in the `chksubmit(1)` (or `chkentry(1)`) man page(s). in the `chksubmit(1)` man page.
Similarly do **NOT** use `chkentry(1)` command line options marked "**for the use Similarly do **NOT** use `chkentry(1)` command line options marked "**for the use
by the IOCCC judges only**" in the `chkentry(1)` man page. by the IOCCC judges only**" in the `chkentry(1)` man page.
@@ -415,8 +403,8 @@ to proceed with a default, however make sure the default is the **CORRECT**
answer. answer.
The `mkiocccentry(1)` tool will use code from `iocccsize(1)` which detects a number of The `mkiocccentry(1)` tool will use code from `iocccsize(1)` which detects a number of
issues (such as [Rule 2 - Size](rules.html#rule2-size)) that you may ignore, 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!** however ignoring such issues **comes with a SIGNIFICANT level of risk!**
Once the tarball is packaged it will Once the tarball is packaged it will
run `txzchk(1)`, which will also run `fnamchk(1)`, as part of its algorithm. run `txzchk(1)`, which will also run `fnamchk(1)`, as part of its algorithm.
@@ -424,6 +412,10 @@ run `txzchk(1)`, which will also run `fnamchk(1)`, as part of its algorithm.
The use of `mkiocccentry -W ....` is **highly discouraged** as this may ignore The use of `mkiocccentry -W ....` is **highly discouraged** as this may ignore
warnings about a problem that may cause your submission to be **REJECTED!**" warnings about a problem that may cause your submission to be **REJECTED!**"
The same can be said of the `-Y` option, and to a lesser extent `-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 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**! compressed tarball **will NOT be generated**: this is a **feature, not a bug**!
@@ -433,7 +425,7 @@ If you encounter a **bug** with the
While you don't have to install the While you don't have to install the
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry), [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry),
then in order to run a tool outside the repo directory 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 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 ..`), such as `chkentry(1)` (`mkiocccentry -C chkentry ..`), `txzchk(1)` (`mkiocccentry -T txzchk ..`),
and `fnamchk(1)` (`mkiocccentry -F fnamchk ..`). and `fnamchk(1)` (`mkiocccentry -F fnamchk ..`).
@@ -527,7 +519,7 @@ You are encouraged to review the following [FAQs](../faq.html):
* [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](../next/submit.html) * [How to upload your submission](./submit.html)
While the contest is **[open](../faq.html#open)**, you may modify your While the contest is **[open](../faq.html#open)**, you may modify your
previously uploaded submission by rebuilding your submission with the previously uploaded submission by rebuilding your submission with the
@@ -539,8 +531,8 @@ 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 [rules](rules.html) change from year to year, some [winning entries](../years.html) Because [rules](rules.html) change from year to year, some [past winning entries](../years.html)
of the past may be rejected this year. may be rejected this year.
What was _was_ unique and novel one year _might be 'old' the next year_. What was _was_ unique and novel one year _might be 'old' the next year_.
@@ -602,9 +594,8 @@ 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 Consider using misleading or subtle tricks layered on top of or under
an appropriate level of obfuscation. an appropriate level of obfuscation.
A clean looking program with A clean looking program with misleading comments and variable names might be a
misleading comments and variable names might be a **VERY GOOD START** **VERY GOOD START** to a great submission!
to a great submission!
Jump to: [top](#) Jump to: [top](#)
@@ -625,6 +616,12 @@ We **VERY MUCH LIKE** submissions that have some educational value. This does **
that your submission should not be obfuscated but rather that the IOCCC has moved away from 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 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 It is **VERY MUCH** appreciated if your remarks have some educational
value. And although educational value is not required, it is an value. And although educational value is not required, it is an
**EXCELLENT** bonus. **EXCELLENT** bonus.
@@ -680,6 +677,11 @@ When declaring local or global variables, you should declare the type:
``` <!---c--> ``` <!---c-->
int this_is_fine; int this_is_fine;
```
and **NOT** like this:
``` <!---c-->
this_is_not; /* <-- Try to avoid implicit type declarations */ this_is_not; /* <-- Try to avoid implicit type declarations */
``` ```
@@ -821,12 +823,12 @@ absolute one. The intent is to ensure that the building of your
program is reasonably portable. program is reasonably portable.
We prefer programs that are portable across a wide variety of UNIX-like We prefer programs that are portable across a wide variety of UNIX-like
operating systems (e.g., Linux, GNU Hurd, BSD, UNIX, etc.). operating systems (e.g., Linux, GNU Hurd, BSD, UNIX, macOS, etc.).
Don't forget that the building of your program should be done Don't forget that the building of your program should be done
**WITHOUT human intervention**. So don't do things such as: **WITHOUT human intervention**. So don't do things such as:
``` ``` <!---makefile-->
prog: prog.c prog: prog.c
#echo this next line requires data from standard input #echo this next line requires data from standard input
cat > prog.c cat > prog.c
@@ -838,7 +840,7 @@ do something dumb (or cute) when it is built 'automatically', and
when it is run with a human involved, do something more clever. when it is run with a human involved, do something more clever.
For example, one could put in their `Makefile`: For example, one could put in their `Makefile`:
``` ``` <!---makefile-->
prog: prog.c prog: prog.c
${CC} prog.c -DNON_HUMAN_COMPILE -o prog ${CC} prog.c -DNON_HUMAN_COMPILE -o prog
@echo "See remarks section about alternate ways to compile" @echo "See remarks section about alternate ways to compile"
@@ -850,11 +852,12 @@ alternate / human intervention based building.
We want to get away from source that is simply a compact blob of 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!**
Please do not use things like `gzip(1)` to get around the size limit. Please do not use things like `gzip(1)` to get around the size limit. This was
Please try to be much more creative. done years ago; please try to be much more creative.
We really **DISLIKE** submissions that make blatant use of including We really **DISLIKE** submissions that make blatant use of `#include` of
large data files to get around the source code size limit. 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.
Did we remember to indicate that programs that blatantly use Did we remember to indicate that programs that blatantly use
some complex state machine to do something simple, are boring? some complex state machine to do something simple, are boring?
@@ -1027,7 +1030,7 @@ processor word size without specifying `-arch`. For example:
Note, however, that some platforms will not necessarily support some Note, however, that some platforms will not necessarily support some
architectures. For instance, more recent versions of `macOS` do **NOT** support architectures. For instance, more recent versions of `macOS` do **NOT** support
32-bit! 32-bit, and more than zero judges use it!
If there are limitations in your submission, you are highly encouraged If there are limitations in your submission, you are highly encouraged
to note such limitations in your `remarks.md` file. For example if your to note such limitations in your `remarks.md` file. For example if your
@@ -1126,7 +1129,7 @@ There may or may not be fewer than 2^7+1 reasons why these [IOCCC
guidelines](guidelines.html) seem obfuscated. guidelines](guidelines.html) seem obfuscated.
Excessively "_dotty"_ use of the `chksubmit(1)` or `chkentry(1)` commands suggests that 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. 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 Some people might question what actually constitutes a valid JSON file, given
the state of the "_so-called_" JSON spec.. :-) the state of the "_so-called_" JSON spec.. :-)
@@ -1223,11 +1226,17 @@ replacement of `init(8)` would not be an interesting submission.
</p> </p>
<p class="leftbar"> <p class="leftbar">
The The IOCCC size tool
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) [iocccsize](https://github.com/ioccc-src/mkiocccentry/blob/master/iocccsize.c)
is not an original work, unless you one of the is not an original work, unless you are [Anthony C
[several mkiocccentry toolkit contributors](https://github.com/ioccc-src/mkiocccentry/graphs/contributors). Howe](../authors.html#Anthony_C_Howe), in which it is original! :-)
in which case it is original! :-) </p>
<p class="leftbar">
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! :-)
</p> </p>
If the [IOCCC judges](../judges.html) are feeling ornery we If the [IOCCC judges](../judges.html) are feeling ornery we