Instead of code blocks the bug / (mis)features statuses are quoted rather than in a code block. In the case that there is more than one a line break was added at the end of all but the last one. A bug status was renamed to be slightly more correct (maybe more than one was renamed for the same purpose but at least one was). The bug statuses in the quotes are now bold to let them stand out better.
716 lines
29 KiB
HTML
716 lines
29 KiB
HTML
<!DOCTYPE html>
|
||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||
<!-- START: two lines up starts content from: inc/top.default.html -->
|
||
|
||
<!-- 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>2006/monge - Best compiled graphics</title>
|
||
<link rel="icon" type="image/x-icon" href="../../favicon.ico">
|
||
<meta name="description" content="2006 IOCCC entry monge - Best compiled graphics">
|
||
<meta name="keywords" content="IOCCC, 2006, IOCCC 2006, IOCCC entry, monge, Best compiled graphics">
|
||
</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: 2006/monge/README.md -->
|
||
<!-- -->
|
||
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 2006/monge/README.md !!! -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 2006/monge/README.md !!! -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 2006/monge/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 winning authors
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../bugs.html" class="sub-item-link">
|
||
Bugs and (mis)features
|
||
</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">
|
||
IOCCC 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/index.html" class="sub-item-link">
|
||
Rules and Guidelines
|
||
</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">
|
||
FAQ
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../faq.html#submit" class="sub-item-link">
|
||
How to enter the IOCCC
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../faq.html#fix_an_entry" class="sub-item-link">
|
||
Fixing IOCCC entries
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../faq.html#fix_web_site" class="sub-item-link">
|
||
Fixing the website
|
||
</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">
|
||
About
|
||
</span>
|
||
|
||
<div class="sub-item">
|
||
<div class="outfit-font">
|
||
<a href="../../index.html" class="sub-item-link">
|
||
IOCCC Home
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../judges.html" class="sub-item-link">
|
||
The IOCCC Judges
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../contact.html" class="sub-item-link">
|
||
Contacting the IOCCC
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../SECURITY.html" class="sub-item-link">
|
||
IOCCC Security Policy
|
||
</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="../../markdown.html" class="sub-item-link">
|
||
IOCCC markdown guidelines
|
||
</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">
|
||
Authors of winning IOCCC entries
|
||
</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>
|
||
|
||
</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="../../status.html">
|
||
Contest status
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../next/index.html">
|
||
Rules and Guidelines
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../news.html">
|
||
IOCCC News
|
||
</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="../../faq.html#submit">
|
||
How to enter the IOCCC
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../faq.html#fix_an_entry">
|
||
Fixing IOCCC entries
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../faq.html#fix_web_site">
|
||
Fixing the website
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../faq.html#fix_author">
|
||
Fixing author info
|
||
</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">
|
||
IOCCC Home
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../judges.html">
|
||
The IOCCC Judges
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../contact.html">
|
||
Contacting the IOCCC
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../thanks-for-help.html">
|
||
Thanks for the help
|
||
</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>2006/monge - Best compiled graphics</h2>
|
||
</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="../meyer/index.html">← meyer</a>
|
||
<a class="Left" href="../index.html">↑ 2006 ↑</a>
|
||
<a class="Left" href="../night/index.html">night →</a>
|
||
<a class="Right" href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/monge.c">C code</a>
|
||
<a class="Right" href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/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%2F2006%2Fmonge%2Findex.html">✓</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#Maurizio_Monge">Maurizio Monge</a><br>
|
||
Location: <a href="../../location.html#IT">IT</a> - <em>Italian Republic</em> (<em>Italy</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: 2006/monge/README.md -->
|
||
<h2 id="to-build">To build:</h2>
|
||
<p>Make sure you have the SDL1 (not SDL2!) development environment installed.</p>
|
||
<pre><code> make</code></pre>
|
||
<p>There is alternate version that lets you redefine the width and height and number
|
||
of iterations to use. See <a href="#alternate-code">Alternate code</a> below.</p>
|
||
<h3 id="bugs-and-misfeatures">Bugs and (Mis)features:</h3>
|
||
<p>The current status of this entry is:</p>
|
||
<blockquote>
|
||
<p><strong>STATUS: doesn’t work with some platforms - please help us fix it</strong><br>
|
||
<strong>STATUS: INABIAF - please DO NOT fix</strong></p>
|
||
</blockquote>
|
||
<p>For more detailed information see <a href="../../bugs.html#2006_monge">2006/monge in bugs.html</a>.</p>
|
||
<h2 id="to-use">To use:</h2>
|
||
<pre><code> ./monge expression ...</code></pre>
|
||
<p>Incorrect formulas will ungracefully crash the program.</p>
|
||
<h2 id="try">Try:</h2>
|
||
<pre><code> ./try.sh</code></pre>
|
||
<h2 id="alternate-code">Alternate code:</h2>
|
||
<p>This alternate code lets you specify the width and height of the image as well
|
||
as the number of iterations to perform.</p>
|
||
<h3 id="alternate-build">Alternate build:</h3>
|
||
<p>To use the default values, the same as <a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/monge.c">monge.c</a>, just do:</p>
|
||
<pre><code> make alt</code></pre>
|
||
<p>But if you wish to actually make use of it you will want to redefine one or more
|
||
of the variables <code>W</code>, <code>H</code> and <code>I</code>. The defaults are (respectively) 400, 300 and
|
||
\128. If you wish to change the image size to 500x500 but keep the iterations
|
||
the same then do:</p>
|
||
<pre><code> make clobber WIDTH=500 HEIGHT=500 alt</code></pre>
|
||
<p>If you wish to keep the dimensions the same but change the iterations to 512:</p>
|
||
<pre><code> make clobber ITERATIONS=512 alt</code></pre>
|
||
<p>If you specify a value less than 1 for any of these it sets it back to the
|
||
default. The value 1 was selected arbitrarily and such a small number as 1 will
|
||
not do anything useful but as long as it’s at least 1 it’ll not be redefined.
|
||
It does not try taking care of overflows but such large values would be impractical
|
||
anyway.</p>
|
||
<h3 id="alternate-use">Alternate use:</h3>
|
||
<p>Use <code>monge.alt</code> exactly as you would <code>monge</code> above.</p>
|
||
<h3 id="alternate-try">Alternate try:</h3>
|
||
<pre><code> ./try.alt.sh</code></pre>
|
||
<h2 id="judges-remarks">Judges’ remarks:</h2>
|
||
<p>For those who are familiar with the previous <a href="../../authors.html">IOCCC entries</a>,
|
||
this program is best described as “<a href="../../1994/tvr/index.html">1994/tvr</a> meets
|
||
<a href="../../2001/bellard/index.html">2001/bellard</a>”. Here you have mouse-manipulated
|
||
fractals AND generated binary code, all in one package.</p>
|
||
<p>A more appropriate award could have been “Best abuse of the
|
||
rules”, because on a non-x86-based architecture this program
|
||
is, quite predictably, a dud.</p>
|
||
<p>At the time of judging we were too mesmerized by the graphics
|
||
to realize it; and, after all, this entry does take a special
|
||
effort to work on both <code>i386</code> and <code>x86_64</code>. Portable it is! :)</p>
|
||
<h2 id="authors-remarks">Author’s remarks:</h2>
|
||
<h3 id="for-the-impatient">For the impatient:</h3>
|
||
<ol start="0" type="1">
|
||
<li>Compile using the Makefile, or just run:</li>
|
||
</ol>
|
||
<pre><code> gcc monge.c -o monge -O3 `sdl-config --libs --cflags`</code></pre>
|
||
<ol type="1">
|
||
<li>Run:</li>
|
||
</ol>
|
||
<pre><code> ./monge "z = 0" "z = z*z + c; Abs2(z) < 4"</code></pre>
|
||
<ol start="2" type="1">
|
||
<li><p>Keep clicking with left or right button to zoom in or out.</p></li>
|
||
<li><p>Use the number pad <code>+</code> and <code>-</code> to increase/decrease the iteration count when
|
||
needed.</p></li>
|
||
<li><p>Enjoy, unless you’re more interested in trying to understand how it works. :)</p></li>
|
||
</ol>
|
||
<h3 id="introduction">Introduction</h3>
|
||
<p>This is a fractal generator that supports custom formulas and real time zoom.
|
||
The program needs to be run with two arguments, the first being a semicolon
|
||
separated list of assignments to do once per pixel, and the second a semicolon
|
||
separated list of assignments and conditions that will be executed (and
|
||
conditions checked) for each iteration (up to the maximum). Using the left and
|
||
right mouse buttons you will be able to zoom in and out (a la
|
||
<a href="https://github.com/xaos-project/XaoS">XaoS</a> project), the zooming algorithm is a bit
|
||
slower than <code>XaoS</code>’s but it should give slightly better results.</p>
|
||
<p>Formulas can use all <code>a-z</code> (lowercase) variables, and the special
|
||
variables <code>c</code> and <code>i</code> are respectively set by default to the
|
||
complex coordinate of the pixel and to the complex imaginary <code>i</code>.</p>
|
||
<p>All the constant numbers will be interpreted as real double values. Each
|
||
expression must be an assignment (<code>[variable] = [expr]</code>) or a comparison with
|
||
<code><</code> or <code>></code> (<code>[expr1] < [expr2]</code> or <code>[expr1] > [expr2]</code>), and you can add spaces
|
||
as you like (as understood by the C function <code>isspace()</code>).</p>
|
||
<p>Supported operations and functions are:</p>
|
||
<pre><code> Operation | Description
|
||
|
||
+,-,*,/ | Arithmetic operations, priority of * , / over +,- is respected.
|
||
<,> | Compares the real parts of two complex numbers (the imaginary part
|
||
| is ignored). Any number of conditions is allowed, the iteration will
|
||
| just stop as soon as one of them fails.
|
||
Abs2 | Calculates the squared norm, i.e.: Abs2(a+b*i) is (a*a+b*b)+0*i.
|
||
Re | Extract the real part, i.e.: Re(a+b*i) is a+0*i.
|
||
Im | Extract the imaginary part, i.e.: Im(a+b*i) is b+0*i.
|
||
Exp | Calculates the complex exponential, i.e. Exp(a+b*i) is e^a*(cos(b)+sin(b)*i).
|
||
Ln | Calculates the principal value of the natural logarithm
|
||
| i.e. Ln(a+b*i) is ln(a*a+b*b)/2 + atan(b/a)*i.</code></pre>
|
||
<p>Here are a few examples of fractals you can draw:</p>
|
||
<ul>
|
||
<li>Mandelbrot:</li>
|
||
</ul>
|
||
<pre><code> ./monge "z=1" "z=z*z+c; Abs2(z)<4"</code></pre>
|
||
<ul>
|
||
<li>Mandelbrot (return time variation):</li>
|
||
</ul>
|
||
<pre><code> ./monge "z=c" "z=z*z+c; Abs2(z-c)>0.0001"</code></pre>
|
||
<ul>
|
||
<li>Julia, for <code>c=0.31+i*0.5</code>:</li>
|
||
</ul>
|
||
<pre><code> ./monge "z=c; c=0.31+i*0.5" "z=z*z+c; Abs2(z)<4"</code></pre>
|
||
<ul>
|
||
<li>Julia (return time variation), <code>for c=0.31+i*0.5</code>:</li>
|
||
</ul>
|
||
<pre><code> ./monge "z=c; c=0.31+i*0.5" "z=z*z+c; Abs2(z-c)>0.0001"</code></pre>
|
||
<ul>
|
||
<li>Newton, for <code>x^3-1</code>:</li>
|
||
</ul>
|
||
<pre><code> ./monge "z=c" "p=z; z=0.6666*z+0.3333/(z*z); Abs2(p-z) > 0.001"</code></pre>
|
||
<ul>
|
||
<li>Newton-Mandelbrot:</li>
|
||
</ul>
|
||
<pre><code> ./monge "z=0" "p=z; z=z-(z*z*z + (c-1)*z - c)/(3*z*z+c-1); Abs2(p-z) > 0.001"</code></pre>
|
||
<ul>
|
||
<li>Phoenix, Mandelbrot version:</li>
|
||
</ul>
|
||
<pre><code> ./monge "z=0; q=0" "t=z; z=z*z+Re(c)+Im(c)*q; q=t; Abs2(z)<4"</code></pre>
|
||
<ul>
|
||
<li>Phoenix, Julia version for <code>c=0.56667-i*0.5</code>:</li>
|
||
</ul>
|
||
<pre><code> ./monge "z=c; c=0.56667-i*0.5; q=0" "t=z; z=z*z+Re(c)+Im(c)*q; q=t; Abs2(z)<4"</code></pre>
|
||
<h3 id="compilation-and-portability">Compilation and portability</h3>
|
||
<p>This program will only work on x86 (with an x87 FPU) or x86_64 machines,
|
||
but it requires the SDL library.</p>
|
||
<p>Another system requirement is the <code>mmap(2)</code> function (as <code>#define</code>d at the
|
||
beginning of the program). If it is not available the macro <code>M(a)</code> will have to
|
||
be replaced with a system dependent function that allocates readable, writable
|
||
<em>AND</em> executable memory (it will not be possible to make this program run on
|
||
paranoid systems (like OpenBSD IIRC) that do not allow <code>rwx</code> memory).</p>
|
||
<p>However I was able to compile and make work the program under
|
||
Linux (Debian/x86 and openSUSE/x86_64) and under Cygwin/x86. A
|
||
friend of mine was able to make it work under macOS too.</p>
|
||
<p>If you want you can change the window width and height, or the default
|
||
number of iterations (that one can be tweaked at runtime, anyway) by
|
||
changing the definitions of <code>W</code>, <code>H</code> and <code>I</code> at the beginning of the code.</p>
|
||
<h3 id="caveats-i-just-a-selected-few-of-them">Caveats (I just a selected few of them!)</h3>
|
||
<ul>
|
||
<li>The zooming speed depends on the speed of the computer.</li>
|
||
<li>Incorrect formulas will ungracefully crash the program.</li>
|
||
<li>Many SDL identifiers are hardcoded as number, this is safe up to ABI
|
||
incompatibility.</li>
|
||
<li>Better optimization could be done treating known real numbers as just one
|
||
<code>double</code>, instead of adding a 0 imaginary part to treat them as complex
|
||
numbers.</li>
|
||
<li>There should be some way to switch from Mandelbrot to Julia with chosen
|
||
parameter.</li>
|
||
</ul>
|
||
<h3 id="notice-to-those-who-wish-for-a-greater-challenge">NOTICE to those who wish for a greater challenge:</h3>
|
||
<p><strong>If you want a greater challenge, don’t read any further</strong>:
|
||
just try to understand the program via the source.</p>
|
||
<p>If you get stuck, come back and read below for additional hints and information.</p>
|
||
<h3 id="obfuscation">Obfuscation</h3>
|
||
<p>Sure, I don’t want to deprive you of the pleasure of digging
|
||
into the infernal mess created by my corrupted mind (writing
|
||
this remark I noticed that I was ending sentences with ‘;’ instead
|
||
of with ‘.’, and I worried for my sanity), but just in case…</p>
|
||
<p>I used many obfuscation techniques, including a few ones that
|
||
are different from the tricks used in most common IOCCC program
|
||
(more ‘high level’, in the sense that they require an understanding
|
||
of how all the program works to be worked out).</p>
|
||
<p>This program is a formula parser that outputs machine code that
|
||
calculates the formula and check the given conditions. The
|
||
machine code targets the <code>x87</code> stack based
|
||
<a href="https://en.wikipedia.org/wiki/Floating-point_unit">FPU</a>, and it is almost
|
||
identical for <code>x86</code> and <code>x86_64</code> (except for the comparison
|
||
instructions, that have to be generated differently). The
|
||
program keeps track of the FPU stack (the FPU has a cyclic stack
|
||
of 8 registers) and will automatically swap to and from the
|
||
main memory when required (i.e., adds instructions to the generated
|
||
machine code to take care of this issue).</p>
|
||
<p>The formulas are parsed recursively and machine code for the
|
||
inner iteration loop is also generated.</p>
|
||
<p>After generating the machine code, a big event loop creates (or
|
||
zooms into) the fractal executing the generated code when needed,
|
||
and then waits for input events.</p>
|
||
<p>The zooming algorithm works by remembering for each pixel the
|
||
floating point offset to where the value was actually calculated.
|
||
When zooming, the best match is searched, and if the offset is
|
||
too big (<code>>1</code>) the pixel is recalculated.</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: 2006/monge/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-2006monge">Inventory for 2006/monge</h1>
|
||
</div>
|
||
<h2 id="primary-files">Primary files</h2>
|
||
<ul>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/monge.c">monge.c</a> - entry source code</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/Makefile">Makefile</a> - entry Makefile</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/monge.alt.c">monge.alt.c</a> - alternate source code</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/monge.orig.c">monge.orig.c</a> - original source code</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/try.alt.sh">try.alt.sh</a> - script to try alternate code</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/try.sh">try.sh</a> - script to try entry</li>
|
||
</ul>
|
||
<h2 id="secondary-files">Secondary files</h2>
|
||
<ul>
|
||
<li><a href="2006_monge.tar.bz2">2006_monge.tar.bz2</a> - download entry tarball</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/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/2006/monge/.entry.json">.entry.json</a> - entry summary and manifest in JSON</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2006/monge/.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/2006/monge/.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-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"><h3>Copyright © 1984-2024 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%2Fioccc-src.github.io%2Ftemp-test-ioccc%2F2006%2Fmonge%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 -->
|