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

+363 -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,375 @@
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- -->
<!-- file: 2012/kang/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>2012 kang</title>
<meta name="description" content="IOCCC year: 2012 IOCCC winner: kang winner index page">
<meta name="keywords" content="IOCCC,2012,kang,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>2012/kang</title>
<meta name="description" content="2012 IOCCC winner kang">
<meta name="keywords" content="IOCCC, 2012, IOCCC 2012, IOCCC winner, kang">
</head>
<!-- END: this line ends content from: inc/head.default.html -->
<!-- START: this line starts content from: inc/body.default.html -->
<body>
<h1>2012 kang</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>2012/kang</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%2F2012%2Fkang%2Findex.html">Nu Html check https://ioccc-src.github.io/temp-test-ioccc/2012/kang/index.html</a></p>
<!-- End Nu Html Checker -->
<div class="topnav">
<a class="Left" href="../hou/index.html">&larr; hou</a>
<a class="Left" href="../index.html">&uarr; 2012 &uarr;</a>
<a class="Left" href="../konno/index.html">konno &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#Seonghoon_Kang">Seonghoon
Kang</a><br> Location: <a
href="/temp-test-ioccc/location.html#KR">KR</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>There is alternate code which fixes some German at the expense of
other German. See <a href="#alternate-code">Alternate code</a> below for
the (fun) rationale here.</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="bu">echo</span> <span class="st">&quot;full spelling of an English cardinal numeral less than a quadrillion&quot;</span> <span class="kw">|</span> <span class="ex">./kang</span></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.sh</span> <span class="co"># try various languages</span></span>
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a><span class="ex">./en.sh</span> <span class="co"># English 0 through 13</span></span>
<span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a><span class="ex">./de.sh</span> <span class="co"># German 0 through 13 with both umlauts and without (additional &#39;e&#39;)</span></span></code></pre></div>
<p>How does it have no <code>u</code> or <code>o</code> in a string in
the source code and yet it gets <code>uno</code> right?</p>
<h2 id="alternate-code">Alternate code:</h2>
<p>This alternate code fixes the program that would throw off those who
know German where the sound of ‘V’ is ‘F’ and so the program had the
letter be ‘F’. A problem, however, with changing it is that it breaks
other words including in German. Thus there is the alternate version
instead which fixes a problem for Germans that causes problems for
Germans so if you’re German you’ll just have to deal with it :-) It is,
however, good as you might be able appreciate the entry even more.</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-use">Alternate use:</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="bu">echo</span> vier <span class="kw">|</span> <span class="ex">./kang.alt</span></span>
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a><span class="bu">echo</span> uno <span class="kw">|</span> <span class="ex">./kang.alt</span></span></code></pre></div>
<h3 id="alternate-try">Alternate try:</h3>
<div class="sourceCode" id="cb6"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./de.alt.sh</span> <span class="co"># German 0 through 13 both with and without umlaut</span></span>
<span id="cb6-2"><a href="#cb6-2" aria-hidden="true" tabindex="-1"></a><span class="ex">./en.alt.sh</span> <span class="co"># English 0 through 13</span></span></code></pre></div>
<p>What does it get right? What does it get wrong? How does it compare
to the original entry without the change of <code>f</code> to
<code>v</code>?</p>
<p>Finally why does it get what it gets wrong wrong?</p>
<h2 id="judges-remarks">Judges’ remarks:</h2>
<p>The judges were able to appreciate the Indo-European language family
relation by making this entry successfully recognize <em>some</em>
French, German, Italian, Russian, and Spanish numerals.</p>
<p>Also worth mentioning is this entry’s ability to understand the
colloquial year numbers of the last millennium.</p>
<p>We’ve added a linefeed to the print format for convenience.</p>
<p>Can you explain why:</p>
<div class="sourceCode" id="cb7"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a><span class="bu">echo</span> f hundr<span class="kw">|</span><span class="ex">./kang</span></span></code></pre></div>
<p>correctly reports 500 but:</p>
<div class="sourceCode" id="cb8"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a><span class="bu">echo</span> hundr<span class="kw">|</span><span class="ex">./kang</span></span></code></pre></div>
<p>does not report 100, instead printing 0?</p>
<h2 id="authors-remarks">Author’s remarks:</h2>
<h3 id="synopsis">Synopsis</h3>
<p>This short program reads a spelt number (e.g. <code>forty-two</code>)
and writes a corresponding decimal number (e.g. <code>42</code>). Too
long for one-liners, alas, but it still qualifies as a <em>short</em>
program as it has less than 0x100 bytes.</p>
<p>It accepts a variety of spelt numbers:</p>
<ul>
<li>It correctly handles <code>zero</code>.</li>
<li>Hyphen does not make a difference: <code>forty-two</code> and
<code>forty two</code> are same. So does period or comma.</li>
<li>Cases do not make a difference either: <code>TWO</code>,
<code>Two</code>, <code>two</code> are the same.</li>
<li><code>one</code> and <code>a</code> are interchangeable:
<code>one hundred</code> and <code>a hundred</code> are the same.</li>
<li><code>and</code> is optional: <code>one hundred twenty-three</code>
and <code>one hundred and twenty-three</code> are the same.</li>
<li>It supports every non-negative integer less than 10<sup>15</sup>-1.
It uses the small scale (i.e. American): <code>billion</code> is
10<sup>9</sup> and <code>trillion</code> is 10<sup>12</sup>.</li>
<li>Sometimes, it can magically correct typos.</li>
</ul>
<p>It does <em>not</em> accept some spelt numbers, which I found mostly
irrelevant:</p>
<ul>
<li>A bare <code>hundred</code>, <code>thousand</code> etc. do not
work.</li>
<li><code>one million million</code> does not work. Get used to
<code>one trillion</code>!</li>
</ul>
<h3 id="requirements">Requirements</h3>
<p>This program is quite portable, only requiring the following:</p>
<ul>
<li>The signature <code>int main(int, int)</code> should be accepted by
the linker. (Original version only).</li>
<li><code>char</code> should be at least 1 byte long (as dictated by the
standard), <code>int</code> should be at least 32 bits long,
<code>long long</code> should be at least 64 bits long.</li>
<li>Both the compiler and execution environment should use an
ASCII-compatible character set and two’s complement representation.</li>
<li>Overflow and underflow on <code>char</code> should wrap around, if
your <code>char</code> is unsigned.</li>
<li><a href="http://cm.bell-labs.com/who/ken/trust.html">A trustworthy
compiler</a>.</li>
</ul>
<p>The design of the program explicitly allows for <code>EOF</code> even
if it does not equal <code>-1</code> (it has to be negative per the
standard but not necessarily <code>-1</code>) and both
<code>signed char</code> and <code>unsigned char</code>, for example.
Furthermore it is endian-independent.</p>
<h3 id="obfuscations-spoilers">Obfuscations (SPOILERS!)</h3>
<p>Many obfuscations used are typical for standard IOCCC entries:</p>
<ul>
<li>Two arguments from <code>main()</code> function are reused as normal
variables.</li>
<li>Every conditional has been replaced with the <code>?:</code> ternary
operator and <code>||</code> short-circuiting operator.</li>
<li>It has exactly three nested <code>for</code> loops and nothing
else.</li>
<li>Common two’s complement tricks: <code>~-a</code> instead of
<code>a-1</code>, <code>~a?...:...</code> instead of
<code>a!=-1?...:...</code>, etc.</li>
<li>Comma operators (<code>,</code>) for multiple statements. The number
of them is minimized, however, as it is too easy to (ab)use them.</li>
<li>It lacks most parentheses around bitwise and arithmetic operators.
It was originally written for shortness so parentheses were
<strong>EVIL</strong>.</li>
<li><code>n["string"]</code> instead of <code>"string"[n]</code>. Both
are fine for this program but I went to the former just for fun.</li>
<li>Utter lack of any kind of layouts. (Oh, except for the first
column.)</li>
</ul>
<p>Other obfuscations are more subtle:</p>
<ul>
<li>The string <code>"1+DIY/.K430x9G(kC["</code> is 18 bytes long, but
actually 19 bytes including the final NUL character are used.</li>
<li>It internally represents numbers as hexadecimal. When the input is
<code>two hundred and three</code>, it actually writes
<code>0x203</code> as hexadecimal.</li>
<li>Some variables (notably, <code>n</code>) have dual uses.</li>
<li>The magic number <a
href="http://en.wikipedia.org/wiki/Answer_to_The_Ultimate_Question_of_Life,_the_Universe,_and_Everything">42</a>
makes an appearance.</li>
<li>It has a long long numb-<code>main</code>-er within it!</li>
</ul>
<p>But the most important obfuscation is the clever construction of
lookup table. The program uses 11 different characters required for
recognizing 22 lexemes:</p>
<pre><code>zero one tw- th(i)r- fo(u)r- fi- six-
seven- eigh- nin- ten eleven twelve
hundred(s) thousand(s) million(s) billion(s) trillion(s)
a and -teen -ty</code></pre>
<p>So that they are internally represented as like:</p>
<pre><code>r n tw- tr- fr- f- s-
sn- g- nn- tn ln twl
nr(s) tsan(s) lln(s) blln(s) trlln(s)
a an -tn -ty</code></pre>
<p>The stemmer recognizes the longest matching prefix, so every lexeme
can be recognized by at most three characters (e.g. <code>trl</code>
instead of <code>trlln</code>). This is also handy for ignoring plurals.
But that would make it so that the table does not fit in the printable
byte—11<sup>2</sup> is already almost 2<sup>7</sup>!</p>
<p>The trick is to use octal; three characters (<code>a</code>,
<code>b</code> and <code>g</code>) are interpreted as sequences of two
characters (<code>ny</code>, <code>nn</code> and <code>nw</code>
respectively). Asides from a smaller lookup table, it has many good
consequences:</p>
<ul>
<li>Both <code>a</code> and <code>and</code> share the common prefix,
<code>ny</code>, and can be discarded altogether. Note that
<code>ny</code> itself does not appear from other entries.</li>
<li><code>thousand</code> is interpreted as <code>tsan</code>, which is
equivalent to <code>tfyn</code> in the octal scheme. As it is the only
entry with <code>tf</code> prefix, it can be shorten by one
character.</li>
</ul>
<p>Having said this important trick, other details should be relatively
easier to follow. The order of lookup table, for example, is very
important, and the biggest constant 6177 is not arbitrarily chosen.</p>
<p>More spoilers can be found at <a
href="https://gist.github.com/lifthrasiir/3909337"
class="uri">https://gist.github.com/lifthrasiir/3909337</a></p>
<h3 id="acknowledgement">Acknowledgement</h3>
<p>The cleaner (size-optimized) version of this program was originally
published in my website in July 2011. Sun Park and others have reviewed
it and made me aware of possible improvements. I’d also like to thank
Seo Sanghyeon for proof-reading remarks.</p>
<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-2012kang"><a name="inventory"></a>Inventory for
2012/kang</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/2012/kang/kang.c">kang.c</a>
- winning source</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/kang/Makefile">Makefile</a>
- winner Makefile</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/kang/kang.alt.c">kang.alt.c</a>
- alternative source</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/kang/kang.orig.c">kang.orig.c</a>
- original source</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/kang/de.alt.sh">de.alt.sh</a>
- German words for 0 through 13 for alt</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/kang/de.sh">de.sh</a>
- German words for 0 through 13</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/kang/en.alt.sh">en.alt.sh</a>
- English words for 1 through 13 for alt</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/kang/en.sh">en.sh</a>
- English words for 1 through 13</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/kang/try.sh">try.sh</a>
- how to run</li>
<li><a href="2012_kang.tar.bz2">2012_kang.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/2012/kang/.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/2012/kang/.winner.json">.winner.json</a>
- description of winner in JSON</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/kang/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%2F2012%2Fkang%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 -->