Files
ioccc/1996/schweikh1/index.html
T
Landon Curt Noll a996f8d2b8 improved indentation and whitespace for markdown code blocks
All code blocks in markdown have been intended by at least 4 spaces.

We add `--tab-stop=8` to all `pandoc(1)` executions in order to set
a better tab stop indentation, especially for tab intended code blocks.

Changed `bin/pandoc-wrapper.sh` VERSION from "1.5.3 2024-03-26"
to "1.6 2024-03-31".

Fixed `1991/brnstnd/sorta.README.md` so that the sorta code
is code blocks.

Removed unneeded paragraph group in copyright in `inc/footer.default.html`.

Fixed excess whitespace after list Author on entry `index.html` page.

Changed `bin/output-index-author.sh` VERSION from "1.5.2 2024-03-26"
to "1.6 2024-03-31".

Performed `make www` to perform the above and test under macOS.

TODO: Fix the problem of the initial line of code being extra intended.
TODO: Fix excess whitespace around code that is inline.
2024-04-01 04:48:48 -07:00

318 lines
15 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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 -->
<!-- END: this line ends content from: inc/top.default.html -->
<!-- START: this line starts content from: inc/head.default.html -->
<head>
<link rel="stylesheet" href="../../ioccc.css">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<title>1996/schweikh1 - Worst Abuse of the C Preprocessor</title>
<link rel="icon" type="image/x-icon" href="../../favicon.ico">
<meta name="description" content="1996 IOCCC entry schweikh1 - Worst Abuse of the C Preprocessor">
<meta name="keywords" content="IOCCC, 1996, IOCCC 1996, IOCCC entry, schweikh1, Worst Abuse of the C Preprocessor">
</head>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- END: this line ends content from: inc/head.default.html -->
<!-- -->
<!-- This web page was formed via the tool: bin/readme2index.sh -->
<!-- The content of main section of this web page came from: 1996/schweikh1/README.md -->
<!-- -->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- !!! Do not modify this web page, instead modify the file: 1996/schweikh1/README.md !!! -->
<!-- !!! Do not modify this web page, instead modify the file: 1996/schweikh1/README.md !!! -->
<!-- !!! Do not modify this web page, instead modify the file: 1996/schweikh1/README.md !!! -->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- Markdown content was converted into HTML via the tool: bin/md2html.sh -->
<!-- START: this line starts content from: inc/body.default.html -->
<body>
<!-- END: this line ends content from: inc/body.default.html -->
<!-- START: this line starts content from: inc/header.default.html -->
<div class="header">
<img src="../../png/ioccc.png" alt="IOCCC image by Matt Zucker" width=300 height=110>
<h1>The International Obfuscated C Code Contest</h1>
<h2>1996/schweikh1 - Worst Abuse of the C Preprocessor</h2>
</div>
<!-- END: this line ends content from: inc/header.default.html -->
<!-- START: this line starts content from: inc/topnav.mid.html -->
<div class="topnav">
<a class="Left" href="../rcm/index.html">&larr; rcm</a>
<a class="Left" href="../index.html">&uarr; 1996 &uarr;</a>
<a class="Left" href="../schweikh2/index.html">schweikh2 &rarr;</a>
<a class="Right" href="https://github.com/ioccc-src/temp-test-ioccc/1996/schweikh1/schweikh1.c">C code</a>
<a class="Right" href="https://github.com/ioccc-src/temp-test-ioccc/1996/schweikh1/Makefile">Makefile</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="../../index.html">IOCCC Home</a>
<a href="../../years.html">Winning Entries</a>
<a href="../../authors.html">People who have won</a>
<a href="../../location.html">Location of authors</a>
</div>
<hr>
<div class="sidenav">
<a href="../../news.html">IOCCC News</a>
<a href="../../status.html">Contest status</a>
<a href="../../faq.html#submit">How to enter the IOCCC</a>
<a href="../../faq.html">FAQ</a>
</div>
<hr>
<div class="sidenav">
<a href="../../bugs.html">Bugs &amp; (mis)features</a>
<a href="../../faq.html#fix_an_entry">Fixing IOCCC entries</a>
<a href="../../faq.html#fix_web_site">Fixing the web site</a>
<a href="../../faq.html#fix_author">Fixing author info</a>
<a href="../../thanks-for-help.html">Thanks for the help</a>
</div>
<hr>
<div class="sidenav">
<a href="../../judges.html">The IOCCC Judges</a>
<a href="../../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 for HTML phase 20 by: bin/output-index-author.sh via bin/md2html.sh -->
<!-- START: this line starts content generated by: bin/output-index-author.sh -->
<h2 id="author"><a name="author"></a>Author:</h2>
<ul>
<li>Name: <a href="../../authors.html#Jens_Schweikhardt">Jens Schweikhardt</a><br>
Location: <a href="../../location.html#DE">DE</a> - <em>Federal Republic of Germany</em> (<em>Germany</em>)</li>
</ul>
<!-- END: next line ends content generated by: bin/output-index-author.sh -->
<!-- END: this line ends content for HTML phase 20 by: bin/output-index-author.sh via bin/md2html.sh -->
<!-- START: this line starts content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.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>
<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">./schweikh1</span></span></code></pre></div>
<h2 id="try">Try:</h2>
<p>To find the day that Easter falls on in the current year and to show all Easter
dates from 1582 to 2199:</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="ex">./try.sh</span></span></code></pre></div>
<h2 id="judges-remarks">Judges’ remarks:</h2>
<p>Look at the source. There is something very odd going on here.
Where does the real code come from if everything is a C pre-processor
statement?</p>
<p>Clearly this is either the Best Use or the Worst Abuse of the
C Preprocessor that the judges have seen this year!</p>
<h2 id="authors-remarks">Author’s remarks:</h2>
<h3 id="what-this-program-does">What this program does</h3>
<p>This program is an implementation of an algorithm that calculates
the date of the Sunday following the first full moon after the
spring equinox. (Also known as “Easter”, defined this way by the
Nicaean Concilium in 325 Anno Domini.) The algorithm is attributed
to the famous mathematician <a href="https://en.wikipedia.org/wiki/Carl_Friedrich_Gauss">Carl Friedrich
Gauss</a> [“Meyers Handbuch
ueber das Weltall” ‘Handbook About Space’, Meyer, 5th Edition, 1973, p149] and is suitable
for anni domini within the <a href="https://en.wikipedia.org/wiki/Gregorian_calendar">Gregorian
Calendar</a>, that is, from ad 1582
to ad 2199:</p>
<pre><code> Let J be the year.
If J is from 1582 to 1699, let M be 22, let N be 2
If J is from 1700 to 1799, let M be 23, let N be 3
If J is from 1800 to 1899, let M be 23, let N be 4
If J is from 1900 to 2099, let M be 24, let N be 5
If J is from 2100 to 2199, let M be 24, let N be 6
Let a be the modulus of J divided by 19
Let b be the modulus of J divided by 4
Let c be the modulus of J divided by 7
Let d be the modulus of (19a + M) divided by 30
Let e be the modulus of (2b + 4c + 6d + N) divided by 7</code></pre>
<p>The interesting Sunday is either:</p>
<pre><code> March 22 + d + e or
April d + e - 9 (only one of them is a valid date)</code></pre>
<p>with the following exceptions:</p>
<pre><code> April 26 must always be changed to April 19
April 25 must be changed to April 18 if d is 28 and a is greater than 10</code></pre>
<h3 id="example">Example:</h3>
<pre><code> J = 1962, M = 24, N = 5
a = J % 19 == 5
b = J % 4 == 2
c = J % 7 == 2
d = 119 % 30 == 29
e = 191 % 7 == 2</code></pre>
<p>March 53 is invalid, so the result is April 22 1962.</p>
<h3 id="why-i-think-this-is-obfuscated">Why I think this is obfuscated</h3>
<p>Apart from the calculation of the Easter date, the definition <em>and</em>
calculation of which are obfuscations in their own right,
obfuscation lurks in many places. Look at those macro identifiers.
What can be more obvious than a program that explicitly mentions the
grammatical constructs it is composed of? If you look at K&amp;RII A.9.3
you will find that a compound statement consists of an opening brace
followed by a declaration list followed by a semicolon followed by a
statement list followed by another semicolon and a closing brace.
Nobody can learn that by heart so I gently remind the reader by
defining a macro that expresses this clearly (line 25). This goes up
to the definition of a translation unit. Unfortunately, due to the
IOCCC’s size restrictions, I had to abbreviate some syntactic
elements. <code>ae</code> actually reads “assignment expression”. I had to stop
at some arbitrary point, so don’t waste your time trying to find out
how preprocessing tokens form type qualifier lists, cast expressions
or direct abstract declarators. Assuming the reader knows about
these easy to remember language elements is justified in my opinion.</p>
<h3 id="the-moral">The moral:</h3>
<p>Try to be as precise as can be and no one will comprehend what you mean.</p>
<h4 id="the-formula">The formula:</h4>
<pre><code> comprehension = 1/(2**precision)</code></pre>
<h4 id="the-interpretation">The interpretation:</h4>
<p>“Say nothing and everybody will understand.”</p>
<p>The <code>-I/usr/include</code> in the build file is needed by gcc on Solaris because
<code>gcc</code>’s “fixed” header in <code>gcc-lib/sparc-sun-solaris2.5/2.7.2/include/errno.h</code>
is broken (sort of) because it has <em>two</em> identical extern declarations of errno.
This leads to an error due to the redefinition of main. The <code>-I</code> option makes
sure the working /usr/include/errno.h is found first, which shouldn’t cause any
problems on other systems.</p>
<h3 id="usage">Usage:</h3>
<p>The program is run without arguments. It prints all dates in order.</p>
<!--
Copyright © 1984-2024 by Landon Curt Noll. All Rights Reserved.
You are free to share and adapt this file under the terms of this license:
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
For more information, see:
https://creativecommons.org/licenses/by-sa/4.0/
-->
<!-- END: this line ends content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
<!-- START: this line starts content for HTML phase 22 by: bin/output-index-inventory.sh via bin/md2html.sh -->
<!-- START: this line starts content generated by: bin/output-index-inventory.sh -->
<h1 id="inventory-for-1996schweikh1"><a name="inventory"></a>Inventory for 1996/schweikh1</h1>
<p><a href="#top">Jump to top</a></p>
<h2 id="primary-files">Primary files</h2>
<ul>
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1996/schweikh1/schweikh1.c">schweikh1.c</a> - entry source</li>
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1996/schweikh1/Makefile">Makefile</a> - entry Makefile</li>
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1996/schweikh1/schweikh1.orig.c">schweikh1.orig.c</a> - original source</li>
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1996/schweikh1/errno.h">errno.h</a> - declare errno as an extern int</li>
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1996/schweikh1/try.sh">try.sh</a> - how to run</li>
<li><a href="1996_schweikh1.tar.bz2">1996_schweikh1.tar.bz2</a> - download entry</li>
</ul>
<h2 id="secondary-files">Secondary files</h2>
<ul>
<li><a href="index.html">index.html</a> - entry home page</li>
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1996/schweikh1/README.md">README.md</a> - markdown source for index.html</li>
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1996/schweikh1/.entry.json">.entry.json</a> - description of entry in JSON</li>
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1996/schweikh1/.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>
</ul>
<!-- END: next line ends content generated by: bin/output-index-inventory.sh -->
<!-- END: this line ends content for HTML phase 22 by: bin/output-index-inventory.sh via bin/md2html.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 -->
<!--
Copyright © 1984-2024 by Landon Curt Noll. All Rights Reserved.
You are free to share and adapt this file under the terms of this license:
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
For more information, see:
https://creativecommons.org/licenses/by-sa/4.0/
-->
<div class="footer">
<h2>Copyright and CC BY-SA 4.0 License</h2>
<p>This file and web page is:</p>
<blockquote><b>Copyright &copy; 1984-2024 by Landon Curt Noll. All Rights Reserved.</b></blockquote>
<p>You are free to share and adapt this file under the terms of this license:</p>
<blockquote><b>Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)</b></blockquote>
<p>For more information, see:</p>
<blockquote><a
href="https://creativecommons.org/licenses/by-sa/4.0/">https://creativecommons.org/licenses/by-sa/4.0/</a></blockquote>
<h2>Coda</h2>
<p><a href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fioccc-src.github.io%2Ftemp-test-ioccc%2F1996%2Fschweikh1%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 -->