Entry source is now prog.c for IOCCC years 2014 thru 2020, or is now dirname.c IOCCC years 1984 thru 2013. To achieve this state, we renamed the following: renamed: 2004/hibachi/src/hibachi.c -> 2004/hibachi/hibachi.c renamed: 2012/omoikane/nyaruko.alt.c -> 2012/omoikane/omoikane.alt.c renamed: 2012/omoikane/nyaruko.alt2.c -> 2012/omoikane/omoikane.alt2.c renamed: 2012/omoikane/nyaruko.c -> 2012/omoikane/omoikane.c renamed: 2012/omoikane/nyaruko.orig.c -> 2012/omoikane/omoikane.orig.c Modified `bin/subst.entry-index.sh` to add to entry `index.html` file, links to the `Makefile` and the _C code_ to the top navigation bar. Changed `bin/subst.entry-index.sh` VERSION from "1.2.2 2024-02-25" to "1.3 2024-03-02". Moved printing the Inventory link in the top navigation bar from `bin/subst.entry-navbar.awk` to `bin/subst.entry-index.sh`. Changed `bin/subst.entry-navbar.awk` VERSION from "1.0.1 2024-02-23" to "1.1 2024-03-02". Moved printing the Inventory link in the top navigation bar from `bin/subst.year-navbar.awk` to `bin/subst.year-index.sh`. Changed `bin/subst.year-index.sh` VERSION from "1.0 2024-02-11" to "1.1 2024-03-02". Changed `bin/subst.year-navbar.awk` VERSION from "1.0 2024-02-11" to "1.1 2024-03-02". Added location names (both default and common) to `author.html`. Changed `tmp/gen_author_json.sh` VERSION from "1.0 2023-06-06" to "1.1 2024-03-04". Added location names (both default and common) to `author.html`. Changed `bin/gen-authors.sh` VERSION from "1.2 2024-03-09" to "1.3 2024-03-04". The manifest and the resulting `.entry.json` files have been changed for `2004/hibachi` and `2012/omoikane`. The Makefiles for `2004/hibachi` and `2012/omoikane` copy the source file into the "previously used location". The `make clobber` rule removes the copied source. The `.gitignore` files have been updated accordingly. Improved how the concept of IOCCC terms _entry_, _author_ and _submission_ are used in markdown files. Links to markdown files (files ending in .md) within the repo were changed to link to HTML files (files ending in .html). Special cases where `README.md` became `index.html` were modified accordingly. Fixed URL for `bugs.html` in Makefile comments. Fixed name of `bin/sgi.sh` referenced in comments in `.gitignore` files. Links to locations within the repo are now relative. For example a link to `/contact.html` may become `../contact.html' or '../../contact.html` depending on the directory level of the markdown file. Nearly all links with absolute URLs under _https://www.ioccc.org_ or `https://ioccc-src.github.io/temp-test-ioccc_ have been changed to relative paths within the repo. Some exceptions to this (such as referring to a GitHub repo) were preserved. Fixed a number of inside `faq.md` and `bugs.md`. Added HTML name tags (in the form of an _entry_id_) for each entry referenced in `bugs.md`. Fixed links from outside of `bugs.html` into `bugs.html` accordingly. Where FAQ entries are referenced, a named tag is used so that if a FAQ is ever renumbered, links outside of `faq.html` will still work. Changed the _inventory_order_ of a compressed tarball from _300_ to _100000_. While this may have been done for the manifest, this changed had not yet been propagated into the `.entry.json` files. Links to web sites that were in the for <URL> are now [URL](URL). Performed `name www` to process all of the above. Improved format of `authors.html`. Full names are now bold. Location codes are now links back into `location.html` and location names (both default and common) are now italics. Added _author_handle_ each author. Changed `bin/gen-authors.sh` VERSION from "1.1 2024-02-25" to "1.2 2024-03-09". Improved format of `location.html` as location codes are now bold, author counts in a given location are now bold, and location names (both default and common) are now italics. Changed `bin/gen-location.sh` VERSION from "1.0.1 2024-02-23" to "1.1 2024-03-04". Added italic location name after location code in entry `index.html` files. Changed `bin/output-index-author.sh` VERSION from "1.4.1 2024-02-23" to "1.5 2024-03-04". Added _Location of authors_ to the sidebar as a link to `location.html`. TODO: While nearly all of the above mentioned changes are likely correct, they likely introduced a few errors that need correcting.
315 lines
15 KiB
HTML
315 lines
15 KiB
HTML
<!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">← ovdluhe</a>
|
||
<a class="Left" href="../index.html">↑ 1989 ↑</a>
|
||
<a class="Left" href="../robison/index.html">robison →</a>
|
||
<a class="Right" href="https://github.com/ioccc-src/temp-test-ioccc/1989/paul/paul.c">C code</a>
|
||
<a class="Right" href="https://github.com/ioccc-src/temp-test-ioccc/1989/paul/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="../../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 & (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#Paul_E_Black">Paul E.
|
||
Black</a><br> Location: <a href="../../location.html#US">US</a> -
|
||
<em>United States of America</em> (<em>United States</em>) <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&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&byte</code>) is the new symbol to be
|
||
written to the cell. Bit <code>3</code> (<code>8&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&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>
|
||
<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/1989/paul/paul.c">paul.c</a>
|
||
- entry 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 entry
|
||
source</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/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 -->
|