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

+348 -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,360 @@
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- -->
<!-- file: 1998/schweikh3/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>1998 schweikh3</title>
<meta name="description" content="IOCCC year: 1998 IOCCC winner: schweikh3 winner index page">
<meta name="keywords" content="IOCCC,1998,schweikh3,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>1998/schweikh3</title>
<meta name="description" content="1998 IOCCC winner schweikh3">
<meta name="keywords" content="IOCCC, 1998, IOCCC 1998, IOCCC winner, schweikh3">
</head>
<!-- END: this line ends content from: inc/head.default.html -->
<!-- START: this line starts content from: inc/body.default.html -->
<body>
<h1>1998 schweikh3</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>1998/schweikh3</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%2F1998%2Fschweikh3%2Findex.html">Nu Html check https://ioccc-src.github.io/temp-test-ioccc/1998/schweikh3/index.html</a></p>
<!-- End Nu Html Checker -->
<div class="topnav">
<a class="Left" href="../schweikh2/index.html">&larr; schweikh2</a>
<a class="Left" href="../index.html">&uarr; 1998 &uarr;</a>
<a class="Left" href="../tomtorfs/index.html">tomtorfs &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#Jens_Schweikhardt">Jens
Schweikhardt</a><br> Location: <a
href="/temp-test-ioccc/location.html#DE">DE</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> all</span></code></pre></div>
<p>The author stated:</p>
<pre><code>In the remote event that the input has more than `8192` files with
the same size (on systems where `sizeof (char *) == 4`, or `4096` when
`sizeof (char *) == 8`), increase the manifest constant 32767 on line
31.</code></pre>
<p>An alternate version allows one to fix this; see <a
href="#alternate-code">alternate code</a> below.</p>
<h2 id="to-use">To use:</h2>
<p>If <code>dir</code> is the directory (or a directory tree) where you
keep all your favorite pictures off the Internet or from
<code>alt.binaries.pictures.*</code>, do</p>
<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="fu">find</span> dir <span class="at">-type</span> f <span class="at">-print</span> <span class="kw">|</span> <span class="ex">./samefile</span></span></code></pre></div>
<p>Maybe you will not need to buy another 10 GB disk to store them.
:-)</p>
<h2 id="try">Try:</h2>
<p>If you’re in this winning entry’s directory:</p>
<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="ex">./try.sh</span></span></code></pre></div>
<p>Notice that the tool finds some files that are duplicates.</p>
<h2 id="alternate-code">Alternate code:</h2>
<p>If you run into the problem that the author described (above) you can
redefine the size as described; this was done with the <code>SZ</code>
macro defined in the Makefile which if (in the code) is unset will be
set to the default, 32767.</p>
<h3 id="alternate-build">Alternate build:</h3>
<p>If you wish to change the size to say, 55555:</p>
<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="fu">make</span> clobber SIZE=55555 alt</span></code></pre></div>
<p>or whatever you wish to redefine it to.</p>
<h2 id="judges-remarks">Judges’ remarks:</h2>
<p>This program is not as smart as to detect identity of JPEG files with
the same picture but with different compression levels. On the other
hand compression can make a thing look/sound/feel different so these
probably aren’t duplicates anyway. :-)</p>
<p>Some time after this entry won, the Internet Systems Consortium (ISC)
added the samefile utility to its treasure of software gems! See the
author’s page about the tool as well at <a
href="http://www.schweikhardt.net/samefile"
class="uri">http://www.schweikhardt.net/samefile</a>.</p>
<h2 id="authors-remarks">Author’s remarks:</h2>
<p>The source is expected to conform to IEEE Std 1003.1-1990 (“POSIX”).
Thank God the IEEE does not standardize a coding style…</p>
<h3 id="what-this-program-does">What this program does</h3>
<p>This is best explained in the man page. The troff source for this man
page can be found in the file <a href="samefile.1">samefile.1</a>. To
render try:</p>
<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="kw">`</span><span class="fu">man</span> ./samefile.1</span></code></pre></div>
<p>Otherwise:</p>
<h3 id="samefile1-user-manuals-samefile1">SAMEFILE(1) User Manuals
SAMEFILE(1)</h3>
<h4 id="name">NAME</h4>
<p><code>samefile</code> - find identical files</p>
<h4 id="synopsis">SYNOPSIS</h4>
<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="ex">./samefile</span></span></code></pre></div>
<h4 id="description">DESCRIPTION</h4>
<p><code>samefile</code> reads a list of file names (one file name per
line) from <code>stdin</code>. For each file name pair with identical
contents, a line consisting of six tab separated fields is output: The
size in bytes, two file names, the character <code>=</code> if the two
files are on the same device, <code>X</code> otherwise, and the link
counts of the two files. The output is sorted in reverse order by
size.</p>
<p><code>samefile</code> uses two stages to give optimum
performance.</p>
<p>In the first stage, all non-plain files are silently ignored
(directories, devices, FIFOs, sockets, symbolic links) as well as files
for which <code>stat(2)</code> or <code>open(2)</code> fails. The result
of the first stage (the file names) is written into a binary tree with
one node for every file size. Each node is in turn a linked list of file
names along with inode and device information. It is also at this first
stage where checks for hard links are done. For any inode only one
filename will be added to the binary tree.</p>
<p>In the second stage all files having the same size are compared
against each other. The rules of mathematical logic are applied to
reduce work and output noise: if files <code>A</code>, <code>B</code>,
and <code>C</code> have the same size and samefile finds that
<code>A = B</code> and <code>A = C</code> then it will not compare
<code>B</code> against <code>C</code> (and will not output a line for
<code>B</code> and <code>C</code>) but only for <code>A = B</code> and
<code>A = C</code>. The algorithm will detect equality across
arbitrarily long chains. Note however, that because only the first
filename per inode gets into the first stage, the output for a group of
identical files with different inode numbers is also minimized. Suppose
you have six identical files of size 100 in an inode group consisting of
the three inodes with numbers 10, 20 and 30:</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="ex">$</span> ls <span class="at">-i</span> <span class="co"># output edited for readability:</span></span>
<span id="cb8-2"><a href="#cb8-2" aria-hidden="true" tabindex="-1"></a> <span class="ex">10</span> file1 20 file4 30 file6</span>
<span id="cb8-3"><a href="#cb8-3" aria-hidden="true" tabindex="-1"></a> <span class="ex">10</span> file2 20 file5</span>
<span id="cb8-4"><a href="#cb8-4" aria-hidden="true" tabindex="-1"></a> <span class="ex">10</span> file3</span>
<span id="cb8-5"><a href="#cb8-5" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> ls <span class="kw">|</span> <span class="ex">./samefile</span></span>
<span id="cb8-6"><a href="#cb8-6" aria-hidden="true" tabindex="-1"></a><span class="ex">100</span> file1 file4 = 3 2</span>
<span id="cb8-7"><a href="#cb8-7" aria-hidden="true" tabindex="-1"></a><span class="ex">100</span> file1 file6 = 3 1</span></code></pre></div>
<p>The sum of the sizes in the first column is the amount of disk space
you could gain by making all 6 files links to only one file or remove
all but one of the files. To be precise, disk space is allocated in
blocks - you will probably gain two blocks here, rather than 200 bytes.
Note that it is not enough to just remove <code>file4</code> and
<code>file6</code> (you would gain only 100 bytes because
<code>file5</code> still exists.)</p>
<h4 id="limitations">LIMITATIONS</h4>
<p><code>samefile</code> was written with no limits in mind. The number
of input lines is unlimited. The size of the actual files is only
limited by available virtual memory needed to compare one pair of files.
The only hard limit is the constraint that there should not be more than
about <code>8192</code> files having the same size. Experience has shown
that there are rarely more than a couple dozen files of the same
size.</p>
<h4 id="examples">EXAMPLES</h4>
<p>For everybody:</p>
<p>What are the duplicates under my home directory?</p>
<div class="sourceCode" id="cb9"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a><span class="fu">find</span> <span class="va">$HOME</span> <span class="kw">|</span> <span class="ex">./samefile</span></span></code></pre></div>
<p>For the sysadmin folks:</p>
<p>Report all duplicate files under /usr larger than 16k:</p>
<div class="sourceCode" id="cb10"><pre
class="sourceCode sh"><code class="sourceCode bash"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a><span class="fu">find</span> /usr <span class="at">-size</span> +16384c <span class="at">-a</span> <span class="at">-type</span> f <span class="kw">|</span> <span class="ex">./samefile</span></span></code></pre></div>
<p>For the ftp and WWW admins: How much space is wasted below our site’s
/pub directory?</p>
<div class="sourceCode" id="cb11"><pre
class="sourceCode sh"><code class="sourceCode bash"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a><span class="fu">find</span> /pub <span class="at">-type</span> f <span class="kw">|</span> <span class="ex">samefile</span> <span class="kw">|</span> <span class="fu">awk</span> <span class="st">&#39;{sum += $1} END {print sum}&#39;</span></span></code></pre></div>
<h4 id="exit-status">EXIT STATUS</h4>
<p>If <code>samefile</code> runs out of memory the exit status is 1,
zero otherwise.</p>
<h4 id="see-also">SEE ALSO</h4>
<p><code>find(1)</code>, <code>ln(1)</code>, <code>rm(1)</code></p>
<h3 id="why-i-think-it-is-obfuscated">Why I think it is obfuscated</h3>
<ul>
<li>The code is commented but this gives only an <em>extremely</em>
faint clue.</li>
<li>The layout does not reflect the program structure, or does it?</li>
<li>The data structure the program builds is an ordered binary tree
where each node consists of a linked list. This is probably too heavy to
comprehend for N percent of all programmers ;-)</li>
<li>The tree is built and traversed by recursive function calls.</li>
<li>Why does this program look at <code>dev_t</code> and
<code>ino_t</code>? Heavy wizardry.</li>
<li>Can you find out how the algorithm works that detects identity of
files across arbitrarily long chains? In my private unobfuscated source
there are 17 lines describing just that. A classical case for the well
known <code>/* You're not supposed to understand this */</code>
comment.</li>
<li>Would Dijkstra consider this <code>goto</code> harmful?</li>
<li>The only string literal is split in more than a dozen
substrings.</li>
<li>For the task at hand the code is pretty terse. Some dynamic memory
is even freed as soon as it’s no longer needed. I have tried to make the
preprocessor directives as short as possible. This means no spaces after
<code>#include</code> and no spaces after some of the macro names.</li>
</ul>
<p>Are you an algorithms guru? If so you should know why the output
appears sorted without any use of <code>qsort(3)</code> or
<code>system("sort")</code>.</p>
<p>Rewrite (hah!) the program to use memory mapping of files instead of
<code>read(2)</code>. Does this affect performance noticeably?</p>
<p>It’s easy to write a script that takes <code>samefile</code>’s output
and hard links (or symlinks) identical files. Writing such a script is
left as an exercise for the deobfuscator.</p>
<p>When you run <code>samefile</code> on some directory tree, try to
estimate how much you think it will find. Is the actual result anywhere
near your estimate? How many copies of the GPL <code>COPYING</code> file
are there on your filesystems? :-)</p>
<p>In the remote event that the input has more than <code>8192</code>
files with the same size (on systems where
<code>sizeof (char *) == 4</code>, or <code>4096</code> when
<code>sizeof (char *) == 8</code>), increase the manifest constant 32767
on line 31.</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-1998schweikh3"><a name="inventory"></a>Inventory
for 1998/schweikh3</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/1998/schweikh3/schweikh3.c">schweikh3.c</a>
- winning source</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1998/schweikh3/Makefile">Makefile</a>
- winner Makefile</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1998/schweikh3/schweikh3.alt.c">schweikh3.alt.c</a>
- alternative source</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1998/schweikh3/schweikh3.orig.c">schweikh3.orig.c</a>
- original source</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1998/schweikh3/samefile.1.dupe">samefile.1.dupe</a>
- samefile man page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1998/schweikh3/samefile.1">samefile.1</a>
- samefile man page</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1998/schweikh3/try.sh">try.sh</a>
- how to run</li>
<li><a href="1998_schweikh3.tar.bz2">1998_schweikh3.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/1998/schweikh3/.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/1998/schweikh3/.winner.json">.winner.json</a>
- description of winner in JSON</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1998/schweikh3/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%2F1998%2Fschweikh3%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 -->