Merge pull request #246 from SirWumpus/guide_doggy

Guidelines partial review
This commit is contained in:
Landon Curt Noll authored and GitHub committed 2025-12-01 20:29:13 -08:00
commit 27c08ac6a9
7 files changed
+714 -545

No files matched your search

+11 -4
View File
@@ -453,7 +453,7 @@
<!-- BEFORE: 1st line of markdown file: faq.md -->
<h1 id="ioccc-faq-table-of-contents">IOCCC FAQ Table of Contents</h1>
<p>This is FAQ version <strong>29.03 2025-11-30</strong>.</p>
<p>This is FAQ version <strong>29.04 2025-12-01</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>
<ul>
<li><strong>Q 0.0</strong>: <a class="normal" href="#enter">How can I enter the IOCCC?</a></li>
@@ -494,7 +494,7 @@
<li><strong>Q 2.1</strong>: <a class="normal" href="#feedback">How can I comment or make a suggestion on IOCCC rules, guidelines and tools?</a></li>
<li><strong>Q 2.2</strong>: <a class="normal" href="#warnings">Are there any compiler warnings that I should not worry about in my submissions?</a></li>
<li><strong>Q 2.3</strong>: <a class="normal" href="#frequent-themes">What types of entries have been frequently submitted to the IOCCC?</a></li>
<li><strong>Q 2.4</strong>: <a class="normal" href="#rule_2_broken">How did an entry win the IOCCC that breaks Rule 2 - Size Limit?</a></li>
<li><strong>Q 2.4</strong>: <a class="normal" href="#rule_2_broken">How did an entry win the IOCCC that breaks Rule 2 - Size restrictions?</a></li>
<li><strong>Q 2.5</strong>: <a class="normal" href="#submissions">How many submissions do the judges receive for a given IOCCC?</a></li>
<li><strong>Q 2.6</strong>: <a class="normal" href="#judging_time">How much time does it take to judge the contest?</a></li>
<li><strong>Q 2.7</strong>: <a class="normal" href="#judging_rounds">How many judging rounds do you have?</a></li>
@@ -603,7 +603,7 @@
<li><strong>Q 11.0</strong>: <a class="normal" href="#ioccc_start">How did the IOCCC get started?</a></li>
<li><strong>Q 11.1</strong>: <a class="normal" href="#missing_years">Why are some years missing IOCCC entries?</a></li>
<li><strong>Q 11.2</strong>: <a class="normal" href="#website_history">What is the history of the IOCCC website?</a></li>
<li><strong>Q 11.3</strong>: <a class="normal" href="#size_rule_history">How has the IOCCC size limit rule changed over the years?</a></li>
<li><strong>Q 11.3</strong>: <a class="normal" href="#size_rule_history">How has the Rule 2 size restrictions rule changed over the years?</a></li>
<li><strong>Q 11.4</strong>: <a class="normal" href="#great_fork_merge">What is the <strong>Great Fork Merge</strong>?</a></li>
<li><strong>Q 11.5</strong>: <a class="normal" href="#bof">What is an IOCCC BOF?</a></li>
<li><strong>Q 11.6</strong>: <a class="normal" href="#explain_IOCCC">I do not understand the IOCCC, can you explain it to me?</a></li>
@@ -6334,7 +6334,7 @@ deletions</em>, in <em>6,169 commits</em> ‼️</p>
<div id="size_rule_history">
<div id="size_restriction">
<div id="size_rule">
<h3 id="q-11.3-how-has-the-ioccc-size-limit-rule-changed-over-the-years">Q 11.3: How has the IOCCC size limit rule changed over the years?</h3>
<h3 id="q-11.3-how-has-the-rule-2-size-restrictions-rule-changed-over-the-years">Q 11.3: How has the Rule 2 size restrictions rule changed over the years?</h3>
</div>
</div>
</div>
@@ -6396,6 +6396,13 @@ deletions</em>, in <em>6,169 commits</em> ‼️</p>
<li>Rule 2a: 4993</li>
<li>Rule 2b: 2503</li>
</ul>
<div id="size_slow_change">
<h4 id="size-rule-slow-to-change">Size rule slow to change</h4>
</div>
<p>As you can read above, the Size rule is slow to change.</p>
<p>Given how long the <a href="#size_rule2013-2020">IOCCC 2013-2020</a> size rule lasted,
one might expect the <a href="#size_rule2024-xxxx">IOCCC 2024-date</a> size rule to last
well into the 2030’s.</p>
<p>Jump to: <a href="#">top</a></p>
<div id="great_fork_merge">
<h3 id="q-11.4-what-is-the-great-fork-merge">Q 11.4: What is the <strong>Great Fork Merge</strong>?</h3>
+15 -4
View File
@@ -1,6 +1,6 @@
# IOCCC FAQ Table of Contents
This is FAQ version **29.03 2025-11-30**.
This is FAQ version **29.04 2025-12-01**.
## 0. [Entering the IOCCC: the bare minimum you need to know](#enter_questions)
@@ -40,7 +40,7 @@ This is FAQ version **29.03 2025-11-30**.
- **Q 2.1**: <a class="normal" href="#feedback">How can I comment or make a suggestion on IOCCC rules, guidelines and tools?</a>
- **Q 2.2**: <a class="normal" href="#warnings">Are there any compiler warnings that I should not worry about in my submissions?</a>
- **Q 2.3**: <a class="normal" href="#frequent-themes">What types of entries have been frequently submitted to the IOCCC?</a>
- **Q 2.4**: <a class="normal" href="#rule_2_broken">How did an entry win the IOCCC that breaks Rule 2 - Size Limit?</a>
- **Q 2.4**: <a class="normal" href="#rule_2_broken">How did an entry win the IOCCC that breaks Rule 2 - Size restrictions?</a>
- **Q 2.5**: <a class="normal" href="#submissions">How many submissions do the judges receive for a given IOCCC?</a>
- **Q 2.6**: <a class="normal" href="#judging_time">How much time does it take to judge the contest?</a>
- **Q 2.7**: <a class="normal" href="#judging_rounds">How many judging rounds do you have?</a>
@@ -144,7 +144,7 @@ This is FAQ version **29.03 2025-11-30**.
- **Q 11.0**: <a class="normal" href="#ioccc_start">How did the IOCCC get started?</a>
- **Q 11.1**: <a class="normal" href="#missing_years">Why are some years missing IOCCC entries?</a>
- **Q 11.2**: <a class="normal" href="#website_history">What is the history of the IOCCC website?</a>
- **Q 11.3**: <a class="normal" href="#size_rule_history">How has the IOCCC size limit rule changed over the years?</a>
- **Q 11.3**: <a class="normal" href="#size_rule_history">How has the Rule 2 size restrictions rule changed over the years?</a>
- **Q 11.4**: <a class="normal" href="#great_fork_merge">What is the **Great Fork Merge**?</a>
- **Q 11.5**: <a class="normal" href="#bof">What is an IOCCC BOF?</a>
- **Q 11.6**: <a class="normal" href="#explain_IOCCC">I do not understand the IOCCC, can you explain it to me?</a>
@@ -8146,7 +8146,7 @@ Jump to: [top](#)
<div id="size_rule_history">
<div id="size_restriction">
<div id="size_rule">
### Q 11.3: How has the IOCCC size limit rule changed over the years?
### Q 11.3: How has the Rule 2 size restrictions rule changed over the years?
</div>
</div>
</div>
@@ -8221,6 +8221,17 @@ In later years, Rule 2 was split into two parts. These two parts of Rule 2 are:
* Rule 2b: 2503
<div id="size_slow_change">
#### Size rule slow to change
</div>
As you can read above, the Size rule is slow to change.
Given how long the [IOCCC 2013-2020](#size_rule2013-2020) size rule lasted,
one might expect the [IOCCC 2024-date](#size_rule2024-xxxx) size rule to last
well into the 2030's.
Jump to: [top](#)
+258 -218
View File
@@ -459,18 +459,18 @@ Copyright © 2025 Leonid A. Broukhis and Landon Curt Noll.
<p>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 <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>
<p class="leftbar">
These IOCCC guidelines are version <strong>29.05 2025-12-01</strong>.
These Guidelines are version <strong>29.06 2025-12-01</strong>.
</p>
<p class="leftbar">
The <span style="font-size:28px;"><b>|</b></span> symbol indicates an <strong>change</strong> from the previous IOCCC.
</p>
<p class="leftbar">
Because the <strong>IOCCC29</strong> guidelines was a substantial rewrite, only <strong>important changes</strong> from <strong>IOCCC28</strong> have been marked.
Because the <strong>IOCCC29</strong> was a substantial rewrite, only <strong>important changes</strong> from <strong>IOCCC28</strong> have been marked.
</p>
<p>Be sure to read the <a href="rules.html">IOCCC rules</a>.</p>
<p>Be sure to read the <a href="rules.html">Rules</a>.</p>
<div id="guideline1">
<div id="guideline1-c">
<h1 id="guidelines-for-rule-1---c-program">Guidelines for <a href="rules.html#rule1-c">Rule 1 - C program</a></h1>
@@ -484,14 +484,14 @@ file happens to also be a code for another language.
We would prefer if you do not use <code>#include</code> statements,
especially <code>#include</code> statements just to include lots of data,
to get around the
<a href="rules.html#rule2-size-restrictions">Rule 2 - Size restrictions</a>
<a href="rules.html#rule2-size">Rule 2 - Size restrictions</a>
in an excessive way.
</p>
<p class="leftbar">
We would prefer if you do not require lots and lots of implicit defines on the C compiler command line
(i.e., lots of <code>-Dfoo</code>, and <code>-Dcurds=whey</code> style command line args to the C compiler)
to get around the
<a href="rules.html#rule2-size-restrictions">Rule 2 - Size restrictions</a>
<a href="rules.html#rule2-size">Rule 2 - Size restrictions</a>
in an excessive way.
</p>
<p class="leftbar">
@@ -500,17 +500,16 @@ Some use of <code>#include</code> statements and/or implicit defines on the C co
<p class="leftbar">
As a guide, consider the level of <code>#include</code> statements and/or implicit defines on the C compiler command line
that are found in
<a href="https://www.ioccc.org/years.html">winning IOCCC entries</a>, and try to <strong>NOT</strong> set a new record.
<a href="https://www.ioccc.org/years.html">winning Entries</a>, and try to <strong>NOT</strong> set a new record.
</p>
<p class="leftbar">
If you believe you need to significantly abuse <code>#include</code> statements and/or implicit defines on the C compiler command line,
then try to make a case for why in your submission’s <code>remarks.md</code> file: maybe the judges won’t reject your submission.
then try to make a case for why in your submission’s <code>remarks.md</code> file: maybe the Judges won’t reject your submission.
</p>
<p>Jump to: <a href="#">top</a></p>
<div id="guideline2">
<div id="guideline-2---size">
<div id="guideline2-size">
<h1 id="guidelines-for-rule-2---size-restrictions">Guidelines for <a href="rules.html#rule2-size-restrictions">Rule 2 - Size restrictions</a></h1>
</div>
<h1 id="guidelines-for-rule-2---size-restrictions">Guidelines for <a href="rules.html#rule2-size">Rule 2 - Size restrictions</a></h1>
</div>
</div>
<p class="leftbar">
@@ -525,7 +524,7 @@ You should pay attention to our observations on
<a href="rules.html#rule2-size">Rule 2 - Size restrictions</a>, use the <code>iocccentry(1)</code> tool.
For example:</p>
<pre><code> iocccsize prog.c</code></pre>
<p>The IOCCC size tool algorithm can be summarized as follows:</p>
<p>The <code>iocccsize(1)</code> algorithm can be summarized as follows:</p>
<blockquote>
<p>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
@@ -537,36 +536,39 @@ before the end of file.</p>
counted by the IOCCC size tool.</p>
</blockquote>
<p>In cases where the above summary and the algorithm implemented by
the IOCCC size tool <code>iocccsize(1)</code> conflict, the algorithm implemented
by the minimum required version of <code>iocccsize(1)</code> is preferred by the <a href="../judges.html">IOCCC
judges</a>.</p>
<code>iocccsize(1)</code> conflict, the algorithm implemented
by the minimum required version of <code>iocccsize(1)</code> is preferred by the <a href="../judges.html">Judges</a>.</p>
<p>Make sure <code>iocccsize</code> does not flag any issues with your <code>prog.c</code>.</p>
<p><strong>NOTE</strong>: by default <code>iocccsize</code> will only report the rule 2b size, unless the
<p><strong>NOTE</strong>: by default <code>iocccsize</code> will only report the size, unless the
code surpasses the limit.</p>
<p>There a much less need to <code>#define</code> C reserved words in an effort
to get around the size limits of
<a href="rules.html#rule2-size">Rule 2 - Size restrictions</a>
because of the <code>iocccsize(1)</code> algorithm.</p>
<p>Yes Virginia, <strong>the previous guideline sentence is an important hint</strong>!</p>
<p>Don’t expect the <a href="rules.html#rule2-size">Rule 2 - Size restrictions</a> to
<a href="../faq.html#size_slow_change">change any time soon</a>.</p>
<p>See the
FAQ on “<a href="../faq.html#size_rule_history">How has the Rule 2 size restrictions rule changed over the years?</a>”.</p>
<p>Jump to: <a href="#">top</a></p>
<div id="guideline3">
<div id="guideline-3---register">
<div id="guideline3-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 class="leftbar">
If a group of people work on a submission, then they should
<a href="../quick-start.html#enter">register for the IOCCC</a>
using either a group email address, or an email address for one of the authors.
using either a valid group email address, or an email address for one of the authors.
</p>
<p class="leftbar">
Processing your registration is an activity overseen by an IOCCC judge.
Please be <strong>patient</strong> while an IOCCC judge processes your registration.
Processing your registration is an activity overseen by a Judge.
Please be <strong>patient</strong> while a Judge processes your registration.
</p>
<p>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; <strong>DO NOT WAIT UNTIL THE FINAL DAYS</strong>
to register! The judges are <strong>NOT</strong> responsible for delayed or lost
to register! The Judges are <strong>NOT</strong> responsible for delayed or lost
email or for those who wait until the last minute to try to register!</p>
<p class="leftbar">
If after a few days you believe your registration hasn’t been process, then
@@ -582,7 +584,7 @@ If you fail to change your temporary password by that deadline, then you’ll ne
<p>See <a href="../quick-start.html#enter">Entering the IOCCC: the bare minimum you need to know</a>.</p>
<p>Jump to: <a href="#">top</a></p>
<div id="guideline7">
<div id="guideline-7---original-work">
<div id="guideline7-original">
<h1 id="guidelines-for-rule-7---original-work">Guidelines for <a href="rules.html#rule7-original-work">Rule 7 - Original Work</a></h1>
</div>
</div>
@@ -608,82 +610,130 @@ In short: You created it, you own it, its an original work, or you have explicit
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>
<div id="guideline8">
<div id="guideline-8---submitting-requirements">
<div id="guideline8-submitting">
<h1 id="guidelines-for-rule-8---submitting-requirements">Guidelines for <a href="rules.html#rule8-submitting-requirements">Rule 8 - Submitting requirements</a></h1>
</div>
</div>
<p>Do <strong>NOT</strong> register more than one account just try and get around the limit on the number of submission slots.</p>
<p>Do <strong>NOT</strong> register more than one account just to try and get around the limit on the number of submission slots.</p>
<p>Jump to: <a href="#">top</a></p>
<div id="guideline9">
<div id="guideline9-no-interactive-compiling-allowed">
<div id="guideline9-no-interactive">
<h1 id="guidelines-for-rule-9---no-interactive-compiling-allowed">Guidelines for <a href="rules.html#rule9-no-interactive">Rule 9 - No interactive compiling allowed</a></h1>
</div>
</div>
</div>
<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>
<pre><code> prog: prog.c
#echo this next line requires data from standard input
cat &gt; prog.c
${CC} prog.c -o prog</code></pre>
<p>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 <code>Makefile</code>:</p>
<pre><code> prog: prog.c
${CC} prog.c -DNON_HUMAN_COMPILE -o prog
@echo &quot;See remarks section about alternate ways to compile&quot;</code></pre>
<p>and then include special notes in your <code>remarks.md</code> file for
alternate / human intervention based building.</p>
<p>Jump to: <a href="#">top</a></p>
<div id="guideline11">
<div id="guideline-11---abuse">
<div id="guideline11-abuse">
<h1 id="guidelines-for-rule-11---legal-rule-abuse">Guidelines for <a href="rules.html#rule11-legal-rule-abuse">Rule 11 - Legal rule abuse</a></h1>
</div>
</div>
<p>We do realize that there are holes in the <a href="rules.html">IOCCC rules</a>, and invite
<p>We do realize that there are holes in the <a href="rules.html">Rules</a>, 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.</p>
<p>We sometime award ‘<strong>Best abuse of the rules</strong>’ or ‘<strong>Worst abuse of the rules</strong>’,
or some variation, to a submission that creatively attempts to exploit a holes in the
<a href="rules.html">IOCCC rules</a>.</p>
<p>When we do need to plug a hole in the <a href="rules.html">IOCCC rules</a>
or <a href="guidelines.html">IOCCC guidelines</a>, we will attempt to use a very small plug,
<a href="rules.html">Rules</a>.</p>
<p>When we do need to plug a hole in the <a href="rules.html">Rules</a>
or <a href="guidelines.html">Guidelines</a>, we will attempt to use a very small plug,
if not smaller.</p>
<p>Or, maybe not. :-)</p>
<p>Legal rule abuse may involve, but is not limited to, doing things that are
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">Rules</a> and yet do not fit the spirit of what
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
the <a href="rules.html">IOCCC rules</a> (especially <a href="./rules.html#rule17-mkiocccentry">Rule 17 -
<p>Legal abuse of the <a href="rules.html">Rules</a> is <strong>NOT</strong> an invitation to violate
the <a href="rules.html">Rules</a> (especially <a href="./rules.html#rule17-mkiocccentry">Rule 17 -
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">Judges</a>,
<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">Rules</a>,
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
<a href="rules.html">IOCCC rules</a>. Humor or creativity help plead a case.</p>
<a href="rules.html">Rules</a>. Humor or creativity help plead a case.</p>
<p>As there is no guarantee that you will succeed, you might consider submitting an
alternate version that conforms to the <a href="rules.html">IOCCC rules</a>, if it might
otherwise be interesting; one that does not abuse the <a href="rules.html">IOCCC rules</a>
alternate version that conforms to the <a href="rules.html">Rules</a>, if it might
otherwise be interesting; one that does not abuse the <a href="rules.html">Rules</a>
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
that 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
<a href="rules.html#rule2a-gross-size">Rule 2a - Gross Size</a>
and/or about
<a href="rules.html#rule2b-net-size">Rule 2b - Net Size</a>
or any other
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
rule and submit a submission anyway, you <strong>MUST</strong> try to justify why the
<a href="../judges.html">Judges</a> should not reject your submission due to a rule
violation, and you would be wise to do this towards the top of your <code>remarks.md</code>
file.</p>
<p>We are often asked why the contest <a href="rules.html">IOCCC rules</a> and <a href="guidelines.html">IOCCC
guidelines</a> seem strange or contain mistakes, flaws, or
file so as not to be overlooked.</p>
<p>We are often asked why the contest <a href="rules.html">Rules</a> and <a href="guidelines.html">Guidelines</a> 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.</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">Rules</a> and <a href="guidelines.html">Guidelines</a> 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 <a href="rules.html">IOCCC rules</a> and <a href="guidelines.html">IOCCC
guidelines</a>.</p>
truck through the holes” in the <a href="rules.html">Rules</a> and <a href="guidelines.html">Guidelines</a>.</p>
<p>At the risk of stating the obvious, this contest is a parody of the software
development process. The <a href="rules.html">IOCCC rules</a> and <a href="guidelines.html">IOCCC guidelines</a>
development process. The <a href="rules.html">Rules</a> and <a href="guidelines.html">Guidelines</a>
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">Rules</a> and <a href="guidelines.html">Guidelines</a> 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 <a href="rules.html">IOCCC rules</a> and
<a href="guidelines.html">IOCCC guidelines</a> are written in obfuscated form.</p>
This is one of the reasons why the <a href="rules.html">Rules</a> and
<a href="guidelines.html">Guidelines</a> are written in obfuscated form.</p>
<p>Jump to: <a href="#">top</a></p>
<div id="guideline12">
<div id="guideline12-utf8">
<h1 id="guidelines-for-rule-12---utf-8">Guidelines for <a href="rules.html#rule12-utf8">Rule 12 - UTF-8</a></h1>
</div>
</div>
<p>The IOCCC no longer discourages the use of multibyte UTF-8 characters in <code>C</code> code.</p>
<div id="guideline13">
<div id="guideline13-nocr">
<h1 id="guidelines-for-rule-13---no-carriage-returns-in-prog.c">Guidelines for <a href="rules.html#rule13-nocr">Rule 13 - No carriage returns in prog.c</a></h1>
</div>
</div>
<p>We <strong>DISLIKE</strong> C code with trailing control-M’s (<code>\r</code> or <code>\015</code>) that results
in compilation failures.</p>
<p>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.</p>
<p class="leftbar">
If your <code>prog.c</code> is near the
<a href="rules.html#rule2a-gross-size">Rule 2a Gross Size</a> and/or
<a href="rules.html#rule2b-net-size">Rule 2b Net Size</a>
limit, you are permitted to <strong>NOT</strong> end source with a newline.
If you need to do this, please document that in your <code>remarks.md</code> file.
</p>
<p class="leftbar">
If your complains about about not ending in a newline, please this in your <code>remarks.md</code> file.
</p>
<p>Jump to: <a href="#">top</a></p>
<div id="guideline15">
<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>
</div>
</div>
</div>
<p>Submissions will be judged in an environment that has no <strong>IDE</strong>.
Any submission that fails to compile/build because it requires
an <strong>IDE</strong> will be rejected.</p>
@@ -695,20 +745,18 @@ We will use the GNU <code>make(1)</code> tool, your <code>Makefile</code>, as we
in the building and compiling of your submission.
</p>
<p class="leftbar">
Your Makefile <strong>MUST</strong> be compatible with GNU <code>make</code> and we suggest you use
<a href="Makefile.example">Makefile.example</a> as a template, renamed as Makefile of
Your <code>Makefile</code> <strong>MUST</strong> be compatible with GNU <code>make</code> and we suggest you use
<a href="Makefile.example">Makefile.example</a> as a template, renamed as <code>Makefile</code> of
course.
</p>
<p>See the
FAQ on “<a href="../faq.html#makefile_details">What are the detailed recommendations for a submission Makefile?</a>”.</p>
<p>Jump to: <a href="#">top</a></p>
<div id="guideline17">
<div id="guideline-17---packaging">
<div id="guideline17-mkiocccentry">
<h1 id="guidelines-for-rule-17---use-mkiocccentry">Guidelines for <a href="rules.html#rule17-mkiocccentry">Rule 17 - Use mkiocccentry</a></h1>
</div>
</div>
</div>
<p class="leftbar">
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>
@@ -758,7 +806,8 @@ 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 <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.
submission, assuming it is not reveal who you are, eg. do not use a GitHub URL
which contains your username.
</p>
<p class="leftbar">
If you <strong>DO</strong> include a tarball then make sure it uses the v7 format. See the
@@ -790,9 +839,9 @@ FAQ on “<a href="../faq.html#rule17">What are the details behind Rule 17 - Use
<div id="general-overall-guidelines">
<h2 id="overall-guidelines">Overall Guidelines</h2>
</div>
<p>These <a href="guidelines.html">guideline</a> are <strong>hints</strong> and <strong>suggestions</strong>, <strong>NOT</strong> <a href="rules.html">IOCCC rules</a>.</p>
<p>While submissions that violate <a href="guidelines.html">guideline</a> are allowed,
submissions that remain within the <a href="guidelines.html">IOCCC guidelines</a> are preferred.</p>
<p>These <a href="guidelines.html">Guidelines</a> are <strong>hints</strong> and <strong>suggestions</strong>, <strong>NOT</strong> <a href="rules.html">Rules</a>.</p>
<p>While submissions that violate the <a href="guidelines.html">Guidelines</a> are allowed,
submissions that remain within the <a href="guidelines.html">Guidelines</a> are preferred.</p>
<p>You are encouraged to review the following <a href="../faq.html">FAQs</a>:</p>
<ul>
<li><p><a href="../quick-start.html#enter">How to enter the IOCCC</a></p></li>
@@ -808,9 +857,8 @@ and then re-uploading it to <strong>the same slot number</strong> on the
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>Because <a href="rules.html">rules</a> change from year to year, some <a href="../years.html">past winning entries</a>
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>Because the <a href="rules.html">Rules</a> change from year to year, some <a href="../years.html">past winning entries</a>
may be rejected this year. 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
a number of tests to a submission:</p>
<ul>
@@ -863,12 +911,12 @@ an appropriate level of obfuscation.</p>
<p>Jump to: <a href="#">top</a></p>
<div id="likes">
<div id="dislikes">
<h2 id="our-likes-and-dislikes">Our Likes and Dislikes:</h2>
<h2 id="our-likes-and-dislikes">Our Likes and Dislikes</h2>
</div>
</div>
<p>We <strong>VERY MUCH LIKE</strong> submissions that use an edited variant of the
example Makefile, as described and linked to in the <a href="#makefile">Makefile section</a>,
renamed as <code>Makefile</code> of course. This makes it easier for the <a href="../judges.html">IOCCC judges</a>
example <code>Makefile</code>, as described and linked to in the <a href="#makefile">Makefile section</a>,
renamed as <code>Makefile</code> of course. This makes it easier for the <a href="../judges.html">Judges</a>
to test your submission. And if your submissions wins, it makes it easier to integrate it into
the <a href="https://www.ioccc.org/index.html">Official IOCCC winner website</a>.</p>
<p>We <strong>VERY MUCH LIKE</strong> submissions that have some educational value. This does <strong>NOT</strong> mean
@@ -908,6 +956,10 @@ If you do include a <code>try.alt.sh</code> then <strong>PLEASE</strong> remove
<p class="leftbar">
If you don’t have a prog.alt.c, then <strong>PLEASE</strong> remove the <code>try.alt</code> rule as well.
</p>
<p>Jump to: <a href="#">top</a></p>
<div id="about-cpp">
<h3 id="about-c-preprocessor">About C preprocessor</h3>
</div>
<p>Doing masses of <code>#define</code>s to obscure the source has become ‘old’. We
tend to ‘see thru’ masses of <code>#define</code>s due to our pre-processor tests
that we apply. Simply abusing <code>#define</code>s or <code>-Dfoo=bar</code> won’t go as far
@@ -921,6 +973,12 @@ IOCCC winning entries that did this to compile, we had to update them to not do
<pre><code> int this_is_fine;</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 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. This does not mean
<code>#include</code> of standard header files, just data files you provide.</p>
<p>On 28 January 2007, the Judges rescinded the requirement that the
<code>#</code> in a C preprocessor directive must be the 1st non-whitespace byte.</p>
<h3 id="about-compilers">About compilers</h3>
<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
under <strong>BOTH</strong> <code>gcc</code> <strong>AND</strong> <code>clang</code>. <strong>Hint!</strong></p>
@@ -929,7 +987,11 @@ submission’s <code>Makefile</code> are supported by <strong>BOTH</strong> <cod
<p>We <strong>DISLIKE</strong> the use of obscure compiler flags, especially
if <code>gcc</code> and/or <code>clang</code> do not support it. We <strong>suggest</strong>
that you not use any really obscure compiler flags if you can help it.</p>
<div id="about-nested-functions">
<div id="nested-functions">
<h3 id="about-nested-functions">About nested functions</h3>
</div>
</div>
<p>One side effect of the above is that you cannot assume the use
of nested functions such as:</p>
<pre><code> int main() {
@@ -938,12 +1000,12 @@ of nested functions such as:</p>
}
| please_dont_submit_this();
}</code></pre>
</div>
<p>On 2012 July 20, the <a href="../judges.html">IOCCC judges</a> rescinded the encouragement of
<p>On 2012 July 20, the <a href="../judges.html">Judges</a> 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 <strong>BOTH</strong> <code>gcc</code> <strong>AND</strong> <code>clang</code>.</p>
<p>We <strong>DISLIKE</strong> submissions that require the use of <code>-fnested-functions</code>.</p>
<h3 id="about-variadic-functions">About variadic functions</h3>
<p>If your submission uses functions that have a variable number of
arguments, <strong>be careful</strong>. Systems implement <code>va_list</code> in a wide variety
of ways. Because of this, a number of operations using <code>va_list</code> <strong>are
@@ -958,7 +1020,9 @@ not portable and <em>must not</em> be used</strong>:</p>
</ul>
<p>In particular, do not treat <code>va_list</code> variables as if they were a <code>char **</code>.</p>
<p>We <strong>DISLIKE</strong> the use of <code>varargs.h</code>. Use <code>stdarg.h</code> instead.</p>
<h3 id="about-io">About I/O</h3>
<p>We <strong>DISLIKE</strong> the use of <code>gets(3)</code>. Use <code>fgets(3)</code> instead.</p>
<h3 id="about-tarballs">About tarballs</h3>
<p>We tend to <strong>DISLIKE</strong> 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
@@ -967,10 +1031,14 @@ tarball <strong>MUST</strong> be explained in the <code>remarks.md</code> file.<
Using a mass of <code>goto</code>s to obfuscate your code has become ‘old’ and is unlikely
to make it through the final rounds, if it even gets that far.
</p>
<p>On 28 January 2007, the Judges rescinded the requirement that the
<code>#</code> in a C preprocessor directive must be the 1st non-whitespace byte.</p>
<div id="about-stdib">
<h3 id="about-stdlib">About stdlib</h3>
</div>
<p>The <code>exit(3)</code> function returns <code>void</code>. Some broken systems have <code>exit(3)</code>
return <code>int</code>; your submission should assume that <code>exit(3)</code> returns a <code>void</code>.</p>
<div id="small">
<h3 id="what-it-means-to-be-small">What it means to be small</h3>
</div>
<p>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
@@ -979,6 +1047,26 @@ programs that are compact, and are instructional.</p>
<p>One line programs should be short one line programs: say around <strong>80</strong> to <strong>132</strong>
bytes long. Going well beyond <strong>132</strong> bytes is a bit too long to be called
a one-liner in our vague opinion.</p>
<p>We suggest that you avoid trying for the ‘<strong>smallest self-replicating</strong>’
source. The smallest, a <a href="../1994/smr/index.html">zero byte entry</a>, won in
<a href="../years.html#1994">1994</a>.</p>
<p>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.</p>
<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>
<p>Unless you are cramped for space, or unless you are entering the
‘<strong>Best one liner</strong>’ category, we suggest that you format your program
in a more creative way than simply forming excessively long lines.</p>
<p>The <code>Makefile</code> should not be used to try and get around the size limit. It is
one thing to make use of a several <code>-D</code>s on the compile line to help out, but it
is quite another to use many bytes of <code>-D</code>s in order to try and squeeze the
source under the size limit.</p>
<p>Please do not use things like <code>gzip(1)</code> to get around the size limit. This was
done years ago; please try to be much more creative.</p>
<p>Your source code, post-pre-processing, should not exceed the size of
<a href="https://en.wikipedia.org/wiki/Microsoft_Windows">Microsoft Windows</a>. :-)</p>
<h3 id="about-environment">About environment</h3>
<p>We tend to <strong>DISLIKE</strong> programs that:</p>
<ul>
<li>are very hardware specific</li>
@@ -1011,15 +1099,6 @@ Specification</a>
(UNIX-like) environment. Therefore do not assume the system has a
<a href="https://en.wikipedia.org/wiki/Windows.h">windows.h</a> include file:</p>
<pre><code> #include &lt;windows.h&gt; /* we DISLIKE this */</code></pre>
<p>Unless you are cramped for space, or unless you are entering the
‘<strong>Best one liner</strong>’ category, we suggest that you format your program
in a more creative way than simply forming excessively long lines.</p>
<p>The <code>Makefile</code> should not be used to try and get around the size limit. It is
one thing to make use of a several <code>-D</code>s on the compile line to help out, but it
is quite another to use many bytes of <code>-D</code>s in order to try and squeeze the
source under the size limit.</p>
<p>Your source code, post-pre-processing, should not exceed the size of
<a href="https://en.wikipedia.org/wiki/Microsoft_Windows">Microsoft Windows</a>. :-)</p>
<p class="leftbar">
You should try to restrict commands used in the build file to commands found in
<a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX
@@ -1033,28 +1112,8 @@ absolute one. The intent is to ensure that the building of your
program is reasonably portable.</p>
<p>We prefer programs that are portable across a wide variety of UNIX-like
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
<strong>WITHOUT human intervention</strong>. So don’t do things such as:</p>
<pre><code> prog: prog.c
#echo this next line requires data from standard input
cat &gt; prog.c
${CC} prog.c -o prog</code></pre>
<p>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 <code>Makefile</code>:</p>
<pre><code> prog: prog.c
${CC} prog.c -DNON_HUMAN_COMPILE -o prog
@echo &quot;See remarks section about alternate ways to compile&quot;</code></pre>
<p>and then include special notes in your <code>remarks.md</code> file for
alternate / human intervention based building.</p>
<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>
<p>Please do not use things like <code>gzip(1)</code> to get around the size limit. This was
done years ago; please try to be much more creative.</p>
<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. This does not mean
<code>#include</code> of standard header files, just data files you provide.</p>
<p>Try to avoid submissions that play music that some people believe is copyrighted
music.</p>
<p>Did we remember to indicate that programs that blatantly use
some complex state machine to do something simple, are boring?
We think we did. :-)</p>
@@ -1064,15 +1123,9 @@ 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
<a href="rules.html">IOCCC rules</a>
<a href="rules.html">Rules</a>
for details (in particular,
<a href="rules.html#rule8-submitting-requirements">Rule 8 - Submitting requirements</a>).</p>
<p>We suggest that you avoid trying for the ‘<strong>smallest self-replicating</strong>’
source. The smallest, a <a href="../1994/smr/index.html">zero byte entry</a>, won in
<a href="../years.html#1994">1994</a>.</p>
<p>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.</p>
<p>Please note that the C source below, besides lacking in obfuscation,
is <strong>NOT</strong> the smallest C source file that when compiled and run, dumps core:</p>
<pre><code> main;</code></pre>
@@ -1086,6 +1139,21 @@ sort of code will work:</p>
<p>Initialized char arrays are OK to write over. For instance, this is OK:</p>
<pre><code> char b[] = &quot;Is this OK&quot;;
b[9] = &#39;k&#39;; /* modifying an initialized char array is OK */</code></pre>
<p>We prefer code that can run on either a 64-bit or 32-bit
processor. However, it is <strong>UNWISE </strong>to assume it will run on an
some Intel-like x86 architecture**.</p>
<p>While programs that only run in a specific word size are OK, if you have
to pick, choose a 64-bit word size.</p>
<p>If your submission <strong>MUST</strong> run only on a 64-bit or 32-bit architecture,
then you <strong>MUST</strong> specify the <code>-arch</code> on your command line
(see <code>ARCH</code> in the example
Makefile, described in <a href="#makefile">Makefile section</a>). Do not assume a
processor word size without specifying <code>-arch</code>. For example:</p>
<pre><code> ARCH= -m64</code></pre>
<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
32-bit, and more than zero Judges use it!</p>
<h3 id="about-x">About X</h3>
<p>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.
@@ -1108,32 +1176,40 @@ open source toolkit that is widely and freely available instead.</p>
<code>.Xdefaults</code>. If you must do so, be sure to note the required lines
in the your <code>remarks.md</code> file. They should also not depend on any
particular window manager.</p>
<p>Try to avoid submissions that play music that some people believe is copyrighted
music.</p>
<p>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 <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX
Specification</a>
(UNIX-like).</p>
<p>You are <strong>well advised</strong> to submit code that conforms to the <a href="https://unix.org/version4/overview.html">Single UNIX
Specification Version 4</a>.</p>
<p>To quote the <a href="../judges.html">IOCCC judges</a>:</p>
<p>We <strong>LIKE</strong> programs that:</p>
<ul>
<li>are as concise and small as they need to be</li>
<li>do something at least quasi-interesting</li>
<li>are portable</li>
<li>are unique or novel in their obfuscation style</li>
<li>make use of a <strong>NUMBER OF DIFFERENT TYPES OF OBFUSCATIONS!</strong> <strong>&lt;== HINT!!</strong></li>
<li>make us laugh and/or throw up :-) (humor really helps!)</li>
<li>make us want to eat good chocolate</li>
</ul>
<p>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.</p>
<h3 id="about-curses">About Curses</h3>
<p>One should restrict libcurses to portable features found on both BSD
and Linux curses.</p>
<p class="leftbar">
If you do <code>#include &lt;curses.h&gt;</code> make <strong>CERTAIN</strong> you link in curses (i.e.
<code>-lcurses</code>) and not ncurses (i.e. <code>-lncurses</code>).
</p>
<p>Jump to: <a href="#">top</a></p>
<div id="about_tab">
<h3 id="about-ascii-tab">About ASCII TAB</h3>
</div>
<p>We <strong>DISLIKE</strong> the use of ASCII tab characters in markdown files, such as in the required <code>remarks.md</code> file.</p>
<p>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 <strong>OK</strong> 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.</p>
<p>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.</p>
<p><strong>PLEASE</strong> observe our <a href="../markdown.html">Markdown Guidelines</a>
when forming your submission’s <code>remarks.md</code> file. And if your submission
contains additional markdown files, please follow those same Guidelines for
those files. See also
<a href="rules.html#rule4-required-files">Rule 4 - Required files</a>,
and the
FAQ on “<a href="../faq.html#markdown">markdown</a>”.</p>
<p>Jump to: <a href="#">top</a></p>
<div id="remarks">
<h3 id="about-remarks.md">About remarks.md</h3>
</div>
<p>You are better off explaining what your submission does in your
<code>remarks.md</code> file section rather than leaving it obscure for the
<a href="../judges.html">IOCCC judges</a> as we might miss something and/or be too tired to
<a href="../judges.html">Judges</a> as we might miss something and/or be too tired to
notice.</p>
<p>We freely admit that interesting, creative or humorous comments in
your <code>remarks.md</code> file help your chances of winning. If you had to
@@ -1141,21 +1217,6 @@ 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 <code>remarks.md</code> content during the judging process, so it is worth your
while to write a remarkable <code>remarks.md</code> file.</p>
<p>We <strong>DISLIKE</strong> C code with trailing control-M’s (<code>\r</code> or <code>\015</code>) 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.</p>
<p>One should restrict libcurses to portable features found on both BSD
and Linux curses.</p>
<p class="leftbar">
If you do <code>#include &lt;curses.h&gt;</code> make <strong>CERTAIN</strong> you link in curses (i.e.
<code>-lcurses</code>) and not ncurses (i.e. <code>-lncurses</code>).
</p>
<p><a href="rules.html#rule12-utf8">Rule 12 - UTF-8</a>
no longer discourages the use of UTF-8
characters in C code.</p>
<p>It is a very good idea to, in your <code>remarks.md</code> 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
@@ -1171,34 +1232,49 @@ suggest you remark on this point in your <code>remarks.md</code> 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!</p>
<p>We prefer code that can run on either a 64-bit or 32-bit
processor. However, it is <strong>UNWISE </strong>to assume it will run on an
some Intel-like x86 architecture**.</p>
<p>While programs that only run in a specific word size are OK, if you have
to pick, choose a 64-bit word size.</p>
<p>If your submission <strong>MUST</strong> run only on a 64-bit or 32-bit architecture,
then you <strong>MUST</strong> specify the <code>-arch</code> on your command line
(see <code>ARCH</code> in the example
Makefile, described in <a href="#makefile">Makefile section</a>). Do not assume a
processor word size without specifying <code>-arch</code>. For example:</p>
<pre><code> ARCH= -m64</code></pre>
<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
32-bit, and more than zero judges use it!</p>
<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
submission factors values up to a certain size, you might want to state:</p>
<p>We <strong>LIKE</strong> reading <code>remarks.md</code> files, especially if they contain
useful, informative, and even humorous content about your submission. Yes, this
is a <strong>hint</strong>. :-)</p>
<p>We <strong>RECOMMEND</strong> you put a reasonable amount effort into the content of the
<code>remarks.md</code> file: it is a required file for a reason. :-)</p>
<p>Try to be even more creative!</p>
<p>Jump to: <a href="#">top</a></p>
<h3 id="miscellaneous">Miscellaneous</h3>
<p>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 <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX
Specification</a>
(UNIX-like).</p>
<p>You are <strong>well advised</strong> to submit code that conforms to the <a href="https://unix.org/version4/overview.html">Single UNIX
Specification Version 4</a>.</p>
<p>To quote the <a href="../judges.html">Judges</a>:</p>
<p>We <strong>LIKE</strong> programs that:</p>
<ul>
<li>are as concise and small as they need to be</li>
<li>do something at least quasi-interesting</li>
<li>are portable</li>
<li>are unique or novel in their obfuscation style</li>
<li>make use of a <strong>NUMBER OF DIFFERENT TYPES OF OBFUSCATIONS!</strong> <strong>&lt;== HINT!!</strong></li>
<li>make us laugh and/or throw up :-) (humor really helps!)</li>
<li>make us want to eat good chocolate</li>
</ul>
<p>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.</p>
<blockquote>
<p>This submission factors values up <code>2305567963945518424753102147331756070</code>.
Attempting to factor larger values will produce unpredictable results.</p>
</blockquote>
<p>The <a href="../judges.html">IOCCC judges</a> might try to factor the value -5, so you want to might state:</p>
<p>The <a href="../judges.html">Judges</a> might try to factor the value -5, so you want to might state:</p>
<blockquote>
<p>This submission factors positive values up
<code>2305567963945518424753102147331756070</code>. Attempting to factor large values will
produce unpredictable results.</p>
</blockquote>
<p>However the <a href="../judges.html">IOCCC judges</a> might try to also factor 0, so you want to might state:</p>
<p>However the <a href="../judges.html">Judges</a> might try to also factor 0, so you might want to state:</p>
<blockquote>
<p>This submission factors values between 1 and
<code>2305567963945518424753102147331756070</code>. Attempting to factor values outside
@@ -1216,7 +1292,7 @@ and doing something interesting. So you might want to code accordingly and state
<p>This submission factors integers between 1 and <code>2305567963945518424753102147331756070</code>.
Attempting to factor anything else will cause the program to insult your pet fish Eric.</p>
</blockquote>
<p>The <a href="../judges.html">IOCCC judges</a> might not have a pet fish named Eric, so you might want to state:</p>
<p>The <a href="../judges.html">Judges</a> might not have a pet fish named Eric, so you might want to state:</p>
<blockquote>
<p>This submission factors integers between 1 and
<code>2305567963945518424753102147331756070</code>. Attempting to factor anything else
@@ -1231,28 +1307,6 @@ and state:</p>
program is given enough time and memory. If the value is not a proper integer,
the program might insult a fish named Eric.</p>
</blockquote>
<p>We <strong>DISLIKE</strong> the use of ASCII tab characters in markdown files, such as in the required <code>remarks.md</code> file.</p>
<p>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 <strong>OK</strong> 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.</p>
<p>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.</p>
<p><strong>PLEASE</strong> observe our <a href="../markdown.html">IOCCC markdown guidelines</a>
when forming your submission’s <code>remarks.md</code> file. And if your submission
contains additional markdown files, please follow those same guidelines for
those files. See also
<a href="rules.html#rule4-required-files">Rule 4 - Required files</a>,
and the
FAQ on “<a href="../faq.html#markdown">markdown</a>”.</p>
<p>We <strong>LIKE</strong> reading <code>remarks.md</code> files, especially if they contain
useful, informative, and even humorous content about your submission. Yes, this
is a <strong>hint</strong>. :-)</p>
<p>We <strong>RECOMMEND</strong> you put a reasonable amount effort into the content of the
<code>remarks.md</code> file: it is a required file for a reason. :-)</p>
<p>Try to be even more creative!</p>
<p>Jump to: <a href="#">top</a></p>
<div id="mkiocccentry">
<div id="mkiocccentry_toolkit">
@@ -1281,10 +1335,10 @@ as submissions that use an older version are <strong>LIKELY</strong> to be <stro
“<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>”
in the <code>fnamchk(1)</code> man page.</p>
<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>”
<p>Do <strong>NOT</strong> use <code>chksubmit(1)</code> command line options that are labeled “<strong>for the use by the Judges only</strong>”
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
by the IOCCC judges only</strong>” in the <code>chkentry(1)</code> man page.</p>
by the 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,
while your current directory is the top of the source tree:</p>
<pre><code> man soup/man/man1/mkiocccentry.1
@@ -1426,7 +1480,7 @@ tool to abort with a <strong>fatal error</strong>.
</p>
<p>See
FAQ on “<a href="../faq.html#mkiocccentry_bugs">How do I report bugs in an <code>mkiocccentry</code> tool?</a>”.</p>
<p>See <a href="rules.html#rule11-legal-rulea-abuse">Rule 11 - Legal rule abuse</a> for warnings about ignoring <code>mkiocccentry(1)</code> tool warnings.</p>
<p>See <a href="rules.html#rule11-legal-rule-abuse">Rule 11 - Legal rule abuse</a> for warnings about ignoring <code>mkiocccentry(1)</code> tool warnings.</p>
<p>See
FAQ on “<a href="../faq.html#fnamchk">What is the <code>fnamchk</code> tool?</a>”.</p>
<p>See
@@ -1446,7 +1500,7 @@ may be found on the <a href="https://t5k.org/curios/page.php/2503.html">“Curio
of the number of the kernel disk pack of one of the judge’s <a href="https://en.wikipedia.org/wiki/BESM-6">BESM-6</a>.</p>
<p class="leftbar">
There may or may not be fewer than 2^7+1 reasons why these
<a href="guidelines.html">IOCCC guidelines</a> seem obfuscated.
<a href="guidelines.html">Guidelines</a> seem obfuscated.
</p>
<p class="leftbar">
Excessively “<em>dotty”</em> use of the <code>chksubmit(1)</code> or <code>chkentry(1)</code> commands suggests that
@@ -1475,21 +1529,21 @@ after the minute mark is <strong>60</strong>.</p>
<p>Other windows, on the other hand, might be OK: especially where “<strong>X
marks the spot</strong>”. Yet on the third hand, windows are best when they are
“unseen” (i.e., not dirty). :-)</p>
<p>The <a href="../judges.html">IOCCC judges</a>, as a group, have a history giving wide degree of latitude
<p>The <a href="../judges.html">Judges</a>, 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 <a href="https://science.nasa.gov/earth/">Earth</a>. :-)
Other windows, on the other hand, might be OK: especially where “<strong>X
marks the spot</strong>”. Yet on the third hand, windows are best when they are
“unseen” (i.e., not dirty). :-)</p>
<p>The <a href="../judges.html">IOCCC judges</a>, as a group, have a history giving wide degree of latitude
<p>The <a href="../judges.html">Judges</a>, 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 <a href="https://science.nasa.gov/earth/">Earth</a>. :-)</p>
<blockquote>
<p>You are in a maze of twisty <em>guidelines</em>, all different.</p>
</blockquote>
<p>There are at least zero <a href="../judges.html">IOCCC judges</a> who think that
<p>There are at least zero <a href="../judges.html">Judges</a> who think that
<a href="https://en.wikipedia.org/wiki/Fideism">Fideism</a> has little
or nothing to do with the IOCCC judging process.</p>
or nothing to do with the Judging process.</p>
<blockquote>
<p>All generalizations are false, including this one. – <strong>Mark Twain</strong></p>
</blockquote>
@@ -1526,7 +1580,7 @@ Please try to avoid this specific individual <em>guideline</em>, if it is at all
<p class="leftbar">
We do not recommend submitting <a href="https://systemd.io">systemd</a> source code to the IOCCC,
if nothing else because that code is likely to exceed
<a href="rules.html#rule2-size">Rule 2 - Size</a>.
<a href="rules.html#rule2-size">Rule 2 - Size restrictions</a>.
This isn’t to say that another highly compact and obfuscated
replacement of <code>init(8)</code> would not be an interesting submission.
</p>
@@ -1537,7 +1591,7 @@ is not an original work, unless you one of the
<a href="https://github.com/ioccc-src/mkiocccentry/graphs/contributors">several mkiocccentry toolkit contributors</a>.
in which case it is original! :-)
Even so, most of the programs in the toolkit exceed the
<a href="rules.html#rule2-size">Rule 2 - Size</a>
<a href="rules.html#rule2-size">Rule 2 - Size restrictions</a>
so they wouldn’t qualify for the contest anyway.
</p>
<p class="leftbar">
@@ -1555,32 +1609,18 @@ With respect to <a href="#nested-functions">nested functions</a>, try <code>chke
<p>Jump to: <a href="#">top</a></p>
<div id="more-information">
<div id="information">
<h1 id="for-more-information">For more information</h1>
<h1 id="further-reading">Further Reading</h1>
</div>
</div>
<p>For questions or comments about the contest, see <a href="../contact.html">Contacting the IOCCC</a>.</p>
<p><strong>Be SURE</strong> to review the <a href="index.html">IOCCC Rules and Guidelines</a> as they
may (and <strong>often do</strong>) change from year to year.</p>
<p><strong>PLEASE</strong> be sure you have the current <a href="rules.html">IOCCC rules</a> and
<a href="guidelines.html">IOCCC guidelines</a> prior to submitting to the contest.</p>
<p>See the <a href="../news.html">Official IOCCC website news</a> for additional information.</p>
<p>For the updates and breaking IOCCC news, you are encouraged to follow
the <a href="https://fosstodon.org/@ioccc">IOCCC on Mastodon</a>. See our
<p>For questions or comments about the contest, see <a href="../contact.html">Contacting the IOCCC</a>.</p>
<p><strong>Be SURE</strong> to review the current <a href="index.html">IOCCC Rules and Guidelines</a> as they
often change year to year. Especially prior to submitting to the contest.</p>
<p>For the latest IOCCC news, follow the <a href="https://fosstodon.org/@ioccc">IOCCC on Mastodon</a>. See our
FAQ on “<a href="../faq.html#try_mastodon">Mastodon</a>”
for more information. Please do note that unless
you are mentioned by us you will <strong>NOT</strong> get a notification from the app <em>so you
should refresh the page <strong>even if you do follow us</strong></em>.</p>
<p>Check out the <a href="https://www.ioccc.org/index.html">Official IOCCC winner website</a> in general.</p>
<p>Consider joining the IOCCC discord community via this link:
<a href="https://discord.gg/Wa42Qujwnw">https://discord.gg/Wa42Qujwnw</a></p>
<p>See the
FAQs on “<a href="../faq.html#mkiocccentry">obtaining, compiling, installing and using the mkiocccentry tools</a>”
and the
FAQ on “<a href="../quick-start.html#enter">how to enter the IOCCC</a>”
as that FAQ has important details on
<a href="../next/register.html">how to register</a>
as well as
<a href="../next/submit.html">how to upload your submission</a> for the IOCCC.</p>
for more information.</p>
<p>Also consider joining the <a href="https://discord.com/invite/Wa42Qujwnw">IOCCC Discord Server</a>
for the latest news, discussions about The Rules, questions for the Judges, and <code>C</code> in general.</p>
<hr style="width:10%;text-align:left;margin-left:0">
<p>Jump to: <a href="#">top</a>
<!-- AFTER: last line of markdown file: next/guidelines.md --></p>
+369 -271
View File
File diff suppressed because it is too large. Load diff
+24 -20
View File
@@ -480,7 +480,7 @@ granted provided this copyright and notice are included in its entirety
and remains unaltered. All other uses <strong>MUST</strong> receive prior permission in
writing by <a href="../contact.html">contacting the judges</a>.</p>
<h2 id="rules-version">Rules Version</h2>
<p>These IOCCC Rules are version <strong>29.12 2025-12-01</strong>.</p>
<p>These IOCCC Rules are version <strong>29.13 2025-12-01</strong>.</p>
<p class="leftbar">
The <span style="font-size:28px;"><b>|</b></span> symbol indicates an <strong>change</strong> from the previous IOCCC.
</p>
@@ -521,46 +521,40 @@ FAQ on “<a href="../faq.html#feedback">How can I comment or make a suggestion
<p class="leftbar">
Your submission <strong>MUST</strong> be a C program.
</p>
<p>See the <a href="guidelines.html#guidelines-for-rule-1---c-program">Guidelines for Rule 1 - C program</a>.</p>
<p>See the <a href="guidelines.html#guideline1-c">Guidelines for Rule 1 - C program</a>.</p>
<div id="rule2">
<div id="rule2-size-restrictions">
<div id="rule2-size">
<div id="rule-2---size">
<h2 id="rule-2---size-restrictions">Rule 2 - Size restrictions</h2>
</div>
</div>
</div>
</div>
<p><code>Rule 2</code> requires that your submission satisfy <strong>BOTH</strong>
<a href="rules.html#rule2a">Rule 2a (Gross Size)</a>
and
<a href="rules.html#rule2b">Rule 2b (Net Size)</a>.
During development this can be checked using <code>iocccsize(1)</code>:</p>
<pre><code> iocccsize prog.c</code></pre>
<p>See the <a href="guidelines.html#guideline-2---size">Guidelines for Rule 2 - Size restrictions</a>.</p>
<p>See the <a href="guidelines.html#guideline2-size">Guidelines for Rule 2 - Size restrictions</a>.</p>
<div id="rule2a">
<div id="rule2a-gross-size">
<div id="rule-2a-gross-size">
<h3 id="rule-2a---gross-size">Rule 2a - Gross Size</h3>
</div>
</div>
</div>
<p>The overall maximum size of your <code>prog.c</code> program source <strong>MUST NOT</strong>
exceed <strong>4993</strong> bytes.</p>
<p>See <a href="../quick-start.html#enter">Entering the IOCCC: the bare minimum you need to know</a>.</p>
<div id="rule2b">
<div id="rule2b-net-size">
<div id="rule-2b-net-size">
<h3 id="rule-2b---net-size">Rule 2b - Net Size</h3>
</div>
</div>
</div>
<p>When the filename of your program source (i.e., <code>prog.c</code>) is given as a
command line argument to the latest version of the official IOCCC size
tool (hereby referred to as <code>iocccsize(1)</code>), the value printed <strong>MUST
NOT</strong> exceed <strong>2503</strong>.</p>
<p><strong>NOTE</strong>: <code>iocccsize</code> does <strong>NOT</strong> calculate the filename length. See <a href="#rule17-mkiocccentry">Rule 17 -
Use mkiocccentry</a>.</p>
<p><strong>NOTE</strong>: <code>iocccsize</code> does <strong>NOT</strong> calculate the filename length.</p>
<p>See <a href="#rule17-mkiocccentry">Rule 17 - Use mkiocccentry</a>.</p>
<div id="rule3">
<div id="rule3-register">
<h2 id="rule-3---register-for-the-ioccc">Rule 3 - Register for the IOCCC</h2>
@@ -572,7 +566,7 @@ to the IOCCC. You may register while the contest is <strong>pending</strong> or
temporary password, which you <strong>MUST</strong> change within 14 days.</p>
<p>See <a href="register.html">How to register for the IOCCC</a>.</p>
<p>See <a href="../quick-start.html#enter">Entering the IOCCC: the bare minimum you need to know</a>.</p>
<p>See <a href="guidelines.html#guideline-3---register">Guidelines for Rule 3 - Register for the IOCCC</a>.</p>
<p>See <a href="guidelines.html#guideline3-register">Guidelines for Rule 3 - Register for the IOCCC</a>.</p>
<div id="rule4">
<div id="rule4-required-files">
<h2 id="rule-4---required-files">Rule 4 - Required files</h2>
@@ -645,9 +639,9 @@ a case insensitive filesystem.</p>
<p>See <a href="rules.html#rule17-mkiocccentry">Rule 17 - Use mkiocccentry</a>.</p>
<p>See the
FAQ on “<a href="../faq.html#file_perms">What permissions may my files be and what if I need different permissions?</a>”.</p>
<p>See the <a href="guidelines.html#mkiocccentry_toolkit">Guidelines on the mkiocccentry toolkit</a>.</p>
<p>See the
FAQ on “<a href="../faq.html#makefile_details">What are the detailed recommendations for a submission Makefile?</a>”.</p>
<p>See the <a href="guidelines.html#mkiocccentry_toolkit">Guidelines on the mkiocccentry toolkit</a>.</p>
<div id="rule5">
<div id="rule5-modifying-files">
<h2 id="rule-5---do-not-modify-submitted-files-or-filenames-or-parent-directories">Rule 5 - Do NOT modify submitted files or filenames or parent directories</h2>
@@ -678,7 +672,7 @@ Your code should be able to run under a
<pre><code> while (!(ioccc(rule(you(are(number(6)))))) {
ha(); ha(); ha();
}</code></pre>
<p>See <a href="rules.html#rule-19---prime">Rule 19 - Prime</a>.</p>
<p>See <a href="rules.html#rule19-prime">Rule 19 - Prime</a>.</p>
<div id="rule7">
<div id="rule7-original-work">
<h2 id="rule-7---original-work">Rule 7 - Original Work</h2>
@@ -696,7 +690,7 @@ You are permitted to use tools to write your code.
</p>
<p>See <a href="rules.html#rule16-anonymous-judging">Rule 16 - Anonymous Judging</a>,
and
<a href="guidelines.html#guideline-7---original-work">Guidelines for Rule 7 - Original Work</a>.</p>
<a href="guidelines.html#guideline7-original">Guidelines for Rule 7 - Original Work</a>.</p>
<div id="rule8">
<div id="rule8-submitting-requirements">
<h2 id="rule-8---submitting-requirements">Rule 8 - Submitting requirements</h2>
@@ -720,9 +714,12 @@ validate your submission.
<a href="rules.html#rule15-gnu-makefile">Rule 15 - GNU Makefile</a>,
and
<a href="rules.html#rule17-mkiocccentry">Rule 17 - Use mkiocccentry</a>.</p>
<p>See <a href="guidelines.html#guideline8-submitting">Guidelines for Rule 8 - Submitting requirements</a>.</p>
<div id="rule9">
<div id="rule9-no-interactive">
<h2 id="rule-9---no-interactive-compiling-allowed">Rule 9 - No interactive compiling allowed</h2>
</div>
</div>
<p>Entries requiring human interaction to be initially compiled are <strong>NOT</strong>
permitted. However, see the guidelines. Each entry <strong>MUST</strong> automate the
build process using <code>bash</code>, <code>gmake</code>, <code>gcc</code> and/or <code>clang</code> and other commonly
@@ -734,6 +731,7 @@ the make command.</p>
<p><strong>NOTE</strong>: it is better and more portable to <strong>NOT</strong> modify the <code>${CC}</code> variable
in the Makefile.</p>
<p>See <a href="rules.html#rule15-gnu-makefile">Rule 15 - GNU Makefile</a>.</p>
<p>See <a href="guidelines.html#guideline9-no-interactive">Guidelines for Rule 9 - No interactive compiling allowed</a>.</p>
<div id="rule10">
<h2 id="rule-10---program-file-permissions">Rule 10 - Program file permissions</h2>
</div>
@@ -772,7 +770,7 @@ is rejected.</p>
version, <strong>PLEASE</strong> indicate that in your <code>remarks.md</code> file of your non-rule
abusing version so that the Judges don’t think you uploaded a duplicate into a
wrong slot by mistake.</p>
<p>See <a href="guidelines.html#guideline-11---abuse">Guidelines for Rule 11 - Legal rule abuse</a>.</p>
<p>See <a href="guidelines.html#guideline11-abuse">Guidelines for Rule 11 - Legal rule abuse</a>.</p>
<div id="rule12">
<div id="rule12-utf8">
<h2 id="rule-12---utf-8">Rule 12 - UTF-8</h2>
@@ -780,9 +778,12 @@ wrong slot by mistake.</p>
</div>
<p>Use of UTF-8 is supported by <code>C89</code> standard and its updates and so too by the
IOCCC.</p>
<p>See <a href="guidelines.html#guideline12-utf8">Guidelines for Rule 12 - UTF-8</a>.</p>
<div id="rule13">
<div id="rule13-nocr">
<h2 id="rule-13---no-carriage-returns-in-prog.c">Rule 13 - No carriage returns in prog.c</h2>
</div>
</div>
<p>Any C source that fails to compile because lines contain carriage-returns
(CTRL+M, <code>\r</code>) in particular as part of DOS/Windows style newlines might
be rejected. Please do <strong>NOT</strong> put trailing CTRL+M in <code>prog.c</code>, <code>Makefile</code>,
@@ -795,6 +796,7 @@ limits, to <strong>NOT</strong> end source with a newline. If you
need to do this, please document that in your <code>remarks.md</code> file and if
your compiler complains about this, document this too and update your
<code>Makefile</code> to account for this.</p>
<p>See <a href="guidelines.html#guideline13-nocr">Guidelines for Rule 13 - No carriage returns in prog.c</a>.</p>
<div id="rule14">
<h2 id="rule-14---resubmitting-lost-submissions">Rule 14 - Resubmitting lost submissions</h2>
</div>
@@ -839,7 +841,7 @@ GNU long name options (such as <code>--example</code>) or extensions like <code>
<p>See <a href="rules.html#rule4-required-files">Rule 4 - Required files</a>.</p>
<p>See
FAQ on “<a href="../faq.html#makefile_details">What are the detailed recommendations for a submission Makefile?</a>”.</p>
<p>See <a href="guidelines.html#guideline-15---building">Guidelines for Rule 15 - GNU Makefile</a>.</p>
<p>See <a href="guidelines.html#guideline15-gnu-makefile">Guidelines for Rule 15 - GNU Makefile</a>.</p>
<div id="rule16">
<div id="rule16-anonymous-judging">
<h2 id="rule-16---anonymous-judging">Rule 16 - Anonymous judging</h2>
@@ -900,7 +902,7 @@ to the command’s <code>-h</code> “<em>print help message</em>”, again notw
for testing and the IOCCC judges.
</p>
<p class="leftbar">
The <code>prog.c</code> file should pass the <a href="rules.html#rule2-size">Rule 2 - Size</a>
The <code>prog.c</code> file should pass the <a href="rules.html#rule2-size">Rule 2 - Size restrictions</a>
checks performed by <code>iocccsize(1)</code>.
</p>
<p class="leftbar">
@@ -915,16 +917,18 @@ version of the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
<p>See <a href="rules.html#rule4-required-files">Rule 4 - Required files</a>.</p>
<p>See the
FAQ on “<a href="../faq.html#mkiocccentry">What is the mkiocccentry tool, how do I obtain it and how do I use it?</a>”.</p>
<p>See the <a href="guidelines.html#guideline-17---packaging">Guidelines for Rule 17 - Use mkiocccentry</a>.</p>
<p>See the <a href="guidelines.html#guideline17-mkiocccentry">Guidelines for Rule 17 - Use mkiocccentry</a>.</p>
<div id="rule18">
<h2 id="rule-18---submission-license">Rule 18 - Submission license</h2>
</div>
<p>The entirety of your submission <strong>MUST</strong> be submitted under the following license:</p>
<p><a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0 International</a></p>
<p>See <a href="rules.html#rule-7---original-work">Rule 7 - Original Work</a>.</p>
<p>See <a href="rules.html#rule7-original-work">Rule 7 - Original Work</a>.</p>
<div id="rule19">
<div id="rule19-prime">
<h2 id="rule-19---prime">Rule 19 - Prime</h2>
</div>
</div>
<p class="leftbar">
This 19th rule, while prime, is reserved for future abuse 😁.
Additional rules, both humorous and otherwise, may be added
+30 -21
View File
@@ -39,7 +39,7 @@ writing by [contacting the judges](../contact.html).
## Rules Version
These IOCCC Rules are version **29.12 2025-12-01**.
These IOCCC Rules are version **29.13 2025-12-01**.
<p class="leftbar">
The <span style='font-size:28px;'><b>&verbar;</b></span> symbol indicates an **change** from the previous IOCCC.
@@ -97,18 +97,16 @@ FAQ on "[How can I comment or make a suggestion on IOCCC rules, guidelines and t
Your submission **MUST** be a C program.
</p>
See the [Guidelines for Rule 1 - C program](guidelines.html#guidelines-for-rule-1---c-program).
See the [Guidelines for Rule 1 - C program](guidelines.html#guideline1-c).
<div id="rule2">
<div id="rule2-size-restrictions">
<div id="rule2-size">
<div id="rule-2---size">
## Rule 2 - Size restrictions
</div>
</div>
</div>
</div>
`Rule 2` requires that your submission satisfy **BOTH**
[Rule 2a &lpar;Gross Size&rpar;](rules.html#rule2a)
@@ -120,16 +118,14 @@ During development this can be checked using `iocccsize(1)`:
iocccsize prog.c
```
See the [Guidelines for Rule 2 - Size restrictions](guidelines.html#guideline-2---size).
See the [Guidelines for Rule 2 - Size restrictions](guidelines.html#guideline2-size).
<div id="rule2a">
<div id="rule2a-gross-size">
<div id="rule-2a-gross-size">
### Rule 2a - Gross Size
</div>
</div>
</div>
The overall maximum size of your `prog.c` program source **MUST NOT**
exceed **4993** bytes.
@@ -139,19 +135,18 @@ See [Entering the IOCCC: the bare minimum you need to know](../quick-start.html#
<div id="rule2b">
<div id="rule2b-net-size">
<div id="rule-2b-net-size">
### Rule 2b - Net Size
</div>
</div>
</div>
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. See [Rule 17 -
Use mkiocccentry](#rule17-mkiocccentry).
**NOTE**: `iocccsize` does **NOT** calculate the filename length.
See [Rule 17 - Use mkiocccentry](#rule17-mkiocccentry).
<div id="rule3">
@@ -170,7 +165,7 @@ 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 [Guidelines for Rule 3 - Register for the IOCCC](guidelines.html#guideline-3---register).
See [Guidelines for Rule 3 - Register for the IOCCC](guidelines.html#guideline3-register).
<div id="rule4">
@@ -265,11 +260,11 @@ 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)".
See the [Guidelines on the mkiocccentry toolkit](guidelines.html#mkiocccentry_toolkit).
See the
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).
<div id="rule5">
<div id="rule5-modifying-files">
@@ -311,7 +306,7 @@ I am **NOT** a Rule, I am a `free(void *human);` ‼️
ha(); ha(); ha();
}
```
See [Rule 19 - Prime](rules.html#rule-19---prime).
See [Rule 19 - Prime](rules.html#rule19-prime).
<div id="rule7">
@@ -334,7 +329,7 @@ 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#guideline-7---original-work).
[Guidelines for Rule 7 - Original Work](guidelines.html#guideline7-original).
<div id="rule8">
@@ -365,10 +360,14 @@ See
and
[Rule 17 - Use mkiocccentry](rules.html#rule17-mkiocccentry).
See [Guidelines for Rule 8 - Submitting requirements](guidelines.html#guideline8-submitting).
<div id="rule9">
<div id="rule9-no-interactive">
## Rule 9 - No interactive compiling allowed
</div>
</div>
Entries requiring human interaction to be initially compiled are **NOT**
permitted. However, see the guidelines. Each entry **MUST** automate the
@@ -386,6 +385,8 @@ in the Makefile.
See [Rule 15 - GNU Makefile](rules.html#rule15-gnu-makefile).
See [Guidelines for Rule 9 - No interactive compiling allowed](guidelines.html#guideline9-no-interactive).
<div id="rule10">
## Rule 10 - Program file permissions
@@ -435,7 +436,7 @@ 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#guideline-11---abuse).
See [Guidelines for Rule 11 - Legal rule abuse](guidelines.html#guideline11-abuse).
<div id="rule12">
@@ -447,10 +448,14 @@ See [Guidelines for Rule 11 - Legal rule abuse](guidelines.html#guideline-11---a
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).
<div id="rule13">
<div id="rule13-nocr">
## Rule 13 - No carriage returns in prog.c
</div>
</div>
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
@@ -466,6 +471,8 @@ 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).
<div id="rule14">
## Rule 14 - Resubmitting lost submissions
@@ -528,7 +535,7 @@ 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)".
See [Guidelines for Rule 15 - GNU Makefile](guidelines.html#guideline-15---building).
See [Guidelines for Rule 15 - GNU Makefile](guidelines.html#guideline15-gnu-makefile).
<div id="rule16">
@@ -608,7 +615,7 @@ for testing and the IOCCC judges.
</p>
<p class="leftbar">
The `prog.c` file should pass the [Rule 2 - Size](rules.html#rule2-size)
The `prog.c` file should pass the [Rule 2 - Size restrictions](rules.html#rule2-size)
checks performed by `iocccsize(1)`.
</p>
@@ -628,7 +635,7 @@ 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)".
See the [Guidelines for Rule 17 - Use mkiocccentry](guidelines.html#guideline-17---packaging).
See the [Guidelines for Rule 17 - Use mkiocccentry](guidelines.html#guideline17-mkiocccentry).
<div id="rule18">
@@ -639,12 +646,14 @@ The entirety of your submission **MUST** be submitted under the following licens
[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#rule-7---original-work).
See [Rule 7 - Original Work](rules.html#rule7-original-work).
<div id="rule19">
<div id="rule19-prime">
## Rule 19 - Prime
</div>
</div>
<p class="leftbar">
This 19th rule, while prime, is reserved for future abuse 😁.
+7 -7
View File
@@ -16758,11 +16758,11 @@
</url>
<url>
<loc>https://www.ioccc.org/faq.html</loc>
<lastmod>2025-12-01T05:53:50+00:00</lastmod>
<lastmod>2025-12-02T01:59:41+00:00</lastmod>
</url>
<url>
<loc>https://www.ioccc.org/faq.md</loc>
<lastmod>2025-12-01T05:53:50+00:00</lastmod>
<lastmod>2025-12-02T01:58:21+00:00</lastmod>
</url>
<url>
<loc>https://www.ioccc.org/inc/index.html</loc>
@@ -16826,11 +16826,11 @@
</url>
<url>
<loc>https://www.ioccc.org/next/guidelines.html</loc>
<lastmod>2025-12-01T12:23:32+00:00</lastmod>
<lastmod>2025-12-02T04:22:32+00:00</lastmod>
</url>
<url>
<loc>https://www.ioccc.org/next/guidelines.md</loc>
<lastmod>2025-12-01T12:23:12+00:00</lastmod>
<lastmod>2025-12-02T04:21:09+00:00</lastmod>
</url>
<url>
<loc>https://www.ioccc.org/next/index.html</loc>
@@ -16870,11 +16870,11 @@
</url>
<url>
<loc>https://www.ioccc.org/next/rules.html</loc>
<lastmod>2025-12-01T10:26:00+00:00</lastmod>
<lastmod>2025-12-02T04:16:29+00:00</lastmod>
</url>
<url>
<loc>https://www.ioccc.org/next/rules.md</loc>
<lastmod>2025-12-01T10:21:01+00:00</lastmod>
<lastmod>2025-12-02T04:13:05+00:00</lastmod>
</url>
<url>
<loc>https://www.ioccc.org/next/submit.html</loc>
@@ -16938,7 +16938,7 @@
</url>
<url>
<loc>https://www.ioccc.org/status.html</loc>
<lastmod>2025-12-01T09:18:23+00:00</lastmod>
<lastmod>2025-12-02T04:16:46+00:00</lastmod>
</url>
<url>
<loc>https://www.ioccc.org/status.json</loc>