build missing HTML files for entries
Setup a simple topnav for missing HTML files for entries. Added `bin/gen-other-html.sh` to build entry HTML files from markdown other than README.md to index.html HTML files. Fixed duplicate link text in `2020/ferguson1/gameplay.md`. Improved `inc/md2html.cfg` to support building the missing HTML files for entries. Added `make gen_other_html` to top level Makefile. Added `make gen_other_html` to `make quick_www` and `make www`. Fixed inventory links for year level index.html files. Changed `bin/output-year-index.sh` VERSION from "1.0.1 2024-02-23" to "1.1 2024-02-27". Added missing lines in `manifest.numbers`. Update the affected `.entry.json` files. The manifest (in both `manifest.numbers` and the collection of manifests from of all entry `.entry.json` files) now match. Errors from `make verify_entry_files` will now abort both `make quick_www` and `make www` rules in the top level `Makefile`. Changed markdown files in manifest to have an _inventory_order_ of _2000000000_ so that the `index.html` file will usually appear at the start of the _Secondary files_ set for the "#inventory" section of an entry's `index.html` file. Changed compressed tar files (files that end in _.tar.bz2_) in manifest to have an _inventory_order_ of _100000_ so that these files will usually appear at the end of the _Primary files_ set for the "#inventory" section of an entry's `index.html` file. Added 'Jump to top` link above the _Primary files_ section. Changed `bin/output-index-inventory.sh` VERSION from "1.1.1 2024-02-23" to "1.2 2024-02-27". Updated HTML files to perform the above via `make www`.
This commit is contained in:
1 parent
7babf792e4
commit
9d3438fb88
718 files changed
+17515
-4084
No files matched your search
@@ -9,14 +9,6 @@
|
||||
{ "author_handle" : "Michael_Birken" }
|
||||
],
|
||||
"manifest" : [
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 10,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : "birken.c",
|
||||
"inventory_order" : 20,
|
||||
@@ -289,6 +281,14 @@
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "download entry source"
|
||||
},
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 2000000000,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : ".entry.json",
|
||||
"inventory_order" : 4294967295,
|
||||
|
||||
@@ -613,9 +613,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
|
||||
|
||||
<h1 id="inventory-for-2013birken"><a name="inventory"></a>Inventory for
|
||||
2013/birken</h1>
|
||||
<p><a href="#top">Jump to top</a></p>
|
||||
<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/2013/birken/birken.c">birken.c</a>
|
||||
- entry source</li>
|
||||
@@ -717,6 +717,7 @@ 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/2013/birken/.entry.json">.entry.json</a>
|
||||
- description of entry in JSON</li>
|
||||
|
||||
@@ -9,14 +9,6 @@
|
||||
{ "author_handle" : "Adrian_Cable" }
|
||||
],
|
||||
"manifest" : [
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 10,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : "cable1.c",
|
||||
"inventory_order" : 20,
|
||||
@@ -65,6 +57,14 @@
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "download entry source"
|
||||
},
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 2000000000,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : ".entry.json",
|
||||
"inventory_order" : 4294967295,
|
||||
|
||||
@@ -212,9 +212,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
|
||||
|
||||
<h1 id="inventory-for-2013cable1"><a name="inventory"></a>Inventory for
|
||||
2013/cable1</h1>
|
||||
<p><a href="#top">Jump to top</a></p>
|
||||
<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/2013/cable1/cable1.c">cable1.c</a>
|
||||
- entry source</li>
|
||||
@@ -233,6 +233,7 @@ 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/2013/cable1/.entry.json">.entry.json</a>
|
||||
- description of entry in JSON</li>
|
||||
|
||||
@@ -9,14 +9,6 @@
|
||||
{ "author_handle" : "Adrian_Cable" }
|
||||
],
|
||||
"manifest" : [
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 10,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : "cable2.c",
|
||||
"inventory_order" : 20,
|
||||
@@ -105,6 +97,14 @@
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "download entry source"
|
||||
},
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 2000000000,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : ".entry.json",
|
||||
"inventory_order" : 4294967295,
|
||||
|
||||
@@ -263,9 +263,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
|
||||
|
||||
<h1 id="inventory-for-2013cable2"><a name="inventory"></a>Inventory for
|
||||
2013/cable2</h1>
|
||||
<p><a href="#top">Jump to top</a></p>
|
||||
<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/2013/cable2/cable2.c">cable2.c</a>
|
||||
- entry source</li>
|
||||
@@ -289,6 +289,7 @@ 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/2013/cable2/.entry.json">.entry.json</a>
|
||||
- description of entry in JSON</li>
|
||||
|
||||
@@ -9,14 +9,6 @@
|
||||
{ "author_handle" : "Adrian_Cable" }
|
||||
],
|
||||
"manifest" : [
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 10,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : "cable3.c",
|
||||
"inventory_order" : 20,
|
||||
@@ -129,6 +121,14 @@
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "download entry source"
|
||||
},
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 2000000000,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : ".entry.json",
|
||||
"inventory_order" : 4294967295,
|
||||
|
||||
@@ -566,9 +566,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
|
||||
|
||||
<h1 id="inventory-for-2013cable3"><a name="inventory"></a>Inventory for
|
||||
2013/cable3</h1>
|
||||
<p><a href="#top">Jump to top</a></p>
|
||||
<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/2013/cable3/cable3.c">cable3.c</a>
|
||||
- entry source</li>
|
||||
@@ -607,6 +607,7 @@ 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/2013/cable3/.entry.json">.entry.json</a>
|
||||
- description of entry in JSON</li>
|
||||
|
||||
@@ -9,14 +9,6 @@
|
||||
{ "author_handle" : "J_David_Lowe" }
|
||||
],
|
||||
"manifest" : [
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 10,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : "dlowe.c",
|
||||
"inventory_order" : 20,
|
||||
@@ -81,6 +73,14 @@
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "download entry source"
|
||||
},
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 2000000000,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : ".entry.json",
|
||||
"inventory_order" : 4294967295,
|
||||
|
||||
@@ -231,9 +231,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
|
||||
|
||||
<h1 id="inventory-for-2013dlowe"><a name="inventory"></a>Inventory for
|
||||
2013/dlowe</h1>
|
||||
<p><a href="#top">Jump to top</a></p>
|
||||
<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/2013/dlowe/dlowe.c">dlowe.c</a>
|
||||
- entry source</li>
|
||||
@@ -260,6 +260,7 @@ 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/2013/dlowe/.entry.json">.entry.json</a>
|
||||
- description of entry in JSON</li>
|
||||
|
||||
@@ -9,14 +9,6 @@
|
||||
{ "author_handle" : "Yusuke_Endoh" }
|
||||
],
|
||||
"manifest" : [
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 10,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : "endoh1.c",
|
||||
"inventory_order" : 20,
|
||||
@@ -89,6 +81,14 @@
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "download entry source"
|
||||
},
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 2000000000,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : ".entry.json",
|
||||
"inventory_order" : 4294967295,
|
||||
|
||||
@@ -298,9 +298,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
|
||||
|
||||
<h1 id="inventory-for-2013endoh1"><a name="inventory"></a>Inventory for
|
||||
2013/endoh1</h1>
|
||||
<p><a href="#top">Jump to top</a></p>
|
||||
<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/2013/endoh1/endoh1.c">endoh1.c</a>
|
||||
- entry source</li>
|
||||
@@ -330,6 +330,7 @@ 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/2013/endoh1/.entry.json">.entry.json</a>
|
||||
- description of entry in JSON</li>
|
||||
|
||||
@@ -9,14 +9,6 @@
|
||||
{ "author_handle" : "Yusuke_Endoh" }
|
||||
],
|
||||
"manifest" : [
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 10,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : "endoh2.c",
|
||||
"inventory_order" : 20,
|
||||
@@ -57,6 +49,14 @@
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "download entry source"
|
||||
},
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 2000000000,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : ".entry.json",
|
||||
"inventory_order" : 4294967295,
|
||||
|
||||
@@ -209,9 +209,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
|
||||
|
||||
<h1 id="inventory-for-2013endoh2"><a name="inventory"></a>Inventory for
|
||||
2013/endoh2</h1>
|
||||
<p><a href="#top">Jump to top</a></p>
|
||||
<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/2013/endoh2/endoh2.c">endoh2.c</a>
|
||||
- entry source</li>
|
||||
@@ -229,6 +229,7 @@ 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/2013/endoh2/.entry.json">.entry.json</a>
|
||||
- description of entry in JSON</li>
|
||||
|
||||
@@ -9,14 +9,6 @@
|
||||
{ "author_handle" : "Yusuke_Endoh" }
|
||||
],
|
||||
"manifest" : [
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 10,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : "endoh3.c",
|
||||
"inventory_order" : 20,
|
||||
@@ -105,6 +97,14 @@
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "download entry source"
|
||||
},
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 2000000000,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : ".entry.json",
|
||||
"inventory_order" : 4294967295,
|
||||
|
||||
@@ -317,9 +317,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
|
||||
|
||||
<h1 id="inventory-for-2013endoh3"><a name="inventory"></a>Inventory for
|
||||
2013/endoh3</h1>
|
||||
<p><a href="#top">Jump to top</a></p>
|
||||
<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/2013/endoh3/endoh3.c">endoh3.c</a>
|
||||
- entry source</li>
|
||||
@@ -355,6 +355,7 @@ 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/2013/endoh3/.entry.json">.entry.json</a>
|
||||
- description of entry in JSON</li>
|
||||
|
||||
@@ -9,14 +9,6 @@
|
||||
{ "author_handle" : "Yusuke_Endoh" }
|
||||
],
|
||||
"manifest" : [
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 10,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : "endoh4.c",
|
||||
"inventory_order" : 20,
|
||||
@@ -1241,6 +1233,14 @@
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "download entry source"
|
||||
},
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 2000000000,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : ".entry.json",
|
||||
"inventory_order" : 4294967295,
|
||||
|
||||
@@ -249,9 +249,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
|
||||
|
||||
<h1 id="inventory-for-2013endoh4"><a name="inventory"></a>Inventory for
|
||||
2013/endoh4</h1>
|
||||
<p><a href="#top">Jump to top</a></p>
|
||||
<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/2013/endoh4/endoh4.c">endoh4.c</a>
|
||||
- entry source</li>
|
||||
@@ -713,6 +713,7 @@ 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/2013/endoh4/.entry.json">.entry.json</a>
|
||||
- description of entry in JSON</li>
|
||||
|
||||
@@ -9,14 +9,6 @@
|
||||
{ "author_handle" : "Qiming_HOU" }
|
||||
],
|
||||
"manifest" : [
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 10,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : "hou.c",
|
||||
"inventory_order" : 20,
|
||||
@@ -105,6 +97,14 @@
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "download entry source"
|
||||
},
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 2000000000,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : ".entry.json",
|
||||
"inventory_order" : 4294967295,
|
||||
|
||||
@@ -0,0 +1,592 @@
|
||||
<!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/gen-other-html.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>The International Obfuscated C Code Contest</title>
|
||||
<meta name="description" content="example.md for 2013/hou">
|
||||
<meta name="keywords" content="IOCCC, 2013/hou, example.md">
|
||||
</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>example.md for 2013/hou</h2>
|
||||
</div>
|
||||
|
||||
<!-- END: this line ends content from: inc/header.default.html -->
|
||||
<!-- START: this line starts content from: inc/topnav.up2index.html -->
|
||||
|
||||
<div class="topnav">
|
||||
<a class="Left" href="../index.html">↑ jump to index.html ↑</a>
|
||||
</div>
|
||||
|
||||
<!-- END: this line ends content from: inc/topnav.up2index.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>
|
||||
</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 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
|
||||
|
||||
<h1 id="scene-format-documentation">Scene format documentation</h1>
|
||||
<p>The file must be encoded in UTF-8 as the BOF marker indicates.</p>
|
||||
<p>You can directly feed it to the renderer. If you’re wondering about
|
||||
what the following code block does, that’s why:)</p>
|
||||
<pre><code>@|?|?z#
|
||||
@|||?z&
|
||||
>?Sedvf
|
||||
??Tdeu#
|
||||
>>Tdeui
|
||||
??Tdmmf
|
||||
??[[euf
|
||||
?}?Oq}e
|
||||
?}?Oqqf
|
||||
v}?|q}e
|
||||
v}?|qqf
|
||||
?Sj|?{f
|
||||
?Tjk?{e
|
||||
FF?Oqq$
|
||||
RR?Oqq$
|
||||
^^?Oqq$
|
||||
jj?Oqq$
|
||||
vv?|qq$
|
||||
IOBMqqe
|
||||
U]BMqqe
|
||||
aiBMqqe
|
||||
muBMqqe
|
||||
EEEJpp%
|
||||
QQEJpp%
|
||||
]]EJpp%
|
||||
iiEJpp%
|
||||
uuEJpp%
|
||||
ZnY|{|e
|
||||
[mZ|\{\{#
|
||||
[mZ|||f
|
||||
kkdr\{\{\%
|
||||
lkdr\{\{></code></pre>
|
||||
<h2 id="basic-structure">Basic structure</h2>
|
||||
<p>A scene file begins with arbitrary binary data, followed by several
|
||||
shader functions.</p>
|
||||
<p>Shader functions are declared using a one-character name followed by
|
||||
a <code>]</code> character. There are some special function names, which
|
||||
will be explained below.</p>
|
||||
<p>The language used to write shader functions is very simple.
|
||||
Basically, you write a sequence of assignment statements like this:</p>
|
||||
<pre><code>A=A+D
|
||||
B=B+E</code></pre>
|
||||
<p>Namely, you write a one-character variable name, an equal sign
|
||||
(<code>=</code>), followed by an expression (made of operators and
|
||||
one-character variable names, of course).</p>
|
||||
<h2 id="expressions">Expressions</h2>
|
||||
<p>The shader language supports seven operators, listed highest priority
|
||||
first:</p>
|
||||
<pre><code>*/+-<#:</code></pre>
|
||||
<p><code>*/+-<</code> each mean what they mean in C, but the priority
|
||||
part is a bit different. Basically, <code>*</code> has higher priority
|
||||
than <code>/</code>, so <code>A/4*4</code> actually computes
|
||||
<code>A/(4*4)</code>. And you can’t write <code>(A/4)*4</code> –
|
||||
brackets are not supported. As an advice, keep your expressions simple
|
||||
:) If you really needs to write something like <code>C=(A/4)*4</code>,
|
||||
write instead:</p>
|
||||
<pre><code>B=A/4+
|
||||
C=B*4</code></pre>
|
||||
<p>The <code>#</code> operator acts somewhat like the C <code>?:</code>.
|
||||
It returns one of its two operands based on, what else, the value of
|
||||
variable <code>#</code>. When <code>#</code> is true, <code>#</code>
|
||||
returns its second operand.</p>
|
||||
<p>The <code>:</code> operator calls built-in functions. The first
|
||||
operand is the function id and the second is the parameter. Here is a
|
||||
list of functions:</p>
|
||||
<pre><code>0:x = the x-th byte of the scene file
|
||||
1:x = sin(x*PI)
|
||||
2:x = atan2(x,#)/PI
|
||||
3:x = sqrt(max(x,0))
|
||||
4:x = floor(x)
|
||||
5:x = the next number in the (allegedly random) number sequence, can't be called in volume shaders
|
||||
6:x = value of the variable (char)(120+x)
|
||||
7:x = write #'s value to the variable (char)(120+x)</code></pre>
|
||||
<p>Contrary to popular belief, the language itself doesn’t support
|
||||
numerical constants. Any character sitting between operators is a
|
||||
variable. When you see 1/2, it’s in fact dividing the variable 1’s value
|
||||
by the variable 2’s value. For everyone’s convenience, though, in the
|
||||
beginning every variable is initialized to its ASCII code minus 48. As
|
||||
long as you don’t write something like <code>3=1+1</code>, you can use
|
||||
single digit numbers as, well, single digit numbers. If you need
|
||||
something like <code>1920</code> or <code>0.73</code>, you need to
|
||||
compute it yourself. And yes, all variables store floating point
|
||||
values.</p>
|
||||
<p>If a character appears as the first character of any
|
||||
<code>argv</code>, it goes to zero. This includes the scene filename. If
|
||||
you name your scene <code>1.scene</code>, well, good luck with
|
||||
<code>1=0</code>!</p>
|
||||
<p>You can terminate a statement using any character that isn’t an
|
||||
operator, be it <code>\n</code> or <code>;</code>. But you must put in
|
||||
one and only one character. Put in two (e.g. the Windows
|
||||
<code>\r\n</code>), and it terminates your function. Also, the first
|
||||
statement must begin immediately after <code>]</code>.</p>
|
||||
<p>When a function terminates, the interpreter calls the next function
|
||||
specified by variable <code>R</code>. If you want to call function
|
||||
<code>n</code>, just write somewhere:</p>
|
||||
<pre><code>R=n</code></pre>
|
||||
<p>providing you have left <code>n</code> at its initial value. If you
|
||||
want to actually return to the renderer, put in <code>R=0</code>.</p>
|
||||
<p>As you may have noticed, you can put in all kinds of stuff between
|
||||
functions, like this comment.</p>
|
||||
<h2 id="how-the-____-do-i-render-an-image-with-shaders">How the ____ do
|
||||
I render an image with shaders?</h2>
|
||||
<p>Basically, you define a geometry using volume shaders, define a
|
||||
camera using a camera shader, and define light sources and surface
|
||||
reflectance properties using material shaders.</p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr class="odd">
|
||||
<td style="text-align: left;">Continue to the comments before function
|
||||
A</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<pre><code>//As an (optional) assignment, figure out what function 'n' does. And why there is a plus sign at every EOL except the last.
|
||||
n]#=1+
|
||||
x=X+1/2+
|
||||
d=0:U;d=d-n;U=U+1;A=d<x;#=#*A+
|
||||
d=0:U;d=d-n;U=U+1;A=x<d+1;#=#*A+
|
||||
x=Y+1/2+
|
||||
d=0:U;d=d-n;U=U+1;A=d<x;#=#*A+
|
||||
d=0:U;d=d-n;U=U+1;A=x<d+1;#=#*A+
|
||||
x=Z+1/2+
|
||||
d=0:U;d=d-n;U=U+1;A=d<x;#=#*A+
|
||||
d=0:U;d=d-n;U=U+1;A=x<d+1;#=#*A+
|
||||
d=0:U;d=d-n;U=U+1+
|
||||
U=U+2+
|
||||
C=C#d+3*9+
|
||||
#=d+
|
||||
R=0#n</code></pre>
|
||||
<hr />
|
||||
<p>The function <code>A</code> initializes global settings:</p>
|
||||
<pre><code>G -- Image width, in pixels
|
||||
H -- Image height, in pixels
|
||||
I -- Perturbation probability
|
||||
J -- Camera ray stratification probability</code></pre>
|
||||
<p>If you have used a MLT renderer before, you probably know what
|
||||
<code>I</code> and <code>J</code> does. If you don’t, well, use the same
|
||||
value as the default scene. Everything converges just fine under
|
||||
suboptimal settings, just a little slower. Generally, use a higher value
|
||||
for <code>I</code> if your scene is primarily illuminated by some
|
||||
indirect source.</p>
|
||||
<p><code>A</code> also serves as the geometry shader for volume 0. The
|
||||
scene geometry is made of up to 32 volumes, each with 64x64x64 cells.
|
||||
The volume 0 is the ‘top level’ volume where the camera goes. Each cell
|
||||
of a volume can be empty, filled with a material, or another volume. The
|
||||
roundish characters in <a
|
||||
href="../old_default.scene">old_default.scene</a> and the carpet on the
|
||||
floor in this file are examples where a cell is defined to another
|
||||
volume. Materials will be explained later.</p>
|
||||
<p>The volume shader for the i-th volume is named as the (i+1)-th
|
||||
capital letter. Each volume shader is invoked once for each cell. The
|
||||
cell coordinates (0..63) are given as inputs in variable
|
||||
<code>x</code>,<code>y</code>,<code>z</code>, and you’re supposed to
|
||||
return the cell content in variable <code>C</code>. To fill it with
|
||||
material <code>i</code>, return <code>64+i</code> in <code>C</code>. To
|
||||
fill it with volume <code>i</code>, well, return <code>i</code>. To
|
||||
leave it empty, return <code>C=0</code>.</p>
|
||||
<p>Before starting to build a scene, it’s better to have a draft sketch
|
||||
handy first. Something like <img src="draft.png" alt="Draft sketch" />.
|
||||
Sometimes it’s hard to imagine where something should go without the
|
||||
sketch. And you don’t have to stick to your sketch :)</p>
|
||||
<p>What motivated my default scene: it was the full moon’s day (a
|
||||
national holiday) in China and my parents were planning to renovate
|
||||
their apartment. I rendered the image to tell my mom how ridiculous her
|
||||
starry-sky wall paper would look like if she used it on every single
|
||||
wall. She ends up using it on just one wall, the one facing my bed, to
|
||||
thank me for the effort.</p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr class="odd">
|
||||
<td style="text-align: left;">Continue to the comments before function
|
||||
a</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<pre><code>//As a bonus, find out what the first line does
|
||||
A]#=#-#;"=7:0-p+^;#="+
|
||||
R=n+
|
||||
G=p*:+
|
||||
#=0<B+
|
||||
G=G*2#G+
|
||||
H=G*3/4+
|
||||
I=4/5+
|
||||
J=1/2+
|
||||
C=p+1+
|
||||
U=w+w+w</code></pre>
|
||||
<hr />
|
||||
<p>The function <code>a</code> is the camera shader, which, well,
|
||||
generates the camera ray. It’s supposed to return the ray in variables
|
||||
<code>UVWXYZ</code> and <code>ABCDEF</code> (that may sound like a lot
|
||||
of variables, but it really isn’t that much).</p>
|
||||
<p>Here comes some subtlety of <code>PSSMLT</code> (Primary Sample Space
|
||||
Metropolis Light Transport, or Kelemen-style MLT). Basically, a
|
||||
<code>PSSMLT</code> renderer gives you an (allegedly random) number
|
||||
sequence, and you compute a color out of it. This is usually done by
|
||||
generating and tracing rays out of those random numbers. The renderer
|
||||
would assemble the colors into an image.</p>
|
||||
<p>Remember the function <code>5</code>? Here it comes. The first two
|
||||
“random” numbers have special meaning and must specify a point on the
|
||||
image plane <code>[0,1)x[0,1)</code>. You’re supposed to transform the
|
||||
image plane to the 3D space, choose a point for the camera, and shoot a
|
||||
ray from the camera point to the image plane point, see <img
|
||||
src="camera.png" alt="Camera convention" />. The camera point goes to
|
||||
<code>(U,V,W)</code>, and the ray direction vector (image plane point -
|
||||
camera point) is <code>(X,Y,Z)</code>. For the coordinate space, volume
|
||||
0 is scaled up 64x here to <code>(0,0,0)-(4096,4096,4096)</code>.</p>
|
||||
<p>For a basic camera shader example, check <a
|
||||
href="../otherroom.scene">otherroom.scene</a>.</p>
|
||||
<p>If any ray goes out of volume 0, the renderer crashes. Make sure it
|
||||
doesn’t happen. Wall up everything.</p>
|
||||
<p>Variables <code>ABCDEF</code> control the color returned from the
|
||||
ray. They will be explained in the material shaders part. For now, just
|
||||
put in:</p>
|
||||
<pre><code>A=0;B=0;C=0
|
||||
D=1;E=1;F=1</code></pre>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr class="odd">
|
||||
<td style="text-align: left;">Continue to the comments before function
|
||||
1</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<pre><code>a]R=0+
|
||||
X=5:5+
|
||||
Y=5:5+
|
||||
X=X-1/2+
|
||||
Y=Y-1/2+
|
||||
x=5:5+
|
||||
y=5:5+
|
||||
x=x-1/2+
|
||||
y=y-1/2+
|
||||
x=x*8*7;y=y*8*7+
|
||||
X=X*G+
|
||||
Y=Y*H+
|
||||
Z=H*2/3+
|
||||
d=4*;+
|
||||
d=d*p/Z+
|
||||
X=x+X*d+
|
||||
Y=y+Y*d+
|
||||
Z=Z*d+
|
||||
U=p*p/2-p*2+x+
|
||||
V=p*p/2+p*1-y+
|
||||
W=p*8+
|
||||
A=0;B=0;C=0+
|
||||
D=1;E=1;F=1</code></pre>
|
||||
<hr />
|
||||
<p>The numbered functions define materials, i.e., surface reflectance
|
||||
properties. As the name suggests, the shader simulates ray-surface
|
||||
interaction. It’s done by updating <code>UVWXYZABCDEF</code>, of
|
||||
course.</p>
|
||||
<p><code>ABCDEF</code> define colors. <code>(A,B,C)</code> is the RGB
|
||||
irradiance ultimately returned to the renderer, and <code>(D,E,F)</code>
|
||||
maintain the cumulative RGB reflectance of the current ray path. This
|
||||
may sound confusing, but basically, if the surface is a light source,
|
||||
you accumulate the current path reflectance <code>(D,E,F)</code>,
|
||||
multiplied by the light strength, to <code>(A,B,C)</code>. See shader 6
|
||||
for an example.</p>
|
||||
<p>If you want a colored surface, use its color to modulate
|
||||
<code>(D,E,F)</code>, i.e. <code>D=D*red;E=E*green;F=F*blue</code>, easy
|
||||
as that. To get some texturing, compute the color procedurally or look
|
||||
up a binary table.</p>
|
||||
<p>There’s something subtle about colors. To go along with the trend,
|
||||
the renderer follows the practice of linear rendering with a gamma of
|
||||
<code>2</code>. Stripping the fancy jargon, that basically means after
|
||||
picking a color in your favorite image editing program, you need to
|
||||
convert the RGB values from 0..255 to 0..1, and then put here its
|
||||
<em>square</em>. Only after squaring you get your real, lively color in
|
||||
the output image, as opposed to something dull and gray. You need to do
|
||||
the same if you use a RGB texture. And yes, that is the what the second
|
||||
<code>sqrt(3)</code> in <a href="../a.c">a.c</a> is for.</p>
|
||||
<p>Going beyond colors, to define a shiny or dull surface one needs more
|
||||
maths, and optics. The jargon for this is <code>BRDF</code>
|
||||
(Bidirectional Reflectance Distribution Function) importance sampling.
|
||||
Let’s continue to function <code>o</code>.</p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr class="odd">
|
||||
<td style="text-align: left;">Continue to the comments before function
|
||||
o</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<pre><code>//This function computes the starred wallpaper
|
||||
//Original color: 0.36 0.714285 0.8
|
||||
1]R=o+
|
||||
d=p*6+
|
||||
x=U+W+
|
||||
x=4:x/d+
|
||||
z=4:V/d+
|
||||
#=3*x-4*z+
|
||||
y=4:#/5+
|
||||
#=#-y*5+
|
||||
y=1#0+
|
||||
x=x*d+d/2-U+W+
|
||||
z=z*d+d/2-V+
|
||||
r=3:x*x+z*z+
|
||||
#=z+
|
||||
u=2:x+
|
||||
d=1:u*5+
|
||||
d=d*d*d+3/2+
|
||||
d=d*p+
|
||||
#=r<d+
|
||||
#=#*y+
|
||||
d=2/5#I+
|
||||
D=D*d+
|
||||
E=E*4/7+
|
||||
d=I#2/5+
|
||||
F=F*d</code></pre>
|
||||
<hr />
|
||||
<p>Function <code>o</code> defines a diffuse (that is, dull) surface. To
|
||||
define reflectance properties like this, one needs to sample an outgoing
|
||||
ray direction, based on the incoming direction and the surface normal.
|
||||
It’s called importance sampling, because here the probability of each
|
||||
outgoing direction has to be proportional to the reflected light
|
||||
strength (i.e., the <code>BRDF</code>) on that direction. For a diffuse
|
||||
surface, sample the upper hemisphere with a probability proportional to
|
||||
the cosine of the outgoing angle, see <img src="cosine.png"
|
||||
alt="Cosine sampling" />.</p>
|
||||
<p>The incoming direction is in <code>(X,Y,Z)</code> and the hit point
|
||||
is <code>(U,V,W)</code>. The outgoing direction is returned in, where
|
||||
else, <code>(X,Y,Z)</code>.</p>
|
||||
<p>The surface normal is provided in variables <code>S</code> and
|
||||
<code>T</code>. Since the geometry is defined as a bunch of cube-shaped
|
||||
cells, there are only 6 possible normals:
|
||||
<code>(±1,0,0) (0,±1,0) (0,0,±1)</code>. Here <code>S</code> is the sign
|
||||
and <code>T</code> is the dimension. If you get <code>S=-1</code> and
|
||||
<code>T=1</code>, the normal is <code>(0,-1,0)</code>.</p>
|
||||
<p>If you don’t want to redo all the math yourself… this file provides a
|
||||
few simple shader functions:</p>
|
||||
<pre><code>o -- Diffuse surface. Do the color thing your self and call R=o
|
||||
5 -- Perfect mirror.
|
||||
f -- Surface with a Fresnel term. Basically, it resembles a polished surface made from a dielectric material.</code></pre>
|
||||
<p>For something more complex like a fluffy carpet, well, you could use
|
||||
a volume to directly model the <a
|
||||
href="https://en.wikipedia.org/wiki/Mesoscopic_physics">mesoscopic</a>
|
||||
detail. Shader <code>D</code> in this file produces a bunch of dense,
|
||||
tiny spikes to simulate a fluffy appearance.</p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr class="odd">
|
||||
<td style="text-align: left;">Continue to the EOF</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<pre><code>//diffuse ray generation
|
||||
o]R=0+
|
||||
u=5:5+
|
||||
v=5:5+
|
||||
v=v*2+
|
||||
r=3:u+
|
||||
z=1:v+
|
||||
y=1:1/2+v+
|
||||
z=z*r+
|
||||
y=y*r+
|
||||
x=3:1-u+
|
||||
x=0-x*S+
|
||||
X=6:T+
|
||||
w=x;x=z;z=y;y=w+
|
||||
Y=6:T+
|
||||
w=x;x=z;z=y;y=w+
|
||||
Z=6:T
|
||||
|
||||
//reflector
|
||||
5]R=0+
|
||||
x=1;y=1;z=1+
|
||||
#=0-1+
|
||||
#=7:T+
|
||||
X=x*X;Y=y*Y;Z=z*Z
|
||||
|
||||
//approximate Fresnel, works better than the real thing when you don't want to tweak the IOR
|
||||
f]x=X;y=Y;z=Z+
|
||||
r=3:x*x+z*z+y*y+
|
||||
d=6:T+
|
||||
d=1-d*S/r+
|
||||
d=d*d*d+
|
||||
#=5:5+
|
||||
#=d<#+
|
||||
R=5#o+
|
||||
d=d#1-d+
|
||||
u=1#u+
|
||||
v=1#v+
|
||||
w=1#w+
|
||||
D=D*d*u+
|
||||
E=E*d*v+
|
||||
F=F*d*w
|
||||
|
||||
//the handles
|
||||
B]R=0+
|
||||
#=X<8*3+
|
||||
C=3#0
|
||||
|
||||
C]R=0+
|
||||
#=X<8*4+
|
||||
C=0#4
|
||||
|
||||
//red-Fresnel
|
||||
2]R=f+
|
||||
u=1/2;v=1/9;w=v
|
||||
|
||||
//white-Fresnel and the full moon
|
||||
3]R=f+
|
||||
u=7*9/p;v=u;w=v+
|
||||
x=3*:+8+
|
||||
z=U-x*p+p/2+
|
||||
x=V-x*p-p/2+
|
||||
r=3:x*x+z*z+
|
||||
#=4<r/p+
|
||||
D=D*I#D+
|
||||
E=E*4/7#E+
|
||||
F=F*2/5#F+
|
||||
d=1/5#0+
|
||||
A=A+D*d+
|
||||
B=B+E*d+
|
||||
C=C+F*d
|
||||
|
||||
//handle
|
||||
4]R=5+
|
||||
D=D*I;E=E*4/7;F=F*2/5
|
||||
|
||||
//light from the window
|
||||
6]R=0+
|
||||
#=P+
|
||||
d=2#8*2+
|
||||
A=A+D*d+
|
||||
B=B+E*d+
|
||||
C=C+F*d*I+
|
||||
P=9
|
||||
|
||||
//carpet
|
||||
7]R=o+
|
||||
D=D/7+
|
||||
E=E/3+
|
||||
F=F/7
|
||||
|
||||
D]R=0+
|
||||
#=8<Y+
|
||||
C=0#3+
|
||||
#=4:3*X-4*Z+
|
||||
y=4:#/7+
|
||||
#=#-y*7+
|
||||
C=7#C</code></pre>
|
||||
<hr />
|
||||
<p>The last line, well, is the output filename. Just remember to throw
|
||||
in two <code>]</code>s and don’t put a newline after it.</p>
|
||||
<pre><code>]]example.ppm</code></pre>
|
||||
|
||||
<!-- END: this line ends content for HTML phase 21 by: bin/pandoc-wrapper.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=#">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 -->
|
||||
+2
-1
@@ -371,9 +371,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
|
||||
|
||||
<h1 id="inventory-for-2013hou"><a name="inventory"></a>Inventory for
|
||||
2013/hou</h1>
|
||||
<p><a href="#top">Jump to top</a></p>
|
||||
<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/2013/hou/hou.c">hou.c</a>
|
||||
- entry source</li>
|
||||
@@ -403,6 +403,7 @@ 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/2013/hou/.entry.json">.entry.json</a>
|
||||
- description of entry in JSON</li>
|
||||
|
||||
+17
-19
@@ -204,33 +204,31 @@ Entries of 2013 - The 22nd IOCCC</h1>
|
||||
<p><strong>Download IOCCC</strong> <a
|
||||
href="2013/ioccc.2013.tar.bz2">2013 entry source</a></p>
|
||||
<ul>
|
||||
<li><a href="2013/birken/index.html">2013/birken</a> - Best painting
|
||||
<li><a href="birken/index.html">2013/birken</a> - Best painting
|
||||
tool</li>
|
||||
<li><a href="2013/cable1/index.html">2013/cable1</a> - Most partisan
|
||||
<li><a href="cable1/index.html">2013/cable1</a> - Most partisan
|
||||
1-liner</li>
|
||||
<li><a href="2013/cable2/index.html">2013/cable2</a> - Best of show</li>
|
||||
<li><a href="2013/cable3/index.html">2013/cable3</a> - Largest small
|
||||
system emulator</li>
|
||||
<li><a href="2013/dlowe/index.html">2013/dlowe</a> - Best sparkling
|
||||
<li><a href="cable2/index.html">2013/cable2</a> - Best of show</li>
|
||||
<li><a href="cable3/index.html">2013/cable3</a> - Largest small system
|
||||
emulator</li>
|
||||
<li><a href="dlowe/index.html">2013/dlowe</a> - Best sparkling
|
||||
utility</li>
|
||||
<li><a href="2013/endoh1/index.html">2013/endoh1</a> - Most lazy
|
||||
SKIer</li>
|
||||
<li><a href="2013/endoh2/index.html">2013/endoh2</a> - Most
|
||||
recyclable</li>
|
||||
<li><a href="2013/endoh3/index.html">2013/endoh3</a> - Most tweetable
|
||||
<li><a href="endoh1/index.html">2013/endoh1</a> - Most lazy SKIer</li>
|
||||
<li><a href="endoh2/index.html">2013/endoh2</a> - Most recyclable</li>
|
||||
<li><a href="endoh3/index.html">2013/endoh3</a> - Most tweetable
|
||||
1-liner</li>
|
||||
<li><a href="2013/endoh4/index.html">2013/endoh4</a> - Most solid</li>
|
||||
<li><a href="2013/hou/index.html">2013/hou</a> - Best use of 1 Infinite
|
||||
<li><a href="endoh4/index.html">2013/endoh4</a> - Most solid</li>
|
||||
<li><a href="hou/index.html">2013/hou</a> - Best use of 1 Infinite
|
||||
Loop</li>
|
||||
<li><a href="2013/mills/index.html">2013/mills</a> - Most timely
|
||||
<li><a href="mills/index.html">2013/mills</a> - Most timely
|
||||
rendered</li>
|
||||
<li><a href="2013/misaka/index.html">2013/misaka</a> - Most catty</li>
|
||||
<li><a href="2013/morgan1/index.html">2013/morgan1</a> - Smallest large
|
||||
<li><a href="misaka/index.html">2013/misaka</a> - Most catty</li>
|
||||
<li><a href="morgan1/index.html">2013/morgan1</a> - Smallest large
|
||||
system simulator</li>
|
||||
<li><a href="2013/morgan2/index.html">2013/morgan2</a> - Most playfully
|
||||
<li><a href="morgan2/index.html">2013/morgan2</a> - Most playfully
|
||||
versatile</li>
|
||||
<li><a href="2013/robison/index.html">2013/robison</a> - Most poetic use
|
||||
of strings</li>
|
||||
<li><a href="robison/index.html">2013/robison</a> - Most poetic use of
|
||||
strings</li>
|
||||
</ul>
|
||||
<p> <strong>Jump to:</strong> <a href="#">top</a></p>
|
||||
|
||||
|
||||
@@ -9,14 +9,6 @@
|
||||
{ "author_handle" : "Christopher_Mills" }
|
||||
],
|
||||
"manifest" : [
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 10,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : "mills.c",
|
||||
"inventory_order" : 20,
|
||||
@@ -49,6 +41,14 @@
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "download entry source"
|
||||
},
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 2000000000,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : ".entry.json",
|
||||
"inventory_order" : 4294967295,
|
||||
|
||||
@@ -244,9 +244,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
|
||||
|
||||
<h1 id="inventory-for-2013mills"><a name="inventory"></a>Inventory for
|
||||
2013/mills</h1>
|
||||
<p><a href="#top">Jump to top</a></p>
|
||||
<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/2013/mills/mills.c">mills.c</a>
|
||||
- entry source</li>
|
||||
@@ -261,6 +261,7 @@ 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/2013/mills/.entry.json">.entry.json</a>
|
||||
- description of entry in JSON</li>
|
||||
|
||||
@@ -9,14 +9,6 @@
|
||||
{ "author_handle" : "Don_Yang" }
|
||||
],
|
||||
"manifest" : [
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 10,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : "misaka.c",
|
||||
"inventory_order" : 20,
|
||||
@@ -73,6 +65,14 @@
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "download entry source"
|
||||
},
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 2000000000,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : ".entry.json",
|
||||
"inventory_order" : 4294967295,
|
||||
|
||||
@@ -346,9 +346,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
|
||||
|
||||
<h1 id="inventory-for-2013misaka"><a name="inventory"></a>Inventory for
|
||||
2013/misaka</h1>
|
||||
<p><a href="#top">Jump to top</a></p>
|
||||
<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/2013/misaka/misaka.c">misaka.c</a>
|
||||
- entry source</li>
|
||||
@@ -370,6 +370,7 @@ 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/2013/misaka/.entry.json">.entry.json</a>
|
||||
- description of entry in JSON</li>
|
||||
|
||||
@@ -9,14 +9,6 @@
|
||||
{ "author_handle" : "Yves-Marie_Morgan" }
|
||||
],
|
||||
"manifest" : [
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 10,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : "morgan1.c",
|
||||
"inventory_order" : 20,
|
||||
@@ -57,6 +49,14 @@
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "download entry source"
|
||||
},
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 2000000000,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : ".entry.json",
|
||||
"inventory_order" : 4294967295,
|
||||
|
||||
@@ -240,9 +240,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
|
||||
|
||||
<h1 id="inventory-for-2013morgan1"><a name="inventory"></a>Inventory for
|
||||
2013/morgan1</h1>
|
||||
<p><a href="#top">Jump to top</a></p>
|
||||
<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/2013/morgan1/morgan1.c">morgan1.c</a>
|
||||
- entry source</li>
|
||||
@@ -260,6 +260,7 @@ 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/2013/morgan1/.entry.json">.entry.json</a>
|
||||
- description of entry in JSON</li>
|
||||
|
||||
@@ -9,14 +9,6 @@
|
||||
{ "author_handle" : "Yves-Marie_Morgan" }
|
||||
],
|
||||
"manifest" : [
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 10,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : "morgan2.c",
|
||||
"inventory_order" : 20,
|
||||
@@ -49,6 +41,14 @@
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "download entry source"
|
||||
},
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 2000000000,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : ".entry.json",
|
||||
"inventory_order" : 4294967295,
|
||||
|
||||
@@ -244,9 +244,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
|
||||
|
||||
<h1 id="inventory-for-2013morgan2"><a name="inventory"></a>Inventory for
|
||||
2013/morgan2</h1>
|
||||
<p><a href="#top">Jump to top</a></p>
|
||||
<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/2013/morgan2/morgan2.c">morgan2.c</a>
|
||||
- entry source</li>
|
||||
@@ -261,6 +261,7 @@ 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/2013/morgan2/.entry.json">.entry.json</a>
|
||||
- description of entry in JSON</li>
|
||||
|
||||
@@ -9,14 +9,6 @@
|
||||
{ "author_handle" : "Arch_D_Robison" }
|
||||
],
|
||||
"manifest" : [
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 10,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : "robison.c",
|
||||
"inventory_order" : 20,
|
||||
@@ -57,6 +49,14 @@
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "download entry source"
|
||||
},
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 2000000000,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "entry home page"
|
||||
},
|
||||
{
|
||||
"file_path" : ".entry.json",
|
||||
"inventory_order" : 4294967295,
|
||||
|
||||
@@ -223,9 +223,9 @@ https://creativecommons.org/licenses/by-sa/4.0/</p>
|
||||
|
||||
<h1 id="inventory-for-2013robison"><a name="inventory"></a>Inventory for
|
||||
2013/robison</h1>
|
||||
<p><a href="#top">Jump to top</a></p>
|
||||
<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/2013/robison/robison.c">robison.c</a>
|
||||
- entry source</li>
|
||||
@@ -243,6 +243,7 @@ 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/2013/robison/.entry.json">.entry.json</a>
|
||||
- description of entry in JSON</li>
|
||||
|
||||
Reference in new issue
Block a user