Files
ioccc/2024/endoh2/index.html
T
Landon Curt Noll 09750f8899 release winning entries of IOCCC28 under the year 2024
Congratulations to:

* 2024/anders - Prize in sound coding - layered music generator
* 2024/burton - Prize in pentagrammatology - wordle hard mode solver
* 2024/cable1 - Prize in bot talk - LLM inference engine
* 2024/cable2 - Prize in murky waters - salmon recipe
* 2024/carlini - Prize in perfect timing - Intel 4004 emulation
* 2024/codemeow - Prize in tray planting - bonsai generator
* 2024/endoh1 - Prize in patient pointillism - slow ray tracer in CPP
* 2024/endoh2 - Prize in solid body physics - rotating rigid body simulation
* 2024/ferguson1 - Prize in diabolical logistics - Oregon trail pact with the devil
* 2024/ferguson2 - Prize in yil-tas - Navajo code talker translator
* 2024/howe - Nice accent eh-ward - mini vi
* 2024/kramer - Prize in linguistic arithmetic - natural language numerical calculator
* 2024/kurdyukov1 - Prize in phased periodicity - phase of the Moon
* 2024/kurdyukov2 - Prize in art restoration - JPEG artifact removal
* 2024/kurdyukov3 - Prize in virtual quietus - gaming VM and doom
* 2024/kurdyukov4 - Prize in embiggening - encode without literals
* 2024/maffiodo - Prize in creative interpretation - Jav\*script interpreter
* 2024/mills - Prize in ℤ₃ - Infocom v3 story interpreter
* 2024/stedolan - Best one liner - icon from MD5
* 2024/straadt - Prize in imitative rebooting - OpenRISC CPU and Linux
* 2024/tmarrec - Prize in cyclonic coding - 3D tornado simulation
* 2024/tompng - Prize in quasi bijection - vortex encryptor decryptor
* 2024/weaver - Sur prize - rickroll

Ran `make update` to perform the above.
 	new file:   2024/burton/.entry.json
2025-08-02 14:43:07 -07:00

