improve references to IOCCC rules and IOCCC guidelines

Each individual IOCCC rule has its own div tag.

References to a specific IOCCC rule is now a link.

We now use the term **IOCCC rules** more consistency when
referring to the rules.

We now use the term **IOCCC guidelines** more consistency when
referring to the guidelines.

In the **IOCCC guidelines**, we use _guideline_ when
referring to a general guideline.

Updated  **IOCCC rules** and  **IOCCC guidelines** to 2024-06-23-v28.

Added guidelines about the recent Rule 2a changes.

Improved to order of the guidelines related to Rule 2.

Added a ">" formatted quote about the iocccsize summary to the IOCCC guidelines.

Perform `make www` to perform the above and test under macOS.
This commit is contained in:
Landon Curt Noll committed 2024-06-23 13:51:40 -07:00
1 parent 02c0cd30af
commit 20d0b2a8d4
4 files changed
+290 -156

No files matched your search

+65 -60
View File
@@ -403,8 +403,8 @@ future IOCCC openings.</p>
granted provided this 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>
<h2 id="guidelines-version">Guidelines version</h2>
<p><strong><code>|</code></strong> This guidelines file is version <strong>2024-06-15-v28</strong>.</p>
<h2 id="ioccc-guidelines-version">IOCCC Guidelines version</h2>
<p><strong><code>|</code></strong> These <a href="guidelines.html">IOCCC guidelines</a> are version <strong>2024-06-25-v28</strong>.</p>
<p><strong>IMPORTANT</strong>: Be <strong>SURE</strong> to read the <a href="rules.html">IOCCC rules</a>.</p>
<h3 id="change-marks">Change marks</h3>
<p><strong><code>|</code></strong> <strong>← Lines that start with this symbol indicate a change from the previous IOCCC</strong></p>
@@ -415,17 +415,17 @@ IOCCC start with the <strong><code>|</code></strong> symbol.</p>
submit entries to the <a href="https://www.ioccc.org">International Obfuscated C Code Contest
(IOCCC)</a>.</p>
<p>These are not the IOCCC rules, though it does contain comments about
them. The guidelines should be viewed as <em>hints</em> and <em>suggestions</em>.
Entries that violate the guidelines but remain within the rules <em>are
allowed</em>. Even so, you are safer if you remain within the guidelines.</p>
them. The <a href="guidelines.html">IOCCC guidelines</a> should be viewed as <em>hints</em> and <em>suggestions</em>.
Entries that violate the <em>guidelines</em> but remain within the rules <em>are
allowed</em>. Even so, you are safer if you remain within the <a href="guidelines.html">IOCCC guidelines</a>.</p>
<p>You should read the current <a href="rules.html">IOCCC rules</a>, prior to submitting entries.
The rules are typically published along with these guidelines.</p>
The rules are typically published along with the <a href="guidelines.html">IOCCC guidelines</a>.</p>
<h1 id="whats-new-this-ioccc">WHAT’S NEW THIS IOCCC</h1>
<p><strong><code>|</code></strong> This IOCCC runs from <strong>2024-MMM-DD HH:MM:SS UTC</strong> to <strong>YYYY-MMM-DD HH:MM:SS UTC</strong>.<br>
<strong><code>|</code></strong> <strong>XXX - date/time is TBD - XXX</strong></p>
<p><strong><code>|</code></strong> The reason for the times of day are so that key IOCCC events are <strong>calculated</strong>
for be a <strong>fun</strong>ctional UTC time. :-)</p>
<p>Until the start of this IOCCC, these rules, guidelines and iocccsize.c
<p>Until the start of this IOCCC, the <a href="rules.html">IOCCC rules</a>, <a href="guidelines.html">IOCCC guidelines</a> and <code>iocccsize.c</code>
(contained in the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
toolkit</a>)
tool should be considered provisional <strong>BETA</strong> versions and <strong>may be
@@ -434,7 +434,7 @@ adjusted <em>AT ANY TIME</em></strong>.</p>
<p><strong><code>|</code></strong> The submit URL should be active on or slightly before <strong>2024-MMM-DD HH:MM:SS UTC</strong>.<br>
<strong><code>|</code></strong> <strong>XXX - date/time is TBD - XXX</strong></p>
<p>Please wait to submit your entries until after that time.</p>
<p>The official rules, guidelines and iocccsize.c (invoked by the mkiocccentry)
<p>The <a href="rules.html">IOCCC rules</a>, <a href="guidelines.html">IOCCC guidelines</a> and iocccsize.c (invoked by the mkiocccentry)
tool will be available on the official IOCCC website on or slightly before start
of this IOCCC. Please check the IOCCC <a href="../faq.html#submit">FAQ about how to submit</a>
to see how to submit entries, on or after the start of this IOCCC, to be sure
@@ -478,7 +478,7 @@ in an ironic way.</p>
to attempt to exploit them. We will award ‘<em>Worst abuse of the rules</em>’ or
‘<em>Best abuse of the rules</em>’ and then plug the hole next year.</p>
<p><strong><code>|</code></strong> Even so, we will attempt to use the smallest plug needed, if not smaller. Or, maybe not. :-)</p>
<p><strong><code>|</code></strong> There may be less than 2^7+1 reasons why these guidelines seem obfuscated.</p>
<p><strong><code>|</code></strong> There may be less than 2^7+1 reasons why these <a href="guidelines.html">IOCCC guidelines</a> seem obfuscated.</p>
<p>Check out your program and be sure that it works. We sometimes make
the effort to debug an entry that has a slight problem, particularly
in or near the final round. On the other hand, we have seen some
@@ -503,21 +503,24 @@ misleading comments and variable names might be a good start.</p>
<p>When programs use VTxxx/ANSI sequences, they should NOT be limited to a
specific terminal brand. Those programs that work in a standard xterm
are considered more portable.</p>
<p><strong><code>|</code></strong> Rule 2 (the size rule) refers to the use of the IOCCC size tool called <code>iocccsize</code>.</p>
<p><strong><code>|</code></strong> See the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a> for how to compile <code>iocccsize.c</code>.</p>
<p><strong><code>|</code></strong> To further clarify rule 2, we subdivided it into two parts, 2a and 2b.</p>
<p><strong><code>|</code></strong> Your entry must satisfy BOTH the maximum size rule 2a AND your entry
must satisfy the IOCCC size tool rule 2b.</p>
<p>This tool imposes a 2nd limit on C code size (rule 2b). To check your
code against the 2nd limit of rule 2, use the -i command line option.
<p><strong><code>|</code></strong> <a href="rules.html#rule2">Rule 2</a> (the size rule) refers to the use of the IOCCC size tool called <code>iocccsize</code>.</p>
<p><strong><code>|</code></strong> See the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a> for the <code>iocccsize</code> tool.</p>
<p><strong><code>|</code></strong> To further clarify <a href="rules.html#rule2">Rule 2</a>, we subdivided it into two parts, 2a and 2b.</p>
<p><strong><code>|</code></strong> The overall size limit (see <a href="rules.html#rule2a">Rule 2a</a>) on <code>prog.c</code> is now 4993 bytes</p>
<p><strong><code>|</code></strong> Your entry must satisfy BOTH the maximum size <a href="rules.html#rule2a">Rule 2a</a> AND your entry
must satisfy the IOCCC size tool <a href="rules.html#rule2b">Rule 2b</a>.</p>
<p>This tool imposes a 2nd limit on C code size (see <a href="rules.html#rule2a">Rule 2a</a>. To check your
code against the 2nd limit of <a href="rules.html#rule2">Rule 2</a>, use the -i command line option.
For example:</p>
<pre><code> ./iocccsize -i &lt; prog.c</code></pre>
<p>The IOCCC size tool, when using the -i option, may be summarized as:</p>
<pre><code> The size tool counts most C reserved words (keyword, secondary,
and selected preprocessor keywords) as 1. The size tool counts all
other octets as 1 excluding ASCII whitespace, and excluding any
&#39;;&#39;, &#39;{&#39; or &#39;}&#39; followed by ASCII whitespace, and excluding any
&#39;;&#39;, &#39;{&#39; or &#39;}&#39; octet immediately before the end of file.</code></pre>
<blockquote>
<p>The size tool counts most C reserved words (keyword, secondary,<br>
and selected preprocessor keywords) as 1. The size tool counts all<br>
other octets as 1 excluding ASCII whitespace, and excluding any<br>
‘;’, ‘{’ or ‘}’ followed by ASCII whitespace, and excluding any<br>
‘;’, ‘{’ or ‘}’ octet immediately before the end of file.</p>
</blockquote>
<p>ASCII whitespace includes ASCII tab, ASCII space, ASCII newline,
ASCII formfeed, and ASCII carriage return.</p>
<p><strong><code>|</code></strong> When ‘;’, ‘{’ or ‘}’ are within a C string, they may still not be
@@ -532,8 +535,9 @@ by the IOCCC size tool source code is preferred by the judges.</p>
<p><strong><code>|</code></strong> judge’s BESM-6, and 2503 is a decimal anagram of 2053.</p>
<p>Take note that this secondary limit imposed by the IOCCC size tool
obviates some of the need to <code>#define</code> C reserved words in an effort
to get around the size limits of rule 2.</p>
to get around the size limits of <a href="rules.html#rule2">Rule 2</a>.</p>
<p>Yes Virginia, <strong>that is a hint</strong>!</p>
<p><strong><code>|</code></strong> The <a href="rules.html#rule2a">Rule 2a</a> size was changed from 4096 to 4993: a change that keeps the “2b to 2a” size ratio to a value similar to the <a href="../faq.html#size_rule">2001-2020 IOCCC era</a>.</p>
<p>We applaud programs that do not issue warnings when compiled.
To avoid warnings, you might be tempted to add various <code>-Wno-foobar</code>
flags. Unfortunately such flags are NOT portable. Moreover,
@@ -633,7 +637,7 @@ not portable and must not be used:</p>
<code>#</code> in a C preprocessor directive must be the 1st non-whitespace octet.</p>
<p>The <code>exit(3)</code> function returns <code>void</code>. Some broken systems have <code>exit(3)</code>
return <code>int</code>, your entry should assume that <code>exit(3)</code> returns a <code>void</code>.</p>
<p><strong><code>|</code></strong> This guideline has a change mark at the very start of this line.</p>
<p><strong><code>|</code></strong> This <em>guideline</em> has a change mark at the very start of this line.</p>
<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
@@ -703,7 +707,7 @@ absolute one. The intent is to ensure that the building if your
program is reasonably portable.</p>
<p>We prefer programs that are portable across a wide variety of Unix-like
operating systems (i.e., Linux, GNU Hurd, BSD, Unix, etc.).</p>
<p>You are in a maze of twisty guidelines, all different.</p>
<p>You are in a maze of twisty <em>guidelines</em>, all different.</p>
<p>There are at least zero judges who think that Fideism has little
or nothing to do with the IOCCC judging process.</p>
<p>Don’t forget that the building of your program should be done
@@ -740,7 +744,7 @@ of code, and the other that is formatted more like a typical C
program, we tend to favor the second version. Of course, a third
version of the same program that is formatted in an interesting
and/or obfuscated way, would definitely win over the first two!
Remember, you can submit more than one entry. See the rules for details.</p>
Remember, you can submit more than one entry. See the <a href="rules.html">IOCCC rules</a> for details.</p>
<p>We suggest that you avoid trying for the ‘smallest self-replicating’
source. The smallest, a zero byte entry, <a href="../1994/smr/index.html">won in 1994</a>.</p>
<p>Programs that claim to be the smallest C source that does something, really
@@ -768,13 +772,14 @@ in the OS. Instead, make use of a well known and widely available open
source program (one that actually works) to display audio/visual data.</p>
<p>X client entries should avoid using X related libraries and
software that is not in wide spread use.</p>
<p>This is the only guideline that contains the word fizzbin.
<strong><code>|</code></strong> However, do you know how to play <a href="https://en.wikipedia.org/wiki/List_of_games_in_Star_Trek#Fizzbin">fizzbin</a>?
You do?!? (Except on Tuesday)</p>
<p>This is the only <em>guideline</em> that contains the word fizzbin.</p>
<p><strong><code>|</code></strong> However, do you know how to play <a href="https://en.wikipedia.org/wiki/List_of_games_in_Star_Trek#Fizzbin">fizzbin</a>?
You do?!? (Except on Tuesday?)</p>
<p><strong><code>|</code></strong> OK, there are actually 3 <em>guidelines</em> that contain the word fizzbin.</p>
<p>We don’t like entries that use proprietary toolkits such as the <code>M*tif</code>,
<code>Xv*ew</code>, or <code>OpenL*ok</code> toolkits, since not everyone has them. Use an
open source toolkit that is widely and freely available instead.</p>
<p><strong>NOTE</strong>: The previous guideline in this spot has been replaced by this guideline:</p>
<p><strong>NOTE</strong>: The previous <em>guideline</em> in this spot has been replaced by this <em>guideline</em>:</p>
<p>X client entries should not to depend on particular items on
<code>.Xdefaults</code>. If you must do so, be sure to note the required lines
in the program “remarks”. They should also not depend on any
@@ -789,12 +794,12 @@ the scope of the contest, we phrase our bias to favor:</p>
<p><strong><code>|</code></strong> <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX Specification</a>.</p>
<p><strong><code>|</code></strong> You are <strong>well advised</strong> to submit entries that conform to the <a href="https://unix.org/version4/overview.html">Single UNIX Specification Version 4</a>.</p>
<p><strong><code>|</code></strong> You very well might not be completely be prohibited from failing to not
<strong><code>|</code></strong> partly misunderstand this particular guideline, but of course, we could
<strong><code>|</code></strong> partly misunderstand this particular <em>guideline</em>, but of course, we could
<strong><code>|</code></strong> not possibly comment! :-) Nevertheless, you are neither prohibited, nor are
<strong><code>|</code></strong> you fully required to determine that this or the previous sentence is either false
<strong><code>|</code></strong> and/or perhaps misleading. Therefore, it might be wise for you to not fail to consider
<strong><code>|</code></strong> to do so, accordingly. Thank you very much.</p>
<p>Any complaints about the above guideline could be addressed to the
<p>Any complaints about the above <em>guideline</em> could be addressed to the
Speaker of the House of Commons, or to the speaker of your national
parliament should you have one.</p>
<p>We like programs that:</p>
@@ -813,7 +818,7 @@ areas really does help.</p>
<p>You are better off explaining what your entry does in the program
“remarks” section rather than leaving it obscure for the judges
as we might miss something and/or be too tired to notice.</p>
<p><strong><code>|</code></strong> Please avoid this specific individual guideline, if it at all possible.</p>
<p><strong><code>|</code></strong> Please avoid this specific individual <em>guideline</em>, if it at all possible.</p>
<p>We freely admit that interesting, creative or humorous comments in
the program “remarks” help your chances of winning. If you had to
read so many twisted entries, you too would enjoy a good laugh or two.
@@ -828,7 +833,7 @@ their entries. 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 BSD
or Linux curses.</p>
<p>Rule 13 states any C source that fails to compile because of unescaped
<p><a href="rules.html#rule13">Rule 13</a> states any C source that fails to compile because of unescaped
octets with the high bit set (octet value &gt;= 128) will be rejected.
Instead of unescaped octets, you should use or escapes:</p>
<pre><code>
@@ -856,13 +861,13 @@ into creating a dense blob. Such are the trade-offs that obfuscators face!</p>
However, it is unwise to assume it will run on an i386 or x86 architecture.</p>
<p>We believe that Mark Twain’s remark:</p>
<pre><code> Get your facts first, then you can distort them as you please.</code></pre>
<p>is a good guideline for those writing code for the IOCCC.</p>
<p>is a good motto for those writing code for the IOCCC.</p>
<p><strong><code>|</code></strong> The <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/iocccsize.c">IOCCC size tool source</a>
is not an original work,
unless you are Anthony C Howe, in which case it is original!
Submitting source that uses the content of iocccsize.c, unless you are
Anthony C Howe, might run the risk of violating rule 7.</p>
<p>Rule 7 does not prohibit you from writing your own obfuscated IOCCC size tool.
Anthony C Howe, might run the risk of violating <a href="rules.html#rule7">Rule 7</a>.</p>
<p><a href="rules.html#rule7">Rule 7</a> does not prohibit you from writing your own obfuscated IOCCC size tool.
However if you do, you might wish to make your tool do something more
interesting than simply implementing the IOCCC size tool algorithm.</p>
<p>While programs that only run in a specific word size are OK. If you have
@@ -909,47 +914,47 @@ and state:</p>
is given enough time and memory. If the value is not a proper integer, the
program will insult a fish named Eric, even if such a fish does not exist.</code></pre>
<h1 id="abusing-the-rules">ABUSING THE RULES:</h1>
<p>Legal abuse of the <a href="rules.html">rules</a> is somewhat encouraged. Legal rule abuse
<p>Legal abuse of the <a href="rules.html">IOCCC rules</a> is somewhat encouraged. Legal rule abuse
may involve, but is not limited to, doing things that are technically allowed by
the <a href="rules.html">rules</a> and yet do not fit the spirit of what we intended to be
the <a href="rules.html">IOCCC rules</a> and yet do not fit the spirit of what we intended to be
submitted.</p>
<p>Legal rule abuse is encouraged to help promote creativity. Rule abuse
entries, regardless of if they receive an award, result in changes to
the next year’s <a href="rules.html">rules</a> and <a href="guidelines.html">guidelines</a>.</p>
<p>Legal abuse of the <a href="rules.html">rules</a> is NOT an invitation to violate the
<a href="rules.html">rules</a>. An entry that violates the <a href="rules.html">rules</a> in the
the next year’s <a href="rules.html">IOCCC rules</a> and <a href="guidelines.html">IOCCC guidelines</a>.</p>
<p>Legal abuse of the <a href="rules.html">IOCCC rules</a> is NOT an invitation to violate the
<a href="rules.html">IOCCC rules</a>. An entry that violates the <a href="rules.html">rules</a> in the
opinion of the judges, <strong>WILL</strong> be
disqualified. <strong><em>RULE ABUSE CARRIES A CERTAIN LEVEL OF RISK!</em></strong> If you
have an entry that might otherwise be interesting, you might want to
submit two versions; one that does not abuse the <a href="rules.html">rules</a> and one that
submit two versions; one that does not abuse the <a href="rules.html">IOCCC rules</a> and one that
does.</p>
<p>If you intend to abuse the <a href="rules.html">rules</a>, indicate so in the program
<p>If you intend to abuse the <a href="rules.html">IOCCC rules</a>, indicate so in the program
“remarks”. You must try to justify why you consider your rule abuse to be
allowed under the <a href="rules.html">rules</a>. That is, you must plead your case as to
allowed under the <a href="rules.html">IOCCC rules</a>. That is, you must plead your case as to
why your entry is valid. Humor and/or creativity help plead a case.</p>
<p>Abusing the web submission procedure tends to annoy us more
than amuse us. Spend your creative energy on content of your
entry rather than on the submission process itself.</p>
<p>We are often asked why the contest <a href="rules.html">rules</a> and
<a href="guidelines.html">guidelines</a> seem too
<p>We are often asked why the contest <a href="rules.html">IOCCC rules</a> and
<a href="guidelines.html">IOCCC guidelines</a> seem too
strange or contain mistakes, flaws or grammatical errors. One reason
is that we sometimes make genuine mistakes. But in many cases such
problems, flaws or areas of confusion are deliberate. Changes to
<a href="rules.html">rules</a> and <a href="guidelines.html">guidelines</a> in response to rule abuses, are done in a minimal
<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 deliberately leave behind holes (or introduce
new ones) so that future rule abuse may continue. A cleaver author
should be able to read them and “drive a truck through the holes” in
the <a href="rules.html">rules</a> and <a href="guidelines.html">guidelines</a>.</p>
the <a href="rules.html">IOCCC rules</a> and <a href="guidelines.html">IOCCC 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">rules</a> and <a href="guidelines.html">guidelines</a>
development process. The <a href="rules.html">IOCCC rules</a> and <a href="guidelines.html">IOCCC guidelines</a>
are only a small part of the overall contest. Even so, one may think the
contest <a href="rules.html">rules</a> and <a href="guidelines.html">guideline</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
and what engineering delivers. Real programmers must face obfuscated and
sometimes conflicting specifications and requirements from marketing, sales,
product management an even from customers themselves on a all too regular basis.
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>
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>
<h1 id="judging-process">JUDGING PROCESS:</h1>
<p>Entries are judged by Leonid A. Broukhis and Landon Curt Noll.</p>
<p>Each entry submitted is given a random id number and subdirectory. The
@@ -974,8 +979,8 @@ and therefore consider any obfuscated source or data file claiming to be from
Honeyman to not be form Honeyman. This of course creates an interesting paradox
known as the “obfuscated Peter Honeyman paradox”. Should Peter Honeyman
actually submit an obfuscated entry, he alone is excluded from the above, as we
will likely believe it just another attempt at confusion. This guideline is
known as the “Peter Honeyman is exempt” guideline.</p>
will likely believe it just another attempt at confusion. This <em>guideline</em> is
known as the “Peter Honeyman is exempt” <em>guideline</em>.</p>
<p>BTW: None of the entries claiming to be from Peter Honeyman have ever
won an award. So it is theoretically possible that Peter Honeyman
did submit an entry in the past. In the past, Peter had denied
@@ -1019,7 +1024,7 @@ skipping over any #include files</li>
</ul>
<p>In later rounds, other actions are performed including performing
miscellaneous tests on the source and binary.</p>
<p><strong><code>|</code></strong> This is the very guideline that goes, BING!</p>
<p><strong><code>|</code></strong> This is the very <em>guideline</em> that goes, BING!</p>
<p>Until we reduce the stack of entries down to about 25 entries, entries
are judged on an individual basis. An entry is set aside because it
does not, in our opinion, meet the standard established by the round.
@@ -1062,7 +1067,7 @@ into voting for a winning entry by offering a bit high quality chocolate.
This technique is highly discouraged for use by non-IOCCC judges.</p>
<p>More often than not, we select a small entry (usually one line), a
strange/creative layout entry. We sometimes also select an
entry that abuses the contest guidelines in an interesting way,
entry that abuses the <a href="guidelines.html">IOCCC guidelines</a> in an interesting way,
or that stretches the content rules that while legal, is
nevertheless goes against the intent of the rules.</p>
<p>In the end, we traditionally pick one entry as ‘best’. Sometimes such
@@ -1102,10 +1107,10 @@ and on T-Shirts. More than one winner has been turned in a tattoo!</p>
<p>Last, but not least, winners receive international fame and flames! :-)</p>
<h1 id="for-more-information">FOR MORE INFORMATION:</h1>
<p><strong><code>|</code></strong> For questions or comments about the contest, see <a href="../contact.html">Contacting the IOCCC</a>.</p>
<p><strong><code>|</code></strong> Be sure to review the <a href="index.html">IOCCC Rules and Guidelines</a> as
<a href="rules.html">rules</a> and the <a href="guidelines.html">guidelines</a> may (and often do) change from year to year.</p>
<p><strong><code>|</code></strong> You should be sure you have the current <a href="rules.html">rules</a> and
<a href="guidelines.html">guidelines</a> prior to submitting entries.</p>
<p><strong><code>|</code></strong> Be sure to review the <a href="index.html">IOCCC Rules and Guidelines</a> as the
<a href="rules.html">IOCCC rules</a> and the <a href="guidelines.html">IOCCC guidelines</a> may (and often do) change from year to year.</p>
<p><strong><code>|</code></strong> You should be sure you have the current <a href="rules.html">IOCCC rules</a> and
<a href="guidelines.html">IOCCC guidelines</a> prior to submitting entries.</p>
<p><strong><code>|</code></strong> See the <a href="../news.html">Official IOCCC website news</a> for additional information.</p>
<p><strong><code>|</code></strong> For the updates and breaking IOCCC news, you are encouraged to follow
the <a href="https://fosstodon.org/@ioccc">IOCCC on Mastodon</a> account. See our
+66 -61
View File
@@ -30,9 +30,9 @@ and remains unaltered. All other uses must receive prior permission in
writing by [contacting the judges](../contact.html).
## Guidelines version
## IOCCC Guidelines version
**`|`** This guidelines file is version **2024-06-15-v28**.
**`|`** These [IOCCC guidelines](guidelines.html) are version **2024-06-25-v28**.
**IMPORTANT**: Be **SURE** to read the [IOCCC rules](rules.html).
@@ -52,12 +52,12 @@ submit entries to the [International Obfuscated C Code Contest
&#x28;IOCCC&#x29;](https://www.ioccc.org).
These are not the IOCCC rules, though it does contain comments about
them. The guidelines should be viewed as _hints_ and _suggestions_.
Entries that violate the guidelines but remain within the rules _are
allowed_. Even so, you are safer if you remain within the guidelines.
them. The [IOCCC guidelines](guidelines.html) should be viewed as _hints_ and _suggestions_.
Entries that violate the _guidelines_ but remain within the rules _are
allowed_. Even so, you are safer if you remain within the [IOCCC guidelines](guidelines.html).
You should read the current [IOCCC rules](rules.html), prior to submitting entries.
The rules are typically published along with these guidelines.
The rules are typically published along with the [IOCCC guidelines](guidelines.html).
# WHAT'S NEW THIS IOCCC
@@ -68,7 +68,7 @@ The rules are typically published along with these guidelines.
**`|`** The reason for the times of day are so that key IOCCC events are **calculated**
for be a **fun**ctional UTC time. :-)
Until the start of this IOCCC, these rules, guidelines and iocccsize.c
Until the start of this IOCCC, the [IOCCC rules](rules.html), [IOCCC guidelines](guidelines.html) and `iocccsize.c`
(contained in the [mkiocccentry
toolkit](https://github.com/ioccc-src/mkiocccentry))
tool should be considered provisional **BETA** versions and **may be
@@ -81,7 +81,7 @@ The IOCCC submission URL is <https://submit.ioccc.org/>.
Please wait to submit your entries until after that time.
The official rules, guidelines and iocccsize.c (invoked by the mkiocccentry)
The [IOCCC rules](rules.html), [IOCCC guidelines](guidelines.html) and iocccsize.c (invoked by the mkiocccentry)
tool will be available on the official IOCCC website on or slightly before start
of this IOCCC. Please check the IOCCC [FAQ about how to submit](../faq.html#submit)
to see how to submit entries, on or after the start of this IOCCC, to be sure
@@ -135,7 +135,7 @@ to attempt to exploit them. We will award '_Worst abuse of the rules_' or
**`|`** Even so, we will attempt to use the smallest plug needed, if not smaller. Or, maybe not. :-)
**`|`** There may be less than 2^7+1 reasons why these guidelines seem obfuscated.
**`|`** There may be less than 2^7+1 reasons why these [IOCCC guidelines](guidelines.html) seem obfuscated.
Check out your program and be sure that it works. We sometimes make
the effort to debug an entry that has a slight problem, particularly
@@ -166,17 +166,19 @@ When programs use VTxxx/ANSI sequences, they should NOT be limited to a
specific terminal brand. Those programs that work in a standard xterm
are considered more portable.
**`|`** Rule 2 (the size rule) refers to the use of the IOCCC size tool called `iocccsize`.
**`|`** [Rule 2](rules.html#rule2) (the size rule) refers to the use of the IOCCC size tool called `iocccsize`.
**`|`** See the [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) for how to compile `iocccsize.c`.
**`|`** See the [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) for the `iocccsize` tool.
**`|`** To further clarify rule 2, we subdivided it into two parts, 2a and 2b.
**`|`** To further clarify [Rule 2](rules.html#rule2), we subdivided it into two parts, 2a and 2b.
**`|`** Your entry must satisfy BOTH the maximum size rule 2a AND your entry
must satisfy the IOCCC size tool rule 2b.
**`|`** The overall size limit (see [Rule 2a](rules.html#rule2a)) on `prog.c` is now 4993 bytes
This tool imposes a 2nd limit on C code size (rule 2b). To check your
code against the 2nd limit of rule 2, use the -i command line option.
**`|`** Your entry must satisfy BOTH the maximum size [Rule 2a](rules.html#rule2a) AND your entry
must satisfy the IOCCC size tool [Rule 2b](rules.html#rule2b).
This tool imposes a 2nd limit on C code size (see [Rule 2a](rules.html#rule2a). To check your
code against the 2nd limit of [Rule 2](rules.html#rule2), use the -i command line option.
For example:
```
@@ -185,13 +187,11 @@ For example:
The IOCCC size tool, when using the -i option, may be summarized as:
```
The size tool counts most C reserved words (keyword, secondary,
and selected preprocessor keywords) as 1. The size tool counts all
other octets as 1 excluding ASCII whitespace, and excluding any
';', '{' or '}' followed by ASCII whitespace, and excluding any
';', '{' or '}' octet immediately before the end of file.
```
> The size tool counts most C reserved words (keyword, secondary,<br>
> and selected preprocessor keywords) as 1. The size tool counts all<br>
> other octets as 1 excluding ASCII whitespace, and excluding any<br>
> ';', '{' or '}' followed by ASCII whitespace, and excluding any<br>
> ';', '{' or '}' octet immediately before the end of file.
ASCII whitespace includes ASCII tab, ASCII space, ASCII newline,
ASCII formfeed, and ASCII carriage return.
@@ -215,10 +215,12 @@ by the IOCCC size tool source code is preferred by the judges.
Take note that this secondary limit imposed by the IOCCC size tool
obviates some of the need to `#define` C reserved words in an effort
to get around the size limits of rule 2.
to get around the size limits of [Rule 2](rules.html#rule2).
Yes Virginia, **that is a hint**!
**`|`** The [Rule 2a](rules.html#rule2a) size was changed from 4096 to 4993: a change that keeps the "2b to 2a" size ratio to a value similar to the [2001-2020 IOCCC era](../faq.html#size_rule).
We applaud programs that do not issue warnings when compiled.
To avoid warnings, you might be tempted to add various `-Wno-foobar`
flags. Unfortunately such flags are NOT portable. Moreover,
@@ -369,7 +371,7 @@ On 28 January 2007, the Judges rescinded the requirement that the
The `exit(3)` function returns `void`. Some broken systems have `exit(3)`
return `int`, your entry should assume that `exit(3)` returns a `void`.
**`|`** This guideline has a change mark at the very start of this line.
**`|`** This _guideline_ has a change mark at the very start of this line.
Small programs are best when they are short, obscure and concise.
While such programs are not as complex as other winners, they do
@@ -455,7 +457,7 @@ program is reasonably portable.
We prefer programs that are portable across a wide variety of Unix-like
operating systems (i.e., Linux, GNU Hurd, BSD, Unix, etc.).
You are in a maze of twisty guidelines, all different.
You are in a maze of twisty _guidelines_, all different.
There are at least zero judges who think that Fideism has little
or nothing to do with the IOCCC judging process.
@@ -509,7 +511,7 @@ of code, and the other that is formatted more like a typical C
program, we tend to favor the second version. Of course, a third
version of the same program that is formatted in an interesting
and/or obfuscated way, would definitely win over the first two!
Remember, you can submit more than one entry. See the rules for details.
Remember, you can submit more than one entry. See the [IOCCC rules](rules.html) for details.
We suggest that you avoid trying for the 'smallest self-replicating'
source. The smallest, a zero byte entry, [won in 1994](../1994/smr/index.html).
@@ -555,15 +557,18 @@ source program (one that actually works) to display audio/visual data.
X client entries should avoid using X related libraries and
software that is not in wide spread use.
This is the only guideline that contains the word fizzbin.
This is the only _guideline_ that contains the word fizzbin.
**`|`** However, do you know how to play [fizzbin](https://en.wikipedia.org/wiki/List_of_games_in_Star_Trek#Fizzbin)?
You do?!? (Except on Tuesday)
You do?!? (Except on Tuesday?)
**`|`** OK, there are actually 3 _guidelines_ that contain the word fizzbin.
We don't like entries that use proprietary toolkits such as the `M*tif`,
`Xv*ew`, or `OpenL*ok` toolkits, since not everyone has them. Use an
open source toolkit that is widely and freely available instead.
**NOTE**: The previous guideline in this spot has been replaced by this guideline:
**NOTE**: The previous _guideline_ in this spot has been replaced by this _guideline_:
X client entries should not to depend on particular items on
`.Xdefaults`. If you must do so, be sure to note the required lines
@@ -584,13 +589,13 @@ the scope of the contest, we phrase our bias to favor:
**`|`** You are **well advised** to submit entries that conform to the [Single UNIX Specification Version 4](https://unix.org/version4/overview.html).
**`|`** You very well might not be completely be prohibited from failing to not
**`|`** partly misunderstand this particular guideline, but of course, we could
**`|`** partly misunderstand this particular _guideline_, but of course, we could
**`|`** not possibly comment! :-) Nevertheless, you are neither prohibited, nor are
**`|`** you fully required to determine that this or the previous sentence is either false
**`|`** and/or perhaps misleading. Therefore, it might be wise for you to not fail to consider
**`|`** to do so, accordingly. Thank you very much.
Any complaints about the above guideline could be addressed to the
Any complaints about the above _guideline_ could be addressed to the
Speaker of the House of Commons, or to the speaker of your national
parliament should you have one.
@@ -612,7 +617,7 @@ You are better off explaining what your entry does in the program
"remarks" section rather than leaving it obscure for the judges
as we might miss something and/or be too tired to notice.
**`|`** Please avoid this specific individual guideline, if it at all possible.
**`|`** Please avoid this specific individual _guideline_, if it at all possible.
We freely admit that interesting, creative or humorous comments in
the program "remarks" help your chances of winning. If you had to
@@ -631,7 +636,7 @@ prevent such trailing control-M's being added.
One should restrict libcurses to portable features found on BSD
or Linux curses.
Rule 13 states any C source that fails to compile because of unescaped
[Rule 13](rules.html#rule13) states any C source that fails to compile because of unescaped
octets with the high bit set (octet value >= 128) will be rejected.
Instead of unescaped octets, you should use \octal or \hex escapes:
@@ -671,15 +676,15 @@ We believe that Mark Twain's remark:
Get your facts first, then you can distort them as you please.
```
is a good guideline for those writing code for the IOCCC.
is a good motto for those writing code for the IOCCC.
**`|`** The [IOCCC size tool source](https://github.com/ioccc-src/mkiocccentry/blob/master/iocccsize.c)
is not an original work,
unless you are Anthony C Howe, in which case it is original!
Submitting source that uses the content of iocccsize.c, unless you are
Anthony C Howe, might run the risk of violating rule 7.
Anthony C Howe, might run the risk of violating [Rule 7](rules.html#rule7).
Rule 7 does not prohibit you from writing your own obfuscated IOCCC size tool.
[Rule 7](rules.html#rule7) does not prohibit you from writing your own obfuscated IOCCC size tool.
However if you do, you might wish to make your tool do something more
interesting than simply implementing the IOCCC size tool algorithm.
@@ -768,53 +773,53 @@ and state:
# ABUSING THE RULES:
Legal abuse of the [rules](rules.html) is somewhat encouraged. Legal rule abuse
Legal abuse of the [IOCCC rules](rules.html) is somewhat encouraged. Legal rule abuse
may involve, but is not limited to, doing things that are technically allowed by
the [rules](rules.html) and yet do not fit the spirit of what we intended to be
the [IOCCC rules](rules.html) and yet do not fit the spirit of what we intended to be
submitted.
Legal rule abuse is encouraged to help promote creativity. Rule abuse
entries, regardless of if they receive an award, result in changes to
the next year's [rules](rules.html) and [guidelines](guidelines.html).
the next year's [IOCCC rules](rules.html) and [IOCCC guidelines](guidelines.html).
Legal abuse of the [rules](rules.html) is NOT an invitation to violate the
[rules](rules.html). An entry that violates the [rules](rules.html) in the
Legal abuse of the [IOCCC rules](rules.html) is NOT an invitation to violate the
[IOCCC rules](rules.html). An entry that violates the [rules](rules.html) in the
opinion of the judges, **WILL** be
disqualified. **_RULE ABUSE CARRIES A CERTAIN LEVEL OF RISK!_** If you
have an entry that might otherwise be interesting, you might want to
submit two versions; one that does not abuse the [rules](rules.html) and one that
submit two versions; one that does not abuse the [IOCCC rules](rules.html) and one that
does.
If you intend to abuse the [rules](rules.html), indicate so in the program
If you intend to abuse the [IOCCC rules](rules.html), indicate so in the program
"remarks". You must try to justify why you consider your rule abuse to be
allowed under the [rules](rules.html). That is, you must plead your case as to
allowed under the [IOCCC rules](rules.html). That is, you must plead your case as to
why your entry is valid. Humor and/or creativity help plead a case.
Abusing the web submission procedure tends to annoy us more
than amuse us. Spend your creative energy on content of your
entry rather than on the submission process itself.
We are often asked why the contest [rules](rules.html) and
[guidelines](guidelines.html) seem too
We are often asked why the contest [IOCCC rules](rules.html) and
[IOCCC guidelines](guidelines.html) seem too
strange or contain mistakes, flaws or grammatical errors. One reason
is that we sometimes make genuine mistakes. But in many cases such
problems, flaws or areas of confusion are deliberate. Changes to
[rules](rules.html) and [guidelines](guidelines.html) in response to rule abuses, are done in a minimal
[IOCCC rules](rules.html) and [IOCCC guidelines](guidelines.html) in response to rule abuses, are done in a minimal
fashion. Often we will deliberately leave behind holes (or introduce
new ones) so that future rule abuse may continue. A cleaver author
should be able to read them and "drive a truck through the holes" in
the [rules](rules.html) and [guidelines](guidelines.html).
the [IOCCC rules](rules.html) and [IOCCC guidelines](guidelines.html).
At the risk of stating the obvious, this contest is a parody of the software
development process. The [rules](rules.html) and [guidelines](guidelines.html)
development process. The [IOCCC rules](rules.html) and [IOCCC guidelines](guidelines.html)
are only a small part of the overall contest. Even so, one may think the
contest [rules](rules.html) and [guideline](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
and what engineering delivers. Real programmers must face obfuscated and
sometimes conflicting specifications and requirements from marketing, sales,
product management an even from customers themselves on a all too regular basis.
This is one of the reasons why the [rules](rules.html) and
[guidelines](guidelines.html) are written in obfuscated form.
This is one of the reasons why the [IOCCC rules](rules.html) and
[IOCCC guidelines](guidelines.html) are written in obfuscated form.
# JUDGING PROCESS:
@@ -847,8 +852,8 @@ and therefore consider any obfuscated source or data file claiming to be from
Honeyman to not be form Honeyman. This of course creates an interesting paradox
known as the "obfuscated Peter Honeyman paradox". Should Peter Honeyman
actually submit an obfuscated entry, he alone is excluded from the above, as we
will likely believe it just another attempt at confusion. This guideline is
known as the "Peter Honeyman is exempt" guideline.
will likely believe it just another attempt at confusion. This _guideline_ is
known as the "Peter Honeyman is exempt" _guideline_.
BTW: None of the entries claiming to be from Peter Honeyman have ever
won an award. So it is theoretically possible that Peter Honeyman
@@ -901,7 +906,7 @@ A reading consists of a number of actions:
In later rounds, other actions are performed including performing
miscellaneous tests on the source and binary.
**`|`** This is the very guideline that goes, BING!
**`|`** This is the very _guideline_ that goes, BING!
Until we reduce the stack of entries down to about 25 entries, entries
are judged on an individual basis. An entry is set aside because it
@@ -951,7 +956,7 @@ This technique is highly discouraged for use by non-IOCCC judges.
More often than not, we select a small entry (usually one line), a
strange/creative layout entry. We sometimes also select an
entry that abuses the contest guidelines in an interesting way,
entry that abuses the [IOCCC guidelines](guidelines.html) in an interesting way,
or that stretches the content rules that while legal, is
nevertheless goes against the intent of the rules.
@@ -1027,11 +1032,11 @@ Last, but not least, winners receive international fame and flames! :-)
**`|`** For questions or comments about the contest, see [Contacting the IOCCC](../contact.html).
**`|`** Be sure to review the [IOCCC Rules and Guidelines](index.html) as
[rules](rules.html) and the [guidelines](guidelines.html) may (and often do) change from year to year.
**`|`** Be sure to review the [IOCCC Rules and Guidelines](index.html) as the
[IOCCC rules](rules.html) and the [IOCCC guidelines](guidelines.html) may (and often do) change from year to year.
**`|`** You should be sure you have the current [rules](rules.html) and
[guidelines](guidelines.html) prior to submitting entries.
**`|`** You should be sure you have the current [IOCCC rules](rules.html) and
[IOCCC guidelines](guidelines.html) prior to submitting entries.
**`|`** See the [Official IOCCC website news](../news.html) for additional information.
+79 -17
View File
@@ -404,8 +404,10 @@ future IOCCC openings.</p>
granted provided this 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>
<h2 id="rules-version">Rules version</h2>
<p><strong><code>|</code></strong> These rules are version <strong>2024-06-15-v28</strong>.</p>
<div id="rule_version">
<h2 id="ioccc-rules-version">IOCCC Rules version</h2>
</div>
<p><strong><code>|</code></strong> These <a href="rules.html">IOCCC rules</a> are version <strong>2024-06-23-v28</strong>.</p>
<p><strong>IMPORTANT</strong>: Be sure to read the <a href="guidelines.html">IOCCC guidelines</a>.</p>
<h3 id="change-marks">Change marks</h3>
<p><strong><code>|</code></strong> <strong>← Lines that start with this symbol indicate a change from the previous IOCCC</strong></p>
@@ -423,7 +425,7 @@ IOCCC start with the <strong><code>|</code></strong> symbol.</p>
<h1 id="goals-of-the-contest">Goals of the Contest</h1>
<p>The goals of the IOCCC:</p>
<ul>
<li>To write the most Obscure/Obfuscated C program within the <a href="rules.html">rules</a>.</li>
<li>To write the most Obscure/Obfuscated C program within the <a href="rules.html">IOCCC rules</a>.</li>
<li>To show the importance of programming style, in an ironic way.</li>
<li>To stress C compilers with unusual code.</li>
<li>To illustrate some of the subtleties of the C language.</li>
@@ -432,8 +434,8 @@ IOCCC start with the <strong><code>|</code></strong> symbol.</p>
<h1 id="important-ioccc-dates">Important IOCCC dates</h1>
<p><strong><code>|</code></strong> This IOCCC runs from <strong>2024-MMM-DD HH:MM:SS UTC</strong> to <strong>202x-MMM-DD HH:MM:SS UTC</strong>.<br>
<strong><code>|</code></strong> <strong>XXX - date/time is TBD - XXX</strong></p>
<p>Until the start of this IOCCC, these <a href="rules.html">rules</a>,
<a href="guidelines.html">guidelines</a> and iocccsize.c (contained in the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
<p>Until the start of this IOCCC, these <a href="rules.html">IOCCC rules</a>,
<a href="guidelines.html">IOCCC guidelines</a> and iocccsize.c (contained in the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
toolkit</a> and invoked by the
<code>mkiocccentry(1)</code> tool) should be considered provisional <strong>BETA</strong> versions and
<strong>may be adjusted <em>AT ANY TIME</em></strong>.</p>
@@ -445,24 +447,32 @@ for <strong>important information</strong> on how to submit to the IOCCC.</p>
<p><strong><code>|</code></strong> The submit URL should be active on or slightly before <strong>2024-MMM-DD HH:MM:SS UTC</strong>.<br>
<strong><code>|</code></strong> <strong>XXX - date/time is TBD - XXX</strong></p>
<p>Please wait to submit your entries until after that time.</p>
<p>The official <a href="rules.html">rules</a> and <a href="guidelines.html">guidelines</a> will be
<p>The official <a href="rules.html">IOCCC rules</a> and <a href="guidelines.html">IOCCC guidelines</a> will be
available on the <a href="../index.html">official IOCCC website</a> on or slightly before
the start of this IOCCC. The <code>mkiocccentry</code> toolkit may be obtained at any time
at the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit repo</a>.</p>
<p>Please recheck on or after the start of this IOCCC to be sure you
are using the correct versions of these items before using the IOCCC
entry submission URL.</p>
<h1 id="rules">RULES</h1>
<h1 id="ioccc-rules">IOCCC RULES</h1>
<p>To help us with the volume of entries, we ask that you follow these rules:</p>
<h2 id="rule-0">Rule 0</h2>
<p>We need a rule 0. :-)</p>
<div id="rule1">
<h2 id="rule-1">Rule 1</h2>
</div>
<p>Your entry must be a complete program.</p>
<div id="rule2">
<h2 id="rule-2">Rule 2</h2>
<p>The size rule requires your entry to satisfy <strong>BOTH</strong> rule 2a and rule 2b:</p>
</div>
<p>The size rule requires your entry to satisfy <strong>BOTH</strong> <a href="#rule2a">Rule 2a</a> and <a href="#rule2b">Rule 2b</a>:</p>
<div id="rule2a">
<h2 id="rule-2a">Rule 2a</h2>
</div>
<p><strong><code>|</code></strong> The size of your program source <strong>MUST BE &lt;= 4993 bytes</strong> in length.</p>
<div id="rule2b">
<h2 id="rule-2b">Rule 2b</h2>
</div>
<p><strong><code>|</code></strong> When your program source is fed as input to the current IOCCC size
tool, and the IOCCC size tool <code>-i</code> command line option is used, the
value printed <strong>shall not exceed 2503</strong>.</p>
@@ -470,7 +480,9 @@ value printed <strong>shall not exceed 2503</strong>.</p>
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry tool repo</a>. If you use
the <code>mkiocccentry</code> tool (which we <strong>STRONGLY recommend you do</strong>) it will invoke
this tool before packaging your entry for submission.</p>
<div id="rule3">
<h2 id="rule-3">Rule 3</h2>
</div>
<p>Submissions should be performed using the instructions outlined at:
the <a href="../faq.html#submit">How to enter FAQ</a>.</p>
<p>To submit to an open IOCCC, you must use the <a href="https://submit.ioccc.org/">IOCCC submit server</a>.</p>
@@ -478,65 +490,89 @@ the <a href="../faq.html#submit">How to enter FAQ</a>.</p>
<p><strong><code>|</code></strong> The submit URL should be active on or slightly before <strong>2024-MMM-DD HH:MM:SS UTC</strong>.<br>
<strong><code>|</code></strong> <strong>XXX - date/time is TBD - XXX</strong></p>
<p>Please wait to submit your entries until after that time.</p>
<div id="rule4">
<h2 id="rule-4">Rule 4</h2>
</div>
<p>If your entry is selected as a winner, it will be modified as follows:</p>
<p>Your ‘build’ instructions will be incorporated into a Makefile.</p>
<p>Your source code will be the file <strong>prog.c</strong>. The compiled binary
will be called <strong>prog</strong>.</p>
<div id="rule5">
<h2 id="rule-5">Rule 5</h2>
</div>
<p>Your entry <strong>MUST</strong> not modify the content or filename of any part of your
original entry including, but not limited to <strong>prog.c</strong>, the <strong>Makefile</strong>
(that we create from your how to build instructions), as well as any data
files you submit.</p>
<p>If you entry wishes to modify such content, it <strong>MUST</strong> first copy the
file to a new filename and then modify that copy.</p>
<div id="rule6">
<h2 id="rule-6">Rule 6</h2>
</div>
<p><strong><code>|</code></strong> I am not a rule, I am a <code>free(void *human);</code> ‼️</p>
<p><strong><code>|</code></strong>        <code>while (!(ioccc(rule(you(are(number(6)))))) {</code><br>
<strong><code>|</code></strong>                <code>ha_ha_ha();</code><br>
<strong><code>|</code></strong>        <code>}</code></p>
<div id="rule7">
<h2 id="rule-7">Rule 7</h2>
</div>
<p>The obfuscated C program must be an original work that you own.</p>
<p>You (the author(s)) must own the contents of your submission OR
you must have permission from the owner(s) to submit their content
under the following license:</p>
<p><strong><code>|</code></strong> <strong><a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0 International</a></strong></p>
<p>See also rule 18.</p>
<p>See also <a href="#rule18">Rule 18</a>.</p>
<p>If you submit any content that is owned by others, you <strong>MUST</strong>
detail that ownership (i.e., who owns what) <strong>AND document the
permission you obtained</strong>.</p>
<p>Please note that the IOCCC size tool is <strong>NOT</strong> an original work.</p>
<div id="rule8">
<h2 id="rule-8">Rule 8</h2>
</div>
<p><strong><code>|</code></strong> Entries must be received prior to the end of this IOCCC which is <strong>2024-MMM-DD HH:MM:SS UTC</strong>.<br>
<strong><code>|</code></strong> <strong>XXX - date/time is TBD - XXX</strong></p>
<p>A confirmation of submission will be sent to the submitting email address
before the close of the contest.</p>
<div id="rule9">
<h2 id="rule-9">Rule 9</h2>
</div>
<p><strong><code>|</code></strong> Each person may submit up to and including 10.000000 entries per contest.</p>
<p>Each entry must be submitted separately.</p>
<div id="rule10">
<h2 id="rule-10">Rule 10</h2>
</div>
<p>Entries requiring human interaction to be initially compiled are not permitted.</p>
<div id="rule11">
<h2 id="rule-11">Rule 11</h2>
</div>
<p>Programs that require special privileges (<code>setuid(2)</code>, <code>setgid(2)</code>, super-user,
special owner, special group, etc.) are still highly discouraged. We
do not guarantee these functions will behave as you expect on our test
platforms. If your program needs special permissions <strong>please document
them</strong> in the remarks file.</p>
<div id="rule12">
<h2 id="rule-12">Rule 12</h2>
</div>
<p>Legal abuse of the rules is somewhat encouraged. An entry that, in
the opinion of the judges, violates the rules will be disqualified.
Entries that attempt to abuse the rules <strong>MUST</strong> try to justify why
their rule abuse is legal, in the remarks file.</p>
<div id="rule13">
<h2 id="rule-13">Rule 13</h2>
</div>
<p>Any C source that fails to compile because of unescaped octets with
the high bit set (octet value &gt;= 128) will be rejected.</p>
<div id="rule14">
<h2 id="rule-14">Rule 14</h2>
</div>
<p>Any C source that fails to compile because of lines with trailing
control-M’s (i.e., lines with a tailing octet <code>015</code>) will be rejected.</p>
<p>Please do not put trailing control-M’s on remarks file lines.
Please check to be sure, before submitting, that you have removed
any control-M at the end of remark file lines.</p>
<div id="rule15">
<h2 id="rule-15">Rule 15</h2>
</div>
<p>When you submit your entry you must have a valid email address
that can both send and receive email. The online submission
method is a two phase process that requires the use of an
@@ -552,12 +588,16 @@ be valid for submitting and editing the entry for the lifetime of the
competition.</p>
<p>See also <a href="../faq.html#submit">How may I submit to the IOCCC?</a> in the
<a href="../faq.html">FAQ</a>.</p>
<div id="rule16">
<h2 id="rule-16">Rule 16</h2>
</div>
<p>You are <strong>STRONGLY</strong> encouraged to submit a previously unpublished <em>AND</em>
original entry. Submissions that are similar to previous entries are
discouraged. As we judge anonymously, submissions that have already
been published may be disqualified.</p>
<div id="rule17">
<h2 id="rule-17">Rule 17</h2>
</div>
<p><strong><code>|</code></strong> The total size of your submission: the sum of the size of the program,
hints, comments, build and info files <strong>MUST</strong> be less than or equal
to 28314624 octets (27651K) in size.</p>
@@ -565,19 +605,25 @@ to 28314624 octets (27651K) in size.</p>
that file must than or equal 3999971 octets in size.</p>
<p><strong><code>|</code></strong> The <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a>
(see <code>mkiocccentry(1)</code> and <code>txzchk(1)</code>) will help you verify that your
submission conforms to this rule.</p>
submission conforms to this <a href="#rule17">Rule 17</a>.</p>
<div id="rule18">
<h2 id="rule-18">Rule 18</h2>
</div>
<p>The entirety of your entry must be submitted under the following license:</p>
<p><strong><code>|</code></strong> <strong><a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0 International</a></strong></p>
<p>You (the author(s)) <strong>MUST</strong> own the contents of your submission <strong>OR</strong>
you <strong>MUST HAVE PERMISSION</strong> from the owner(s) to submit their content.</p>
<p>You must not submit anything that cannot be submitted under that license.</p>
<div id="rule19">
<h2 id="rule-19">Rule 19</h2>
</div>
<p>The remarks file must be written in markdown format. See
the Daring Fireball <a href="http://daringfireball.net/projects/markdown/basics">Markdown: Basics</a>
for more information.</p>
<p><strong><code>|</code></strong> We currently use <a href="https://pandoc.org">pandoc</a> to convert markdown to HTML.</p>
<div id="rule20">
<h2 id="rule-20">Rule 20</h2>
</div>
<p>The how to build instructions must be in Makefile format. See <a href="../faq.html#make_compatibility">the FAQ about
make(1) compatibility the IOCCC
supports</a> for more details.</p>
@@ -597,13 +643,17 @@ to use.</p>
for help in constructing your Makefile. The <code>mkiocccentry</code>, which can be found
at the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a>, tries to
detect if required rules exist in your Makefile.</p>
<div id="rule21">
<h2 id="rule-21">Rule 21</h2>
</div>
<p>Your entry must not create or modify files above the current directory
with the exception of the <code>/tmp</code> and the <code>/var/tmp</code> directories. Your entry
<strong>MAY</strong> create subdirectories below the current directory, or in <code>/tmp</code>,
or in <code>/var/tmp</code> provided that <code>.</code> is <strong>NOT</strong> the first octet in any
directory name or filename you submit.</p>
<div id="rule22">
<h2 id="rule-22">Rule 22</h2>
</div>
<p>Catch 22:</p>
<p>Your source code, data files, remarks and program output must <strong>NOT</strong>
identify the authors of your code. The judges <strong>STRONGLY prefer</strong> to
@@ -614,29 +664,41 @@ within your code, data, remarks or program output (unless you are
<em>Peter Honeyman</em> or pretending to be <em>Peter Honeyman</em>) will be grounds
for disqualification of your entry.</p>
<p>Yes, Virginia, <strong>WE REALLY MEAN IT!</strong></p>
<div id="rule23">
<h2 id="rule-23">Rule 23</h2>
</div>
<p>This prime rule number is reserved for future use.</p>
<div id="rule24">
<h2 id="rule-24">Rule 24</h2>
<p>Even though 24 is not prime, you should still see rule #23.</p>
</div>
<p>Even though 24 is not prime, you should still see <a href="#rule23">Rule 23</a>.</p>
<div id="rule25">
<h2 id="rule-25">Rule 25</h2>
<p><strong><code>|</code></strong> The IOCCC rule set needs more than 5^2 rules: see rule #26.</p>
</div>
<p><strong><code>|</code></strong> The <a href="rules.html">IOCCC rule set</a> needs more than 5^2 rules: see <a href="#rule26">Rule 26</a>.</p>
<div id="rule26">
<h2 id="rule-26">Rule 26</h2>
</div>
<p><strong><code>|</code></strong> “The quick brown fox jumps over the lazy dog”.<br>
<strong><code>|</code></strong> “Pack my box with five dozen liquor jugs.”<br>
<strong><code>|</code></strong> “How vexingly quick daft zebras jump!”<br>
<strong><code>|</code></strong> “Sphinx of black quartz, judge my vow.”<br>
<strong><code>|</code></strong> “Waltz, bad nymph, for quick jigs vex.”<br>
<strong><code>|</code></strong> “Mr. Jock, TV quiz PhD, bags few lynx.”</p>
<div id="rule27">
<h2 id="rule-27">Rule 27</h2>
<p><strong><code>|</code></strong> Unless otherwise needed, rule 27 is reserved for something cubic. :-)</p>
</div>
<p><strong><code>|</code></strong> Unless otherwise needed, <a href="#rule27">Rule 27</a> is reserved for something cubic. :-)</p>
<div id="rule28">
<h2 id="rule-28">Rule 28</h2>
<p><strong><code>|</code></strong> Rule 28 is a perfect way end to the list of rules as we do not plan to have 496 rules.</p>
</div>
<p><strong><code>|</code></strong> <a href="#rule28">Rule 28</a> is a perfect way end to the list of <a href="rules.html">IOCCC rules</a> as we do not plan to have 496 rules. :-)</p>
<h1 id="for-more-information">FOR MORE INFORMATION:</h1>
<p><strong><code>|</code></strong> For questions or comments about the contest, see <a href="../contact.html">Contacting the IOCCC</a>.</p>
<p><strong><code>|</code></strong> Be sure to review the <a href="index.html">IOCCC Rules and Guidelines</a> as
<a href="rules.html">rules</a> and the <a href="guidelines.html">guidelines</a> may (and often do) change from year to year.</p>
<p><strong><code>|</code></strong> You should be sure you have the current <a href="rules.html">rules</a> and
<a href="guidelines.html">guidelines</a> prior to submitting entries.</p>
<a href="rules.html">IOCCC rules</a> and the <a href="guidelines.html">IOCCC guidelines</a> may (and often do) change from year to year.</p>
<p><strong><code>|</code></strong> You should be sure you have the current <a href="rules.html">IOCCC rules</a> and
<a href="guidelines.html">IOCCC guidelines</a> prior to submitting entries.</p>
<p><strong><code>|</code></strong> See the <a href="../news.html">Official IOCCC website news</a> for additional information.</p>
<p><strong><code>|</code></strong> For the updates and breaking IOCCC news, you are encouraged to follow
the <a href="https://fosstodon.org/@ioccc">IOCCC on Mastodon</a> account. See our
+80 -18
View File
@@ -32,9 +32,11 @@ and remains unaltered. All other uses must receive prior permission in
writing by [contacting the judges](../contact.html).
## Rules version
<div id="rule_version">
## IOCCC Rules version
</div>
**`|`** These rules are version **2024-06-15-v28**.
**`|`** These [IOCCC rules](rules.html) are version **2024-06-23-v28**.
**IMPORTANT**: Be sure to read the [IOCCC guidelines](guidelines.html).
@@ -63,7 +65,7 @@ tr.v. -cated, -cating, -cates.
The goals of the IOCCC:
* To write the most Obscure/Obfuscated C program within the [rules](rules.html).
* To write the most Obscure/Obfuscated C program within the [IOCCC rules](rules.html).
* To show the importance of programming style, in an ironic way.
* To stress C compilers with unusual code.
* To illustrate some of the subtleties of the C language.
@@ -75,8 +77,8 @@ The goals of the IOCCC:
**`|`** This IOCCC runs from **2024-MMM-DD HH:MM:SS UTC** to **202x-MMM-DD HH:MM:SS UTC**.<br>
**`|`** **XXX - date/time is TBD - XXX**
Until the start of this IOCCC, these [rules](rules.html),
[guidelines](guidelines.html) and iocccsize.c (contained in the [mkiocccentry
Until the start of this IOCCC, these [IOCCC rules](rules.html),
[IOCCC guidelines](guidelines.html) and iocccsize.c (contained in the [mkiocccentry
toolkit](https://github.com/ioccc-src/mkiocccentry) and invoked by the
`mkiocccentry(1)` tool) should be considered provisional **BETA** versions and
**may be adjusted _AT ANY TIME_**.
@@ -93,7 +95,7 @@ for **important information** on how to submit to the IOCCC.
Please wait to submit your entries until after that time.
The official [rules](rules.html) and [guidelines](guidelines.html) will be
The official [IOCCC rules](rules.html) and [IOCCC guidelines](guidelines.html) will be
available on the [official IOCCC website](../index.html) on or slightly before
the start of this IOCCC. The `mkiocccentry` toolkit may be obtained at any time
at the [mkiocccentry toolkit repo](https://github.com/ioccc-src/mkiocccentry).
@@ -103,7 +105,7 @@ are using the correct versions of these items before using the IOCCC
entry submission URL.
# RULES
# IOCCC RULES
To help us with the volume of entries, we ask that you follow these rules:
@@ -113,22 +115,30 @@ To help us with the volume of entries, we ask that you follow these rules:
We need a rule 0. :-)
<div id="rule1">
## Rule 1
</div>
Your entry must be a complete program.
<div id="rule2">
## Rule 2
</div>
The size rule requires your entry to satisfy **BOTH** rule 2a and rule 2b:
The size rule requires your entry to satisfy **BOTH** [Rule 2a](#rule2a) and [Rule 2b](#rule2b):
<div id="rule2a">
## Rule 2a
</div>
**`|`** The size of your program source **MUST BE <= 4993 bytes** in length.
<div id="rule2b">
## Rule 2b
</div>
**`|`** When your program source is fed as input to the current IOCCC size
tool, and the IOCCC size tool `-i` command line option is used, the
@@ -140,7 +150,9 @@ the `mkiocccentry` tool (which we **STRONGLY recommend you do**) it will invoke
this tool before packaging your entry for submission.
<div id="rule3">
## Rule 3
</div>
Submissions should be performed using the instructions outlined at:
the [How to enter FAQ](../faq.html#submit).
@@ -155,7 +167,9 @@ When the IOCCC is not open, that link will likely be unresponsive.
Please wait to submit your entries until after that time.
<div id="rule4">
## Rule 4
</div>
If your entry is selected as a winner, it will be modified as follows:
@@ -165,7 +179,9 @@ Your source code will be the file **prog.c**. The compiled binary
will be called **prog**.
<div id="rule5">
## Rule 5
</div>
Your entry **MUST** not modify the content or filename of any part of your
original entry including, but not limited to **prog.c**, the **Makefile**
@@ -176,7 +192,9 @@ If you entry wishes to modify such content, it **MUST** first copy the
file to a new filename and then modify that copy.
<div id="rule6">
## Rule 6
</div>
**`|`** I am not a rule, I am a `free(void *human);` ‼️
@@ -185,8 +203,9 @@ file to a new filename and then modify that copy.
**`|`**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`}`
<div id="rule7">
## Rule 7
</div>
The obfuscated C program must be an original work that you own.
@@ -196,7 +215,7 @@ under the following license:
**`|`** **[CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/)**
See also rule 18.
See also [Rule 18](#rule18).
If you submit any content that is owned by others, you **MUST**
detail that ownership (i.e., who owns what) **AND document the
@@ -205,7 +224,9 @@ permission you obtained**.
Please note that the IOCCC size tool is **NOT** an original work.
<div id="rule8">
## Rule 8
</div>
**`|`** Entries must be received prior to the end of this IOCCC which is **2024-MMM-DD HH:MM:SS UTC**.<br>
**`|`** **XXX - date/time is TBD - XXX**
@@ -215,19 +236,25 @@ A confirmation of submission will be sent to the submitting email address
before the close of the contest.
<div id="rule9">
## Rule 9
</div>
**`|`** Each person may submit up to and including 10.000000 entries per contest.
Each entry must be submitted separately.
<div id="rule10">
## Rule 10
</div>
Entries requiring human interaction to be initially compiled are not permitted.
<div id="rule11">
## Rule 11
</div>
Programs that require special privileges (`setuid(2)`, `setgid(2)`, super-user,
special owner, special group, etc.) are still highly discouraged. We
@@ -236,7 +263,9 @@ platforms. If your program needs special permissions **please document
them** in the remarks file.
<div id="rule12">
## Rule 12
</div>
Legal abuse of the rules is somewhat encouraged. An entry that, in
the opinion of the judges, violates the rules will be disqualified.
@@ -244,13 +273,17 @@ Entries that attempt to abuse the rules **MUST** try to justify why
their rule abuse is legal, in the remarks file.
<div id="rule13">
## Rule 13
</div>
Any C source that fails to compile because of unescaped octets with
the high bit set (octet value >= 128) will be rejected.
<div id="rule14">
## Rule 14
</div>
Any C source that fails to compile because of lines with trailing
control-M's (i.e., lines with a tailing octet `015`) will be rejected.
@@ -260,7 +293,9 @@ Please check to be sure, before submitting, that you have removed
any control-M at the end of remark file lines.
<div id="rule15">
## Rule 15
</div>
When you submit your entry you must have a valid email address
that can both send and receive email. The online submission
@@ -283,7 +318,9 @@ See also [How may I submit to the IOCCC?](../faq.html#submit) in the
[FAQ](../faq.html).
<div id="rule16">
## Rule 16
</div>
You are **STRONGLY** encouraged to submit a previously unpublished _AND_
original entry. Submissions that are similar to previous entries are
@@ -291,7 +328,9 @@ discouraged. As we judge anonymously, submissions that have already
been published may be disqualified.
<div id="rule17">
## Rule 17
</div>
**`|`** The total size of your submission: the sum of the size of the program,
hints, comments, build and info files **MUST** be less than or equal
@@ -302,9 +341,12 @@ that file must than or equal 3999971 octets in size.
**`|`** The [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry)
(see `mkiocccentry(1)` and `txzchk(1)`) will help you verify that your
submission conforms to this rule.
submission conforms to this [Rule 17](#rule17).
<div id="rule18">
## Rule 18
</div>
The entirety of your entry must be submitted under the following license:
@@ -316,7 +358,9 @@ you **MUST HAVE PERMISSION** from the owner(s) to submit their content.
You must not submit anything that cannot be submitted under that license.
<div id="rule19">
## Rule 19
</div>
The remarks file must be written in markdown format. See
the Daring Fireball [Markdown: Basics](http://daringfireball.net/projects/markdown/basics)
@@ -325,7 +369,9 @@ for more information.
**`|`** We currently use [pandoc](https://pandoc.org) to convert markdown to HTML.
<div id="rule20">
## Rule 20
</div>
The how to build instructions must be in Makefile format. See [the FAQ about
make&#x28;1&#x29; compatibility the IOCCC
@@ -355,7 +401,9 @@ at the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry), tries to
detect if required rules exist in your Makefile.
<div id="rule21">
## Rule 21
</div>
Your entry must not create or modify files above the current directory
with the exception of the `/tmp` and the `/var/tmp` directories. Your entry
@@ -364,7 +412,9 @@ or in `/var/tmp` provided that `.` is **NOT** the first octet in any
directory name or filename you submit.
<div id="rule22">
## Rule 22
</div>
Catch 22:
@@ -382,22 +432,30 @@ for disqualification of your entry.
Yes, Virginia, **WE REALLY MEAN IT!**
<div id="rule23">
## Rule 23
</div>
This prime rule number is reserved for future use.
<div id="rule24">
## Rule 24
</div>
Even though 24 is not prime, you should still see rule #23.
Even though 24 is not prime, you should still see [Rule 23](#rule23).
<div id="rule25">
## Rule 25
</div>
**`|`** The IOCCC rule set needs more than 5^2 rules: see rule #26.
**`|`** The [IOCCC rule set](rules.html) needs more than 5^2 rules: see [Rule 26](#rule26).
<div id="rule26">
## Rule 26
</div>
**`|`** "The quick brown fox jumps over the lazy dog".<br>
**`|`** "Pack my box with five dozen liquor jugs."<br>
@@ -407,14 +465,18 @@ Even though 24 is not prime, you should still see rule #23.
**`|`** "Mr. Jock, TV quiz PhD, bags few lynx."
<div id="rule27">
## Rule 27
</div>
**`|`** Unless otherwise needed, rule 27 is reserved for something cubic. :-)
**`|`** Unless otherwise needed, [Rule 27](#rule27) is reserved for something cubic. :-)
<div id="rule28">
## Rule 28
</div>
**`|`** Rule 28 is a perfect way end to the list of rules as we do not plan to have 496 rules.
**`|`** [Rule 28](#rule28) is a perfect way end to the list of [IOCCC rules](rules.html) as we do not plan to have 496 rules. :-)
@@ -423,10 +485,10 @@ Even though 24 is not prime, you should still see rule #23.
**`|`** For questions or comments about the contest, see [Contacting the IOCCC](../contact.html).
**`|`** Be sure to review the [IOCCC Rules and Guidelines](index.html) as
[rules](rules.html) and the [guidelines](guidelines.html) may (and often do) change from year to year.
[IOCCC rules](rules.html) and the [IOCCC guidelines](guidelines.html) may (and often do) change from year to year.
**`|`** You should be sure you have the current [rules](rules.html) and
[guidelines](guidelines.html) prior to submitting entries.
**`|`** You should be sure you have the current [IOCCC rules](rules.html) and
[IOCCC guidelines](guidelines.html) prior to submitting entries.
**`|`** See the [Official IOCCC website news](../news.html) for additional information.