Files
ioccc/1989/paul/index.html
T
Landon Curt Noll cc73503c10 add experimental rules to build web site
We add to the top level Makefile, some initial rules that
will facilitate the building of HTML content.

The `bin/md2html.sh` tool as been updated to output HTML comments
about the output during HTML phases 20, 21 and 22.

All entry `index.html` files were updated with some additional HTML
comments as a result of the above.  The top level `location.html`,
`years.html` and `authors.html` have had HTML comments added also
a result.

Sorry (tm Canada 🇨🇦) for the mass update of entry `index.html` files.
Hopefully the times when all of them (often) need to be updated
will soon draw to a close.
2024-02-12 15:11:56 -08:00

311 lines
15 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 -->
<!-- -->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- !!! 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/top.default.html -->
<!-- -->
<!-- The original markdown content was formed by the tool: bin/readme2index.sh -->
<!-- The HTML was converted from markdown by the tool: bin/md2html.sh -->
<!-- -->
<!-- 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>1989/paul - Most complex algorithm</title>
<meta name="description" content="1989 IOCCC entry paul - Most complex algorithm">
<meta name="keywords" content="IOCCC, 1989, IOCCC 1989, IOCCC entry, paul, Most complex algorithm">
</head>
<!-- END: this line ends content from: inc/head.default.html -->
<!-- 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>1989/paul - Most complex algorithm</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="../ovdluhe/index.html">&larr; ovdluhe</a>
<a class="Left" href="../index.html">&uarr; 1989 &uarr;</a>
<a class="Left" href="../robison/index.html">robison &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="../../index.html">IOCCC Home</a>
<a href="../../years.html">Winning Entries</a>
<a href="../../winners.html">People who have won</a>
</div>
<hr>
<div class="sidenav">
<a href="../../news.html">IOCCC News</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_a_winner">Fixing IOCCC winners</a>
<a href="../../faq.html#fix_web_site">Fixing the web site</a>
<a href="../../faq.html#fix_author">Fixing winner 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#Paul_E_Black">Paul E.
Black</a><br> Location: <a href="../../location.html#US">US</a>
<br><br></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>
<p>There is an alternate version with a trace routine that the author
had commented out. See <a href="#alternate-code">alternate code</a>
below for more details.</p>
<h2 id="try">Try:</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">./paul</span></span></code></pre></div>
<h2 id="alternate-code">Alternate code:</h2>
<p>This version was described by the author like:</p>
<blockquote>
<p>I could have squeezed the program under 1024 bytes without the trace
subroutine, but I felt it was important for understanding the program.
Besides it is fun to watch the tape zooming back and forth as the
program runs. A much better debugger or trace could easily be added.</p>
</blockquote>
<h3 id="alternate-build">Alternate build:</h3>
<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">make</span> alt</span></code></pre></div>
<h3 id="alternate-use">Alternate use:</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="ex">./paul.alt</span></span></code></pre></div>
<h2 id="judges-remarks">Judges’ remarks:</h2>
<p>The author’s comments is a detailed program explanation and spoiler.
If you want a real challenge, don’t read any further and try to
understand the program via the source.</p>
<h3 id="historical-note">Historical note:</h3>
<p>The original source contained a long line which caused many mailers
to barf. The original file may be re-constructed by removing the
trailing <code>\</code> on line 12 and joining lines 12 and 13 together
without a space.</p>
<p>However as this is no longer a problem the trailing <code>\</code>
has been restored in all versions, both the original and the fixed for
modern systems version.</p>
<h2 id="authors-remarks">Author’s remarks:</h2>
<p>This programs computes and prints Fibonacci numbers by simulating a
Turing machine with the proper program. Understanding the C program,
i.e., a Turing machine simulator, is only the first and simplest step.
The Turing machine program must be understood, too! (it is trivial,
perhaps even natural to write incredibly obscure Turing programs.)</p>
<p>If the program is invoked with an operand, the operand is used as the
Turing program. It includes a “trace” facility, subroutine
<code>r</code> (commented out for obscurity), to help write and debug
Turing programs. Just the thing for some fun in a Theory of Computation
class.</p>
<p>The Turing machine tape is represented as a doubly linked list of
pointers. The forward and backward links are <code>XOR</code>ed together
and stored in one pointer. If we always keep one of the links on hand,
we can recover the other link at any time. The variable <code>q</code>
is the scan head (and a pointer at some tape cell), and <code>p</code>
is a “previous” link. The state of the tape is stored in the low order
bit of the pointer. Since we always allocate an even number of bytes,
the low order bit carries no information (see <a
href="#portability">portability</a> below.) Memory representing a tape
cell is allocated when the cell is first scanned. Thus the simulation
begins with a tape effectively the size of virtual memory set to all
zeros. Since a header can be added to any Turing program to write
initial data and position the scan head, this is little loss of
generality.</p>
<p>The simulated Turing machine has a single tape with either a
<code>1</code> or a <code>0</code> in each cell. The Turing machine
language format is a string of three bytes. The first byte is the
current state. The second byte is the next state. (The last bit of
states is ignored, i.e., <code>B</code> and <code>C</code> are the same
state, in an attempt to be able to have interesting words in the
program.) The third byte is composed of bits. Bit <code>1</code>
(<code>2&amp;byte</code>) is the symbol scanned, i.e. an instruction is
selected for state and for a match with the symbol under the scan head.
Bit <code>2</code> (<code>4&amp;byte</code>) is the new symbol to be
written to the cell. Bit <code>3</code> (<code>8&amp;byte</code>) is the
direction to move the scan head: <code>0</code> for left and
<code>1</code> for right. If bit <code>4</code>
(<code>16&amp;byte</code>) is true, the next character is sent to
<code>stdout</code>. (I added this feature so programs could print
results.)</p>
<p>The Turing machine has next state <code>j</code> when it begins. The
cycle is (1) exit if the state is <code>x</code>, (2) find the next
instruction (given the state and the character under the scan head).
(The program string is searched forward for the next matching
instruction. If the end of the string is reached, the search begins
again at the first of the string. Thus states can be used as local
labels in different places.) (3) change to the next state, (4) print a
character if indicated, (5) write the tape symbol, and (6) move the scan
head. The cycle then repeats with step 1. A call to the trace routine is
just before step 2, but is commented out.</p>
<h3 id="quick-outline-of-the-turing-program">Quick outline of the Turing
program:</h3>
<p>The previous and current Fibonacci numbers are kept in base 1 form
with the current on the right. The first three steps set up the first
two numbers, <code>1</code> and <code>1</code>. Then [beginning with
<code>@ (</code>] a marker of <code>III</code> is created and the
current number is copied to the right of the marker. Then (beginning
with <code>OV</code>) the number is converted to binary by repeatedly
dividing by 2 leaving I for remainder <code>1</code>, and II for
remainder <code>0</code>. Next (beginning with <code>WV</code>) the
binary representation is printed and its symbols and the marker are
erased. Finally (beginning with <code>EEn</code>) the two numbers are
added and the current number copied to the left to become the previous.
Then the cycle repeats.</p>
<h3 id="portability">Portability</h3>
<p>The program requires that the lowest bit of a pointer to be 0.</p>
<p>I could have squeezed the program under 1024 bytes without the trace
subroutine, but I felt it was important for understanding the program.
Besides it is fun to watch the tape zooming back and forth as the
program runs. A much better debugger or trace could easily be added.</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>
<!-- 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-1989paul"><a name="inventory"></a>Inventory for
1989/paul</h1>
<h2 id="primary-files">Primary 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/1989/paul/paul.c">paul.c</a>
- winning source</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1989/paul/Makefile">Makefile</a>
- entry Makefile</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1989/paul/paul.alt.c">paul.alt.c</a>
- alternative source</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1989/paul/paul.orig.c">paul.orig.c</a>
- original source</li>
<li><a href="1989_paul.tar.bz2">1989_paul.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/1989/paul/.entry.json">.entry.json</a>
- description of entry in JSON</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/1989/paul/.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/1989/paul/README.md">README.md</a>
- markdown source for index.html</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 -->
<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%2F1989%2Fpaul%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 -->