784 lines
31 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>2024/endoh2 - Prize in solid body physics</title>
<link rel="icon" type="image/x-icon" href="../../favicon.ico">
<meta name="description" content="2024 IOCCC entry endoh2 - Prize in solid body physics">
<meta name="keywords" content="IOCCC, 2024, IOCCC 2024, IOCCC entry, endoh2, Prize in solid body physics">
</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: 2024/endoh2/README.md -->
<!-- -->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- !!! Do not modify this web page, instead modify the file: 2024/endoh2/README.md !!! -->
<!-- !!! Do not modify this web page, instead modify the file: 2024/endoh2/README.md !!! -->
<!-- !!! Do not modify this web page, instead modify the file: 2024/endoh2/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">
<a href="../../index.html" class="logo-link">
IOCCC
</a>
</div>
<div class="topbar-items">
<div class="item">
<span class="item-header">
Entries
</span>
<div class="sub-item">
<div class="outfit-font">
<a href="../../years.html" class="sub-item-link">
Winning entries
</a>
</div>
<div class="outfit-font">
<a href="../../authors.html" class="sub-item-link">
Winning authors
</a>
</div>
<div class="outfit-font">
<a href="../../location.html" class="sub-item-link">
Location of authors
</a>
</div>
<div class="outfit-font">
<a href="../../bugs.html" class="sub-item-link">
Bugs and (mis)features
</a>
</div>
<div class="outfit-font">
<a href="../../faq.html#fix_an_entry" class="sub-item-link">
Fixing entries
</a>
</div>
<div class="outfit-font">
<a href="../../faq.html#fix_author" class="sub-item-link">
Updating author info
</a>
</div>
</div>
</div>
<div class="item">
<span class="item-header">
Status
</span>
<div class="sub-item">
<div class="outfit-font">
<a href="../../news.html" class="sub-item-link">
News
</a>
</div>
<div class="outfit-font">
<a href="../../status.html" class="sub-item-link">
Contest status
</a>
</div>
<div class="outfit-font">
<a href="../../next/rules.html" class="sub-item-link">
IOCCC rules
</a>
</div>
<div class="outfit-font">
<a href="../../next/guidelines.html" class="sub-item-link">
IOCCC guidelines
</a>
</div>
<div class="outfit-font">
<a href="../../markdown.html" class="sub-item-link">
Markdown guidelines
</a>
</div>
<div class="outfit-font">
<a href="../../SECURITY.html" class="sub-item-link">
Security policy
</a>
</div>
</div>
</div>
<div class="item">
<span class="item-header">
FAQ
</span>
<div class="sub-item">
<div class="outfit-font">
<a href="../../faq.html" class="sub-item-link">
Frequently asked questions
</a>
</div>
<div class="outfit-font">
<a href="../../quick-start.html#enter" class="sub-item-link">
Enter the IOCCC
</a>
</div>
<div class="outfit-font">
<a href="../../faq.html#compiling" class="sub-item-link">
Compiling entries
</a>
</div>
<div class="outfit-font">
<a href="../../faq.html#running_entries" class="sub-item-link">
Running entries
</a>
</div>
<div class="outfit-font">
<a href="../../faq.html#help" class="sub-item-link">
How to help
</a>
</div>
</div>
</div>
<div class="item">
<span class="item-header">
About
</span>
<div class="sub-item">
<div class="outfit-font">
<a href="../../index.html" class="sub-item-link">
Home page
</a>
</div>
<div class="outfit-font">
<a href="../../social.html" class="sub-item-link">
IOCCC social media
</a>
</div>
<div class="outfit-font">
<a href="../../about.html" class="sub-item-link">
About the IOCCC
</a>
</div>
<div class="outfit-font">
<a href="../../judges.html" class="sub-item-link">
The judges
</a>
</div>
<div class="outfit-font">
<a href="../../thanks-for-help.html" class="sub-item-link">
Thanks for the help
</a>
</div>
<div class="outfit-font">
<a href="../../contact.html" class="sub-item-link">
Contact us
</a>
</div>
</div>
</div>
</div>
</div>
</nav>
<div class="header-mobile-menu">
<noscript>
<a href="../../nojs-menu.html" class="topbar-js-label">
Please Enable JavaScript
</a>
</noscript>
<button id="header-open-menu-button" class="topbar-mobile-menu">
<img
src="../../png/hamburger-icon-open.png"
alt="hamburger style menu icon - open state"
width=48
height=48>
</button>
<button id="header-close-menu-button" class="hide-content">
<img
src="../../png/hamburger-icon-closed.png"
alt="hamburger style menu icon - closed state"
width=48
height=48>
</button>
<div id="mobile-menu-panel" class="hide-content">
<div class="mobile-menu-container">
<div class="mobile-menu-wrapper">
<div class="mobile-menu-item">
Entries
</div>
<div class="mobile-submenu-wrapper">
<a class="mobile-submenu-item" href="../../years.html">
Winning entries
</a>
<a class="mobile-submenu-item" href="../../authors.html">
Winning authors
</a>
<a class="mobile-submenu-item" href="../../location.html">
Location of authors
</a>
<a class="mobile-submenu-item" href="../../bugs.html">
Bugs and (mis)features
</a>
<a class="mobile-submenu-item" href="../../faq.html#fix_an_entry">
Fixing entries
</a>
<a class="mobile-submenu-item" href="../../faq.html#fix_author">
Updating author info
</a>
<a class="mobile-submenu-item" href="../../thanks-for-help.html">
Thanks for the help
</a>
</div>
</div>
<div class="mobile-menu-wrapper">
<div class="mobile-menu-item">
Status
</div>
<div class="mobile-submenu-wrapper">
<a class="mobile-submenu-item" href="../../news.html">
News
</a>
<a class="mobile-submenu-item" href="../../status.html">
Contest status
</a>
<a class="mobile-submenu-item" href="../../next/rules.html">
IOCCC rules
</a>
<a class="mobile-submenu-item" href="../../next/guidelines.html">
IOCCC guidelines
</a>
<a class="mobile-submenu-item" href="../../markdown.html">
Markdown guidelines
</a>
<a class="mobile-submenu-item" href="../../SECURITY.html">
Security policy
</a>
</div>
</div>
<div class="mobile-menu-wrapper">
<div class="mobile-menu-item">
FAQ
</div>
<div class="mobile-submenu-wrapper">
<a class="mobile-submenu-item" href="../../faq.html">
Frequently asked questions
</a>
<a class="mobile-submenu-item" href="../../quick-start.html#enter">
Enter the IOCCC
</a>
<a class="mobile-submenu-item" href="../../faq.html#compiling">
Compiling entries
</a>
<a class="mobile-submenu-item" href="../../faq.html#running_entries">
Running entries
</a>
<a class="mobile-submenu-item" href="../../faq.html#help">
How to help
</a>
</div>
</div>
<div class="mobile-menu-wrapper">
<div class="mobile-menu-item">
About
</div>
<div class="mobile-submenu-wrapper">
<a class="mobile-submenu-item" href="../../index.html">
Home page
</a>
<a class="mobile-submenu-item" href="../../social.html">
IOCCC social media
</a>
<a class="mobile-submenu-item" href="../../about.html">
About the IOCCC
</a>
<a class="mobile-submenu-item" href="../../judges.html">
The judges
</a>
<a class="mobile-submenu-item" href="../../contact.html">
Contact us
</a>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
var headerOpenMenuButton = document.getElementById("header-open-menu-button");
var headerCloseMenuButton = document.getElementById("header-close-menu-button");
var mobileMenuPanel = document.getElementById("mobile-menu-panel");
headerOpenMenuButton.addEventListener("click", () => {
headerOpenMenuButton.classList.remove("topbar-mobile-menu");
headerOpenMenuButton.classList.add("hide-content");
headerCloseMenuButton.classList.remove("hide-content");
headerCloseMenuButton.classList.add("topbar-mobile-menu");
mobileMenuPanel.classList.remove("hide-content");
mobileMenuPanel.classList.add("topbar-mobile-panel");
});
headerCloseMenuButton.addEventListener("click", () => {
headerCloseMenuButton.classList.remove("topbar-mobile-menu");
headerCloseMenuButton.classList.add("hide-content");
mobileMenuPanel.classList.add("hide-content");
mobileMenuPanel.classList.remove("topbar-mobile-panel");
headerOpenMenuButton.classList.add("topbar-mobile-menu");
headerOpenMenuButton.classList.remove("hide-content");
});
</script>
<!-- END: this line ends content from: inc/topbar.default.html -->
<!-- START: this line starts content from: inc/header.default.html -->
<div class="header">
<a href="../../2011/zucker/index.html">
<img src="../../png/ioccc.png"
alt="IOCCC image by Matt Zucker"
width=300
height=110>
</a>
<h1>The International Obfuscated C Code Contest</h1>
<h2>2024/endoh2 - Prize in solid body physics</h2>
<h3>rotating rigid body simulation</h3>
</div>
<!-- END: this line ends content from: inc/header.default.html -->
<!-- START: this line starts content from: inc/navbar.mid.html -->
<div class="navbar">
<a class="Left" href="../endoh1/index.html">&larr; 2024/endoh1</a>
<a class="Left" href="../index.html">&uarr; 2024 &uarr;</a>
<a class="Left" href="../ferguson1/index.html">2024/ferguson1 &rarr;</a>
<a class="Right" href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/prog.c">C code</a>
<a class="Right" href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/Makefile">Makefile</a>
<a class="Right" href="#inventory">Inventory</a>
<a class="Right" href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fwww.ioccc.org%2F2024%2Fendoh2%2Findex.html">&#x2713;</a>
</div>
<!-- END: this line ends content from: inc/navbar.mid.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#Yusuke_Endoh">Yusuke Endoh</a><br>
Location: <a href="../../location.html#JP">JP</a> - <em>Japan</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: 2024/endoh2/README.md -->
<h2 id="to-build">To build:</h2>
<pre><code> make all</code></pre>
<h2 id="to-use">To use:</h2>
<pre><code> ./prog &lt; body.txt</code></pre>
<h2 id="try">Try:</h2>
<pre><code> ./try.sh</code></pre>
<h2 id="judges-remarks">Judges’ remarks:</h2>
<p>Playing with this entry, we were able to experience joy akin to
<a href="https://repository.aip.org/wolfgang-pauli-and-niels-bohr-demonstrating-tippe-top-toy">what Niels Bohr and Wolfgang Pauli could have experienced when they played with the Tippe-Top</a>.</p>
<p>We invite you to experiment beyond the <a href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/try.sh">try.sh</a>, and test with these “<em>body.txt</em>” files:</p>
<ul>
<li>bottle.txt</li>
<li>cylinder.txt</li>
<li>egg.txt</li>
<li>halo.txt</li>
<li>stick.txt</li>
<li>tippe-top.txt</li>
<li>tippe-top2.txt</li>
<li>tippe-top3.txt</li>
<li>top.txt</li>
<li>top2.txt</li>
<li>top3.txt</li>
<li>top4.txt</li>
<li>umbrella.txt</li>
<li>vase.txt</li>
</ul>
<p>For example:</p>
<pre><code> ./prog &lt; vase.txt</code></pre>
<p>Moreover, you should experiment with various simulation parameters. On the make line you may set:</p>
<pre><code> | Perameter | Default | Meaning
|-------------|-----------------------------------------------------|
| WIDTH | 120 | Screen width |
| | | |
| HEIGHT | 24 | Screen height |
| | | |
| TIMESTEP | 0.01 | Simulation time step |
| | | a smaller dt |
| | | increases precision |
| | | down the simulation |
| | | |
| RESTITUTION | 0.5 | Coefficient of restitution |
| | | |
| FRICTION | 0.5 | Coefficient of friction |
| | | |
| RPM | 750 | Initial rotation speed in RPM |
| | | |
| FASTRPM | 4000 | Tipple top initial rotation speed in RPM |
| | | used by ./tipple, not ./prog |
| | | |
| TILT | 5 | Initial tilt angle |
| | | in degrees |
| | | 0 is upright |
| | | positive values tilt to the right |</code></pre>
<p>For example, to increase the “<em>Coefficient of friction</em>” to <strong>0.75</strong>,
the “<em>Initial rotation speed in RPM</em>” to <strong>600</strong>, and the “<em>Initial
tilt angle</em>” to <strong>15</strong>:</p>
<pre><code> make clobber all FRICTION=0.75 RPM=600 TILT=15
./prog &lt; top.txt</code></pre>
<p>Now we would like to see if this entry can be hacked to demonstrate the
<a href="https://en.wikipedia.org/wiki/Tennis_racket_theorem">Dzhanibekov effect</a>.</p>
<h2 id="authors-remarks">Author’s remarks:</h2>
<h3 id="a-spinning-top-simulator">A Spinning Top Simulator</h3>
<pre><code> @@
@@
@@@@@@@@@@@@
@@ @@@@@@@@@@@@@@@@
@@@@ @@@@@@@@@@@@@@@@
@@@@@@@ @@@@@@@@@@@ @
@@@@@@@@@@@ @@@
@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@
@@@@@@@@@
@@@@
@@
@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@</code></pre>
<p>This is a physics engine that simulates the motion of a rotating rigid body, such as a <a href="https://en.wikipedia.org/wiki/Top">top</a>.</p>
<h4 id="how-to-run">How to run</h4>
<p>Compilation requires specifying several <code>-D</code> options:</p>
<pre><code>$ gcc -O3 -DW=120 -DH=24 -Ddt=0.01 -De=0.5 -Du=0.5 -Drpm=1000 -Dtilt=5 -o prog prog.c</code></pre>
<p>These options define the following parameters:</p>
<ul>
<li><code>-DW=120</code>: Screen width.</li>
<li><code>-DH=24</code>: Screen height.</li>
<li><code>-Ddt=0.01</code>: Simulation time step (a smaller <code>dt</code> increases precision but slows down the simulation).</li>
<li><code>-De=0.5</code>: Coefficient of restitution.</li>
<li><code>-Du=0.5</code>: Coefficient of friction.</li>
<li><code>-Drpm=1000</code>: Initial rotation speed (in RPM).</li>
<li><code>-Dtilt=5</code>: Initial tilt angle (in degrees; 0 is upright; positive values tilt to the right).</li>
</ul>
<p>Then, run the program like this:</p>
<pre><code>$ ./prog &lt; top.txt</code></pre>
<h4 id="input-file-format">Input file format</h4>
<p>The input file defines the shape of a rigid body. Here’s an example:</p>
<pre><code>// A typical spinning top
// Use `-Drpm=1000 -Dtilt=5`
.
.
. // Twirl here
.
.
.
...
#####
##
# // Spin!
##
#####
..
.
.
. // Looks painful</code></pre>
<p>This figure is rotated around its left edge to create a 3D object (a solid of revolution).
Only solids of revolution are supported by this simulator.</p>
<p>Internally, the rigid body is modeled as a collection of particles (point masses). Each character in the input file has the following meaning:</p>
<ul>
<li>A full-stop (or any printable character whose LSB is 0): Represents light particle.</li>
<li>A hash (or any character whose LSB is 1): Represents heavy particle.</li>
<li>A space: Represents no particle (empty space).</li>
<li>A slash: Indicates the start of a comment; everything after it on the line is ignored.</li>
</ul>
<h4 id="algorithm-overview">Algorithm overview</h4>
<p>The core algorithm works as follows:</p>
<ol type="1">
<li>Compute the inertia tensor</li>
<li>Compute an inverse of the tensor</li>
<li>For each particle in contact with the floor:
3-1. Compute the normal force
3-2. Compute friction
3-3. Convert these into the resultant force and torque acting on the body’s center of mass</li>
<li>Update the position, velocity, angular velocity, and orientation of the body</li>
</ol>
<p>For the detailed theory, refer to a physics textbook.</p>
<p>To keep code size minimal, this simulator uses <a href="https://en.wikipedia.org/wiki/Quaternion">quaternions</a> to represent 3D vectors and matrices.
Quaternion multiplication is powerful, allowing the inertia tensor and its inverse to be calculated concisely, each requiring only about 100 characters of code.
Because <code>math.h</code> doesn’t natively support quaternions for these operations, it’s not used at all. This also means linking with <code>-lm</code> is unnecessary.</p>
<p>Motion blur is used in the rendering. You can observe it more clearly by pausing the animation (e.g., with Ctrl+S in some terminals).</p>
<p>Distant points appear as colons (<code>:</code>), while closer ones appear as at-signs (<code>@</code>).</p>
<h4 id="included-data">Included data</h4>
<p>A few shape files are provided. The top*.txt files are standard spinning top shapes.</p>
<pre><code>$ gcc -O3 -DW=120 -DH=24 -Ddt=0.01 -De=0.5 -Du=0.5 -Drpm=1000 -Dtilt=5 -o prog prog.c &amp;&amp; ./prog &lt; top.txt
$ gcc -O3 -DW=120 -DH=24 -Ddt=0.01 -De=0.5 -Du=0.5 -Drpm=500 -Dtilt=5 -o prog prog.c &amp;&amp; ./prog &lt; top2.txt
$ gcc -O3 -DW=120 -DH=24 -Ddt=0.01 -De=0.5 -Du=0.5 -Drpm=500 -Dtilt=5 -o prog prog.c &amp;&amp; ./prog &lt; top3.txt
$ gcc -O3 -DW=120 -DH=24 -Ddt=0.01 -De=0.5 -Du=0.5 -Drpm=500 -Dtilt=5 -o prog prog.c &amp;&amp; ./prog &lt; top4.txt</code></pre>
<p>The <a href="https://en.wikipedia.org/wiki/Tippe_top">tippe top</a> is a top that flips itself over when spun quickly.</p>
<pre><code>$ gcc -O3 -DW=120 -DH=24 -Ddt=0.01 -De=0.5 -Du=0.5 -Drpm=2200 -Dtilt=5 -o prog prog.c &amp;&amp; ./prog &lt; tippe-top.txt
$ gcc -O3 -DW=120 -DH=24 -Ddt=0.01 -De=0.5 -Du=0.5 -Drpm=4000 -Dtilt=5 -o prog prog.c &amp;&amp; ./prog &lt; tippe-top2.txt
$ gcc -O3 -DW=120 -DH=24 -Ddt=0.01 -De=0.5 -Du=0.5 -Drpm=4000 -Dtilt=5 -o prog prog.c &amp;&amp; ./prog &lt; tippe-top3.txt</code></pre>
<p>Spinning a boiled egg? Try this with <code>-Dtilt=90</code> to start it from a lying position.</p>
<pre><code>$ gcc -O3 -DW=120 -DH=24 -Ddt=0.01 -De=0.5 -Du=0.5 -Drpm=1300 -Dtilt=90 -o prog prog.c &amp;&amp; ./prog &lt; egg.txt</code></pre>
<p>Spin everyday items – no risk of breaking them:</p>
<pre><code>$ gcc -O3 -DW=120 -DH=24 -Ddt=0.01 -De=0.5 -Du=0.5 -Drpm=1000 -Dtilt=175 -o prog prog.c &amp;&amp; ./prog &lt; bottle.txt
$ gcc -O3 -DW=120 -DH=24 -Ddt=0.01 -De=0.5 -Du=0.5 -Drpm=1000 -Dtilt=5 -o prog prog.c &amp;&amp; ./prog &lt; bottle.txt
$ gcc -O3 -DW=120 -DH=24 -Ddt=0.01 -De=0.5 -Du=0.5 -Drpm=1000 -Dtilt=5 -o prog prog.c &amp;&amp; ./prog &lt; umbrella.txt
$ gcc -O3 -DW=120 -DH=24 -Ddt=0.01 -De=0.5 -Du=0.5 -Drpm=2000 -Dtilt=5 -o prog prog.c &amp;&amp; ./prog &lt; vase.txt
$ gcc -O3 -DW=120 -DH=24 -Ddt=0.01 -De=0.5 -Du=0.5 -Drpm=2000 -Dtilt=20 -o prog prog.c &amp;&amp; ./prog &lt; vase.txt</code></pre>
<p>More shapes: <code>stick.txt</code>, <code>cylinder.txt</code>, <code>halo.txt</code>, and even <code>prog.c</code>.</p>
<p>Yes, <code>prog.c</code> itself can be used as input. Try it:</p>
<pre><code>$ gcc -O3 -DW=120 -DH=24 -Ddt=0.01 -De=0.5 -Du=0.5 -Drpm=1000 -Dtilt=5 -o prog prog.c &amp;&amp; ./prog &lt; prog.c</code></pre>
<!--
Copyright © 1984-2025 by Landon Curt Noll and Leonid A. Broukhis. 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: 2024/endoh2/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-2024endoh2">Inventory for 2024/endoh2</h1>
</div>
<h2 id="primary-files">Primary files</h2>
<ul>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/prog.c">prog.c</a> - entry source code</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/Makefile">Makefile</a> - entry Makefile</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/prog.orig.c">prog.orig.c</a> - original source code</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/bottle.txt">bottle.txt</a> - 1/2 of a wine bottle</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/cylinder.txt">cylinder.txt</a> - 1/2 of a cylinder</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/egg.txt">egg.txt</a> - 1/2 of an egg</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/halo.txt">halo.txt</a> - 1/2 of a halo</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/stick.txt">stick.txt</a> - 1/2 of a stick</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/tippe-top2.txt">tippe-top2.txt</a> - 1/2 of a tippe top style 2</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/tippe-top3.txt">tippe-top3.txt</a> - 1/2 of a tippe top style 3</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/tippe-top.txt">tippe-top.txt</a> - 1/2 of a tippe top style 1</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/top2.txt">top2.txt</a> - 1/2 of a classic top style 2</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/top3.txt">top3.txt</a> - 1/2 of a classic top style 3</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/top4.txt">top4.txt</a> - 1/2 of a classic top style 4</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/top.txt">top.txt</a> - 1/2 of a classic top style 1</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/try.sh">try.sh</a> - script to try entry</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/umbrella.txt">umbrella.txt</a> - 1/2 of an umbrella</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/vase.txt">vase.txt</a> - 1/2 of a flower vase</li>
</ul>
<h2 id="secondary-files">Secondary files</h2>
<ul>
<li><a href="2024_endoh2.tar.bz2">2024_endoh2.tar.bz2</a> - download entry tarball</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/README.md">README.md</a> - markdown source for this web page</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/.entry.json">.entry.json</a> - entry summary and manifest in JSON</li>
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/endoh2/.gitignore">.gitignore</a> - list of files that should not be committed under git</li>
<li><a href=".path">.path</a> - directory path from top level directory</li>
<li><a href="index.html">index.html</a> - this web page</li>
</ul>
<hr style="width:10%;text-align:left;margin-left:0">
<h4>
Jump to: <a href="#">top</a>
</h4>
<!-- 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.inventory.html -->
<!--
Copyright © 1984-2025 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"><h3>Copyright &copy; 1984-2025 by Landon Curt Noll:
<a href="https://creativecommons.org/faq/#what-does-some-rights-reserved-mean"
target="_blank"
rel="license noopener noreferrer">Some Rights Reserved</a></h3>
<p>
This work is <b>licensed by Landon Curt Noll</b> under
<b><a href="https://creativecommons.org/licenses/by-sa/4.0/?ref=chooser-v1"
target="_blank"
rel="license noopener noreferrer"
style="display:inline-block;">CC BY-SA 4.0</a></b>.
<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"><br>
You should <b>carefully review</b> the
<b><a href="https://creativecommons.org/licenses/by-sa/4.0/legalcode.en"
target="_blank"
rel="license noopener noreferrer">CC BY-SA 4.0 LEGAL CODE</a></b>
before using the licensed material.<br>
You may wish to review the
<b><a href="../../license.html"
target="_blank"
rel="license noopener noreferrer">highlights of some of the key features and terms</a></b>
of <b>CC BY-SA 4.0</b>.<br>
</p>
</div>
<div id="coda"><h3>Coda</h3>
<p>
<a href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fwww.ioccc.org%2F2024%2Fendoh2%2Findex.html" rel="nofollow">Nu HTML check this web page</a><br>
<a href="#top">Jump to top</a> <a href="#content">Jump to Content</a> <a href="#inventory">Jump to Inventory</a><br>
</p>
</div>
</div>
<!-- END: this line ends content from: inc/footer.inventory.html -->
<!-- START: this line starts content from: inc/bottom.default.html -->
</body>
</html>
<!-- END: this line ends content from: inc/bottom.default.html -->