Merge pull request #2531 from xexyl/guidelines

This commit is contained in:
Landon Curt Noll authored and GitHub committed 2024-07-01 13:30:03 -07:00
commit d8a84dd287
7 files changed
+674 -419

No files matched your search

+1 -1
View File
@@ -518,7 +518,7 @@ faq: ${GEN_TOP_HTML} faq.md
@echo '=-=-=-=-= IOCCC begin make $@ =-=-=-=-=' @echo '=-=-=-=-= IOCCC begin make $@ =-=-=-=-='
@echo "You have a question?" @echo "You have a question?"
${GEN_TOP_HTML} -v 1 faq ${GEN_TOP_HTML} -v 1 faq
@echo "Perhaps the FAQ might help." @echo "Perhaps the FAQ might help!"
@echo '=-=-=-=-= IOCCC complete make $@ =-=-=-=-=' @echo '=-=-=-=-= IOCCC complete make $@ =-=-=-=-='
+18 -3
View File
@@ -1026,40 +1026,54 @@ to the <a href="https://www.ioccc.org">official IOCCC website</a>.</p>
<li>Rule 2a: Overall size limit of “prog.c”</li> <li>Rule 2a: Overall size limit of “prog.c”</li>
<li>Rule 2b: Size of “prog.c”, w/o counting certain types of characters</li> <li>Rule 2b: Size of “prog.c”, w/o counting certain types of characters</li>
</ul> </ul>
<div id="size_rule1984-1985">
<h4 id="ioccc-1984-1985">IOCCC 1984-1985</h4> <h4 id="ioccc-1984-1985">IOCCC 1984-1985</h4>
</div>
<p>NOTE: The size rule was actually rule 1.</p> <p>NOTE: The size rule was actually rule 1.</p>
<ul> <ul>
<li>Rule 2a: 512</li> <li>Rule 2a: 512</li>
<li>Rule 2b: n/a</li> <li>Rule 2b: n/a</li>
</ul> </ul>
<div id="size_rule1986-1987">
<h4 id="ioccc-1986-1987">IOCCC 1986-1987</h4> <h4 id="ioccc-1986-1987">IOCCC 1986-1987</h4>
</div>
<p>NOTE: The size rule was actually rule 1.</p> <p>NOTE: The size rule was actually rule 1.</p>
<ul> <ul>
<li>Rule 2a: 1024</li> <li>Rule 2a: 1024</li>
<li>Rule 2b: n/a</li> <li>Rule 2b: n/a</li>
</ul> </ul>
<div id="size_rule1988-1991">
<h4 id="ioccc-1988-1991">IOCCC 1988-1991</h4> <h4 id="ioccc-1988-1991">IOCCC 1988-1991</h4>
</div>
<p>NOTE: The size rule was actually rule 1.</p> <p>NOTE: The size rule was actually rule 1.</p>
<ul> <ul>
<li>Rule 2a: 1536</li> <li>Rule 2a: 1536</li>
<li>Rule 2b: n/a</li> <li>Rule 2b: n/a</li>
</ul> </ul>
<div id="size_rule1992-2000">
<h3 id="ioccc-1992-2000">IOCCC 1992-2000</h3> <h3 id="ioccc-1992-2000">IOCCC 1992-2000</h3>
</div>
<ul> <ul>
<li>Rule 2a: 3217</li> <li>Rule 2a: 3217</li>
<li>Rule 2b: 1536</li> <li>Rule 2b: 1536</li>
</ul> </ul>
<div id="size_rule2001-2012">
<h3 id="ioccc-2001-2012">IOCCC: 2001-2012</h3> <h3 id="ioccc-2001-2012">IOCCC: 2001-2012</h3>
</div>
<ul> <ul>
<li>Rule 2a: 4096</li> <li>Rule 2a: 4096</li>
<li>Rule 2b: 2048</li> <li>Rule 2b: 2048</li>
</ul> </ul>
<div id="size_rule2013-2020">
<h3 id="ioccc-2013-2020">IOCCC 2013-2020</h3> <h3 id="ioccc-2013-2020">IOCCC 2013-2020</h3>
</div>
<ul> <ul>
<li>Rule 2a: 4096</li> <li>Rule 2a: 4096</li>
<li>Rule 2b: 2053</li> <li>Rule 2b: 2053</li>
</ul> </ul>
<div id="size_rule2024-xxxx">
<h3 id="ioccc-2024-date">IOCCC 2024-date</h3> <h3 id="ioccc-2024-date">IOCCC 2024-date</h3>
</div>
<ul> <ul>
<li>Rule 2a: 4993</li> <li>Rule 2a: 4993</li>
<li>Rule 2b: 2503</li> <li>Rule 2b: 2503</li>
@@ -2452,12 +2466,13 @@ replace that text with:</p>
<p>The <a href="judges.html">IOCCC judges</a> run the IOCCC entirely out of <p>The <a href="judges.html">IOCCC judges</a> run the IOCCC entirely out of
their own funds. This includes paying for IOCCC related hardware, their own funds. This includes paying for IOCCC related hardware,
services, registration, software and related technical items.</p> services, registration, software and related technical items.</p>
<p>There is <strong>NO</strong> requirement for anyone to support the IOCCC. <p>There is <strong>NO</strong> requirement for anyone to support the <a href="index.html">IOCCC</a>.
Nevertheless, it has been shown that receiving <strong>anonymous</strong> gifts Nevertheless, it has been shown that receiving <strong>anonymous</strong> gifts
provides the <a href="judges.html">IOCCC judges</a> with a nice dopamine provides the <a href="judges.html">IOCCC judges</a> with a nice
<a href="https://en.wikipedia.org/wiki/Dopamine">dopamine</a>
boost, and happy <a href="judges.html">IOCCC judges</a> help make the IOCCC boost, and happy <a href="judges.html">IOCCC judges</a> help make the IOCCC
better for everyone. :-)</p> better for everyone. :-)</p>
<p>If you wish to express your support and/or appreication or our <p>If you wish to express your support and/or appreciation for our
efforts, we suggest making an <strong>Anonymous</strong> gift via the efforts, we suggest making an <strong>Anonymous</strong> gift via the
<a href="https://www.amazon.com/hz/wishlist/ls/3HSNTEL8RQ1M0?ref_=wl_share">IOCCC Amazon wishlist</a>.</p> <a href="https://www.amazon.com/hz/wishlist/ls/3HSNTEL8RQ1M0?ref_=wl_share">IOCCC Amazon wishlist</a>.</p>
<div id="faq5_8"> <div id="faq5_8">
+18 -3
View File
@@ -839,43 +839,57 @@ In later years, Rule 2 was split into two parts. These two parts of Rule 2 are:
* Rule 2a: Overall size limit of "prog.c" * Rule 2a: Overall size limit of "prog.c"
* Rule 2b: Size of "prog.c", w/o counting certain types of characters * Rule 2b: Size of "prog.c", w/o counting certain types of characters
<div id="size_rule1984-1985">
#### IOCCC 1984-1985 #### IOCCC 1984-1985
</div>
NOTE: The size rule was actually rule 1. NOTE: The size rule was actually rule 1.
* Rule 2a: 512 * Rule 2a: 512
* Rule 2b: n/a * Rule 2b: n/a
<div id="size_rule1986-1987">
#### IOCCC 1986-1987 #### IOCCC 1986-1987
</div>
NOTE: The size rule was actually rule 1. NOTE: The size rule was actually rule 1.
* Rule 2a: 1024 * Rule 2a: 1024
* Rule 2b: n/a * Rule 2b: n/a
<div id="size_rule1988-1991">
#### IOCCC 1988-1991 #### IOCCC 1988-1991
</div>
NOTE: The size rule was actually rule 1. NOTE: The size rule was actually rule 1.
* Rule 2a: 1536 * Rule 2a: 1536
* Rule 2b: n/a * Rule 2b: n/a
<div id="size_rule1992-2000">
### IOCCC 1992-2000 ### IOCCC 1992-2000
</div>
* Rule 2a: 3217 * Rule 2a: 3217
* Rule 2b: 1536 * Rule 2b: 1536
<div id="size_rule2001-2012">
### IOCCC: 2001-2012 ### IOCCC: 2001-2012
</div>
* Rule 2a: 4096 * Rule 2a: 4096
* Rule 2b: 2048 * Rule 2b: 2048
<div id="size_rule2013-2020">
### IOCCC 2013-2020 ### IOCCC 2013-2020
</div>
* Rule 2a: 4096 * Rule 2a: 4096
* Rule 2b: 2053 * Rule 2b: 2053
<div id="size_rule2024-xxxx">
### IOCCC 2024-date ### IOCCC 2024-date
</div>
* Rule 2a: 4993 * Rule 2a: 4993
* Rule 2b: 2503 * Rule 2b: 2503
@@ -2991,13 +3005,14 @@ The [IOCCC judges](judges.html) run the IOCCC entirely out of
their own funds. This includes paying for IOCCC related hardware, their own funds. This includes paying for IOCCC related hardware,
services, registration, software and related technical items. services, registration, software and related technical items.
There is **NO** requirement for anyone to support the IOCCC. There is **NO** requirement for anyone to support the [IOCCC](index.html).
Nevertheless, it has been shown that receiving **anonymous** gifts Nevertheless, it has been shown that receiving **anonymous** gifts
provides the [IOCCC judges](judges.html) with a nice dopamine provides the [IOCCC judges](judges.html) with a nice
[dopamine](https://en.wikipedia.org/wiki/Dopamine)
boost, and happy [IOCCC judges](judges.html) help make the IOCCC boost, and happy [IOCCC judges](judges.html) help make the IOCCC
better for everyone. :-) better for everyone. :-)
If you wish to express your support and/or appreication or our If you wish to express your support and/or appreciation for our
efforts, we suggest making an **Anonymous** gift via the efforts, we suggest making an **Anonymous** gift via the
[IOCCC Amazon wishlist](https://www.amazon.com/hz/wishlist/ls/3HSNTEL8RQ1M0?ref_=wl_share). [IOCCC Amazon wishlist](https://www.amazon.com/hz/wishlist/ls/3HSNTEL8RQ1M0?ref_=wl_share).
+298 -198
View File
@@ -413,7 +413,7 @@ writing by <a href="../contact.html">contacting the judges</a>.</p>
<div id="guidelines_version"> <div id="guidelines_version">
<h2 id="ioccc-guidelines-version">IOCCC Guidelines version</h2> <h2 id="ioccc-guidelines-version">IOCCC Guidelines version</h2>
</div> </div>
<p><strong><code>|</code></strong> These <a href="guidelines.html">IOCCC guidelines</a> are version <strong>28.2 2024-06-30</strong>.</p> <p><strong><code>|</code></strong> These <a href="guidelines.html">IOCCC guidelines</a> are version <strong>28.3 2024-07-01</strong>.</p>
<p><strong>IMPORTANT</strong>: Be <strong>SURE</strong> to read the <a href="rules.html">IOCCC rules</a>.</p> <p><strong>IMPORTANT</strong>: Be <strong>SURE</strong> to read the <a href="rules.html">IOCCC rules</a>.</p>
<div id="change_marks"> <div id="change_marks">
<h3 id="change-marks">Change marks</h3> <h3 id="change-marks">Change marks</h3>
@@ -451,7 +451,7 @@ 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> <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> <strong><code>|</code></strong> <strong>XXX - date/time is TBD - XXX</strong></p>
<p><strong><code>|</code></strong> The <a href="rules.html">IOCCC rules</a>, <a href="guidelines.html">IOCCC <p><strong><code>|</code></strong> The <a href="rules.html">IOCCC rules</a>, <a href="guidelines.html">IOCCC
guidelines</a> will be available on the <a href="https://www.ioccc.org">official IOCCC guidelines</a> will be available on the <a href="https://www.ioccc.org">Official IOCCC
website</a> on or slightly before start of this IOCCC. Please check website</a> on or slightly before start of this IOCCC. Please check
<a href="../faq.html#submit">the IOCCC FAQ about how to submit</a> to see how <a href="../faq.html#submit">the IOCCC FAQ about how to submit</a> to see how
to submit entries, on or after the start of this IOCCC, to be sure to submit entries, on or after the start of this IOCCC, to be sure
@@ -459,7 +459,8 @@ you are using the correct versions of these items before using the
IOCCC submission URL.</p> IOCCC submission URL.</p>
<p><strong><code>|</code></strong> The <a href="rules.html#rule2a">Rule 2a</a> size has <strong>increased from 4096 to 4993</strong> bytes.</p> <p><strong><code>|</code></strong> The <a href="rules.html#rule2a">Rule 2a</a> size has <strong>increased from 4096 to 4993</strong> bytes.</p>
<p><strong><code>|</code></strong> The <a href="rules.html#rule2b">Rule 2b</a> size has <strong>increased from 2053 to 2503</strong> bytes.</p> <p><strong><code>|</code></strong> The <a href="rules.html#rule2b">Rule 2b</a> size has <strong>increased from 2053 to 2503</strong> bytes.</p>
<p><strong><code>|</code></strong> The default way to compile submissions is now <code>-std=gnu17 -O3 -g3 -Wall -Wextra -pedantic</code>.</p> <p><strong><code>|</code></strong> The default way to compile submissions is now <code>-std=gnu17 -O3 -g3 -Wall -Wextra -pedantic</code>. See below for more details about the example Makefile
for more help.</p>
<p><strong><code>|</code></strong> Submissions are in the form of a single xz compressed tarball.</p> <p><strong><code>|</code></strong> Submissions are in the form of a single xz compressed tarball.</p>
<p><strong><code>|</code></strong> To assist in the formation of the xz compressed tarball for submission, use the <p><strong><code>|</code></strong> To assist in the formation of the xz compressed tarball for submission, use the
<code>mkiocccentry(1)</code> tool as found in the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a>.</p> <code>mkiocccentry(1)</code> tool as found in the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a>.</p>
@@ -544,17 +545,19 @@ are considered more portable.</p>
<p><strong><code>|</code></strong> See the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a> for the <code>iocccsize(1)</code> tool.</p> <p><strong><code>|</code></strong> See the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry repo</a> for the <code>iocccsize(1)</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, <strong>2a</strong> and <strong>2b</strong>.</p> <p><strong><code>|</code></strong> To further clarify <a href="rules.html#rule2">Rule 2</a>, we subdivided it into two parts, <strong>2a</strong> and <strong>2b</strong>.</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 <strong>4993 bytes</strong>.</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 <strong>4993 bytes</strong>.</p>
<p><strong><code>|</code></strong> Your submission must satisfy BOTH the maximum size <a href="rules.html#rule2a">Rule 2a</a> AND your submission <p><strong><code>|</code></strong> Your submission must satisfy BOTH the maximum size <a href="rules.html#rule2a">Rule
must satisfy the IOCCC size tool <a href="rules.html#rule2b">Rule 2b</a>.</p> 2a</a> AND the IOCCC size tool <a href="rules.html#rule2b">Rule 2b</a>.</p>
<p><strong><code>|</code></strong> This IOCCC size tool imposes a 2nd limit on C code size (see <a href="rules.html#rule2a">Rule 2a</a>. To check your <p><strong><code>|</code></strong> This IOCCC size 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>:</p> code against <a href="rules.html#rule2">Rule 2</a>:</p>
<pre><code> ./iocccsize prog.c</code></pre> <pre><code> ./iocccsize prog.c</code></pre>
<p><strong><code>|</code></strong> The IOCCC size tool algorithm may be summarized as follows:</p> <p><strong><code>|</code></strong> The IOCCC size tool algorithm may be summarized as follows:</p>
<pre><code> The size tool counts most C reserved words (keyword, secondary, <blockquote>
and selected preprocessor keywords) as 1. The size tool counts all <p>The size tool counts most C reserved words (keyword, secondary, and selected
other octets as 1 excluding ASCII whitespace, and excluding any preprocessor keywords) as 1. The size tool counts all other octets as 1
&#39;`;`&#39;, &#39;`{`&#39; or &#39;`}`&#39; followed by ASCII whitespace, and excluding any excluding ASCII whitespace, and excluding any ‘<code>;</code>’, ‘<code>{</code>’ or ‘<code>}</code>’ followed by
&#39;`;`&#39;, &#39;`{`&#39; or &#39;`}`&#39; octet immediately before the end of file.</code></pre> ASCII whitespace, and excluding any ‘<code>;</code>’, ‘<code>{</code>’ or ‘<code>}</code>’ octet immediately
before the end of file.</p>
</blockquote>
<p>ASCII whitespace includes ASCII tab, ASCII space, ASCII newline, <p>ASCII whitespace includes ASCII tab, ASCII space, ASCII newline,
ASCII formfeed, and ASCII carriage return.</p> ASCII formfeed, and ASCII carriage return.</p>
<p><strong><code>|</code></strong> When ‘<code>;</code>’, ‘<code>{</code>’ or ‘<code>}</code>’ are within a C string, they may still not be<br> <p><strong><code>|</code></strong> When ‘<code>;</code>’, ‘<code>{</code>’ or ‘<code>}</code>’ are within a C string, they may still not be<br>
@@ -573,34 +576,35 @@ 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>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 <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 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> value similar to the <a href="../faq.html#size_rule2001-2012">2001-2012</a> and
<a href="../faq.html#size_rule2013-2020">2013-2020</a> IOCCC eras.</p>
<p><strong><code>|</code></strong> We recommend that you use the <p><strong><code>|</code></strong> We recommend that you use the
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example">example Makefile</a> <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example">example Makefile</a>
from the <a href="https://github.com/ioccc-src/mkiocccentry">IOCCC mkiocccentry repo</a>. from the <a href="https://github.com/ioccc-src/mkiocccentry">IOCCC mkiocccentry repo</a>.
renamed as <code>Makefile</code> of course, as the starting point for your submissions renamed as <code>Makefile</code> of course, as the starting point for your submission’s
required <code>Makefile</code>. Feel free to modify the Makefile to suit your obfuscated needs.</p> required <code>Makefile</code>. Feel free to modify the <code>Makefile</code> to suit your obfuscated needs.</p>
<p><strong><code>|</code></strong> The rest of these guidelines will assume that you are using some variant of the <p><strong><code>|</code></strong> The rest of these guidelines will assume that you are using some variant of the
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example">example Makefile</a>, <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example">example Makefile</a>,
renamed as <code>Makefile</code> of course.</p> renamed as <code>Makefile</code> of course.</p>
<p><strong><code>|</code></strong> We suggest that you compile your submission with a commonly available <p><strong><code>|</code></strong> We suggest that you compile your submission with a commonly available
<code>-std=gnu17</code> (ISO C 2017 with GNU extensions) C compiler.</p> <code>-std=gnu17</code> (ISO C 2017 with GNU extensions) C compiler.</p>
<p><strong><code>|</code></strong> Unless you clearly state otherwise in your <code>remarks.md</code> file AND put into your <p><strong><code>|</code></strong> Unless you clearly state otherwise in your <code>remarks.md</code> file AND put into your
submission’s <code>Makefile</code>, we will compile using <code>-O3 -std=gnu17</code>.</p> submission’s <code>Makefile</code>, we will compile using <code>-std=gnu17 -O3 -g3</code>.</p>
<p><strong><code>|</code></strong> It is <strong>OK</strong> to require your submission to not be compiled <p><strong><code>|</code></strong> It is <strong>OK</strong> to require your submission to not be compiled
using the default <code>-O3 -g3 -std=gnu17</code> settings. Simply explain why using the default <code>-std=gnu17 -O3 -g3</code> settings. Simply explain why
your submission should not be compiled using <code>-O3 -g3 -std=gnu17</code> in your submission should not be compiled using <code>-std=gnu17 -O3 -g3</code> in
your <code>remarks.md</code> file and adjust your <code>Makefile</code> accordingly.</p> your <code>remarks.md</code> file and adjust your <code>Makefile</code> accordingly.</p>
<p><strong><code>|</code></strong> <strong>IMPORTANT NOTE</strong>: The use of <code>-std=gnu17</code> does <strong>NOT</strong> imply the use of the <code>gcc</code> <p><strong><code>|</code></strong> <strong>IMPORTANT NOTE</strong>: The use of <code>-std=gnu17</code> does <strong>NOT</strong> imply the use of the <code>gcc</code>
compiler! We often start by compiling using the <strong>clang</strong> C compiler instead.</p> compiler! We often start by compiling using the <strong>clang</strong> C compiler instead.</p>
<p><strong><code>|</code></strong> You may change the standard under which your submission is compiled <p><strong><code>|</code></strong> You may change the standard under which your submission is compiled
by modifying the <code>CSTD</code> Makefile variable. For example, to use <code>c17</code> instead:</p> by modifying the <code>CSTD</code> Makefile variable. For example, to use <code>c17</code> instead:</p>
<pre><code> CSTD= -std=c17</code></pre> <pre><code> CSTD= -std=c17</code></pre>
<p><strong><code>|</code></strong> For compilers, such as clang, that have the <code>-Weverything</code> option, <p><strong><code>|</code></strong> For compilers, such as <code>clang</code>, that have the <code>-Weverything</code> option,
while you may wish to try it, you should look at <a href="../faq.html#weverything">the FAQ about clang while you may wish to try it, you should look at <a href="../faq.html#weverything">the FAQ about clang
-Weverything</a>. We do <strong>NOT</strong> recommend that you put -Weverything</a>. We do <strong>NOT</strong> recommend that you put
the use of <code>-Weverything</code> into your submission’s <code>Makefile</code> for the reasons the use of <code>-Weverything</code> into your submission’s <code>Makefile</code> for the reasons
cited there. This goes even if your version does not trigger a warning as some cited there. This goes even if your version does not trigger a warning as some
other version might.</p> other version might!</p>
<p><strong><code>|</code></strong> You may change the level of optimization and compiler debug level <p><strong><code>|</code></strong> You may change the level of optimization and compiler debug level
that your submission is compiled with, by modifying the <code>OPT</code> Makefile variable. that your submission is compiled with, by modifying the <code>OPT</code> Makefile variable.
For example, to compile without optimization and debug symbols:</p> For example, to compile without optimization and debug symbols:</p>
@@ -609,26 +613,49 @@ For example, to compile without optimization and debug symbols:</p>
compiler warnings cannot be helped: especially in the case of compiler warnings cannot be helped: especially in the case of
obfuscated C. :-) So if you cannot easily get rid of a compiler obfuscated C. :-) So if you cannot easily get rid of a compiler
warning, try not fret too much.</p> warning, try not fret too much.</p>
<p><strong><code>|</code></strong> To turn off a compiler warning, to your submission’s <code>Makefile</code>, <p><strong><code>|</code></strong> We <strong>LIKE</strong> code that has a minimum of warnings, especially under the
more strict <code>-Wall -Wextra -pedantic</code> mode:</p>
<pre><code> CWARN= -Wall -Wextra -pedantic</code></pre>
<p><strong><code>|</code></strong> The two previous guidelines may be thought by some as being somewhat
contradictory. Isn’t life, and isn’t trying to satisfy “contradictory customer
requirements” all too often like that? :-) Try to minimize warnings if you
can.</p>
<p><strong><code>|</code></strong> If you manage to produce very few warnings, or perhaps no warnings at
all under the <code>-Wall -Wextra -pedantic</code> mode, then by all means brag about it in
your <code>remarks.md</code> file <strong>AND BE SURE TO TELL US</strong> the OS, OS version, compiler
and compiler version in which you observed this occurring (in case our OS and
compiler produces a different result: so your submission won’t be penalized for
not meeting your claims).</p>
<p><strong><code>|</code></strong> If your submission issues lots of warnings but is otherwise
marvelously obfuscated in multiple levels, don’t worry about it. Nevertheless,
be sure that the warnings do not constitute a potential “<strong>show stopper</strong>”
compiler problem. Be sure that compilers such as both <code>gcc</code> and <code>clang</code> won’t
produce a compile <strong>error</strong> and refuse to compile your code: unless for some
reason that is what you intend to happen in which case document that too in your
<code>remarks.md</code> file. :-)</p>
<p>All other things being equal, a program that must turn off fewer
warnings will be considered better, for certain values of better.</p>
<p><strong><code>|</code></strong> To turn off a compiler warning, in your submission’s <code>Makefile</code>,
try something such as:</p> try something such as:</p>
<pre><code> CSILENCE= -Wno-some-thing -Wno-another-thing -Wno-unknown-warning-option</code></pre> <pre><code> CSILENCE= -Wno-some-thing -Wno-another-thing -Wno-unknown-warning-option</code></pre>
<p><strong><code>|</code></strong> If you do add “<code>-Wno-some-thing</code>” to your Makefile, <p><strong><code>|</code></strong> If you do add “<code>-Wno-some-thing</code>” to your Makefile,
consider also adding <code>-Wno-unknown-warning-option</code> just in case the consider changing:</p>
warning you use is not available in the compilers we use test your <pre><code> CUNKNOWN=</code></pre>
submission. Observe, however, that some compilers <strong>DO NOT</strong> have that option so <p>to:</p>
you might wish to note this in your <strong>remarks.md</strong> as it can be a command line <pre><code> CUNKNOWN= -Wno-unknown-warning-option</code></pre>
error.</p> <p><strong><code>|</code></strong> Some compilers have reported this as an error, however, and if you have
such a compiler you might want to not add it and note it in your <code>remarks.md</code>.</p>
<p><strong><code>|</code></strong> If you need to define something on the compile line, use <p><strong><code>|</code></strong> If you need to define something on the compile line, use
the <code>CDEFINE</code> Makefile variable. For example:</p> the <code>CDEFINE</code> Makefile variable. For example:</p>
<pre><code> CDEFINE= -Dfoo -Dbar=baz</code></pre> <pre><code> CDEFINE= -Dfoo -Dbar=baz</code></pre>
<p><strong><code>|</code></strong> If you need to include a file on the command line, use <p><strong><code>|</code></strong> If you need to include a file on the command line, use
the <code>CINCLUDE</code> Makefile variable. For example:</p> the <code>CINCLUDE</code> Makefile variable. For example:</p>
<pre><code> CINCLUDE= -include stdio.h</code></pre> <pre><code> CINCLUDE= -include stdio.h</code></pre>
<p><strong><code>|</code></strong> If need add other “<em>magic</em>” flags to your compile line, <p><strong><code>|</code></strong> If need to add other “<strong>magic</strong>” flags to your compile line,
use the <code>COTHER</code> Makefile variable. For example:</p> use the <code>COTHER</code> Makefile variable. For example:</p>
<pre><code> COTHER= -fno-math-errno</code></pre> <pre><code> COTHER= -fno-math-errno</code></pre>
<p><strong>NOTE</strong>: We recommend using “<em>magic</em>” flags <strong>only if BOTH <em>gcc</em> <p><strong>NOTE</strong>: <strong>We only recommend using “<em>magic</em>” flags if <em>BOTH</em> <code>gcc</code>
and <em>clang</em></strong> support it.</p> <em>and</em> <code>clang</code></strong> support it.</p>
<div id="likes"> <div id="likes">
<div id="dislikes"> <div id="dislikes">
<h1 id="our-likes-and-dislikes">OUR LIKES AND DISLIKES:</h1> <h1 id="our-likes-and-dislikes">OUR LIKES AND DISLIKES:</h1>
@@ -637,30 +664,26 @@ and <em>clang</em></strong> support it.</p>
<p><strong><code>|</code></strong> We <strong>LIKE</strong> entries that use an edited variant of the <p><strong><code>|</code></strong> We <strong>LIKE</strong> entries that use an edited variant of the
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example">example Makefile</a>, <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example">example Makefile</a>,
renamed as <code>Makefile</code> of course. This makes it easier for the <a href="../judges.html">IOCCC Judges</a> renamed as <code>Makefile</code> of course. This makes it easier for the <a href="../judges.html">IOCCC Judges</a>
to test your submission. And if your submissions wins, integrate it into 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> the <a href="https://www.ioccc.org/index.html">Official IOCCC winner website</a>.</p>
<p>Doing masses of <code>#defines</code> to obscure the source has become ‘old’. We <p>Doing masses of <code>#define</code>s to obscure the source has become ‘old’. We
tend to ‘see thru’ masses of <code>#defines</code> due to our pre-processor tests tend to ‘see thru’ masses of <code>#define</code>s due to our pre-processor tests
that we apply. Simply abusing <code>#defines</code> or <code>-Dfoo=bar</code> won’t go as far that we apply. Simply abusing <code>#define</code>s or <code>-Dfoo=bar</code> won’t go as far
as a program that is more well rounded in confusion.</p> as a program that is more well rounded in confusion.</p>
<p>Many C compilers <strong>DISLIKE</strong> the following code, and so do we:</p> <p><strong>Many</strong> C compilers <strong>DISLIKE</strong> the following code, and so do we:</p>
<pre><code> #define d define <pre><code> #define d define
#d foo /* &lt;-- don&#39;t expect this to turn into #define foo */</code></pre> #d foo /* &lt;-- don&#39;t expect this to turn into #define foo */</code></pre>
<p><strong><code>|</code></strong> In other words, it is a compilation error.</p>
<p>When declaring local or global variables, you should declare the type:</p> <p>When declaring local or global variables, you should declare the type:</p>
<pre><code> int this_is_fine; <pre><code> int this_is_fine;
this_is_not; /* &lt;-- Try to avoid implicit type declarations */</code></pre> this_is_not; /* &lt;-- Try to avoid implicit type declarations */</code></pre>
<p><strong><code>|</code></strong> We <strong>LIKE</strong> code that has a minimum of warnings, especially under the <p><strong><code>|</code></strong> We tend to <strong>like <em>less</em></strong> a submission that requires either
more strict <code>-Wall -Wextra -pedantic</code> mode:</p> <code>gcc</code> <strong>OR</strong> <code>clang</code>. <strong>We <em>prefer</em> submissions</strong> that can compile
<pre><code> CWARN= -Wall -Wextra -pedantic</code></pre> under <strong>BOTH</strong> <code>gcc</code> <strong>AND</strong> <code>clang</code>.</p>
<p>All other things being equal, a program that must turn off fewer
warnings will be considered better, for certain values of better.</p>
<p><strong><code>|</code></strong> We tend to <strong>like less</strong> a submission that requires either
<strong>gcc</strong> or <strong>clang</strong>. We prefer submissions that can compile
under both <strong>gcc</strong> and <strong>clang</strong>.</p>
<p><strong><code>|</code></strong> We <strong>RECOMMEND</strong> that the compiler flags you use in your <p><strong><code>|</code></strong> We <strong>RECOMMEND</strong> that the compiler flags you use in your
submission’s <code>Makefile</code> are supported by both <strong>gcc</strong> and <strong>clang</strong>.</p> submission’s <code>Makefile</code> are supported by <strong>BOTH</strong> <code>gcc</code> <strong>AND</strong> <code>clang</code>.</p>
<p><strong><code>|</code></strong> We <strong>DISLIKE</strong> the use of obscure compiler flags, especially <p><strong><code>|</code></strong> We <strong>DISLIKE</strong> the use of obscure compiler flags, especially
if either <strong>gcc</strong> or <strong>clang</strong> does not support it. We <strong>suggest</strong> 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> that you not use any really obscure compiler flags if you can help it.</p>
<p>One side effect of the above is that you cannot assume the use <p>One side effect of the above is that you cannot assume the use
of nested functions such as:</p> of nested functions such as:</p>
@@ -673,14 +696,14 @@ of nested functions such as:</p>
<p><strong><code>|</code></strong> On 2012 July 20, the judges rescinded the encouragement of <p><strong><code>|</code></strong> On 2012 July 20, the judges rescinded the encouragement of
nested functions. Such constructions, while interesting and sometimes nested functions. Such constructions, while interesting and sometimes
amusing, will have to wait until they required by a C standard that are amusing, will have to wait until they required by a C standard that are
actually implemented in both <strong>gcc</strong> and <strong>clang</strong>.</p> actually implemented in <strong>BOTH</strong> <code>gcc</code> <strong>AND</strong> <code>clang</code>.</p>
<p><strong><code>|</code></strong> We <strong>DISLIKE</strong> submissions require the use of <code>-fnested-functions</code>.</p> <p><strong><code>|</code></strong> We <strong>DISLIKE</strong> submissions that require the use of <code>-fnested-functions</code>.</p>
<p>We prefer programs that do not require a fish license: crayons and <p>We prefer programs that do not require a fish license: crayons and
cat detector vans not withstanding.</p> cat detector vans not withstanding.</p>
<p>If your submission uses functions that have a variable number of <p>If your submission uses functions that have a variable number of
arguments, be careful. Systems implement <code>va_list</code> as a wide variety 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> are of ways. Because of this, a number of operations using <code>va_list</code> <strong>are
not portable and must not be used:</p> not portable and <em>must not</em> be used</strong>:</p>
<ul> <ul>
<li>assigning a non-<code>va_list</code> variable to/from a <code>va_list</code> variable</li> <li>assigning a non-<code>va_list</code> variable to/from a <code>va_list</code> variable</li>
<li>casting a non-<code>va_list</code> variable into/from a <code>va_list</code> variable</li> <li>casting a non-<code>va_list</code> variable into/from a <code>va_list</code> variable</li>
@@ -695,17 +718,17 @@ not portable and must not be used:</p>
<p>On 28 January 2007, the Judges rescinded the requirement that the <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 octet.</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> <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> return <code>int</code>; your submission should assume that <code>exit(3)</code> returns a <code>void</code>.</p>
<p><strong><code>|</code></strong> This <em>guideline</em> 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. <p>Small programs are best when they are short, obscure and concise.
While such programs are not as complex as other winners, they do While such programs are not as complex as other winners, they do
serve a useful purpose. They are often the only program that people serve a useful purpose: they are often the only program that people
attempt to completely understand. For this reason, we look for attempt to completely understand. For this reason, we look for
programs that are compact, and are instructional.</p> programs that are compact, and are instructional.</p>
<p>While those who are used to temperatures found on <a href="https://science.nasa.gov/dwarf-planets/">dwarf <p><strong><code>|</code></strong> While those who are used to temperatures found on <a href="https://science.nasa.gov/dwarf-planets/">dwarf
planet</a>, planets</a>
(<strong>yes Virginia, dwarf planets are planets</strong>) such as (<strong>yes Virginia, dwarf planets <em>ARE</em> planets!</strong>), such as
<a href="https://science.nasa.gov/dwarf-planets/pluto/">Pluto</a> might be able to <a href="https://science.nasa.gov/dwarf-planets/pluto/">Pluto</a>, might be able to
explain to the Walrus why our seas are boiling hot, the question of explain to the Walrus why our seas are boiling hot, the question of
whether pigs have wings is likely to remain a debatable point to most.</p> whether pigs have wings is likely to remain a debatable point to most.</p>
<p>One line programs should be short one line programs: say around 80 to 120 <p>One line programs should be short one line programs: say around 80 to 120
@@ -714,17 +737,19 @@ a one-liner in our vague opinion.</p>
<p>We tend to <strong>DISLIKE</strong> programs that:</p> <p>We tend to <strong>DISLIKE</strong> programs that:</p>
<ul> <ul>
<li>are very hardware specific</li> <li>are very hardware specific</li>
<li>are very OS version specific (index/strchr differences are OK, but socket/streams specific code is likely not to be)<br> <li><strong><code>|</code></strong> are very OS version specific (<code>index(3)</code>/<code>strchr(3)</code> differences are OK, but sockets/streams specific code is likely not to be)<br>
<strong><code>|</code></strong> * dump core or have compiler warnings (it is OK only if you warn us in your ‘remark.md’ file)<br> <strong><code>|</code></strong> * dump core or have compiler warnings (it is OK only if you warn us in your <code>remarks.md</code> file)<br>
<strong><code>|</code></strong> * won’t compile or run a <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX Specification</a> environment</li> <strong><code>|</code></strong> * won’t compile or run in a <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX
<li>depend on a utility or application not normally found systems that conform to the <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX Specification</a></li> Specification</a> environment<br>
<strong><code>|</code></strong> * depend on a utility or application not normally found in systems that conform to the <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX Specification</a></li>
<li>abuse the build file to get around the size limit<br> <li>abuse the build file to get around the size limit<br>
<strong><code>|</code></strong> * obfuscate by use of ANSI trigraphs<br> <strong><code>|</code></strong> * obfuscate by use of ANSI trigraphs<br>
<strong><code>|</code></strong> * obfuscate by use of digraphs<br>
<strong><code>|</code></strong> * are larger than they need to be<br> <strong><code>|</code></strong> * are larger than they need to be<br>
<strong><code>|</code></strong> * have more lines than they need to have<br> <strong><code>|</code></strong> * have more lines than they need to have<br>
<strong><code>|</code></strong> * are “blob-ier” (just a pile of unformatted C code) than they need to be</li> <strong><code>|</code></strong> * are “blob-ier” (just a pile of unformatted C code) than they need to be
<li>are rather similar to <strong>previous winners</strong> :-(</li> <strong><code>|</code></strong> * are rather similar to <strong><a href="../years.html">previous winners</a></strong> :-(
<li>are identical to <strong>previous losers</strong> :-)</li> <strong><code>|</code></strong> * are <strong>identical</strong> to <strong>previous losers</strong> :-)</li>
<li>that mandate the exclusive use of a specific Integrated Development Environment (IDE)</li> <li>that mandate the exclusive use of a specific Integrated Development Environment (IDE)</li>
</ul> </ul>
<p>In order to encourage submission portability, we <strong>DISLIKE</strong> entries that <p>In order to encourage submission portability, we <strong>DISLIKE</strong> entries that
@@ -732,11 +757,13 @@ fail to build unless one is using an IDE. For example, do not
mandate that one must use Microsoft Visual Studio to compile mandate that one must use Microsoft Visual Studio to compile
your submission. Nevertheless some of the better IDEs have command-line your submission. Nevertheless some of the better IDEs have command-line
interfaces to their compilers, once one learns how to invoke a shell.</p> interfaces to their compilers, once one learns how to invoke a shell.</p>
<p><strong><code>|</code></strong> The program must compile and link cleanly in a <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX Specification</a> environment Therefore do not assume the system has a <p><strong><code>|</code></strong> The program must compile and link cleanly in a <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX
Specification</a>
environment. Therefore do not assume the system has a
<a href="https://en.wikipedia.org/wiki/Windows.h">windows.h</a> include file:</p> <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 include */</code></pre> <pre><code> #include &lt;windows.h&gt; /* we DISLIKE this include */</code></pre>
<p>Unless you are cramped for space, or unless you are entering the <p>Unless you are cramped for space, or unless you are entering the
‘<em>Best one liner</em>’ category, we suggest that you format your program ‘<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> in a more creative way than simply forming excessively long lines.</p>
<p>At least one judge prefers to maintain the use of the <p>At least one judge prefers to maintain the use of the
<a href="https://en.wikipedia.org/wiki/Leap_second">leap-second</a> <a href="https://en.wikipedia.org/wiki/Leap_second">leap-second</a>
@@ -744,16 +771,19 @@ as part of the world’s time standard. If your code prints time
with seconds, we prefer that your code be capable of printing the with seconds, we prefer that your code be capable of printing the
time of day during a leap-second where the value in seconds time of day during a leap-second where the value in seconds
after the minute mark is 60.</p> after the minute mark is 60.</p>
<p>The “<em>how to build</em>” make process should not be used to try and get <p>The “<strong>how to build</strong>” process (via the <code>Makefile</code> or otherwise) should not be
around the size limit. It is one thing to make use of a several <code>-D</code>s used to try and get around the size limit. It is one thing to make use of a
on the compile line to help out, but it is quite another to use many several <code>-D</code>s on the compile line to help out, but it is quite another to use
bytes of <code>-D</code>s in order to try and squeeze the source under the size limit.</p> 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 <p>Your source code, post-pre-processing, should not exceed the size of
<a href="https://en.wikipedia.org/wiki/Microsoft_Windows">Windows</a>. :-)</p> <a href="https://en.wikipedia.org/wiki/Microsoft_Windows">Microsoft Windows</a>. :-)</p>
<p><strong><code>|</code></strong> 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 judges, as a group, have a history giving wide degree of latitude <p>The judges, as a group, have a history giving wide degree of latitude
to reasonable entries. And recently they have had as much longitudinal to reasonable entries. And recently they have had as much longitudinal
variation as it is possible to have on Earth. :-)</p> variation as it is possible to have on <a href="https://science.nasa.gov/earth/">Earth</a>. :-)</p>
<p><strong><code>|</code></strong> You should try to restrict commands used on the build file to <p><strong><code>|</code></strong> 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 Specification</a> environments commands found in <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX Specification</a> environments
and systems that conform to the <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX Specification</a>.</p> and systems that conform to the <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX Specification</a>.</p>
<p><strong><code>|</code></strong> You may compile and use your own programs. If you do, try to build and execute <p><strong><code>|</code></strong> You may compile and use your own programs. If you do, try to build and execute
@@ -761,9 +791,10 @@ from the current directory. This restriction is not a hard and
absolute one. The intent is to ensure that the building if your absolute one. The intent is to ensure that the building if your
program is reasonably portable.</p> program is reasonably portable.</p>
<p>We prefer programs that are portable across a wide variety of Unix-like <p>We prefer programs that are portable across a wide variety of Unix-like
operating systems (i.e., Linux, GNU Hurd, BSD, Unix, etc.).</p> operating systems (e.g., Linux, GNU Hurd, BSD, Unix, etc.).</p>
<p>You are in a maze of twisty <em>guidelines</em>, 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 <p>There are at least zero judges 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 IOCCC judging process.</p>
<p>Don’t forget that the building of your program should be done <p>Don’t forget that the building of your program should be done
<strong>WITHOUT human intervention</strong>. So don’t do things such as:</p> <strong>WITHOUT human intervention</strong>. So don’t do things such as:</p>
@@ -774,11 +805,11 @@ or nothing to do with the IOCCC judging process.</p>
<p>However, you can do something cute such as making your program <p>However, you can do something cute such as making your program
do something dumb (or cute) when it is built ‘automatically’, and do something dumb (or cute) when it is built ‘automatically’, and
when it is run with a human involved, do something more clever. when it is run with a human involved, do something more clever.
For example, one could use the build instructions:</p> For example, one could put in their <code>Makefile</code>:</p>
<pre><code> prog: prog.c <pre><code> prog: prog.c
${CC} prog.c -DNON_HUMAN_COMPILE -o prog ${CC} prog.c -DNON_HUMAN_COMPILE -o prog
@echo &quot;See remarks section about alternate ways to compile&quot;</code></pre> @echo &quot;See remarks section about alternate ways to compile&quot;</code></pre>
<p>and then include special notes in tour <code>remarks.md</code> file for <p>and then include special notes in their <code>remarks.md</code> file for
alternate / human intervention based building.</p> alternate / human intervention based building.</p>
<p>We want to get away from source that is simply a compact blob of <p>We want to get away from source that is simply a compact blob of
octets. Really try to be more creative than blob coding. <strong>HINT!</strong></p> octets. Really try to be more creative than blob coding. <strong>HINT!</strong></p>
@@ -801,46 +832,52 @@ 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 program, we tend to favor the second version. Of course, a third
version of the same program that is formatted in an interesting version of the same program that is formatted in an interesting
and/or obfuscated way, would definitely win over the first two! 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> for details.</p> Remember, you can submit more than one submission. See the <a href="rules.html">IOCCC
<p>We suggest that you avoid trying for the ‘smallest self-replicating’ rules</a> for details (in particular, <a href="rules.html#rule9">Rule 9</a>).</p>
source. The smallest, a zero byte submission, <a href="../1994/smr/index.html">won in 1994</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 <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 better be the smallest such program or they risk being rejected because
they do not work as documented.</p> they do not work as documented.</p>
<p>Please note that the C source below, besides lacking in obfuscation, <p>Please note that the C source below, besides lacking in obfuscation,
is NOT the smallest C source file that when compiled and run, dumps core:</p> is NOT the smallest C source file that when compiled and run, dumps core:</p>
<pre><code> main;</code></pre> <pre><code> main;</code></pre>
<p><strong><code>|</code></strong> Unless you specify <code>-fwritable-strings</code> (see <code>COTHER</code> in the <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example">example Makefile</a> do not assume this sort of code will work:</p> <p><strong><code>|</code></strong> Unless you specify <code>-fwritable-strings</code> (see <code>COTHER</code> in the <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example">example
Makefile</a>) do not assume this sort of code will work:</p>
<pre><code> char *T = &quot;So many primes, so little time!&quot;; <pre><code> char *T = &quot;So many primes, so little time!&quot;;
... ...
T[14] = &#39;;&#39;; /* modifying a string requires: -fwritable-strings */</code></pre> T[14] = &#39;;&#39;; /* modifying a string requires: -fwritable-strings */</code></pre>
<p><strong><code>|</code></strong> Initialized char arrays are OK to write over. This is OK:</p> <p><strong><code>|</code></strong> Initialized char arrays are OK to write over. For instance, this is OK:</p>
<pre><code> char b[] = &quot;Is this OK&quot;; <pre><code> char b[] = &quot;Is this OK&quot;;
b[9] = &#39;k&#39;; /* modifying an initialized char array is OK */</code></pre> b[9] = &#39;k&#39;; /* modifying an initialized char array is OK */</code></pre>
<p><strong><code>|</code></strong> There are more than 1 typos in this very sentence.</p> <p><strong><code>|</code></strong> There are more than 1 typos in this very sentence.</p>
<p>X client entries should be as portable as possible. Entries that <p>X client entries should be as portable as possible. Submissions that
adapt to a wide collection of environments will be favored. For adapt to a wide collection of environments will be favored. For
example, don’t depend on a particular type or size of display. example, don’t depend on a particular type or size of display.
Don’t assume the use of a particular browser. Instead assume a Don’t assume the use of a particular browser. Instead assume a
generic browser that forms to a widely used W3C standard. generic browser that forms to a widely used <a href="https://www.w3.org/standards/">W3C
standard</a>.
Don’t assume a particular sound sub-system or video driver is installed Don’t assume a particular sound sub-system or video driver is installed
in the OS. Instead, make use of a well known and widely available open 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> source program (one that actually works) to display audio/visual data.</p>
<p>X client entries should avoid using X related libraries and <p>X client entries should avoid using X related libraries and
software that is not in wide spread use.</p> software that are not in wide spread use.</p>
<p>This is the only <em>guideline</em> that contains the word fizzbin.</p> <p>This is the only <em>guideline</em> that contains the word
<a href="https://en.wikipedia.org/wiki/List_of_games_in_Star_Trek#Fizzbin">fizzbin</a>.</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>? <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> 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><strong><code>|</code></strong> OK, there are actually 3 <em>guidelines</em> that contain the word
<a href="https://en.wikipedia.org/wiki/List_of_games_in_Star_Trek#Fizzbin">fizzbin</a>.</p>
<p>We <strong>DISLIKE</strong> entries that use proprietary toolkits such as the <code>M*tif</code>, <p>We <strong>DISLIKE</strong> 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 <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> open source toolkit that is widely and freely available instead.</p>
<p><strong>NOTE</strong>: The previous <em>guideline</em> in this spot has been replaced by this <em>guideline</em>:</p> <p><strong>NOTE</strong>: The previous <em>guideline</em> in this spot has been replaced by this <em>guideline</em>:</p>
<p><strong><code>|</code></strong> X client entries should try to not to depend on particular items on <p><strong><code>|</code></strong> X client entries should try to not to depend on particular items in
<code>.Xdefaults</code>. If you must do so, be sure to note the required lines <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 in the your <code>remarks.md</code> file. They should also not depend on any
particular window manager.</p> particular window manager.</p>
<p><strong><code>|</code></strong> Try to avoid entries that play some people believe is copyrighted music.</p> <p><strong><code>|</code></strong> Try to avoid entries that play music that some people believe is copyrighted music.</p>
<p><strong><code>|</code></strong> 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>.</p> <p><strong><code>|</code></strong> 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>.</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 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> To quote the <a href="../judges.html">IOCCC judges</a>:</p> <p><strong><code>|</code></strong> To quote the <a href="../judges.html">IOCCC judges</a>:</p>
@@ -869,14 +906,15 @@ parliament should you have one.</p>
program doesn’t have to excel in all areas, but doing well in several program doesn’t have to excel in all areas, but doing well in several
areas really does help.</p> areas really does help.</p>
<p><strong><code>|</code></strong> You are better off explaining what your submission does in your <p><strong><code>|</code></strong> You are better off explaining what your submission does in your
<code>remarks.md</code> file section rather than leaving it obscure for the judges <code>remarks.md</code> file section rather than leaving it obscure for the
as we might miss something and/or be too tired to notice.</p> <a href="../judges.html">judges</a> as we might miss something and/or be too tired to
notice.</p>
<p><strong><code>|</code></strong> Please avoid this specific individual <em>guideline</em>, 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><strong><code>|</code></strong> We freely admit that interesting, creative or humorous comments in <p><strong><code>|</code></strong> 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 your <code>remarks.md</code> file help your chances of winning. If you had to
read so many twisted entries, you too would enjoy a good laugh or two. 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 We think the readers of the contest winners do as well. We do read
the your <code>remarks.md</code> content during the judging process, so it is worth your your <code>remarks.md</code> content during the judging process, so it is worth your
while to write remarkable <code>remarks.md</code> file.</p> while to write 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 <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 in compilation failures. Some non-Unix/non-Linux tools such as
@@ -887,7 +925,7 @@ prevent such trailing control-M’s being added.</p>
<p>One should restrict libcurses to portable features found on BSD <p>One should restrict libcurses to portable features found on BSD
or Linux curses.</p> or Linux curses.</p>
<p><a href="rules.html#rule13">Rule 13</a> 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. octets with the high bit set (octet value &gt;= 128) <strong>might</strong> be rejected.
Instead of unescaped octets, you should use or escapes:</p> Instead of unescaped octets, you should use or escapes:</p>
<pre><code> <pre><code>
/* 123456789 123456789 123456789 123456 */ /* 123456789 123456789 123456789 123456 */
@@ -897,7 +935,7 @@ Instead of unescaped octets, you should use or escapes:</p>
else printf(&quot;This code should not print this message\n&quot;);</code></pre> else printf(&quot;This code should not print this message\n&quot;);</code></pre>
<p><strong><code>|</code></strong> It is a very good idea to, in your <code>remarks.md</code> file, tell us why you <p><strong><code>|</code></strong> 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 think your submission is obfuscated. This is particularly true if
your submission is has some very subtle obfuscations that we might your submission has some very subtle obfuscations that we might
otherwise overlook. <strong>&lt;&lt;– Hint!</strong></p> otherwise overlook. <strong>&lt;&lt;– Hint!</strong></p>
<p>Anyone can format their code into a dense blob. A really clever <p>Anyone can format their code into a dense blob. A really clever
author will try format their submission using a “normal” formatting style author will try format their submission using a “normal” formatting style
@@ -906,25 +944,65 @@ the code might pass for non-obfuscated C. Deceptive comments,
and misleading formatting, in some cases, may be a plus. On the and misleading formatting, in some cases, may be a plus. On the
other hand, a misleading code style requires more source bytes.</p> other hand, a misleading code style requires more source bytes.</p>
<p>If you do elect to use misleading formatting and comments, we <p>If you do elect to use misleading formatting and comments, we
suggest you remark on this point in your remarks where you talk 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, 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 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> into creating a dense blob. Such are the trade-offs that obfuscators face!</p>
<p><strong><code>|</code></strong> We prefer code that can run on either a 64-bit or 32-bit <p><strong><code>|</code></strong> 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 processor. However, it is <strong>UNWISE </strong>to assume it will run on an
some Intel-like x86 architecture.</p> some Intel-like x86 architecture.</p>
<p>We believe that Mark Twain’s once wrote:</p> <p>We believe that Mark Twain’s quote:</p>
<blockquote> <blockquote>
<p>Get your facts first, then you can distort them as you please.</p> <p>Get your facts first, then you can distort them as you please.</p>
</blockquote> </blockquote>
<p>… is a good motto 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> <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! :-) is not an original work, unless you are <a href="../authors.html#Anthony_C_Howe">Anthony C
Howe</a>, in which case it is original! :-)
Submitting source that uses the content of iocccsize.c, unless you are Submitting source that uses the content of iocccsize.c, unless you are
Anthony C Howe, might run the risk of violating <a href="rules.html#rule7">Rule 7</a>.</p> <a href="../authors.html#Anthony_C_Howe">Anthony C Howe</a>, might run the risk of
<p><a href="rules.html#rule7">Rule 7</a> does not prohibit you from writing your own obfuscated IOCCC size tool. violating <a href="rules.html#rule7">Rule 7</a>.</p>
However if you do, you might wish to make your tool do something more <p><strong><code>|</code></strong> The <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/txzchk.c">txzchk
interesting than simply implementing the IOCCC size tool algorithm.</p> tool source</a>
is not an original work, unless you are <a href="../authors.html#Cody_Boone_Ferguson">Cody Boone
Ferguson</a>, in which case it is original! :-)
Submitting source that uses the content of txzchk.c, unless you are
<a href="../authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a>, might run the risk of
violating <a href="rules.html#rule7">Rule 7</a>.</p>
<p><strong><code>|</code></strong> Neither the <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/chkentry.c">chkentry
tool source</a> nor the
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/mkiocccentry.c">mkiocccentry
tool source</a> nor
the <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/test_ioccc/fnamchk.c">fnamchk tool
source</a> nor
various others in the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
repo</a>
are original works, unless you are <a href="http://www.isthe.com/chongo/index.html">Landon Curt
Noll</a>, in which case they are original! :-)
Submitting source that uses the content of these tools, unless you are
<a href="http://www.isthe.com/chongo/index.html">Landon Curt Noll</a>, might run the risk of
violating <a href="rules.html#rule7">Rule 7</a>.</p>
<p><strong><code>|</code></strong> Neither the <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/jparse/README.md">jparse tool and
library</a> nor the
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/jparse/jstrencode.c">jstrencode
tool</a> nor
<a href="https://github.com/ioccc-src/mkiocccentry/blob/master/jparse/jstrdecode.c">jstrdecode
tool</a>
are original works, unless you are <a href="../authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a> or
<a href="http://www.isthe.com/chongo/index.html">Landon Curt
Noll</a>, in which case they are original! :-)
Submitting source that uses the code of these tools or libraries, unless you are
<a href="../authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a>
or <a href="http://www.isthe.com/chongo/index.html">Landon Curt Noll</a>, might run the risk of
violating <a href="rules.html#rule7">Rule 7</a>.</p>
<p><strong><code>|</code></strong> <a href="rules.html#rule7">Rule 7</a> does not prohibit you from writing your own
obfuscated versions of these tools, unless of course you are <a href="http://www.isthe.com/chongo/index.html">Landon Curt
Noll</a>, in which case you probably won’t
win since judges are disqualified! :-)
However, if you do write your own version, you might wish to make it do something more
interesting than simply implementing the IOCCC tools’ algorithms. On the other
hand, writing an obfuscated version of a library runs the risk of violating
<a href="rules.html#rule1">Rule 1</a> as it is likely not a complete program.</p>
<p>While programs that only run in a specific word size are OK. If you have <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> to pick, choose a 64-bit word size.</p>
<p><strong><code>|</code></strong> If <a href="../judges.html">IOCCC judges</a> are feeling ornery we <p><strong><code>|</code></strong> If <a href="../judges.html">IOCCC judges</a> are feeling ornery we
@@ -933,40 +1011,45 @@ a PDP-11. Heck, should we ever find an emulator of 60-bit CDC Cyber
CPU, we might just try your submission on that emulator as well :-)</p> CPU, we might just try your submission on that emulator as well :-)</p>
<p><strong><code>|</code></strong> If your submission <strong>MUST</strong> run only on a 64-bit or 32-bit architecture, <p><strong><code>|</code></strong> 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 then you <strong>MUST</strong> specify the <code>-arch</code> on your command line
(see <code>ARCH</code> in the <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example">example Makefile</a>. Do not assume a processor word size without specifying <code>-arch</code>. For example:</p> (see <code>ARCH</code> in the <a href="https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example">example
Makefile</a>). Do not assume a processor word size without specifying <code>-arch</code>. For example:</p>
<pre><code> ARCH= -m64</code></pre> <pre><code> ARCH= -m64</code></pre>
<p><strong><code>|</code></strong> 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!</p>
<p><strong><code>|</code></strong> Try to be even more creative!</p> <p><strong><code>|</code></strong> Try to be even more creative!</p>
<p><strong><code>|</code></strong> If there are limitations in your submission, you are highly encouraged <p><strong><code>|</code></strong> If there are limitations in your submission, you are highly encouraged
to note such limitations in your <code>remarks.md</code> file. For example if your to note such limitations in your <code>remarks.md</code> file. For example if your
submission factors values up to a certain size, you might want to state:</p> submission factors values up to a certain size, you might want to state:</p>
<blockquote> <blockquote>
<p>This submission factors values up 2305567963945518424753102147331756070.<br> <p>This submission factors values up <code>2305567963945518424753102147331756070</code>.<br>
Attempting to factor larger values will produce unpredictable results.</p> Attempting to factor larger values will produce unpredictable results.</p>
</blockquote> </blockquote>
<p>The judges 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> <blockquote>
<p>This submission factors positive values up 2305567963945518424753102147331756070.<br> <p>This submission factors positive values up <code>2305567963945518424753102147331756070</code>.<br>
Attempting to factor large values will produce unpredictable results.</p> Attempting to factor large values will produce unpredictable results.</p>
</blockquote> </blockquote>
<p>However the judges 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 want to might state:</p>
<blockquote> <blockquote>
<p>This submission factors values between 1 and 2305567963945518424753102147331756070.<br> <p>This submission factors values between 1 and <code>2305567963945518424753102147331756070</code>.<br>
Attempting to factor values outside that range will produce unpredictable results.</p> Attempting to factor values outside that range will produce unpredictable results.</p>
</blockquote> </blockquote>
<p>Moreover the try to also factor 3.5 or 0x7, or Fred, so you want to might state:</p> <p>Moreover the try to also factor 3.5 or 0x7, or Fred, so you want to might state:</p>
<blockquote> <blockquote>
<p>This submission factors integers between 1 and 2305567963945518424753102147331756070.<br> <p>This submission factors integers between 1 and <code>2305567963945518424753102147331756070</code>.<br>
Attempting to factor anything else will produce unpredictable results.</p> Attempting to factor anything else will produce unpredictable results.</p>
</blockquote> </blockquote>
<p>You submission might be better off catching the attempt to factor bogus values <p>You submission might be better off catching the attempt to factor bogus values
and doing something interesting. So you might want to code accordingly and state:</p> and doing something interesting. So you might want to code accordingly and state:</p>
<blockquote> <blockquote>
<p>This submission factors integers between 1 and 2305567963945518424753102147331756070.<br> <p>This submission factors integers between 1 and <code>2305567963945518424753102147331756070</code>.<br>
Attempting to factor anything else will cause the program to insult your pet fish Eric.</p> Attempting to factor anything else will cause the program to insult your pet fish Eric.</p>
</blockquote> </blockquote>
<p>The judges might not have a pet fish named Eric, so might want to state:</p> <p>The <a href="../judges.html">judges</a> might not have a pet fish named Eric, so might want to state:</p>
<blockquote> <blockquote>
<p>This submission factors integers between 1 and 2305567963945518424753102147331756070.<br> <p>This submission factors integers between 1 and
<code>2305567963945518424753102147331756070</code>.<br>
Attempting to factor anything else will cause the program to insult your pet fish Eric,<br> Attempting to factor anything else will cause the program to insult your pet fish Eric,<br>
or in the case that you lack such a pet, will insult the pet that you do not have.</p> or in the case that you lack such a pet, will insult the pet that you do not have.</p>
</blockquote> </blockquote>
@@ -978,12 +1061,23 @@ and state:</p>
given enough time and memory. If the value is not a proper integer, the program<br> given enough time and memory. If the value is not a proper integer, the program<br>
might insult a fish named Eric.</p> might insult a fish named Eric.</p>
</blockquote> </blockquote>
<p><strong><code>|</code></strong> Do not fear if you not 100% sure of the significance of <code>2305567963945518424753102147331756070</code> as it is not of prime importance: or is it? :-)</p> <p><strong><code>|</code></strong> Do not fear if you’re not 100% sure of the significance of <code>2305567963945518424753102147331756070</code> as it is not of prime importance: or is it? :-)</p>
<p><strong><code>|</code></strong> We <strong>DISLIKE</strong> the use of use ASCII tab characters in markdown files, such as in the required <code>remarks.md</code> file.</p> <p><strong><code>|</code></strong> We <strong>DISLIKE</strong> the use of use ASCII tab characters in markdown files, such as in the required <code>remarks.md</code> file.</p>
<p><strong><code>|</code></strong> We don’t mind the use 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 complicate and annoys us when be comes to rendering your markdown content.</p> <p><strong><code>|</code></strong> We don’t mind the use ASCII tab characters in your C code. Feel free
<p><strong><code>|</code></strong> If you do use ASCII tab characters in your non-markdown files, be aware that some people may use tab stop that is different than the common 8 character tab stop.</p> to use ASCII tab characters if that suits your obfuscation needs. If is
<p><strong><code>|</code></strong> <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. See also <a href="rules.html#rule19">Rule 19</a>.</p> perfectly <strong>OK</strong> to use tab characters elsewhere in your submission, just not in
<p><strong><code>|</code></strong> We <strong>LIKE</strong> a 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> markdown files as this tends complicate and annoy us when it comes time to
rendering your markdown content.</p>
<p><strong><code>|</code></strong> If you do use ASCII tab characters in your non-markdown files, be
aware that some people may use tab stop that is different than the common 8
character tab stop.</p>
<p><strong><code>|</code></strong> <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. See
also <a href="rules.html#rule19">Rule 19</a>.</p>
<p><strong><code>|</code></strong> 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><strong><code>|</code></strong> We <strong>RECOMMEND</strong> you put a reasonable amount effort into the content of the <code>remarks.md</code> file: it is a required for for a reason. :-)</p> <p><strong><code>|</code></strong> We <strong>RECOMMEND</strong> you put a reasonable amount effort into the content of the <code>remarks.md</code> file: it is a required for for a reason. :-)</p>
<div id="rules_abuse"> <div id="rules_abuse">
<div id="abusing_rules"> <div id="abusing_rules">
@@ -997,7 +1091,7 @@ submitted.</p>
<p>Legal rule abuse is encouraged to help promote creativity. Rule abuse <p>Legal rule abuse is encouraged to help promote creativity. Rule abuse
entries, regardless of if they receive an award, result in changes to entries, regardless of if they receive an award, result in changes to
the next year’s <a href="rules.html">IOCCC rules</a> and <a href="guidelines.html">IOCCC guidelines</a>.</p> 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 <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>. A submission that violates the <a href="rules.html">rules</a> in the <a href="rules.html">IOCCC rules</a>. A submission that violates the <a href="rules.html">rules</a> in the
opinion of the judges, <strong>WILL</strong> be opinion of the judges, <strong>WILL</strong> be
disqualified. <strong><em>RULE ABUSE CARRIES A CERTAIN LEVEL OF RISK!</em></strong> If you disqualified. <strong><em>RULE ABUSE CARRIES A CERTAIN LEVEL OF RISK!</em></strong> If you
@@ -1026,7 +1120,7 @@ is that we sometimes make genuine mistakes. But in many cases such
problems, flaws or areas of confusion are deliberate. Changes to problems, flaws or areas of confusion are deliberate. Changes to
<a href="rules.html">IOCCC rules</a> and <a href="guidelines.html">IOCCC guidelines</a> in response to rule abuses, are done in a minimal <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 fashion. Often we will deliberately leave behind holes (or introduce
new ones) so that future rule abuse may continue. A cleaver author new ones) so that future rule abuse may continue. A clever author
should be able to read them and “drive a truck through the holes” in should be able to read them 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> 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 <p>At the risk of stating the obvious, this contest is a parody of the software
@@ -1044,10 +1138,10 @@ This is one of the reasons why the <a href="rules.html">IOCCC rules</a> and
</div> </div>
<p>Entries are judged by Leonid A. Broukhis and Landon Curt Noll.</p> <p>Entries are judged by Leonid A. Broukhis and Landon Curt Noll.</p>
<p>Each submission submitted is given a random id number and subdirectory. The <p>Each submission submitted is given a random id number and subdirectory. The
submission files including, but not limited to prog.c, Makefile (that we submission files including, but not limited to <code>prog.c</code>, <code>Makefile</code> (that we
form from around your “how to build” information), as well as any form from your submitted <code>Makefile</code> and any additional “<strong>how to build</strong>”
data files that you submit are all placed under their own directory information you provide), as well as any data files that you submit are all
stored and judged from this directory.</p> placed under their own directory and stored and judged from this directory.</p>
<p>Any information about the authors is not read by the judges until <p>Any information about the authors is not read by the judges until
the judging process is complete, and then only from entries that have the judging process is complete, and then only from entries that have
won an award. Because we do not read this information for entries that won an award. Because we do not read this information for entries that
@@ -1062,33 +1156,34 @@ and outside the scope of the above paragraph.</p>
including comments of famous Internet personalities such as <a href="http://www.citi.umich.edu/u/honey">Peter including comments of famous Internet personalities such as <a href="http://www.citi.umich.edu/u/honey">Peter
Honeyman</a>. The judges are on to this trick Honeyman</a>. The judges are on to this trick
and therefore consider any obfuscated source or data file claiming to be from 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 Honeyman to not be from Honeyman. This of course creates an interesting paradox
known as the “obfuscated Peter Honeyman paradox”. Should Peter Honeyman known as the “<strong>obfuscated Peter Honeyman paradox</strong>”. Should Peter Honeyman
actually submit an obfuscated submission, he alone is excluded from the above, as we actually submit to the IOCCC, he alone is excluded from the above, as we
will likely believe it just another attempt at confusion. This <em>guideline</em> is will likely believe it’s just another attempt at confusion. This <em>guideline</em> is
known as the “Peter Honeyman is exempt” <em>guideline</em>.</p> known as the “<strong>Peter Honeyman is exempt</strong>” <em>guideline</em>.</p>
<p>BTW: None of the entries claiming to be from Peter Honeyman have ever <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 won an award. So it is theoretically possible that Peter Honeyman
did submit a submission in the past. In the past, Peter had denied did submit to the IOCCC in the past. In the past, Peter had denied
submitting anything to the IOCCC. Perhaps those entries were submitting anything to the IOCCC. Perhaps those entries were
submitted by one of his students?</p> submitted by one of his students?</p>
<p><strong><code>|</code></strong> Hopefully we are <strong>VERY CLEAR</strong> on this point! The rules now strongly state: <p><strong><code>|</code></strong> Hopefully we are <strong>VERY CLEAR</strong> on this point! The rules now strongly state:
<strong>PLEASE <em>DO NOT</em> put a name of an author</strong>, in an obvious way, into your <strong>PLEASE <em>DO NOT</em> put a name of an author</strong>, in an obvious way, into your
source code, <code>remarks.md</code>, data files, etc. The above “Peter Honeyman is source code, <code>remarks.md</code>, data files, etc., the above “<strong>Peter Honeyman is
exempt” notwithstanding.</p> exempt</strong>” notwithstanding.</p>
<p>We seemed to have digressed again … :-) Returning to the judging process:</p> <p>We seemed to have digressed again … :-) Returning to the judging process:</p>
<p>We prefer to be kept in the dark as much as you are until the final <p>We prefer to be kept in the dark as much as you are until the final
awards are given. We enjoy the surprise of finding out in the end, awards are given. We enjoy the surprise of finding out in the end,
who won and where they were from.</p> who won and where they are from.</p>
<p>We attempt to keep all entries anonymous, unless they win an award. <p>We attempt to keep all entries anonymous, unless they win an award.
Because the main ‘prize’ of winning is being announced, we make all Because the main ‘prize’ of winning is being announced, we make all
attempts to send non-winners into oblivion. We remove all non-winning attempts to send non-winners into oblivion. We remove all non-winning
files, and shred all related paper. By tradition, we do not even files, and shred all related printouts. By tradition, we do not even
reveal the number of entries that we received.</p> reveal the number of entries that we received.</p>
<p>During the judging process, a process that spans multiple sessions <p><strong><code>|</code></strong> During the judging process, a process that spans multiple sessions over
over a few weeks, we post general updates from our <a href="https://fosstodon.org/@ioccc">Mastodon a few weeks, we post general updates from our <a href="https://fosstodon.org/@ioccc">Mastodon
account</a>. Make sure you reload the feed every so account</a>.</p>
often as unless you are mentioned you will not get a push notification.</p> <p><strong><code>|</code></strong> <strong>Make sure you reload the feed</strong> every so often <strong>because unless you
are mentioned you will NOT get a push notification!</strong></p>
<div id="rounds"> <div id="rounds">
<h2 id="judging-rounds">JUDGING ROUNDS:</h2> <h2 id="judging-rounds">JUDGING ROUNDS:</h2>
</div> </div>
@@ -1102,42 +1197,41 @@ previous round. Thus, a submission gets at least two readings.</p>
</div> </div>
<p>A reading consists of a number of actions:</p> <p>A reading consists of a number of actions:</p>
<ul> <ul>
<li>reading the “how to build” information and forming a Makefile</li> <li>reading <code>prog.c</code>, the C source<br>
<li>reading prog.c, the C source<br>
<strong><code>|</code></strong> * reviewing the <code>remarks.md</code> information</li> <strong><code>|</code></strong> * reviewing the <code>remarks.md</code> information</li>
<li>briefly looking any any supplied data files</li> <li>briefly looking any any supplied data files</li>
<li>passing the source thru the C pre-processor <li>passing the source thru the C pre-processor
skipping over any #include files</li> skipping over any <code>#include</code>d files</li>
<li>performing a number of C beautify/cleanup edits on the source</li> <li>performing a number of C beautify/cleanup edits on the source</li>
<li>passing the beautified source thru the C pre-processor <li>passing the beautified source thru the C pre-processor
skipping over any #include files</li> skipping over any <code>#include</code>d files</li>
<li>compiling/building the source</li> <li>compiling/building the source</li>
<li>running the program</li> <li>running the program</li>
<li>Doing other things that only <a href="../judges.html">IOCCC judges</a> know about :-)</li> <li>Doing other things that only <a href="../judges.html">IOCCC judges</a> know about :-)</li>
</ul> </ul>
<p>In later rounds, other actions are performed including performing <p>In later rounds, other actions are performed including performing
miscellaneous tests on the source and binary.</p> miscellaneous tests on the source and binary.</p>
<p><strong><code>|</code></strong> This is the very <em>guideline</em> that goes, BING!</p> <p><strong><code>|</code></strong> This is the very <strong>guideline</strong> that goes, <strong>BING!</strong></p>
<p>Until we reduce the stack of entries down to about 25 entries, entries <p>Until we reduce the stack of submissions down to about 25 submissions,
are judged on an individual basis. A submission is set aside because it submissions are judged on an individual basis. A submission is set aside because it
does not, in our opinion, meet the standard established by the round. does not, in our opinion, meet the standard established by the round.
When the number of entries thins to about 25 entries, we begin to form When the number of submissions thins to about 25 submissions, we begin to form
award categories. Entries begin to compete with each other for awards. award categories. Submissions begin to compete with each other for awards.
A submission will often compete in several categories.</p> A submission will often compete in several categories.</p>
<p>The actual award category list will vary depending on the types of entries <p>The actual award category list will vary depending on the types of submissions
we receive. A typical category list might be:</p> we receive. A typical category list might be:</p>
<ul> <ul>
<li>best small one line program (see above about one line programs)</li> <li><strong>best small one line program (see above about one line programs)</strong></li>
<li>best small program</li> <li><strong>best small program</strong></li>
<li>strangest/most creative source layout</li> <li><strong>strangest/most creative source layout</strong></li>
<li>most useful obfuscated program</li> <li><strong>most useful obfuscated program</strong></li>
<li>best game that is obfuscated</li> <li><strong>best game that is obfuscated</strong></li>
<li>most creatively obfuscated program</li> <li><strong>most creatively obfuscated program</strong></li>
<li>most deceptive C code (code with deceptive comments and source code)</li> <li><strong>most deceptive C code (code with deceptive comments and source code)</strong></li>
<li>best X client (see OUR LIKES AND DISLIKES)</li> <li><strong>best X program</strong> (see <a href="#likes">OUR LIKES AND DISLIKES</a>)</li>
<li>best abuse of ISO C or ANSI C standard (see above about compilers)</li> <li><strong>best abuse of ISO C or ANSI C standard</strong> (see above about compilers)</li>
<li>best abuse of the C preprocessor</li> <li><strong>best abuse of the C preprocessor</strong></li>
<li>worst abuse of the rules</li> <li><strong>worst/best abuse of the rules</strong> or some variation</li>
<li>(anything else so strange that it deserves an award)</li> <li>(anything else so strange that it deserves an award)</li>
</ul> </ul>
<p>We do not limit ourselves to this list. For example, a few entries are so <p>We do not limit ourselves to this list. For example, a few entries are so
@@ -1150,50 +1244,53 @@ half that number: declaring those remaining to be winners.</p>
the final round are definitely better than the ones that do not the final round are definitely better than the ones that do not
make it. The selection of the winners out of the final round, is make it. The selection of the winners out of the final round, is
less clear cut.</p> less clear cut.</p>
<p>Sometimes a final round submission is good enough to win, but is beat out <p>Sometimes a final round submission is good enough to win, but is beat out by a
by a similar, but slightly better submission. For this reason, it is similar, but slightly better submission. For this reason, it is sometimes
sometimes worthwhile to re-enter an improved version of a submission worthwhile to resubmit an improved version of a submission that failed to win in
that failed to win in a previous year. This assumes, of course, a previous year, the next year. This assumes, of course, that the submission is
that the submission is worth improving in the first place!</p> worth improving in the first place!</p>
<p><strong><code>|</code></strong> Over the years, more than one <a href="../judges.html">IOCCC judge</a> <p><strong><code>|</code></strong> Over the years, more than one <a href="../judges.html">IOCCC judge</a>
has been known to <em>bribe</em> another IOCCC judge into voting for a has been known to <strong>bribe</strong> another IOCCC <a href="../judges.html">judge</a> into voting for a
winning submission by offering a bit high quality chocolate, or winning entry by offering a bit of high quality chocolate, or
other fun item.</p> other fun item.</p>
<p><strong><code>|</code></strong> One <strong>should not</strong> attempt to <em>bribe</em> an <a href="../judges.html">IOCCC <p><strong><code>|</code></strong> One <strong>should NOT</strong> attempt to <strong>bribe</strong> an <a href="../judges.html">IOCCC
judge</a>, unless you are an <a href="../judges.html">IOCCC judge</a>, judge</a>, <strong>unless you are an <a href="../judges.html">IOCCC judge</a></strong>,
because <em>bribing</em> a <a href="../judges.html">IOCCC judge</a> by a non-judge because <strong>bribing</strong> an <a href="../judges.html">IOCCC judge</a> by a non-judge
has been shown to <strong>NOT</strong> be effective when the <strong>person attempting has been shown to <strong>NOT</strong> be effective when the <strong>person <em>attempting</em>
the bribe is made known</strong> to the <a href="../judges.html">IOCCC judges</a> the <em>bribe</em> is made known</strong> to the <a href="../judges.html">IOCCC judges</a>
(i.e., they are not anonymous) AND/OR the <em>bribe</em> is otherwise (i.e., they are not anonymous) AND/OR the <strong>bribe</strong> is otherwise
associated with a submission to the IOCCC.</p> associated with a submission to the <a href="../index.html">IOCCC</a>.</p>
<p><strong><code>|</code></strong> With the previous guideline in mind: <strong>anonymous</strong> gifts <p><strong><code>|</code></strong> With the previous guideline in mind: <strong>anonymous</strong> gifts
for the <a href="../judges.html">IOCCC judges</a> that are <strong>NOT</strong> associated for the <a href="../judges.html">IOCCC judges</a> that are <strong>NOT ASSOCIATED
with a submission to the IOCCC may be sent to the WITH</strong> a submission to the <a href="../index.html">IOCCC</a> may be sent to the
<a href="../judges.html">IOCCC judges</a> via the <a href="../judges.html">IOCCC judges</a> via the
<a href="https://www.amazon.com/hz/wishlist/ls/3HSNTEL8RQ1M0?ref_=wl_share">IOCCC Amazon wishlist</a>. <a href="https://www.amazon.com/hz/wishlist/ls/3HSNTEL8RQ1M0?ref_=wl_share">IOCCC Amazon wishlist</a>.
It has been shown that receiving <strong>anonymous</strong> gifts provides the It has been shown that receiving <strong>anonymous</strong> gifts provides the
<a href="../judges.html">IOCCC judges</a> with a nice dopamine boost, and happy <a href="../judges.html">IOCCC judges</a> with a nice
<a href="../judges.html">IOCCC judges</a> help make the IOCCC better for everyone. :-)</p> <a href="https://en.wikipedia.org/wiki/Dopamine">dopamine</a> boost, and happy
<a href="../judges.html">IOCCC judges</a> help make the <a href="../index.html">IOCCC</a> better for everyone. :-)</p>
<p><strong><code>|</code></strong> See <a href="../faq.html#support">FAQ: How may I support the IOCCC?</a>.</p> <p><strong><code>|</code></strong> See <a href="../faq.html#support">FAQ: How may I support the IOCCC?</a>.</p>
<p>More often than not, we select a small submission (usually one line), a <p>More often than not, we select a small submission (usually one line) and a
strange/creative layout submission. We sometimes also select an strange/creative layout submission. We sometimes also select a
submission that abuses the <a href="guidelines.html">IOCCC guidelines</a> in an interesting way, submission that abuses the <a href="guidelines.html">IOCCC guidelines</a> in an interesting way,
or that stretches the content rules that while legal, is or that stretches the contest <a href="rules.html">rules</a> that while legal, it
nevertheless goes against the intent of the rules.</p> nevertheless goes against the <strong>intent</strong> of the <a href="rules.html">rules</a>.</p>
<p>In the end, we traditionally pick one submission as ‘best’. Sometimes such <p><strong><code>|</code></strong> Nevertheless, see <a href="rules.html#rule12">Rule 12</a>.</p>
<p>In the end, we traditionally pick one submission as ‘<strong>best</strong>’. Sometimes such
a submission simply far exceeds any of the other entries. More often, the a submission simply far exceeds any of the other entries. More often, the
‘best’ is picked because it does well in a number of categories.</p> ‘<strong>best</strong>’ is picked because it does well in a number of categories.</p>
<p>In years past, we renamed the winning submission from prog.c to a <p>In years past, we renamed the winning submission from <code>prog.c</code> to a
name related to the submitter(s) names. This is no longer done. name related to the author(s)’ names. This is no longer done.
Winning source is called prog.c A compiled binary is called prog.</p> Winning source is called <code>prog.c</code>. A compiled binary is called <code>prog</code>.</p>
<div id="announcements"> <div id="announcements">
<h1 id="announcement-of-winners">ANNOUNCEMENT OF WINNERS:</h1> <h1 id="announcement-of-winners">ANNOUNCEMENT OF WINNERS:</h1>
</div> </div>
<p>The judges will toot initial announcement of who won, the name <p><strong><code>|</code></strong> The <a href="../judges.html">judges</a> will toot initial announcement of who won, the name
of their award, and a very brief description of the winning submission of their award, and a very brief description of the winning entry
from the <a href="https://fosstodon.org/@ioccc"><span class="citation" data-cites="IOCCC">@IOCCC</span> Mastodon account</a>. You should from the <a href="https://fosstodon.org/@ioccc"><span class="citation" data-cites="IOCCC">@IOCCC</span> Mastodon account</a>.</p>
follow us on Mastodon and refresh the page (even if you do follow us) as unless <p><strong><code>|</code></strong> We recommend that you follow us on mastodon but <strong>please make sure to
you are mentioned you will not get a notification.</p> refresh the feed</strong> every so often (if not more often) because unless you are
mentioned or someone boosts your post you will not get a push notification.</p>
<div id="winners"> <div id="winners">
<h2 id="how-the-new-ioccc-winners-will-be-announced">How the new IOCCC winners will be announced</h2> <h2 id="how-the-new-ioccc-winners-will-be-announced">How the new IOCCC winners will be announced</h2>
</div> </div>
@@ -1202,25 +1299,28 @@ you are mentioned you will not get a notification.</p>
<p><strong><code>|</code></strong> The <strong>contest_status</strong> in the <a href="../status.json">status.json</a> file will change from <strong>judging</strong> to <strong>closed</strong> as well.</p> <p><strong><code>|</code></strong> The <strong>contest_status</strong> in the <a href="../status.json">status.json</a> file will change from <strong>judging</strong> to <strong>closed</strong> as well.</p>
<p><strong><code>|</code></strong> When the above happens, the winning entries have been selected by the <a href="../judges.html">IOCCC judges</a>.</p> <p><strong><code>|</code></strong> When the above happens, the winning entries have been selected by the <a href="../judges.html">IOCCC judges</a>.</p>
<p><strong><code>|</code></strong> The <a href="../judges.html">IOCCC judges</a> will begin to prepare to release the source code of the new IOCCC winners.</p> <p><strong><code>|</code></strong> The <a href="../judges.html">IOCCC judges</a> will begin to prepare to release the source code of the new IOCCC winners.</p>
<p><strong><code>|</code></strong> The <a href="../judges.html">IOCCC judges</a> will post the winning source to the <a href="https://github.com/ioccc-src/winner">IOCCC winner repo</a> as well as to the <a href="https://www.ioccc.org/index.html">Official IOCCC winner website</a>.</p> <p><strong><code>|</code></strong> The <a href="../judges.html">IOCCC judges</a> will commit the winning source to the
<a href="https://github.com/ioccc-src/winner">IOCCC winner repo</a> which will update the <a href="https://www.ioccc.org/index.html">Official IOCCC website</a>.</p>
<p><strong><code>|</code></strong> The <a href="../news.html">IOCCC news</a> will also contain an announcement of the winners.</p> <p><strong><code>|</code></strong> The <a href="../news.html">IOCCC news</a> will also contain an announcement of the winners.</p>
<div id="mastodon"> <div id="mastodon">
<h2 id="an-important-update-to-how-winners-are-announced">An important update to how winners are announced</h2> <h2 id="an-important-update-to-how-winners-are-announced">An important update to how winners are announced</h2>
</div> </div>
<p><strong><code>|</code></strong> The IOCCC no longer uses twitter. IOCCC entries will be announced by a <p><strong><code>|</code></strong> The IOCCC no longer uses twitter. IOCCC entries will be announced by a
git commit to the <a href="https://github.com/ioccc-src/winner">IOCCC entries repo</a> <code>git</code> commit to the <a href="https://github.com/ioccc-src/winner">IOCCC entries repo</a>
that, in turn, updates the <a href="https://www.ioccc.org/index.html">official IOCCC that, in turn, updates the <a href="https://www.ioccc.org/index.html">Official IOCCC
website</a>.</p> website</a>.</p>
<p><strong><code>|</code></strong> In addition a note is posted to the <a href="https://fosstodon.org/@ioccc">IOCCC Mastodon account</a>.</p> <p><strong><code>|</code></strong> In addition a note is posted to the <a href="https://fosstodon.org/@ioccc">IOCCC Mastodon account</a>.</p>
<div id="entries"> <div id="entries">
<h2 id="back-to-announcement-of-winners">Back to announcement of winners</h2> <h2 id="back-to-announcement-of-winners">Back to announcement of winners</h2>
</div> </div>
<p><strong><code>|</code></strong> It is pointless to ask the <a href="../judges.html">IOCCC judges</a> how many <p><strong><code>|</code></strong> It is pointless to ask the <a href="../judges.html">IOCCC judges</a> how many
submissions we receive. See <a href="../faq.html#how_many">How many submissions do the judges receive for a given IOCCC</a>.</p> submissions we receive. See <a href="../faq.html#how_many">How many submissions do the judges receive for a
<p>Often, winning entries are published in selected magazines from around given IOCCC?</a>.</p>
the world. Winners have appeared in books (“The New Hackers Dictionary”) <p>Often, winning entries are published in selected magazines from around the
and on T-Shirts. More than one winner has been turned into a tattoo!</p> world. Winners have appeared in books (‘<code>The New Hackers Dictionary</code>’,
<p>Last, but not least, winners receive international fame and flames! :-)</p> ‘<code>Obfuscated C and Other Mysteries</code>’, ‘<code>Pointers On C</code>’, others) and on t-shirts.
More than one winner has been turned into a tattoo!</p>
<p>Last, but not least, <a href="../authors.html">winners</a> receive international fame and flames! :-)</p>
<div id="more-information"> <div id="more-information">
<div id="information"> <div id="information">
<h1 id="for-more-information">FOR MORE INFORMATION:</h1> <h1 id="for-more-information">FOR MORE INFORMATION:</h1>
@@ -1234,9 +1334,9 @@ and on T-Shirts. More than one winner has been turned into a tattoo!</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> 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 <a href="../news.html">IOCCC news</a>, you are encouraged to follow <p><strong><code>|</code></strong> For the updates and breaking <a href="../news.html">IOCCC news</a>, you are encouraged to follow
the <a href="https://fosstodon.org/@ioccc">IOCCC on Mastodon</a>. See our the <a href="https://fosstodon.org/@ioccc">IOCCC on Mastodon</a>. See our
<a href="../faq.html#try_mastodon">FAQ on Mastodon</a> for more information. Please be aware that <a href="../faq.html#try_mastodon">FAQ on Mastodon</a> for more information. <strong>Please be
unless you are mentioned you most likely will <strong>NOT</strong> get a notification aware</strong> that unless you are mentioned you most likely will <strong>NOT</strong> get a
so you should make sure to check the page.</p> notification so you should make sure to check the page.</p>
<p><strong><code>|</code></strong> Check out the <a href="https://www.ioccc.org/index.html">Official IOCCC website</a> in general.</p> <p><strong><code>|</code></strong> Check out the <a href="https://www.ioccc.org/index.html">Official IOCCC website</a> in general.</p>
<p>Leonid A. Broukhis<br> <p>Leonid A. Broukhis<br>
chongo (Landon Curt Noll) /\cc/\</p> chongo (Landon Curt Noll) /\cc/\</p>
+322 -204
View File
@@ -43,7 +43,7 @@ writing by [contacting the judges](../contact.html).
## IOCCC Guidelines version ## IOCCC Guidelines version
</div> </div>
**`|`** These [IOCCC guidelines](guidelines.html) are version **28.2 2024-06-30**. **`|`** These [IOCCC guidelines](guidelines.html) are version **28.3 2024-07-01**.
**IMPORTANT**: Be **SURE** to read the [IOCCC rules](rules.html). **IMPORTANT**: Be **SURE** to read the [IOCCC rules](rules.html).
@@ -98,7 +98,7 @@ ANY TIME_**.
**`|`** **XXX - date/time is TBD - XXX** **`|`** **XXX - date/time is TBD - XXX**
**`|`** The [IOCCC rules](rules.html), [IOCCC **`|`** The [IOCCC rules](rules.html), [IOCCC
guidelines](guidelines.html) will be available on the [official IOCCC guidelines](guidelines.html) will be available on the [Official IOCCC
website](https://www.ioccc.org) on or slightly before start of this IOCCC. Please check website](https://www.ioccc.org) on or slightly before start of this IOCCC. Please check
[the IOCCC FAQ about how to submit](../faq.html#submit) to see how [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 to submit entries, on or after the start of this IOCCC, to be sure
@@ -109,7 +109,9 @@ IOCCC submission URL.
**`|`** The [Rule 2b](rules.html#rule2b) size has **increased from 2053 to 2503** bytes. **`|`** The [Rule 2b](rules.html#rule2b) size has **increased from 2053 to 2503** bytes.
**`|`** The default way to compile submissions is now `-std=gnu17 -O3 -g3 -Wall -Wextra -pedantic`. **`|`** The default way to compile submissions is now `-std=gnu17 -O3 -g3
-Wall -Wextra -pedantic`. See below for more details about the example Makefile
for more help.
**`|`** Submissions are in the form of a single xz compressed tarball. **`|`** Submissions are in the form of a single xz compressed tarball.
@@ -219,11 +221,11 @@ are considered more portable.
**`|`** The overall size limit (see [Rule 2a](rules.html#rule2a)) on `prog.c` is now **4993 bytes**. **`|`** The overall size limit (see [Rule 2a](rules.html#rule2a)) on `prog.c` is now **4993 bytes**.
**`|`** Your submission must satisfy BOTH the maximum size [Rule 2a](rules.html#rule2a) AND your submission **`|`** Your submission must satisfy BOTH the maximum size [Rule
must satisfy the IOCCC size tool [Rule 2b](rules.html#rule2b). 2a](rules.html#rule2a) AND the IOCCC size tool [Rule 2b](rules.html#rule2b).
**`|`** This IOCCC size tool imposes a 2nd limit on C code size (see [Rule 2a](rules.html#rule2a). To check your **`|`** This IOCCC size 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): code against [Rule 2](rules.html#rule2):
``` <!---sh--> ``` <!---sh-->
./iocccsize prog.c ./iocccsize prog.c
@@ -231,13 +233,11 @@ code against the 2nd limit of [Rule 2](rules.html#rule2):
**`|`** The IOCCC size tool algorithm may be summarized as follows: **`|`** The IOCCC size tool algorithm may be summarized as follows:
``` > The size tool counts most C reserved words (keyword, secondary, and selected
The size tool counts most C reserved words (keyword, secondary, preprocessor keywords) as 1. The size tool counts all other octets as 1
and selected preprocessor keywords) as 1. The size tool counts all excluding ASCII whitespace, and excluding any '`;`', '`{`' or '`}`' followed by
other octets as 1 excluding ASCII whitespace, and excluding any ASCII whitespace, and excluding any '`;`', '`{`' or '`}`' octet immediately
'`;`', '`{`' or '`}`' followed by ASCII whitespace, and excluding any before the end of file.
'`;`', '`{`' or '`}`' octet immediately before the end of file.
```
ASCII whitespace includes ASCII tab, ASCII space, ASCII newline, ASCII whitespace includes ASCII tab, ASCII space, ASCII newline,
ASCII formfeed, and ASCII carriage return. ASCII formfeed, and ASCII carriage return.
@@ -263,13 +263,14 @@ Yes Virginia, **that is a hint**!
**`|`** The [Rule 2a](rules.html#rule2a) size was changed from **`|`** 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 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). value similar to the [2001-2012](../faq.html#size_rule2001-2012) and
[2013-2020](../faq.html#size_rule2013-2020) IOCCC eras.
**`|`** We recommend that you use the **`|`** We recommend that you use the
[example Makefile](https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example) [example Makefile](https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example)
from the [IOCCC mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry). from the [IOCCC mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry).
renamed as `Makefile` of course, as the starting point for your submissions renamed as `Makefile` of course, as the starting point for your submission's
required `Makefile`. Feel free to modify the Makefile to suit your obfuscated needs. required `Makefile`. Feel free to modify the `Makefile` to suit your obfuscated needs.
**`|`** The rest of these guidelines will assume that you are using some variant of the **`|`** The rest of these guidelines will assume that you are using some variant of the
[example Makefile](https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example), [example Makefile](https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example),
@@ -279,11 +280,11 @@ renamed as `Makefile` of course.
`-std=gnu17` (ISO C 2017 with GNU extensions) C compiler. `-std=gnu17` (ISO C 2017 with GNU extensions) C compiler.
**`|`** Unless you clearly state otherwise in your `remarks.md` file AND put into your **`|`** Unless you clearly state otherwise in your `remarks.md` file AND put into your
submission's `Makefile`, we will compile using `-O3 -std=gnu17`. submission's `Makefile`, we will compile using `-std=gnu17 -O3 -g3`.
**`|`** It is **OK** to require your submission to not be compiled **`|`** It is **OK** to require your submission to not be compiled
using the default `-O3 -g3 -std=gnu17` settings. Simply explain why using the default `-std=gnu17 -O3 -g3` settings. Simply explain why
your submission should not be compiled using `-O3 -g3 -std=gnu17` in your submission should not be compiled using `-std=gnu17 -O3 -g3` in
your `remarks.md` file and adjust your `Makefile` accordingly. your `remarks.md` file and adjust your `Makefile` accordingly.
**`|`** **IMPORTANT NOTE**: The use of `-std=gnu17` does **NOT** imply the use of the `gcc` **`|`** **IMPORTANT NOTE**: The use of `-std=gnu17` does **NOT** imply the use of the `gcc`
@@ -296,12 +297,12 @@ by modifying the `CSTD` Makefile variable. For example, to use `c17` instead:
CSTD= -std=c17 CSTD= -std=c17
``` ```
**`|`** For compilers, such as clang, that have the `-Weverything` option, **`|`** For compilers, such as `clang`, that have the `-Weverything` option,
while you may wish to try it, you should look at [the FAQ about clang while you may wish to try it, you should look at [the FAQ about clang
-Weverything](../faq.html#weverything). We do **NOT** recommend that you put -Weverything](../faq.html#weverything). We do **NOT** recommend that you put
the use of `-Weverything` into your submission's `Makefile` for the reasons the use of `-Weverything` into your submission's `Makefile` for the reasons
cited there. This goes even if your version does not trigger a warning as some cited there. This goes even if your version does not trigger a warning as some
other version might. other version might!
**`|`** You may change the level of optimization and compiler debug level **`|`** You may change the level of optimization and compiler debug level
that your submission is compiled with, by modifying the `OPT` Makefile variable. that your submission is compiled with, by modifying the `OPT` Makefile variable.
@@ -316,7 +317,38 @@ compiler warnings cannot be helped: especially in the case of
obfuscated C. :-) So if you cannot easily get rid of a compiler obfuscated C. :-) So if you cannot easily get rid of a compiler
warning, try not fret too much. warning, try not fret too much.
**`|`** To turn off a compiler warning, to your submission's `Makefile`, **`|`** We **LIKE** code that has a minimum of warnings, especially under the
more strict ` -Wall -Wextra -pedantic` mode:
``` <!---make-->
CWARN= -Wall -Wextra -pedantic
```
**`|`** The two previous guidelines may be thought by some as being somewhat
contradictory. Isn't life, and isn't trying to satisfy "contradictory customer
requirements" all too often like that? :-) Try to minimize warnings if you
can.
**`|`** If you manage to produce very few warnings, or perhaps no warnings at
all under the `-Wall -Wextra -pedantic` mode, then by all means brag about it in
your `remarks.md` file **AND BE SURE TO TELL US** the OS, OS version, compiler
and compiler version in which you observed this occurring (in case our OS and
compiler produces a different result: so your submission won't be penalized for
not meeting your claims).
**`|`** If your submission issues lots of warnings but is otherwise
marvelously obfuscated in multiple levels, don't worry about it. Nevertheless,
be sure that the warnings do not constitute a potential "**show stopper**"
compiler problem. Be sure that compilers such as both `gcc` and `clang` won't
produce a compile **error** and refuse to compile your code: unless for some
reason that is what you intend to happen in which case document that too in your
`remarks.md` file. :-)
All other things being equal, a program that must turn off fewer
warnings will be considered better, for certain values of better.
**`|`** To turn off a compiler warning, in your submission's `Makefile`,
try something such as: try something such as:
``` <!---make--> ``` <!---make-->
@@ -324,11 +356,20 @@ try something such as:
``` ```
**`|`** If you do add "`-Wno-some-thing`" to your Makefile, **`|`** If you do add "`-Wno-some-thing`" to your Makefile,
consider also adding `-Wno-unknown-warning-option` just in case the consider changing:
warning you use is not available in the compilers we use test your
submission. Observe, however, that some compilers **DO NOT** have that option so ``` <!---make-->
you might wish to note this in your **remarks.md** as it can be a command line CUNKNOWN=
error. ```
to:
``` <!---make-->
CUNKNOWN= -Wno-unknown-warning-option
```
**`|`** Some compilers have reported this as an error, however, and if you have
such a compiler you might want to not add it and note it in your `remarks.md`.
**`|`** If you need to define something on the compile line, use **`|`** If you need to define something on the compile line, use
the `CDEFINE` Makefile variable. For example: the `CDEFINE` Makefile variable. For example:
@@ -345,15 +386,15 @@ the `CINCLUDE` Makefile variable. For example:
``` ```
**`|`** If need add other "_magic_" flags to your compile line, **`|`** If need to add other "**magic**" flags to your compile line,
use the `COTHER` Makefile variable. For example: use the `COTHER` Makefile variable. For example:
``` <!---make--> ``` <!---make-->
COTHER= -fno-math-errno COTHER= -fno-math-errno
``` ```
**NOTE**: We recommend using "_magic_" flags **only if BOTH _gcc_ **NOTE**: **We only recommend using "_magic_" flags if _BOTH_ `gcc`
and _clang_** support it. _and_ `clang`** support it.
<div id="likes"> <div id="likes">
@@ -365,21 +406,23 @@ and _clang_** support it.
**`|`** We **LIKE** entries that use an edited variant of the **`|`** We **LIKE** entries that use an edited variant of the
[example Makefile](https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example), [example Makefile](https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example),
renamed as `Makefile` of course. This makes it easier for the [IOCCC Judges](../judges.html) renamed as `Makefile` of course. This makes it easier for the [IOCCC Judges](../judges.html)
to test your submission. And if your submissions wins, integrate it into to test your submission. And if your submissions wins, it makes it easier to integrate it into
the [Official IOCCC winner website](https://www.ioccc.org/index.html). the [Official IOCCC winner website](https://www.ioccc.org/index.html).
Doing masses of `#defines` to obscure the source has become 'old'. We Doing masses of `#define`s to obscure the source has become 'old'. We
tend to 'see thru' masses of `#defines` due to our pre-processor tests tend to 'see thru' masses of `#define`s due to our pre-processor tests
that we apply. Simply abusing `#defines` or `-Dfoo=bar` won't go as far that we apply. Simply abusing `#define`s or `-Dfoo=bar` won't go as far
as a program that is more well rounded in confusion. as a program that is more well rounded in confusion.
Many C compilers **DISLIKE** the following code, and so do we: **Many** C compilers **DISLIKE** the following code, and so do we:
``` <!---c--> ``` <!---c-->
#define d define #define d define
#d foo /* <-- don't expect this to turn into #define foo */ #d foo /* <-- don't expect this to turn into #define foo */
``` ```
**`|`** In other words, it is a compilation error.
When declaring local or global variables, you should declare the type: When declaring local or global variables, you should declare the type:
``` <!---c--> ``` <!---c-->
@@ -387,25 +430,15 @@ When declaring local or global variables, you should declare the type:
this_is_not; /* <-- Try to avoid implicit type declarations */ this_is_not; /* <-- Try to avoid implicit type declarations */
``` ```
**`|`** We **LIKE** code that has a minimum of warnings, especially under the **`|`** We tend to **like _less_** a submission that requires either
more strict ` -Wall -Wextra -pedantic` mode: `gcc` **OR** `clang`. **We _prefer_ submissions** that can compile
under **BOTH** `gcc` **AND** `clang`.
``` <!---make-->
CWARN= -Wall -Wextra -pedantic
```
All other things being equal, a program that must turn off fewer
warnings will be considered better, for certain values of better.
**`|`** We tend to **like less** a submission that requires either
**gcc** or **clang**. We prefer submissions that can compile
under both **gcc** and **clang**.
**`|`** We **RECOMMEND** that the compiler flags you use in your **`|`** We **RECOMMEND** that the compiler flags you use in your
submission's `Makefile` are supported by both **gcc** and **clang**. submission's `Makefile` are supported by **BOTH** `gcc` **AND** `clang`.
**`|`** We **DISLIKE** the use of obscure compiler flags, especially **`|`** We **DISLIKE** the use of obscure compiler flags, especially
if either **gcc** or **clang** does not support it. We **suggest** if `gcc` and/or `clang` do not support it. We **suggest**
that you not use any really obscure compiler flags if you can help it. that you not use any really obscure compiler flags if you can help it.
One side effect of the above is that you cannot assume the use One side effect of the above is that you cannot assume the use
@@ -423,17 +456,17 @@ of nested functions such as:
**`|`** On 2012 July 20, the judges rescinded the encouragement of **`|`** On 2012 July 20, the judges rescinded the encouragement of
nested functions. Such constructions, while interesting and sometimes nested functions. Such constructions, while interesting and sometimes
amusing, will have to wait until they required by a C standard that are amusing, will have to wait until they required by a C standard that are
actually implemented in both **gcc** and **clang**. actually implemented in **BOTH** `gcc` **AND** `clang`.
**`|`** We **DISLIKE** submissions require the use of `-fnested-functions`. **`|`** We **DISLIKE** submissions that require the use of `-fnested-functions`.
We prefer programs that do not require a fish license: crayons and We prefer programs that do not require a fish license: crayons and
cat detector vans not withstanding. cat detector vans not withstanding.
If your submission uses functions that have a variable number of If your submission uses functions that have a variable number of
arguments, be careful. Systems implement `va_list` as a wide variety arguments, **be careful**. Systems implement `va_list` in a wide variety
of ways. Because of this, a number of operations using `va_list` are of ways. Because of this, a number of operations using `va_list` **are
not portable and must not be used: not portable and _must not_ be used**:
* assigning a non-`va_list` variable to/from a `va_list` variable * assigning a non-`va_list` variable to/from a `va_list` variable
* casting a non-`va_list` variable into/from a `va_list` variable * casting a non-`va_list` variable into/from a `va_list` variable
@@ -452,20 +485,20 @@ On 28 January 2007, the Judges rescinded the requirement that the
`#` in a C preprocessor directive must be the 1st non-whitespace octet. `#` in a C preprocessor directive must be the 1st non-whitespace octet.
The `exit(3)` function returns `void`. Some broken systems have `exit(3)` The `exit(3)` function returns `void`. Some broken systems have `exit(3)`
return `int`, your submission should assume that `exit(3)` returns a `void`. return `int`; your submission 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. Small programs are best when they are short, obscure and concise.
While such programs are not as complex as other winners, they do While such programs are not as complex as other winners, they do
serve a useful purpose. They are often the only program that people serve a useful purpose: they are often the only program that people
attempt to completely understand. For this reason, we look for attempt to completely understand. For this reason, we look for
programs that are compact, and are instructional. programs that are compact, and are instructional.
While those who are used to temperatures found on [dwarf **`|`** While those who are used to temperatures found on [dwarf
planet](https://science.nasa.gov/dwarf-planets/), planets](https://science.nasa.gov/dwarf-planets/)
(**yes Virginia, dwarf planets are planets**) such as (**yes Virginia, dwarf planets _ARE_ planets!**), such as
[Pluto](https://science.nasa.gov/dwarf-planets/pluto/) might be able to [Pluto](https://science.nasa.gov/dwarf-planets/pluto/), might be able to
explain to the Walrus why our seas are boiling hot, the question of explain to the Walrus why our seas are boiling hot, the question of
whether pigs have wings is likely to remain a debatable point to most. whether pigs have wings is likely to remain a debatable point to most.
@@ -476,17 +509,19 @@ a one-liner in our vague opinion.
We tend to **DISLIKE** programs that: We tend to **DISLIKE** programs that:
* are very hardware specific * are very hardware specific
* are very OS version specific (index/strchr differences are OK, but socket/streams specific code is likely not to be)<br> * **`|`** are very OS version specific (`index(3)`/`strchr(3)` differences are OK, but sockets/streams specific code is likely not to be)<br>
**`|`** * dump core or have compiler warnings (it is OK only if you warn us in your 'remark.md' file)<br> **`|`** * dump core or have compiler warnings (it is OK only if you warn us in your `remarks.md` file)<br>
**`|`** * won't compile or run a [Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) environment **`|`** * won't compile or run in a [Single UNIX
* depend on a utility or application not normally found systems that conform to the [Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) environment<br>
**`|`** * depend on a utility or application not normally found in systems that conform to the [Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification)
* abuse the build file to get around the size limit<br> * abuse the build file to get around the size limit<br>
**`|`** * obfuscate by use of ANSI trigraphs<br> **`|`** * obfuscate by use of ANSI trigraphs<br>
**`|`** * obfuscate by use of digraphs<br>
**`|`** * are larger than they need to be<br> **`|`** * are larger than they need to be<br>
**`|`** * have more lines than they need to have<br> **`|`** * have more lines than they need to have<br>
**`|`** * are "blob-ier" (just a pile of unformatted C code) than they need to be **`|`** * are "blob-ier" (just a pile of unformatted C code) than they need to be
* are rather similar to **previous winners** :-( **`|`** * are rather similar to **[previous winners](../years.html)** :-(
* are identical to **previous losers** :-) **`|`** * are **identical** to **previous losers** :-)
* that mandate the exclusive use of a specific Integrated Development Environment (IDE) * that mandate the exclusive use of a specific Integrated Development Environment (IDE)
In order to encourage submission portability, we **DISLIKE** entries that In order to encourage submission portability, we **DISLIKE** entries that
@@ -495,7 +530,9 @@ mandate that one must use Microsoft Visual Studio to compile
your submission. Nevertheless some of the better IDEs have command-line your submission. Nevertheless some of the better IDEs have command-line
interfaces to their compilers, once one learns how to invoke a shell. interfaces to their compilers, once one learns how to invoke a shell.
**`|`** The program must compile and link cleanly in a [Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) environment Therefore do not assume the system has a **`|`** The program must compile and link cleanly in a [Single UNIX
Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification)
environment. Therefore do not assume the system has a
[windows.h](https://en.wikipedia.org/wiki/Windows.h) include file: [windows.h](https://en.wikipedia.org/wiki/Windows.h) include file:
``` <!---c--> ``` <!---c-->
@@ -503,7 +540,7 @@ interfaces to their compilers, once one learns how to invoke a shell.
``` ```
Unless you are cramped for space, or unless you are entering the Unless you are cramped for space, or unless you are entering the
'_Best one liner_' category, we suggest that you format your program '**Best one liner**' category, we suggest that you format your program
in a more creative way than simply forming excessively long lines. in a more creative way than simply forming excessively long lines.
At least one judge prefers to maintain the use of the At least one judge prefers to maintain the use of the
@@ -513,19 +550,23 @@ with seconds, we prefer that your code be capable of printing the
time of day during a leap-second where the value in seconds time of day during a leap-second where the value in seconds
after the minute mark is 60. after the minute mark is 60.
The "_how to build_" make process should not be used to try and get The "**how to build**" process (via the `Makefile` or otherwise) should not be
around the size limit. It is one thing to make use of a several `-D`s used to try and get around the size limit. It is one thing to make use of a
on the compile line to help out, but it is quite another to use many several `-D`s on the compile line to help out, but it is quite another to use
bytes of `-D`s in order to try and squeeze the source under the size limit. many bytes of `-D`s in order to try and squeeze the source under the size limit.
Your source code, post-pre-processing, should not exceed the size of Your source code, post-pre-processing, should not exceed the size of
[Windows](https://en.wikipedia.org/wiki/Microsoft_Windows). :-) [Microsoft Windows](https://en.wikipedia.org/wiki/Microsoft_Windows). :-)
**`|`** Other windows, on the other hand, might be OK: especially where "**X
marks the spot**". Yet on the third hand, windows are best when they are
"unseen" (i.e., not dirty). :-)
The judges, as a group, have a history giving wide degree of latitude The judges, as a group, have a history giving wide degree of latitude
to reasonable entries. And recently they have had as much longitudinal to reasonable entries. And recently they have had as much longitudinal
variation as it is possible to have on Earth. :-) variation as it is possible to have on [Earth](https://science.nasa.gov/earth/). :-)
**`|`** You should try to restrict commands used on the build file to **`|`** You should try to restrict commands used in the build file to
commands found in [Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) environments commands found in [Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) environments
and systems that conform to the [Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification). and systems that conform to the [Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification).
@@ -535,11 +576,12 @@ absolute one. The intent is to ensure that the building if your
program is reasonably portable. program is reasonably portable.
We prefer programs that are portable across a wide variety of Unix-like We prefer programs that are portable across a wide variety of Unix-like
operating systems (i.e., Linux, GNU Hurd, BSD, Unix, etc.). operating systems (e.g., 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 There are at least zero judges who think that
[Fideism](https://en.wikipedia.org/wiki/Fideism) has little
or nothing to do with the IOCCC judging process. or nothing to do with the IOCCC judging process.
Don't forget that the building of your program should be done Don't forget that the building of your program should be done
@@ -555,7 +597,7 @@ Don't forget that the building of your program should be done
However, you can do something cute such as making your program However, you can do something cute such as making your program
do something dumb (or cute) when it is built 'automatically', and do something dumb (or cute) when it is built 'automatically', and
when it is run with a human involved, do something more clever. when it is run with a human involved, do something more clever.
For example, one could use the build instructions: For example, one could put in their `Makefile`:
``` ```
prog: prog.c prog: prog.c
@@ -563,7 +605,7 @@ For example, one could use the build instructions:
@echo "See remarks section about alternate ways to compile" @echo "See remarks section about alternate ways to compile"
``` ```
and then include special notes in tour `remarks.md` file for and then include special notes in their `remarks.md` file for
alternate / human intervention based building. alternate / human intervention based building.
We want to get away from source that is simply a compact blob of We want to get away from source that is simply a compact blob of
@@ -591,10 +633,12 @@ 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 program, we tend to favor the second version. Of course, a third
version of the same program that is formatted in an interesting version of the same program that is formatted in an interesting
and/or obfuscated way, would definitely win over the first two! and/or obfuscated way, would definitely win over the first two!
Remember, you can submit more than one submission. See the [IOCCC rules](rules.html) for details. Remember, you can submit more than one submission. See the [IOCCC
rules](rules.html) for details (in particular, [Rule 9](rules.html#rule9)).
We suggest that you avoid trying for the 'smallest self-replicating' We suggest that you avoid trying for the '**smallest self-replicating**'
source. The smallest, a zero byte submission, [won in 1994](../1994/smr/index.html). source. The smallest, a [zero byte entry](../1994/smr/index.html), won in
[1994](../years.html#1994).
Programs that claim to be the smallest C source that does something, really 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 better be the smallest such program or they risk being rejected because
@@ -607,7 +651,8 @@ is NOT the smallest C source file that when compiled and run, dumps core:
main; main;
``` ```
**`|`** Unless you specify `-fwritable-strings` (see `COTHER` in the [example Makefile](https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example) do not assume this sort of code will work: **`|`** Unless you specify `-fwritable-strings` (see `COTHER` in the [example
Makefile](https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example)) do not assume this sort of code will work:
``` <!---c--> ``` <!---c-->
char *T = "So many primes, so little time!"; char *T = "So many primes, so little time!";
@@ -615,7 +660,7 @@ is NOT the smallest C source file that when compiled and run, dumps core:
T[14] = ';'; /* modifying a string requires: -fwritable-strings */ T[14] = ';'; /* modifying a string requires: -fwritable-strings */
``` ```
**`|`** Initialized char arrays are OK to write over. This is OK: **`|`** Initialized char arrays are OK to write over. For instance, this is OK:
``` <!---c--> ``` <!---c-->
char b[] = "Is this OK"; char b[] = "Is this OK";
@@ -624,24 +669,27 @@ is NOT the smallest C source file that when compiled and run, dumps core:
**`|`** There are more than 1 typos in this very sentence. **`|`** There are more than 1 typos in this very sentence.
X client entries should be as portable as possible. Entries that X client entries should be as portable as possible. Submissions that
adapt to a wide collection of environments will be favored. For adapt to a wide collection of environments will be favored. For
example, don't depend on a particular type or size of display. example, don't depend on a particular type or size of display.
Don't assume the use of a particular browser. Instead assume a Don't assume the use of a particular browser. Instead assume a
generic browser that forms to a widely used W3C standard. generic browser that forms to a widely used [W3C
standard](https://www.w3.org/standards/).
Don't assume a particular sound sub-system or video driver is installed Don't assume a particular sound sub-system or video driver is installed
in the OS. Instead, make use of a well known and widely available open 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. source program (one that actually works) to display audio/visual data.
X client entries should avoid using X related libraries and X client entries should avoid using X related libraries and
software that is not in wide spread use. software that are 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](https://en.wikipedia.org/wiki/List_of_games_in_Star_Trek#Fizzbin).
**`|`** However, do you know how to play [fizzbin](https://en.wikipedia.org/wiki/List_of_games_in_Star_Trek#Fizzbin)? **`|`** However, do you know how to play [fizzbin](https://en.wikipedia.org/wiki/List_of_games_in_Star_Trek#Fizzbin)?
You do?!? (Except on Tuesday?) You do?!? (Except on Tuesday?)
**`|`** OK, there are actually 3 _guidelines_ that contain the word fizzbin. **`|`** OK, there are actually 3 _guidelines_ that contain the word
[fizzbin](https://en.wikipedia.org/wiki/List_of_games_in_Star_Trek#Fizzbin).
We **DISLIKE** entries that use proprietary toolkits such as the `M*tif`, We **DISLIKE** entries that use proprietary toolkits such as the `M*tif`,
`Xv*ew`, or `OpenL*ok` toolkits, since not everyone has them. Use an `Xv*ew`, or `OpenL*ok` toolkits, since not everyone has them. Use an
@@ -649,12 +697,12 @@ 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 try to not to depend on particular items on **`|`** X client entries should try to not to depend on particular items in
`.Xdefaults`. If you must do so, be sure to note the required lines `.Xdefaults`. If you must do so, be sure to note the required lines
in the your `remarks.md` file. They should also not depend on any in the your `remarks.md` file. They should also not depend on any
particular window manager. particular window manager.
**`|`** Try to avoid entries that play some people believe is copyrighted music. **`|`** Try to avoid entries that play music that some people believe is copyrighted music.
**`|`** While we recognize that UNIX is not a universal operating system, the contest does have a bias towards such systems. In an effort to expand the scope of the contest, we phrase our bias to favor the [Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification). **`|`** While we recognize that UNIX is not a universal operating system, the contest does have a bias towards such systems. In an effort to expand the scope of the contest, we phrase our bias to favor the [Single UNIX Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification).
@@ -688,16 +736,17 @@ program doesn't have to excel in all areas, but doing well in several
areas really does help. areas really does help.
**`|`** You are better off explaining what your submission does in your **`|`** You are better off explaining what your submission does in your
`remarks.md` file section rather than leaving it obscure for the judges `remarks.md` file section rather than leaving it obscure for the
as we might miss something and/or be too tired to notice. [judges](../judges.html) 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 **`|`** We freely admit that interesting, creative or humorous comments in
your `remarks.md` file help your chances of winning. If you had to your `remarks.md` file help your chances of winning. If you had to
read so many twisted entries, you too would enjoy a good laugh or two. 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 We think the readers of the contest winners do as well. We do read
the your `remarks.md` content during the judging process, so it is worth your your `remarks.md` content during the judging process, so it is worth your
while to write remarkable `remarks.md` file. while to write remarkable `remarks.md` file.
We **DISLIKE** C code with trailing control-M's (`\r` or `\015`) that results We **DISLIKE** C code with trailing control-M's (`\r` or `\015`) that results
@@ -711,7 +760,7 @@ One should restrict libcurses to portable features found on BSD
or Linux curses. or Linux curses.
[Rule 13](rules.html#rule13) 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. octets with the high bit set (octet value >= 128) **might** be rejected.
Instead of unescaped octets, you should use \octal or \hex escapes: Instead of unescaped octets, you should use \octal or \hex escapes:
``` <!---c--> ``` <!---c-->
@@ -725,7 +774,7 @@ Instead of unescaped octets, you should use \octal or \hex escapes:
**`|`** It is a very good idea to, in your `remarks.md` file, tell us why you **`|`** It is a very good idea to, in your `remarks.md` file, tell us why you
think your submission is obfuscated. This is particularly true if think your submission is obfuscated. This is particularly true if
your submission is has some very subtle obfuscations that we might your submission has some very subtle obfuscations that we might
otherwise overlook. **<<-- Hint!** otherwise overlook. **<<-- Hint!**
Anyone can format their code into a dense blob. A really clever Anyone can format their code into a dense blob. A really clever
@@ -736,7 +785,7 @@ and misleading formatting, in some cases, may be a plus. On the
other hand, a misleading code style requires more source bytes. other hand, a misleading code style requires more source bytes.
If you do elect to use misleading formatting and comments, we If you do elect to use misleading formatting and comments, we
suggest you remark on this point in your remarks where you talk suggest you remark on this point in your `remarks.md` where you talk
about why you think your submission is obfuscated. On the other hand, 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 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! into creating a dense blob. Such are the trade-offs that obfuscators face!
@@ -745,20 +794,63 @@ into creating a dense blob. Such are the trade-offs that obfuscators face!
processor. However, it is **UNWISE **to assume it will run on an processor. However, it is **UNWISE **to assume it will run on an
some Intel-like x86 architecture. some Intel-like x86 architecture.
We believe that Mark Twain's once wrote: We believe that Mark Twain's quote:
> Get your facts first, then you can distort them as you please. > Get your facts first, then you can distort them as you please.
... is a good motto 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) **`|`** 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! :-) is not an original work, unless you are [Anthony C
Howe](../authors.html#Anthony_C_Howe), in which case it is original! :-)
Submitting source that uses the content of iocccsize.c, unless you are Submitting source that uses the content of iocccsize.c, unless you are
Anthony C Howe, might run the risk of violating [Rule 7](rules.html#rule7). [Anthony C Howe](../authors.html#Anthony_C_Howe), might run the risk of
violating [Rule 7](rules.html#rule7).
[Rule 7](rules.html#rule7) does not prohibit you from writing your own obfuscated IOCCC size tool. **`|`** The [txzchk
However if you do, you might wish to make your tool do something more tool source](https://github.com/ioccc-src/mkiocccentry/blob/master/txzchk.c)
interesting than simply implementing the IOCCC size tool algorithm. is not an original work, unless you are [Cody Boone
Ferguson](../authors.html#Cody_Boone_Ferguson), in which case it is original! :-)
Submitting source that uses the content of txzchk.c, unless you are
[Cody Boone Ferguson](../authors.html#Cody_Boone_Ferguson), might run the risk of
violating [Rule 7](rules.html#rule7).
**`|`** Neither the [chkentry
tool source](https://github.com/ioccc-src/mkiocccentry/blob/master/chkentry.c) nor the
[mkiocccentry
tool source](https://github.com/ioccc-src/mkiocccentry/blob/master/mkiocccentry.c) nor
the [fnamchk tool
source](https://github.com/ioccc-src/mkiocccentry/blob/master/test_ioccc/fnamchk.c) nor
various others in the [mkiocccentry
repo](https://github.com/ioccc-src/mkiocccentry)
are original works, unless you are [Landon Curt
Noll](http://www.isthe.com/chongo/index.html), in which case they are original! :-)
Submitting source that uses the content of these tools, unless you are
[Landon Curt Noll](http://www.isthe.com/chongo/index.html), might run the risk of
violating [Rule 7](rules.html#rule7).
**`|`** Neither the [jparse tool and
library](https://github.com/ioccc-src/mkiocccentry/blob/master/jparse/README.md) nor the
[jstrencode
tool](https://github.com/ioccc-src/mkiocccentry/blob/master/jparse/jstrencode.c) nor
[jstrdecode
tool](https://github.com/ioccc-src/mkiocccentry/blob/master/jparse/jstrdecode.c)
are original works, unless you are [Cody Boone Ferguson](../authors.html#Cody_Boone_Ferguson) or
[Landon Curt
Noll](http://www.isthe.com/chongo/index.html), in which case they are original! :-)
Submitting source that uses the code of these tools or libraries, unless you are
[Cody Boone Ferguson](../authors.html#Cody_Boone_Ferguson)
or [Landon Curt Noll](http://www.isthe.com/chongo/index.html), might run the risk of
violating [Rule 7](rules.html#rule7).
**`|`** [Rule 7](rules.html#rule7) does not prohibit you from writing your own
obfuscated versions of these tools, unless of course you are [Landon Curt
Noll](http://www.isthe.com/chongo/index.html), in which case you probably won't
win since judges are disqualified! :-)
However, if you do write your own version, you might wish to make it do something more
interesting than simply implementing the IOCCC tools' algorithms. On the other
hand, writing an obfuscated version of a library runs the risk of violating
[Rule 1](rules.html#rule1) as it is likely not a complete program.
While programs that only run in a specific word size are OK. If you have While programs that only run in a specific word size are OK. If you have
to pick, choose a 64-bit word size. to pick, choose a 64-bit word size.
@@ -770,45 +862,51 @@ CPU, we might just try your submission on that emulator as well :-)
**`|`** If your submission **MUST** run only on a 64-bit or 32-bit architecture, **`|`** If your submission **MUST** run only on a 64-bit or 32-bit architecture,
then you **MUST** specify the `-arch` on your command line then you **MUST** specify the `-arch` on your command line
(see `ARCH` in the [example Makefile](https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example). Do not assume a processor word size without specifying `-arch`. For example: (see `ARCH` in the [example
Makefile](https://github.com/ioccc-src/mkiocccentry/blob/master/Makefile.example)). Do not assume a processor word size without specifying `-arch`. For example:
``` <!---make--> ``` <!---make-->
ARCH= -m64 ARCH= -m64
``` ```
**`|`** Note, however, that some platforms will not necessarily support some
architectures. For instance, more recent versions of `macOS` do **NOT** support
32-bit!
**`|`** Try to be even more creative! **`|`** Try to be even more creative!
**`|`** If there are limitations in your submission, you are highly encouraged **`|`** If there are limitations in your submission, you are highly encouraged
to note such limitations in your `remarks.md` file. For example if your to note such limitations in your `remarks.md` file. For example if your
submission factors values up to a certain size, you might want to state: submission factors values up to a certain size, you might want to state:
> This submission factors values up 2305567963945518424753102147331756070.<br> > This submission factors values up `2305567963945518424753102147331756070`.<br>
> Attempting to factor larger values will produce unpredictable results. > Attempting to factor larger values will produce unpredictable results.
The judges might try to factor the value -5, so you want to might state: The [judges](../judges.html) might try to factor the value -5, so you want to might state:
> This submission factors positive values up 2305567963945518424753102147331756070.<br> > This submission factors positive values up `2305567963945518424753102147331756070`.<br>
> Attempting to factor large values will produce unpredictable results. > Attempting to factor large values will produce unpredictable results.
However the judges might try to also factor 0, so you want to might state: However the [judges](../judges.html) might try to also factor 0, so you want to might state:
> This submission factors values between 1 and 2305567963945518424753102147331756070.<br> > This submission factors values between 1 and `2305567963945518424753102147331756070`.<br>
> Attempting to factor values outside that range will produce unpredictable results. > Attempting to factor values outside that range will produce unpredictable results.
Moreover the try to also factor 3.5 or 0x7, or Fred, so you want to might state: Moreover the try to also factor 3.5 or 0x7, or Fred, so you want to might state:
> This submission factors integers between 1 and 2305567963945518424753102147331756070.<br> > This submission factors integers between 1 and `2305567963945518424753102147331756070`.<br>
> Attempting to factor anything else will produce unpredictable results. > Attempting to factor anything else will produce unpredictable results.
You submission might be better off catching the attempt to factor bogus values You submission might be better off catching the attempt to factor bogus values
and doing something interesting. So you might want to code accordingly and state: and doing something interesting. So you might want to code accordingly and state:
> This submission factors integers between 1 and 2305567963945518424753102147331756070.<br> > This submission factors integers between 1 and `2305567963945518424753102147331756070`.<br>
> Attempting to factor anything else will cause the program to insult your pet fish Eric. > Attempting to factor anything else will cause the program to insult your pet fish Eric.
The judges might not have a pet fish named Eric, so might want to state: The [judges](../judges.html) might not have a pet fish named Eric, so might want to state:
> This submission factors integers between 1 and 2305567963945518424753102147331756070.<br> > This submission factors integers between 1 and
`2305567963945518424753102147331756070`.<br>
> Attempting to factor anything else will cause the program to insult your pet fish Eric,<br> > Attempting to factor anything else will cause the program to insult your pet fish Eric,<br>
> or in the case that you lack such a pet, will insult the pet that you do not have. > or in the case that you lack such a pet, will insult the pet that you do not have.
@@ -820,17 +918,28 @@ and state:
> given enough time and memory. If the value is not a proper integer, the program<br> > given enough time and memory. If the value is not a proper integer, the program<br>
> might insult a fish named Eric. > might insult a fish named Eric.
**`|`** Do not fear if you not 100% sure of the significance of `2305567963945518424753102147331756070` as it is not of prime importance: or is it? :-) **`|`** Do not fear if you're not 100% sure of the significance of `2305567963945518424753102147331756070` as it is not of prime importance: or is it? :-)
**`|`** We **DISLIKE** the use of use ASCII tab characters in markdown files, such as in the required `remarks.md` file. **`|`** We **DISLIKE** the use of use ASCII tab characters in markdown files, such as in the required `remarks.md` file.
**`|`** We don't mind the use ASCII tab characters in your C code. Feel free to use ASCII tab characters if that suits your obfuscation needs. If is perfectly **OK** to use tab characters elsewhere in your submission, just not in markdown files as this tends complicate and annoys us when be comes to rendering your markdown content. **`|`** We don't mind the use ASCII tab characters in your C code. Feel free
to use ASCII tab characters if that suits your obfuscation needs. If is
perfectly **OK** to use tab characters elsewhere in your submission, just not in
markdown files as this tends complicate and annoy us when it comes time to
rendering your markdown content.
**`|`** If you do use ASCII tab characters in your non-markdown files, be aware that some people may use tab stop that is different than the common 8 character tab stop. **`|`** If you do use ASCII tab characters in your non-markdown files, be
aware that some people may use tab stop that is different than the common 8
character tab stop.
**`|`** **PLEASE** observe our [IOCCC markdown guidelines](../markdown.html) when forming your submission's `remarks.md` file. And if your submission contains additional markdown files, please follow those same guidelines. See also [Rule 19](rules.html#rule19). **`|`** **PLEASE** observe our [IOCCC markdown guidelines](../markdown.html)
when forming your submission's `remarks.md` file. And if your submission
contains additional markdown files, please follow those same guidelines. See
also [Rule 19](rules.html#rule19).
**`|`** We **LIKE** a reading `remarks.md` files, especially if they contain useful, informative, and even humorous content about your submission. Yes, this is a **hint**. :-) **`|`** We **LIKE** reading `remarks.md` files, especially if they contain
useful, informative, and even humorous content about your submission. Yes, this
is a **hint**. :-)
**`|`** We **RECOMMEND** you put a reasonable amount effort into the content of the `remarks.md` file: it is a required for for a reason. :-) **`|`** We **RECOMMEND** you put a reasonable amount effort into the content of the `remarks.md` file: it is a required for for a reason. :-)
@@ -852,7 +961,7 @@ Legal rule abuse is encouraged to help promote creativity. Rule abuse
entries, regardless of if they receive an award, result in changes to entries, regardless of if they receive an award, result in changes to
the next year's [IOCCC rules](rules.html) and [IOCCC guidelines](guidelines.html). the next year's [IOCCC rules](rules.html) and [IOCCC guidelines](guidelines.html).
Legal abuse of the [IOCCC rules](rules.html) is NOT an invitation to violate the Legal abuse of the [IOCCC rules](rules.html) is **NOT** an invitation to violate the
[IOCCC rules](rules.html). A submission that violates the [rules](rules.html) in the [IOCCC rules](rules.html). A submission that violates the [rules](rules.html) in the
opinion of the judges, **WILL** be opinion of the judges, **WILL** be
disqualified. **_RULE ABUSE CARRIES A CERTAIN LEVEL OF RISK!_** If you disqualified. **_RULE ABUSE CARRIES A CERTAIN LEVEL OF RISK!_** If you
@@ -885,7 +994,7 @@ is that we sometimes make genuine mistakes. But in many cases such
problems, flaws or areas of confusion are deliberate. Changes to problems, flaws or areas of confusion are deliberate. Changes to
[IOCCC rules](rules.html) and [IOCCC 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 fashion. Often we will deliberately leave behind holes (or introduce
new ones) so that future rule abuse may continue. A cleaver author new ones) so that future rule abuse may continue. A clever author
should be able to read them and "drive a truck through the holes" in should be able to read them and "drive a truck through the holes" in
the [IOCCC rules](rules.html) and [IOCCC guidelines](guidelines.html). the [IOCCC rules](rules.html) and [IOCCC guidelines](guidelines.html).
@@ -908,10 +1017,10 @@ This is one of the reasons why the [IOCCC rules](rules.html) and
Entries are judged by Leonid A. Broukhis and Landon Curt Noll. Entries are judged by Leonid A. Broukhis and Landon Curt Noll.
Each submission submitted is given a random id number and subdirectory. The Each submission submitted is given a random id number and subdirectory. The
submission files including, but not limited to prog.c, Makefile (that we submission files including, but not limited to `prog.c`, `Makefile` (that we
form from around your "how to build" information), as well as any form from your submitted `Makefile` and any additional "**how to build**"
data files that you submit are all placed under their own directory information you provide), as well as any data files that you submit are all
stored and judged from this directory. placed under their own directory and stored and judged from this directory.
Any information about the authors is not read by the judges until Any information about the authors is not read by the judges until
the judging process is complete, and then only from entries that have the judging process is complete, and then only from entries that have
@@ -930,39 +1039,41 @@ Some people, in the past, have attempted to obfuscate their identity by
including comments of famous Internet personalities such as [Peter including comments of famous Internet personalities such as [Peter
Honeyman](http://www.citi.umich.edu/u/honey). The judges are on to this trick Honeyman](http://www.citi.umich.edu/u/honey). The judges are on to this trick
and therefore consider any obfuscated source or data file claiming to be from 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 Honeyman to not be from Honeyman. This of course creates an interesting paradox
known as the "obfuscated Peter Honeyman paradox". Should Peter Honeyman known as the "**obfuscated Peter Honeyman paradox**". Should Peter Honeyman
actually submit an obfuscated submission, he alone is excluded from the above, as we actually submit to the IOCCC, he alone is excluded from the above, as we
will likely believe it just another attempt at confusion. This _guideline_ is will likely believe it's just another attempt at confusion. This _guideline_ is
known as the "Peter Honeyman is exempt" _guideline_. known as the "**Peter Honeyman is exempt**" _guideline_.
BTW: None of the entries claiming to be from Peter Honeyman have ever BTW: None of the entries claiming to be from Peter Honeyman have ever
won an award. So it is theoretically possible that Peter Honeyman won an award. So it is theoretically possible that Peter Honeyman
did submit a submission in the past. In the past, Peter had denied did submit to the IOCCC in the past. In the past, Peter had denied
submitting anything to the IOCCC. Perhaps those entries were submitting anything to the IOCCC. Perhaps those entries were
submitted by one of his students? submitted by one of his students?
**`|`** Hopefully we are **VERY CLEAR** on this point! The rules now strongly state: **`|`** Hopefully we are **VERY CLEAR** on this point! The rules now strongly state:
**PLEASE _DO NOT_ put a name of an author**, in an obvious way, into your **PLEASE _DO NOT_ put a name of an author**, in an obvious way, into your
source code, `remarks.md`, data files, etc. The above "Peter Honeyman is source code, `remarks.md`, data files, etc., the above "**Peter Honeyman is
exempt" notwithstanding. exempt**" notwithstanding.
We seemed to have digressed again ... :-) Returning to the judging process: We seemed to have digressed again ... :-) Returning to the judging process:
We prefer to be kept in the dark as much as you are until the final We prefer to be kept in the dark as much as you are until the final
awards are given. We enjoy the surprise of finding out in the end, awards are given. We enjoy the surprise of finding out in the end,
who won and where they were from. who won and where they are from.
We attempt to keep all entries anonymous, unless they win an award. We attempt to keep all entries anonymous, unless they win an award.
Because the main 'prize' of winning is being announced, we make all Because the main 'prize' of winning is being announced, we make all
attempts to send non-winners into oblivion. We remove all non-winning attempts to send non-winners into oblivion. We remove all non-winning
files, and shred all related paper. By tradition, we do not even files, and shred all related printouts. By tradition, we do not even
reveal the number of entries that we received. reveal the number of entries that we received.
During the judging process, a process that spans multiple sessions **`|`** During the judging process, a process that spans multiple sessions over
over a few weeks, we post general updates from our [Mastodon a few weeks, we post general updates from our [Mastodon
account](https://fosstodon.org/@ioccc). Make sure you reload the feed every so account](https://fosstodon.org/@ioccc).
often as unless you are mentioned you will not get a push notification.
**`|`** **Make sure you reload the feed** every so often **because unless you
are mentioned you will NOT get a push notification!**
<div id="rounds"> <div id="rounds">
## JUDGING ROUNDS: ## JUDGING ROUNDS:
@@ -980,15 +1091,14 @@ previous round. Thus, a submission gets at least two readings.
A reading consists of a number of actions: A reading consists of a number of actions:
* reading the "how to build" information and forming a Makefile * reading `prog.c`, the C source<br>
* reading prog.c, the C source<br>
**`|`** * reviewing the `remarks.md` information **`|`** * reviewing the `remarks.md` information
* briefly looking any any supplied data files * briefly looking any any supplied data files
* passing the source thru the C pre-processor * passing the source thru the C pre-processor
skipping over any #include files skipping over any `#include`d files
* performing a number of C beautify/cleanup edits on the source * performing a number of C beautify/cleanup edits on the source
* passing the beautified source thru the C pre-processor * passing the beautified source thru the C pre-processor
skipping over any #include files skipping over any `#include`d files
* compiling/building the source * compiling/building the source
* running the program * running the program
* Doing other things that only [IOCCC judges](../judges.html) know about :-) * Doing other things that only [IOCCC judges](../judges.html) know about :-)
@@ -996,29 +1106,29 @@ A reading consists of a number of actions:
In later rounds, other actions are performed including performing In later rounds, other actions are performed including performing
miscellaneous tests on the source and binary. 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 Until we reduce the stack of submissions down to about 25 submissions,
are judged on an individual basis. A submission is set aside because it submissions are judged on an individual basis. A submission is set aside because it
does not, in our opinion, meet the standard established by the round. does not, in our opinion, meet the standard established by the round.
When the number of entries thins to about 25 entries, we begin to form When the number of submissions thins to about 25 submissions, we begin to form
award categories. Entries begin to compete with each other for awards. award categories. Submissions begin to compete with each other for awards.
A submission will often compete in several categories. A submission will often compete in several categories.
The actual award category list will vary depending on the types of entries The actual award category list will vary depending on the types of submissions
we receive. A typical category list might be: we receive. A typical category list might be:
* best small one line program (see above about one line programs) * **best small one line program (see above about one line programs)**
* best small program * **best small program**
* strangest/most creative source layout * **strangest/most creative source layout**
* most useful obfuscated program * **most useful obfuscated program**
* best game that is obfuscated * **best game that is obfuscated**
* most creatively obfuscated program * **most creatively obfuscated program**
* most deceptive C code (code with deceptive comments and source code) * **most deceptive C code (code with deceptive comments and source code)**
* best X client (see OUR LIKES AND DISLIKES) * **best X program** (see [OUR LIKES AND DISLIKES](#likes))
* best abuse of ISO C or ANSI C standard (see above about compilers) * **best abuse of ISO C or ANSI C standard** (see above about compilers)
* best abuse of the C preprocessor * **best abuse of the C preprocessor**
* worst abuse of the rules * **worst/best abuse of the rules** or some variation
* (anything else so strange that it deserves an award) * (anything else so strange that it deserves an award)
We do not limit ourselves to this list. For example, a few entries are so We do not limit ourselves to this list. For example, a few entries are so
@@ -1034,60 +1144,65 @@ the final round are definitely better than the ones that do not
make it. The selection of the winners out of the final round, is make it. The selection of the winners out of the final round, is
less clear cut. less clear cut.
Sometimes a final round submission is good enough to win, but is beat out Sometimes a final round submission is good enough to win, but is beat out by a
by a similar, but slightly better submission. For this reason, it is similar, but slightly better submission. For this reason, it is sometimes
sometimes worthwhile to re-enter an improved version of a submission worthwhile to resubmit an improved version of a submission that failed to win in
that failed to win in a previous year. This assumes, of course, a previous year, the next year. This assumes, of course, that the submission is
that the submission is worth improving in the first place! worth improving in the first place!
**`|`** Over the years, more than one [IOCCC judge](../judges.html) **`|`** Over the years, more than one [IOCCC judge](../judges.html)
has been known to _bribe_ another IOCCC judge into voting for a has been known to **bribe** another IOCCC [judge](../judges.html) into voting for a
winning submission by offering a bit high quality chocolate, or winning entry by offering a bit of high quality chocolate, or
other fun item. other fun item.
**`|`** One **should not** attempt to _bribe_ an [IOCCC **`|`** One **should NOT** attempt to **bribe** an [IOCCC
judge](../judges.html), unless you are an [IOCCC judge](../judges.html), judge](../judges.html), **unless you are an [IOCCC judge](../judges.html)**,
because _bribing_ a [IOCCC judge](../judges.html) by a non-judge because **bribing** an [IOCCC judge](../judges.html) by a non-judge
has been shown to **NOT** be effective when the **person attempting has been shown to **NOT** be effective when the **person _attempting_
the bribe is made known** to the [IOCCC judges](../judges.html) the _bribe_ is made known** to the [IOCCC judges](../judges.html)
(i.e., they are not anonymous) AND/OR the _bribe_ is otherwise (i.e., they are not anonymous) AND/OR the **bribe** is otherwise
associated with a submission to the IOCCC. associated with a submission to the [IOCCC](../index.html).
**`|`** With the previous guideline in mind: **anonymous** gifts **`|`** With the previous guideline in mind: **anonymous** gifts
for the [IOCCC judges](../judges.html) that are **NOT** associated for the [IOCCC judges](../judges.html) that are **NOT ASSOCIATED
with a submission to the IOCCC may be sent to the WITH** a submission to the [IOCCC](../index.html) may be sent to the
[IOCCC judges](../judges.html) via the [IOCCC judges](../judges.html) via the
[IOCCC Amazon wishlist](https://www.amazon.com/hz/wishlist/ls/3HSNTEL8RQ1M0?ref_=wl_share). [IOCCC Amazon wishlist](https://www.amazon.com/hz/wishlist/ls/3HSNTEL8RQ1M0?ref_=wl_share).
It has been shown that receiving **anonymous** gifts provides the It has been shown that receiving **anonymous** gifts provides the
[IOCCC judges](../judges.html) with a nice dopamine boost, and happy [IOCCC judges](../judges.html) with a nice
[IOCCC judges](../judges.html) help make the IOCCC better for everyone. :-) [dopamine](https://en.wikipedia.org/wiki/Dopamine) boost, and happy
[IOCCC judges](../judges.html) help make the [IOCCC](../index.html) better for everyone. :-)
**`|`** See [FAQ: How may I support the IOCCC?](../faq.html#support). **`|`** See [FAQ: How may I support the IOCCC?](../faq.html#support).
More often than not, we select a small submission (usually one line), a More often than not, we select a small submission (usually one line) and a
strange/creative layout submission. We sometimes also select an strange/creative layout submission. We sometimes also select a
submission that abuses the [IOCCC guidelines](guidelines.html) in an interesting way, submission that abuses the [IOCCC guidelines](guidelines.html) in an interesting way,
or that stretches the content rules that while legal, is or that stretches the contest [rules](rules.html) that while legal, it
nevertheless goes against the intent of the rules. nevertheless goes against the **intent** of the [rules](rules.html).
In the end, we traditionally pick one submission as 'best'. Sometimes such **`|`** Nevertheless, see [Rule 12](rules.html#rule12).
In the end, we traditionally pick one submission as '**best**'. Sometimes such
a submission simply far exceeds any of the other entries. More often, the a submission simply far exceeds any of the other entries. More often, the
'best' is picked because it does well in a number of categories. '**best**' is picked because it does well in a number of categories.
In years past, we renamed the winning submission from prog.c to a In years past, we renamed the winning submission from `prog.c` to a
name related to the submitter(s) names. This is no longer done. name related to the author(s)' names. This is no longer done.
Winning source is called prog.c A compiled binary is called prog. Winning source is called `prog.c`. A compiled binary is called `prog`.
<div id="announcements"> <div id="announcements">
# ANNOUNCEMENT OF WINNERS: # ANNOUNCEMENT OF WINNERS:
</div> </div>
The judges will toot initial announcement of who won, the name **`|`** The [judges](../judges.html) will toot initial announcement of who won, the name
of their award, and a very brief description of the winning submission of their award, and a very brief description of the winning entry
from the [@IOCCC Mastodon account](https://fosstodon.org/@ioccc). You should from the [@IOCCC Mastodon account](https://fosstodon.org/@ioccc).
follow us on Mastodon and refresh the page (even if you do follow us) as unless
you are mentioned you will not get a notification. **`|`** We recommend that you follow us on mastodon but **please make sure to
refresh the feed** every so often (if not more often) because unless you are
mentioned or someone boosts your post you will not get a push notification.
<div id="winners"> <div id="winners">
@@ -1103,7 +1218,8 @@ you are mentioned you will not get a notification.
**`|`** The [IOCCC judges](../judges.html) will begin to prepare to release the source code of the new IOCCC winners. **`|`** The [IOCCC judges](../judges.html) will begin to prepare to release the source code of the new IOCCC winners.
**`|`** The [IOCCC judges](../judges.html) will post the winning source to the [IOCCC winner repo](https://github.com/ioccc-src/winner) as well as to the [Official IOCCC winner website](https://www.ioccc.org/index.html). **`|`** The [IOCCC judges](../judges.html) will commit the winning source to the
[IOCCC winner repo](https://github.com/ioccc-src/winner) which will update the [Official IOCCC website](https://www.ioccc.org/index.html).
**`|`** The [IOCCC news](../news.html) will also contain an announcement of the winners. **`|`** The [IOCCC news](../news.html) will also contain an announcement of the winners.
@@ -1113,8 +1229,8 @@ you are mentioned you will not get a notification.
</div> </div>
**`|`** The IOCCC no longer uses twitter. IOCCC entries will be announced by a **`|`** The IOCCC no longer uses twitter. IOCCC entries will be announced by a
git commit to the [IOCCC entries repo](https://github.com/ioccc-src/winner) `git` commit to the [IOCCC entries repo](https://github.com/ioccc-src/winner)
that, in turn, updates the [official IOCCC that, in turn, updates the [Official IOCCC
website](https://www.ioccc.org/index.html). website](https://www.ioccc.org/index.html).
**`|`** In addition a note is posted to the [IOCCC Mastodon account](https://fosstodon.org/@ioccc). **`|`** In addition a note is posted to the [IOCCC Mastodon account](https://fosstodon.org/@ioccc).
@@ -1125,13 +1241,15 @@ website](https://www.ioccc.org/index.html).
</div> </div>
**`|`** It is pointless to ask the [IOCCC judges](../judges.html) how many **`|`** It is pointless to ask the [IOCCC judges](../judges.html) how many
submissions we receive. See [How many submissions do the judges receive for a given IOCCC](../faq.html#how_many). submissions we receive. See [How many submissions do the judges receive for a
given IOCCC?](../faq.html#how_many).
Often, winning entries are published in selected magazines from around Often, winning entries are published in selected magazines from around the
the world. Winners have appeared in books ("The New Hackers Dictionary") world. Winners have appeared in books ('`The New Hackers Dictionary`',
and on T-Shirts. More than one winner has been turned into a tattoo! '`Obfuscated C and Other Mysteries`', '`Pointers On C`', others) and on t-shirts.
More than one winner has been turned into a tattoo!
Last, but not least, winners receive international fame and flames! :-) Last, but not least, [winners](../authors.html) receive international fame and flames! :-)
<div id="more-information"> <div id="more-information">
@@ -1152,9 +1270,9 @@ Last, but not least, winners receive international fame and flames! :-)
**`|`** For the updates and breaking [IOCCC news](../news.html), you are encouraged to follow **`|`** For the updates and breaking [IOCCC news](../news.html), you are encouraged to follow
the [IOCCC on Mastodon](https://fosstodon.org/@ioccc). See our the [IOCCC on Mastodon](https://fosstodon.org/@ioccc). See our
[FAQ on Mastodon](../faq.html#try_mastodon) for more information. Please be aware that [FAQ on Mastodon](../faq.html#try_mastodon) for more information. **Please be
unless you are mentioned you most likely will **NOT** get a notification aware** that unless you are mentioned you most likely will **NOT** get a
so you should make sure to check the page. notification so you should make sure to check the page.
**`|`** Check out the [Official IOCCC website](https://www.ioccc.org/index.html) in general. **`|`** Check out the [Official IOCCC website](https://www.ioccc.org/index.html) in general.
+8 -5
View File
@@ -413,7 +413,7 @@ writing by <a href="../contact.html">contacting the judges</a>.</p>
<div id="rules_version"> <div id="rules_version">
<h2 id="ioccc-rules-version">IOCCC Rules version</h2> <h2 id="ioccc-rules-version">IOCCC Rules version</h2>
</div> </div>
<p><strong><code>|</code></strong> These <a href="rules.html">IOCCC rules</a> are version <strong>28.2 2024-06-30</strong>.</p> <p><strong><code>|</code></strong> These <a href="rules.html">IOCCC rules</a> are version <strong>28.3 2024-07-01</strong>.</p>
<p><strong>IMPORTANT</strong>: Be sure to read the <a href="guidelines.html">IOCCC guidelines</a>.</p> <p><strong>IMPORTANT</strong>: Be sure to read the <a href="guidelines.html">IOCCC guidelines</a>.</p>
<div id="change_marks"> <div id="change_marks">
<h3 id="change-marks">Change marks</h3> <h3 id="change-marks">Change marks</h3>
@@ -604,10 +604,10 @@ it is needed in your submissions <code>remarks.md</code> file.</p>
<div id="rule12"> <div id="rule12">
<h2 id="rule-12">Rule 12</h2> <h2 id="rule-12">Rule 12</h2>
</div> </div>
<p>Legal abuse of the rules is somewhat encouraged. A submission that, in <p><strong>Legal</strong> abuse of the rules is somewhat encouraged. <strong>A submission that, in
the opinion of the judges, violates the rules will be disqualified. the opinion of the judges, </strong>violates the rules will be disqualified<strong>.
Entries that attempt to abuse the rules <strong>MUST</strong> try to justify why Submissions that attempt to abuse the rules </strong>MUST** try to justify why
their rule abuse is legal, in the submission’s <code>remarks.md</code> file.</p> their rule abuse is legal, in the <code>remarks.md</code> file.</p>
<div id="rule13"> <div id="rule13">
<h2 id="rule-13">Rule 13</h2> <h2 id="rule-13">Rule 13</h2>
</div> </div>
@@ -653,11 +653,14 @@ contains <strong>IMPORTANT</strong> tools such as:</p>
<li><code>mkiocccentry(1)</code></li> <li><code>mkiocccentry(1)</code></li>
<li><code>txzchk(1)</code></li> <li><code>txzchk(1)</code></li>
<li><code>fnamchk(1)</code></li> <li><code>fnamchk(1)</code></li>
<li><code>jparse(1)</code> and <code>jparse(8)</code> (which <code>chkentry(1)</code> uses)</li>
</ul> </ul>
<p><strong><code>|</code></strong> The above mentioned tools will help you verify that your submission <p><strong><code>|</code></strong> The above mentioned tools will help you verify that your submission
conforms to <a href="#rule17">Rule 17</a>.</p> conforms to <a href="#rule17">Rule 17</a>.</p>
<p><strong><code>|</code></strong> Each above mentioned tools has a <code>-h</code> option that provides command <p><strong><code>|</code></strong> Each above mentioned tools has a <code>-h</code> option that provides command
line help. For additional details, see the tools’ man pages.</p> line help. For additional details, see the tools’ man pages.</p>
<p><strong><code>|</code></strong> You do not explicitly need to invoke <code>jparse(1)</code> but the <code>jparse(8)</code>
library will be used when compiling various tools.</p>
<h3 id="rule-17---the-complex-details">Rule 17 - The COMPLEX details</h3> <h3 id="rule-17---the-complex-details">Rule 17 - The COMPLEX details</h3>
<p><strong><code>|</code></strong> Each submission <strong>MUST</strong> be in the form of a xz compressed tarball.</p> <p><strong><code>|</code></strong> Each submission <strong>MUST</strong> be in the form of a xz compressed tarball.</p>
<p><strong><code>|</code></strong> The xz compressed tarball filename must be of the form:</p> <p><strong><code>|</code></strong> The xz compressed tarball filename must be of the form:</p>
+9 -5
View File
@@ -43,7 +43,7 @@ writing by [contacting the judges](../contact.html).
## IOCCC Rules version ## IOCCC Rules version
</div> </div>
**`|`** These [IOCCC rules](rules.html) are version **28.2 2024-06-30**. **`|`** These [IOCCC rules](rules.html) are version **28.3 2024-07-01**.
**IMPORTANT**: Be sure to read the [IOCCC guidelines](guidelines.html). **IMPORTANT**: Be sure to read the [IOCCC guidelines](guidelines.html).
@@ -331,10 +331,10 @@ it is needed in your submissions `remarks.md` file.
## Rule 12 ## Rule 12
</div> </div>
Legal abuse of the rules is somewhat encouraged. A submission that, in **Legal** abuse of the rules is somewhat encouraged. **A submission that, in
the opinion of the judges, violates the rules will be disqualified. the opinion of the judges, **violates the rules will be disqualified**.
Entries that attempt to abuse the rules **MUST** try to justify why Submissions that attempt to abuse the rules **MUST** try to justify why
their rule abuse is legal, in the submission's `remarks.md` file. their rule abuse is legal, in the `remarks.md` file.
<div id="rule13"> <div id="rule13">
@@ -401,6 +401,7 @@ contains **IMPORTANT** tools such as:
* `mkiocccentry(1)` * `mkiocccentry(1)`
* `txzchk(1)` * `txzchk(1)`
* `fnamchk(1)` * `fnamchk(1)`
* `jparse(1)` and `jparse(8)` (which `chkentry(1)` uses)
**`|`** The above mentioned tools will help you verify that your submission **`|`** The above mentioned tools will help you verify that your submission
conforms to [Rule 17](#rule17). conforms to [Rule 17](#rule17).
@@ -408,6 +409,9 @@ conforms to [Rule 17](#rule17).
**`|`** Each above mentioned tools has a `-h` option that provides command **`|`** Each above mentioned tools has a `-h` option that provides command
line help. For additional details, see the tools' man pages. line help. For additional details, see the tools' man pages.
**`|`** You do not explicitly need to invoke `jparse(1)` but the `jparse(8)`
library will be used when compiling various tools.
### Rule 17 - The COMPLEX details ### Rule 17 - The COMPLEX details