build index.html for all winners

Updated manifest as per recent file changes.

Updated winner `.winner.json` to reflect the manifest changes.

Added [bin/all_run.sh](bin/all_run.sh) tool to run a command over
all winning entries.

These tools had slight improvements in the help usage message:

* bin/gen-author.sh VERSION="1.3.1 2024-01-16"
* bin/gen-inventory.sh VERSION="1.0.1 2024-01-16"
* bin/pandoc_wrapper.sh VERSION="1.3.1 2024-01-16"
* bin/subst.default.sh VERSION="1.1.1 2024-01-16"
* bin/subst.winner-index.sh VERSION="1.1.1 2024-01-16"

The `bin/readme2index.sh` tool was improved so that
if the `index.html` file exists and the tool forms
the exact same content, then the file `index.html`
file is NOT touched.

* bin/readme2index.sh VERSION="1.1 2024-01-16"

We used the following command to generate `index.html` files
for all winning entries:

```sh
bin/all_run.sh -v 3 bin/readme2index.sh
```

NOTE: We have not (yet) built HTML files above the winner directory
level (e.g., no year level nor top level HTML), nor have be built
non-index HTML files for winners.

NOTE: By default we are running `pandoc(1)` with:

```
--fail-if-warnings=true
```

This means that any problems with markdown to HTML
generates an error.  This is done to be sure that
the HTML conversion is clean.

We had to fix the following `README.md` files:

* `2000/rince/README.md`

The reference [^2] was never used.  We made a guess that [^2] applies
to the same spot as [^1].  Perhaps there is a better spot where
[^2] applies?

NOTE: For every reference, there MUST be some place where that
reference is used.

* 2012/vik/README.md

The string "$...$" is assumed to be a TeX encoded string.

NOTE: Every "$..$" needs to be backslashed as in "\$..\$".

* 2018/burton1/README.md

The reference [2] was duplicated.  We changed the
second [2] to [3].

NOTE: Every reference needs to have a unique number.

* 2020/carlini/README.md

The string "$...$" is assumed to be a TeX encoded string.

NOTE: Every "$..$" needs to be backslashed as in "\$..\$".

We also found 2 errors in the `author/author_handle.json` file set:

* author/Anonymous_2001.json

The `author/Anonymous_2001.json` file was missing.

* author/Jari_Arkko.json

The winner ID for `1989_jar.1` had a typo.
This commit is contained in:
Landon Curt Noll committed 2024-01-17 00:32:39 -08:00
1 parent 893cd915b6
commit c1466f5165
350 files changed
+95242 -4217

No files matched your search

