force use of pandoc version >= 3.1.12.2
The `bin/pandoc-wrapper.sh` tool will verify that the ssytem has a recent enough version of `pandoc(1)`. We explain why we insist on `pandoc(1)`. version >= 3.1.12.2 in comments where the $PANDOC_MIN_VERSION is set. Added `--wrap=preserve` as a default argument to `pandoc(1)`. While this change will impact every HTML file generated, we believe this will improve the ability of someone to look at the generated HTML and correlate with the original markdown. Changed `bin/pandoc-wrapper.sh` VERSION from "1.4.2 2024-03-17" to "1.4.3 2024-03-18". Performed `make www` to achieve all of the above and to generate HTML using the new `--wrap=preserve` `pandoc(1)` mode.
This commit is contained in:
1 parent
9eb7a54e9f
commit
b0b212acb1
402 files changed
+37061
-55132
No files matched your search
+96
-116
@@ -129,9 +129,9 @@
|
||||
|
||||
<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>
|
||||
<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 -->
|
||||
@@ -141,153 +141,133 @@ Black</a><br> Location: <a href="../../location.html#US">US</a> -
|
||||
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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
|
||||
<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>
|
||||
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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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="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>
|
||||
<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 -->
|
||||
|
||||
Reference in new issue
Block a user