Files
ioccc/2012/blakely/index.html
T
Landon Curt Noll a9ca93ec47 fix markdown footnote problem caused by pandoc
Add "<!-- BEFORE: 1st line of markdown file: FILE/PATH -->"
before the markdown content.  This line appears in the
generated HTML.

Add "<!-- AFTER: last line of markdown file: FILE/PATH -->"
after the markdown content.  This line appears in the
generated HTML.

We test a fix relating to problems produced by `pandoc(1)`
when footnotes are added at the end of generated HTML.
This test is made for `2000/bmeyer/index.html`.

Fixed exit 4 in `bin/md2html.sh that should be exit 5.

Changed `bin/md2html.sh` VERSION from to "1.3 2024-04-14"
to "1.4 2024-04-18".

Run `bin/readme2index.sh -v 1 2000/bmeyer` to perform the above.
2024-04-19 01:20:31 -07:00

353 lines
17 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">
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap" rel="stylesheet">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<title>2012/blakely - Most GIFted expressions</title>
<link rel="icon" type="image/x-icon" href="../../favicon.ico">
<meta name="description" content="2012 IOCCC entry blakely - Most GIFted expressions">
<meta name="keywords" content="IOCCC, 2012, IOCCC 2012, IOCCC entry, blakely, Most GIFted expressions">
</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: 2012/blakely/README.md -->
<!-- -->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- !!! Do not modify this web page, instead modify the file: 2012/blakely/README.md !!! -->
<!-- !!! Do not modify this web page, instead modify the file: 2012/blakely/README.md !!! -->
<!-- !!! Do not modify this web page, instead modify the file: 2012/blakely/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/topbar.default.html -->
<div class="theader">
<nav class="topbar">
<div class="container">
<div class="logo">
IOCCC
</div>
<div class="topbar-items">
<div class="item">
<span class="item-header">
Home
</span>
<div class="sub-item">
<div class="outfit-font"><a href="../../index.html">IOCCC Home</a></div>
<div class="outfit-font"><a href="../../years.html">Winning Entries</a></div>
<div class="outfit-font"><a href="../../authors.html">People who have won</a></div>
<div class="outfit-font"><a href="../../location.html">Location of authors</a></div>
</div>
</div>
<div class="item">
<span class="item-header">
News
</span>
<div class="sub-item">
<div class="outfit-font"><a href="../../news.html">IOCCC News</a></div>
<div class="outfit-font"><a href="../../status.html">Contest status</a></div>
<div class="outfit-font"><a href="../../next/index.html">Rules and Guidelines</a></div>
<div class="outfit-font"><a href="../../faq.html#submit">How to enter the IOCCC</a></div>
<div class="outfit-font"><a href="../../faq.html">FAQ</a></div>
</div>
</div>
<div class="item">
<span class="item-header">
Bugs
</span>
<div class="sub-item">
<div class="outfit-font"><a href="../../bugs.html">Bugs &amp; (mis)features</a></div>
<div class="outfit-font"><a href="../../faq.html#fix_an_entry">Fixing IOCCC entries</a></div>
<div class="outfit-font"><a href="../../faq.html#fix_web_site">Fixing the web site</a></div>
<div class="outfit-font"><a href="../../faq.html#fix_author">Fixing author info</a></div>
<div class="outfit-font"><a href="../../thanks-for-help.html">Thanks for the help</a></div>
</div>
</div>
<div class="item">
<span class="item-header">
Judges
</span>
<div class="sub-item">
<div class="outfit-font"><a href="../../judges.html">The IOCCC Judges</a></div>
<div class="outfit-font"><a href="../../contact.html">Contacting the IOCCC</a></div>
</div>
</div>
</div>
</div>
</nav>
</div>
<!-- END: this line ends content from: inc/topbar.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>2012/blakely - Most GIFted expressions</h2>
</div>
<!-- END: this line ends content from: inc/header.default.html -->
<!-- START: this line starts content from: inc/navbar.first.html -->
<div class="navbar">
<a class="Left Disabled" href="#">first entry</a>
<a class="Left" href="../index.html">&uarr; 2012 &uarr;</a>
<a class="Left" href="../deckmyn/index.html">deckmyn &rarr;</a>
<a class="Right" href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/blakely/blakely.c">C code</a>
<a class="Right" href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/blakely/Makefile">Makefile</a>
<a class="Right" href="#inventory">Inventory</a>
<a class="Right" href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fioccc-src.github.io%2Ftemp-test-ioccc%2F2012%2Fblakely%2Findex.html">&#x2713;</a>
</div>
<!-- END: this line ends content from: inc/navbar.first.html -->
<!-- START: this line starts content from: inc/before-content.default.html -->
<div class="content" id="content">
<!-- 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">Author:</h2>
<ul>
<li>Name: <a href="../../authors.html#Philip_Blakely">Philip Blakely</a><br>
Location: <a href="../../location.html#GB">GB</a> - <em>United Kingdom of Great Britain and Northern Ireland</em> (<em>United Kingdom</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 -->
<!-- BEFORE: 1st line of markdown file: 2012/blakely/README.md -->
<h2 id="to-build">To build:</h2>
<pre><code> make</code></pre>
<h3 id="bugs-and-misfeatures">Bugs and (Mis)features:</h3>
<p>The current status of this entry is:</p>
<pre><code> STATUS: INABIAF - please **DO NOT** fix</code></pre>
<p>For more detailed information see <a href="../../bugs.html#2012_blakely">2012 blakely bugs</a>.</p>
<h2 id="to-use">To use:</h2>
<pre><code> ./blakely &quot;RPN formula&quot; resolution &gt; output.gif</code></pre>
<h2 id="try">Try:</h2>
<pre><code> ./try.sh</code></pre>
<h2 id="judges-remarks">Judges’ remarks:</h2>
<p>Several IOCCC themes (<a href="https://en.wikipedia.org/wiki/Reverse_Polish_notation">RPN
calculator</a>, animated
<a href="https://en.wikipedia.org/wiki/GIF">GIF</a> generator, <a href="https://en.wikipedia.org/wiki/Ray_tracing_(graphics)">ray
tracing</a>) in one package!
Very impressive!</p>
<p>The checkerboard pattern in the output can be broken. Could you figure out how?</p>
<p>Larger GIF files confuse some image viewers.</p>
<h2 id="authors-remarks">Author’s remarks:</h2>
<h3 id="remarks">Remarks</h3>
<p>This program renders a generic
<a href="https://en.wikipedia.org/wiki/Reverse_Polish_notation">RPN</a> expression in
<a href="https://en.wikipedia.org/wiki/Ray_tracing_(graphics)">ray-traced</a> animated
<a href="https://en.wikipedia.org/wiki/GIF">GIF</a> form. The expression in spatial
variables <code>x</code> and <code>y</code> is specified on the command-line with the required
resolution, and an animated GIF showing a fly-around of the resulting surface is
output to <code>stdout</code>.</p>
<h3 id="usage">Usage</h3>
<p>The program should be run as:</p>
<pre><code> ./blakely xy* 32 &gt; pic.gif</code></pre>
<p>where the first parameter is a
<a href="https://en.wikipedia.org/wiki/Reverse_Polish_notation">RPN</a> expression, and the
second is the width of the required <a href="https://en.wikipedia.org/wiki/GIF">GIF</a>, up
to a maximum of 250.</p>
<p>The expressions are written in <a href="https://en.wikipedia.org/wiki/Reverse_Polish_notation">Reverse Polish
Notation</a> with the
following characters recognised:</p>
<pre><code> +, -, *, / - usual arithmetic operations
^ - Exponentiation; valid for constant exponent only
s - sin
c - cos
0-9 - single digit integers
d - duplicate number on stack
t - transpose top two elements on stack
x - x coordinate value
y - y coordinate value</code></pre>
<p>NB: all arithmetic is done in double precision, so <code>23/</code> is two-thirds, rather
than 0.</p>
<p>The surface plotted corresponds to <code>-1 &lt;= x,y &lt;= 1</code> and for best results, the
generated <code>z</code> value should lie between <code>-1</code> and <code>1</code>.</p>
<p>If there is a division by zero, square-root of a negative number, or similar
operation, then the results are undefined.</p>
<h3 id="examples">Examples</h3>
<p>For test-runs, use a resolution of 32. For simple expressions, the
<a href="https://en.wikipedia.org/wiki/GIF">GIF</a> generation should take only
a few seconds with a modern processor and full optimization. Runtime scales as
<a href="https://en.wikipedia.org/wiki/Big_O_notation">O(N^3)</a> with resolution <code>N</code>,
and more complex expressions take longer to compute. For example, increasing the
resolution of <code>ripple.gif</code>
to 250 took ~35 minutes to render on an <a href="https://en.wikipedia.org/wiki/Intel_Core#Core_i7">i7
processor</a>.</p>
<pre><code> ./blakely xy* 32 &gt; saddle.gif
./blakely xx*yy*1++d5*ct/ 64 &gt; ripple.gif</code></pre>
<h3 id="algorithm">Algorithm</h3>
<p>A generic root-finding algorithm to find the point of intersection between a ray
and the surface is done using a simple forward search from the eye. In order to
make the rendering realistic, both the value of the expression, and its
derivative with respect to <code>x</code> and <code>y</code> must be tracked. This is done using an
obvious stack-based approach.</p>
<h3 id="obfuscations">Obfuscations</h3>
<p>Much of the obfuscation is achieved through the use of single-letter variables
and <code>#define</code>s. The characters output for the <a href="https://en.wikipedia.org/wiki/GIF#File_format">GIF
format</a> are generated in myriad
and wonderful ways, making use of
<a href="https://en.wikipedia.org/wiki/Exclusive_or">XOR</a>, return values from
<code>putchar()</code>, and odd expressions. The layout is in the form of <code>X Y Z</code>.</p>
<h3 id="limitations">Limitations</h3>
<p>ASCII is assumed since many bytes for the
<a href="https://en.wikipedia.org/wiki/GIF">GIF</a> output are generated from characters
given in the source code. On compilation a few warnings about parentheses come
up when using gcc 4.6.3, and one about no return value from <code>main()</code> (who uses
exit codes anyway?), but clang 3.1 emits no warnings.</p>
<h3 id="questions">Questions</h3>
<ul>
<li>Apart from their appearance when computing the <a href="https://en.wikipedia.org/wiki/Reverse_Polish_notation">RPN
expression</a>, <a href="https://en.wikipedia.org/wiki/Sine_and_cosine">sin and
cos</a> are not used.
How do we then get the correct angles for rotation?</li>
<li>Exactly how many times will the animation repeat?</li>
<li>Why is there an upper limit of 250x250 for the resolution?</li>
<li>What is the point of <code>b[0]</code>?</li>
<li>Where are the words <code>NETSCAPE</code> and <code>GIF</code> hidden in the source?</li>
</ul>
<p>(Note that the author may or may not be able to answer all of the above
questions.)</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/
-->
<!-- AFTER: last line of markdown file: 2012/blakely/README.md -->
<!-- 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 -->
<div id="inventory">
<h1 id="inventory-for-2012blakely">Inventory for 2012/blakely</h1>
</div>
<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/2012/blakely/blakely.c">blakely.c</a> - entry source</li>
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/blakely/Makefile">Makefile</a> - entry Makefile</li>
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/blakely/blakely.orig.c">blakely.orig.c</a> - original source</li>
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/blakely/try.sh">try.sh</a> - how to run</li>
</ul>
<h2 id="secondary-files">Secondary files</h2>
<ul>
<li><a href="2012_blakely.tar.bz2">2012_blakely.tar.bz2</a> - download entry tarball</li>
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/blakely/README.md">README.md</a> - markdown source for this web page</li>
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/blakely/.entry.json">.entry.json</a> - description of entry in JSON</li>
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2012/blakely/.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/2012/blakely/.path">.path</a> - directory path from top directory</li>
<li><a href="index.html">index.html</a> - this web page</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 -->
</div>
<!-- END: this line ends content from: inc/after-content.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">
<div id="copyright"><h2>Copyright and CC BY-SA 4.0 License</h2></div>
<p>All IOCCC content including this file and web page are:</p>
<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copyright &copy; 1984-2024 by Landon Curt Noll. <a href="https://creativecommons.org/faq/#what-does-some-rights-reserved-mean">Some Rights Reserved</a>.</b>
<p>This work is licensed by Landon Curt Noll under:</p>
<p><b><a href="https://creativecommons.org/licenses/by-sa/4.0/?ref=chooser-v1"
target="_blank" rel="license noopener noreferrer" style="display:inline-block;">&nbsp;&nbsp;&nbsp;&nbsp;CC BY-SA 4.0
<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="../../png/cc.png"
alt="cc inside circle symbol">
<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="../../png/by.png"
alt="person inside circle symbol">
<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="../../png/sa.png"
alt="arrow looping back on itself inside circle symbol">
</a></b></p>
<p>The <b>CC BY-SA 4.0 LEGAL CODE</b> for this license is found under:</p>
<p>&nbsp;&nbsp;&nbsp;<b><a href="https://creativecommons.org/licenses/by-sa/4.0/legalcode.en">
https://creativecommons.org/licenses/by-sa/4.0/legalcode.en</a></b></p>
<p>You should <b>carefully review</b> all of the terms and conditions of the
<a href="https://creativecommons.org/licenses/by-sa/4.0/legalcode.en">actual license</a>
before using the licensed material.</p>
<p>You may wish to review the <b><a href="../../license.html">highlights of some of the key
features and terms</a></b> of the <a href="https://creativecommons.org/licenses/by-sa/4.0/legalcode.en">actual license</a>.</p>
<h2>Coda</h2>
<p><a href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fioccc-src.github.io%2Ftemp-test-ioccc%2F2012%2Fblakely%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 -->