+360 -13
View File
@@ -1,4 +1,6 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<!-- START: two lines up starts content from: inc/top.default.html -->
<!-- -->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
@@ -6,27 +8,372 @@
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- -->
<!-- file: 2004/kopczynski/index.html created by: fake.gen_index.sh version: 1.0.5 2023-10-31 -->
<html lang="en">
<!-- END: this line ends content from: inc/top.default.html -->
<!-- -->
<!-- This file was formed by the tool: bin/readme2index.sh version: 1.1 2024-01-16 -->
<!-- -->
<!-- START: this line starts content from: inc/head.default.html -->
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>2004 kopczynski</title>
<meta name="description" content="IOCCC year: 2004 IOCCC winner: kopczynski winner index page">
<meta name="keywords" content="IOCCC,2004,kopczynski,winner index page">
<link rel="stylesheet" href="/temp-test-ioccc/ioccc.css">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<title>2004/kopczynski</title>
<meta name="description" content="2004 IOCCC winner kopczynski">
<meta name="keywords" content="IOCCC, 2004, IOCCC 2004, IOCCC winner, kopczynski">
</head>
<!-- END: this line ends content from: inc/head.default.html -->
<!-- START: this line starts content from: inc/body.default.html -->
<body>
<h1>2004 kopczynski</h1>
<!-- END: this line ends content from: inc/body.default.html -->
<!-- START: this line starts content from: inc/header.default.html -->
<p>XXX - fake content until readme2index is working - XXX</p>
<div class="header">
<img src="/temp-test-ioccc/png/ioccc.png" alt="IOCCC image by Matt Zucker" width=300 height=110>
<h1>The International Obfuscated C Code Contest</h1>
<h2>2004/kopczynski</h2>
</div>
<hr style="width:50%;text-align:left;margin-left:0">
<!-- END: this line ends content from: inc/header.default.html -->
<!-- START: this line starts content from: inc/topnav.mid.html -->
<!-- Start Nu Html Checker -->
<p><a href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fioccc-src.github.io%2Ftemp-test-ioccc%2F2004%2Fkopczynski%2Findex.html">Nu Html check https://ioccc-src.github.io/temp-test-ioccc/2004/kopczynski/index.html</a></p>
<!-- End Nu Html Checker -->
<div class="topnav">
<a class="Left" href="../jdalbec/index.html">&larr; jdalbec</a>
<a class="Left" href="../index.html">&uarr; 2004 &uarr;</a>
<a class="Left" href="../newbern/index.html">newbern &rarr;</a>
<a class="Right" href="#inventory">Inventory</a>
</div>
<!-- END: this line ends content from: inc/topnav.mid.html -->
<!-- START: this line starts content from: inc/begin-row.default.html -->
<div class="row">
<!-- END: this line ends content from: inc/begin-row.default.html -->
<!-- START: this line starts content from: inc/begin-leftcolumn.default.html -->
<div class="leftcolumn">
<!-- END: this line ends content from: inc/begin-leftcolumn.default.html -->
<!-- START: this line starts content from: inc/sidenav.default.html -->
<div class="sidenav">
<a href="#content">Jump to contents</a>
</div>
<hr>
<div class="sidenav">
<a href="/temp-test-ioccc/index.html">IOCCC Home</a>
<a href="/temp-test-ioccc/years.html">Winning Entries</a>
<a href="/temp-test-ioccc/winners.html">People who have won</a>
</div>
<hr>
<div class="sidenav">
<a href="/temp-test-ioccc/news.html">IOCCC News</a>
<a href="/temp-test-ioccc/faq.html#submit">How to enter the IOCCC</a>
<a href="/temp-test-ioccc/faq.html">FAQ</a>
</div>
<hr>
<div class="sidenav">
<a href="/temp-test-ioccc/bugs.html">Bugs &amp; (mis)features</a>
<a href="/temp-test-ioccc/faq.html#fix_a_winner">Fixing IOCCC winners</a>
<a href="/temp-test-ioccc/faq.html#fix_web_site">Fixing the web site</a>
<a href="/temp-test-ioccc/faq.html#fix_author">Fixing winner info</a>
<a href="/temp-test-ioccc/thanks-for-help.html">Thanks for the help</a>
</div>
<hr>
<div class="sidenav">
<a href="/temp-test-ioccc/judges.html">The IOCCC Judges</a>
<a href="/temp-test-ioccc/contact.html">Contacting the IOCCC</a>
</div>
<hr>
<div class="sidenav">
<a href="#top">Jump to top</a>
</div>
<!-- END: this line ends content from: inc/sidenav.default.html -->
<!-- START: this line starts content from: inc/end-leftcolumn.default.html -->
</div>
<!-- END: this line ends content from: inc/end-leftcolumn.default.html -->
<!-- START: this line starts content from: inc/begin-rightcolumn.default.html -->
<div class="rightcolumn">
<!-- END: this line ends content from: inc/begin-rightcolumn.default.html -->
<!-- START: this line starts content from: inc/before-content.default.html -->
<a name="content"></a>
<!-- END: this line ends content from: inc/before-content.default.html -->
<!-- START: this line starts content generated by: bin/gen-author.sh -->
<p><a name="author"><strong>Author:</strong></a> <br><br>Name: <a
href="/temp-test-ioccc/winners.html#Eryk_Kopczynski">Eryk
Kopczynski</a><br> Location: <a
href="/temp-test-ioccc/location.html#PL">PL</a></p>
<!-- END: next line ends content generated by: bin/gen-author.sh -->
<h2 id="to-build">To build:</h2>
<div class="sourceCode" id="cb1"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">make</span></span></code></pre></div>
<p>NOTE: We FORCE the use of -O0 even if someone overrides it because
this entry will not work with it enabled.</p>
<h2 id="to-use">To use:</h2>
<div class="sourceCode" id="cb2"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./kopczynski</span> <span class="op">&lt;</span> input_file</span></code></pre></div>
<h2 id="try">Try:</h2>
<div class="sourceCode" id="cb3"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./try</span></span></code></pre></div>
<p>What happens if you feed the program source to the program? Can you
figure out why?</p>
<h2 id="alternate-code">Alternate code:</h2>
<p>The judges modified the program to print its result. The original
program returned the result as an exit code which is what the alternate
version does.</p>
<h3 id="alternate-build">Alternate build:</h3>
<div class="sourceCode" id="cb4"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="fu">make</span> alt</span></code></pre></div>
<h3 id="alternate-try">Alternate try:</h3>
<div class="sourceCode" id="cb5"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./kopczynski.alt</span> <span class="op">&lt;</span> kopczynski-10</span>
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a><span class="bu">echo</span> <span class="va">$?</span></span></code></pre></div>
<h2 id="judges-remarks">Judges’ remarks:</h2>
<p>What is in a line? A lot when you obfuscate the way Eryk Kopczynski
did it. This small one line program is an outstanding technical work of
art as well as one of the better one-liner programs that we have seen in
years!</p>
<p>Compile and run without arguments. As input, give it an ASCII
graphics figure 8, 9, 10, or 11 made of pound signs and spaces, of any
size, shape, or orientation (that’s right, an upside down 9 is still 9
:-) ). There is one restriction: the only line not containing “#”
characters must be the last.</p>
<p>The program will print what it thinks you’ve entered. If you enter
anything that does not resemble 8, 9, 10, or 11, the result is seemingly
arbitrary. Actually it is not pseudo-random; can you find a pattern when
it does not resemble 8, 9, 10 or 11?</p>
<p>Here is a related puzzle: how to continue the sequence:</p>
<pre><code>1, 0, 0, 0, 0, 0, 1, 0, 2, 1, ...</code></pre>
<p>With certain arguments, you can alter the exit value / output. Can
you figure out how and why?</p>
<h2 id="authors-remarks">Author’s remarks:</h2>
<p>The program proves it is not as hard to recognize numbers. The
current one liner version should correctly recognize all numbers from 8
to 11. (Unless you give it some very hard cases. For example, it cannot
recognize negatives, zeros which have dots or slashes inside them,
digits should be separated, and numbers should be “complete”.)</p>
<p>This program returns the number as its exit status. (In most shells,
you can see the exit status of the last command with
<code>echo $?</code> (or just <code>$?</code>).)</p>
<p><strong>NOTE: The judges altered the primary version to output a
number.</strong></p>
<p>On the input, give numbers formed as a sequences of empty spaces and
<code>#</code> signs (you can also use dots instead of spaces), ending
with an empty line. (No number has an empty line in it.) The program
should return the number from 8 to 11 that it thinks it is.</p>
<ul>
<li><p>The line is 131 bytes long (in 1986, 165 bytes was OK, and the
size limit has grown from 1986…).</p></li>
<li><p>I have decided that it is better for this program to return the
number, not to print it, but if you think otherwise, the change would
cost 6 chars (plus a warning). Change <code>return *</code> to
<code>printf("%d",*)</code>. (<code>$?</code> is shorter)</p></li>
<li><p>I achieved some additional tightness by <code>-Dif=while</code>
which saved 9 chars of source for the cost of 11 chars of the <a
href="Makefile">Makefile</a>. If I used <code>-DB=while</code>, I would
save 12 for 10, but I think the current version is slightly more
obfuscated.</p></li>
</ul>
<h3 id="portability">Portability</h3>
<p>It only requires two’s complement arithmetics, as far as I know. The
maximum length of an input line is <code>N-9</code>, where
<code>N</code> is the size of <code>int</code> in bits (you can try to
compile with an option <code>'-Dint=long long'</code> for longer
lines).</p>
<h3 id="algorithm-obfuscation">Algorithm &amp; Obfuscation</h3>
<ol type="1">
<li><p>This program works by calculating the <a
href="https://en.wikipedia.org/wiki/Euler_characteristic">Euler
characteristics</a> of input, plus 9. It is the number of digits
(i.e. separated <code>#</code>-regions) minus the number of holes in
them. It turns out that this algorithm works correctly for all numbers
from 8 to 11.</p></li>
<li><p>We know that <a
href="https://en.wikipedia.org/wiki/Euler_characteristic">Euler
characteristics</a> is the number of “vertexes”</p></li>
</ol>
<pre><code> #</code></pre>
<p>minus the number of “edges”</p>
<pre><code> ## # #. .#
# .# #. (&#39;.&#39; must be empty)</code></pre>
<p>plus the number of “faces”</p>
<pre><code> ##
##</code></pre>
<ol start="3" type="1">
<li>If we fill all these patterns to 2x2 squares,</li>
</ol>
<pre><code> #? ## #? #. .# ##
?? ?? #? .# #. ##
+1 -1 -1 -1 -1 +1</code></pre>
<p>substitute all possible “values” of <code>?</code> and sum them up,
we get that it is enough to calculate:</p>
<pre><code> #. .# ##
.. #. #.
+1 -1 -1</code></pre>
<p>Note now it is simple and obfuscated enough to be used as a “magic
trick”.</p>
<ol start="4" type="1">
<li><p>I make a 16-character array; when indexed by 4-bit value which
represents the 2x2 squares, it will return a number to add/subtract
<code>{-1,0,+1}</code></p></li>
<li><p>We convert lines of input to bitmaps (<code>N-bit</code>
integers). Additionally, it is heavily obfuscated by using negative
numbers (two’s complement). For example, it turns out that
<code>6</code> in <code>z=6</code> is the only 1-digit number which
works here (and it’s not only because we have <code>z&gt;5</code> in the
following <code>while</code>). The conversion routine also sets
<code>n=8</code> in an obfuscated and concise way.</p></li>
<li><p>Since we always return the number from 8 to 11, we can calculate
modulo 4. Instead of <code>16 {-1,0,+1}</code> values, we use a
15-character string which agrees modulo 4 to the array in
(<code>4</code>). (<code>'\0'</code> fits very well as the 16th
character, so we use 15-character string.)</p></li>
<li><p>Since the rule found in (3) did not produce any funny messages, I
changed it until it did. (The <code>#</code> character to find vertexes
is in the top right corner, not the top left one.) The following
messages will also work instead of
<code>has dirtiest IF</code>:</p></li>
</ol>
<pre><code>HighlandYachter
TestDirtiestTen
has lintiest IF
TighterLaughter
HustlerDaughter
TighterDemoThen</code></pre>
<p>They can be mixed, of course!</p>
<ol start="8" type="1">
<li><p>NOTE: item 8 was removed by the judges so as to not spoil the
challenge of figuring how arguments can be used to alter the exit
value.</p></li>
<li><p>The variable names are confusing.</p></li>
<li><p>Finally, the program tries to be as concise as possible. Some
obfuscation comes from this. For additional obfuscation and conciseness,
<code>if</code> means <code>while</code>.</p></li>
</ol>
<h2 id="copyright-and-cc-by-sa-4.0-license">Copyright and CC BY-SA 4.0
License:</h2>
<p>This file is Copyright (c) 2023 by Landon Curt Noll. All Rights
Reserved. You are free to share and adapt this file under the terms of
this license:</p>
<pre><code>Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)</code></pre>
<p>For more information, see:
https://creativecommons.org/licenses/by-sa/4.0/</p>
<!-- START: this line starts content generated by: bin/gen-inventory.sh -->
<h1 id="inventory-for-2004kopczynski"><a name="inventory"></a>Inventory
for 2004/kopczynski</h1>
<h2 id="primary-files">Primary files</h2>
<ul>
<li><a href="index.html">index.html</a> - winner home page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2004/kopczynski/kopczynski.c">kopczynski.c</a>
- winning source</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2004/kopczynski/Makefile">Makefile</a>
- winner Makefile</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2004/kopczynski/kopczynski.alt.c">kopczynski.alt.c</a>
- alternative source</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2004/kopczynski/kopczynski.orig.c">kopczynski.orig.c</a>
- original source</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2004/kopczynski/kopczynski-10-rev">kopczynski-10-rev</a>
- reverse character to recognize</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2004/kopczynski/kopczynski-10">kopczynski-10</a>
- character to recognize</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2004/kopczynski/kopczynski-11-rev">kopczynski-11-rev</a>
- reverse character to recognize</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2004/kopczynski/kopczynski-11">kopczynski-11</a>
- character to recognize</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2004/kopczynski/kopczynski-8a-rev">kopczynski-8a-rev</a>
- reverse character to recognize</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2004/kopczynski/kopczynski-8a">kopczynski-8a</a>
- character to recognize</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2004/kopczynski/kopczynski-8b-rev">kopczynski-8b-rev</a>
- reverse character to recognize</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2004/kopczynski/kopczynski-8b">kopczynski-8b</a>
- character to recognize</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2004/kopczynski/kopczynski-8c-rev">kopczynski-8c-rev</a>
- reverse character to recognize</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2004/kopczynski/kopczynski-8c">kopczynski-8c</a>
- character to recognize</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2004/kopczynski/kopczynski-9-rev">kopczynski-9-rev</a>
- reverse character to recognize</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2004/kopczynski/kopczynski-9">kopczynski-9</a>
- character to recognize</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2004/kopczynski/kopczynski-a-rev">kopczynski-a-rev</a>
- reverse character to recognize</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2004/kopczynski/kopczynski-a">kopczynski-a</a>
- character to recognize</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2004/kopczynski/try.sh">try.sh</a>
- how to run</li>
<li><a href="2004_kopczynski.tar.bz2">2004_kopczynski.tar.bz2</a> -
download winning source</li>
</ul>
<h2 id="secondary-files">Secondary files</h2>
<ul>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2004/kopczynski/.gitignore">.gitignore</a>
- list of files that should not be committed under git</li>
<li><a href=".path">.path</a> - directory path from top directory</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2004/kopczynski/.winner.json">.winner.json</a>
- description of winner in JSON</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2004/kopczynski/README.md">README.md</a>
- markdown source for index.html</li>
</ul>
<!-- END: next line ends content generated by: bin/gen-inventory.sh -->
<!-- START: this line starts content from: inc/after-content.default.html -->
<!-- END: this line ends content from: inc/after-content.default.html -->
<!-- START: this line starts content from: inc/end-rightcolumn.default.html -->
</div>
<!-- END: this line ends content from: inc/end-rightcolumn.default.html -->
<!-- START: this line starts content from: inc/end-row.default.html -->
</div>
<!-- END: this line ends content from: inc/end-row.default.html -->
<!-- START: this line starts content from: inc/footer.default.html -->
<div class="footer">
<hr>
<h2>Coda</h2>
<p><a href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fioccc-src.github.io%2Ftemp-test-ioccc%2F2004%2Fkopczynski%2Findex.html">Nu HTML check this web page</a></p>
<p><a href="#top">Jump to top</a> <a href="#content">Jump to Content</a> <a href="#inventory">Jump to Inventory</a></p>
</div>
<!-- END: this line ends content from: inc/footer.default.html -->
<!-- START: this line starts content from: inc/bottom.default.html -->
</body>
</html>
<!-- END: this line ends content from: inc/bottom.default.html -->