We rewrote the `bin/tar-entry.sh` algorithm so that we do NOT have to require Linux to produce a compressed tarball that is byte-for-byte identical to a macOS compressed tarball for the same entry. Changed `bin/tar-entry.sh` VERSION from "1.2 2024-03-22" to "1.3 2024-03-25". Added `bin/untar-entry.sh` to untar an entry from the compressed tarball. Added `make untar_entry_tarball` to untar all entry files. Added `make untar_year_tarball` and `make untar_all_tarball` stub Makefile rules. The core it referred to does not yet exist. Updated IOCCC manifest. Updated `.entry.json` for `2004/sds`. Performed `make www` to update web pages. In most cases the entry `index.html` added an inventory link for the new `.tar.tstamp` file. Performed `form_entry_tarball` to complete the test of the above. TODO: Test the results under Linux. TODO: Update `bin/tar-year.sh`. Update year level compressed tarballs. TODO: Update `bin/tar-all.sh`. Update top level compressed tarball. TODO: Write `bin/untar-year.sh` and `bin/untar-all.sh`.
354 lines
19 KiB
HTML
354 lines
19 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 -->
|
||
<!-- -->
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- !!! 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 -->
|
||
<!-- -->
|
||
<!-- This web page was formed via the tool: bin/readme2index.sh -->
|
||
<!-- -->
|
||
<!-- The content of main section of this web page came from: 2005/giljade/README.md -->
|
||
<!-- -->
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 2005/giljade/README.md -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 2005/giljade/README.md -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 2005/giljade/README.md -->
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- -->
|
||
<!-- Markdown content was converted into HTML via 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>2005/giljade - Best 2D puzzle</title>
|
||
<meta name="description" content="2005 IOCCC entry giljade - Best 2D puzzle">
|
||
<meta name="keywords" content="IOCCC, 2005, IOCCC 2005, IOCCC entry, giljade, Best 2D puzzle">
|
||
</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>2005/giljade - Best 2D puzzle</h2>
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/header.default.html -->
|
||
<!-- START: this line starts content from: inc/topnav.mid.html -->
|
||
|
||
<div class="topnav">
|
||
<a class="Left" href="../chia/index.html">← chia</a>
|
||
<a class="Left" href="../index.html">↑ 2005 ↑</a>
|
||
<a class="Left" href="../jetro/index.html">jetro →</a>
|
||
<a class="Right" href="https://github.com/ioccc-src/temp-test-ioccc/2005/giljade/giljade.c">C code</a>
|
||
<a class="Right" href="https://github.com/ioccc-src/temp-test-ioccc/2005/giljade/Makefile">Makefile</a>
|
||
<a class="Right" href="#inventory">Inventory</a>
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/topnav.mid.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>
|
||
<a href="../../location.html">Location of authors</a>
|
||
</div>
|
||
<hr>
|
||
<div class="sidenav">
|
||
<a href="../../news.html">IOCCC News</a>
|
||
<a href="../../status.html">Contest status</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 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"><a name="author"></a>Author:</h2>
|
||
<ul>
|
||
<li>Name: <a href="../../authors.html#Gil_Dogon">Gil Dogon</a><br>
|
||
Location: <a href="../../location.html#IL">IL</a> - <em>State of Israel</em> (<em>Israel</em>)
|
||
<br><br></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 -->
|
||
|
||
<h2 id="to-build">To build:</h2>
|
||
<div class="sourceCode" id="cb1"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">make</span></span></code></pre></div>
|
||
<p>NOTE: We FORCE the use of -O0 even if someone overrides it because this entry
|
||
will not work with it enabled.</p>
|
||
<h3 id="bugs-and-misfeatures">Bugs and (Mis)features:</h3>
|
||
<p>The current status of this entry is:</p>
|
||
<pre><code>STATUS: INABIAF - please **DO NOT** fix</code></pre>
|
||
<p>For more detailed information see <a href="../../bugs.html#2005_giljade">2005 giljade bugs</a>.</p>
|
||
<h2 id="to-use">To use:</h2>
|
||
<div class="sourceCode" id="cb3"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./giljade</span></span></code></pre></div>
|
||
<h2 id="try">Try:</h2>
|
||
<div class="sourceCode" id="cb4"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./try.sh</span></span></code></pre></div>
|
||
<h3 id="self-test-feature-to-try">Self-test feature to try:</h3>
|
||
<div class="sourceCode" id="cb5"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./giljade</span> <span class="op">></span> out</span>
|
||
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a><span class="ex">./giljade</span> out</span></code></pre></div>
|
||
<p>NOTE: <a href="try.sh">try.sh</a> will ask you if you wish to do this.</p>
|
||
<h2 id="judges-remarks">Judges’ remarks:</h2>
|
||
<p>This entry takes editorial in how it deals with its output. After using <code>vi(1)</code>
|
||
(or <code>vim(1)</code>) to look at the source, use <code>vi(1)</code> (or <code>vim(1)</code>) to look at its
|
||
output. We especially recommend it on a 78 column xterm while leaning on
|
||
Control-F.</p>
|
||
<p>If you really understand expressions, then understand this:</p>
|
||
<div class="sourceCode" id="cb6"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a>s<span class="op">=</span>s<span class="op">^(</span>b<span class="op">=</span>s<span class="op">&</span>s<span class="op">-</span><span class="dv">1</span><span class="op">^</span>s<span class="op">)</span></span></code></pre></div>
|
||
<p>… and understand why it is found in the source code.</p>
|
||
<h2 id="authors-remarks">Author’s remarks:</h2>
|
||
<h3 id="so-what-do-we-have-here">So what do we have here ?</h3>
|
||
<p>Just run the executable with no command line args and look at the output. In
|
||
order to properly enjoy it you will need two good old programs: <code>xterm(1)</code> and
|
||
<code>vi(1)</code> (or <code>vim(1)</code>).
|
||
Do the following: open an <code>xterm(1)</code> with precisely 78 lines, and use the tiny font
|
||
size for best results. Then <code>vi(1)</code> (<code>vim(1)</code> will also do) the output. Type <code>^F</code>
|
||
repeatedly or hold it down and enjoy the show …</p>
|
||
<p>The program solves (very very fast) a sliding block puzzle. There are many
|
||
variants of such puzzles which are usually made from wood or plastic pieces.
|
||
The start position can be recognized by looking at the program itself. The
|
||
goal is to move the big piece (2 by 2) to the center top, which takes 179
|
||
steps in the shortest move sequence.</p>
|
||
<p>Notice that the step count used by the program is longer than the traditional
|
||
step count for such puzzles, as normally if the same piece is moved twice in a
|
||
row it is counted as only one step, but here it is counted as two.</p>
|
||
<p>The printout of the solution however is in a rather unorthodox form, as can be
|
||
easily discerned. As you have probably suspected each of the steps in the
|
||
solution printout is a C program which compiles to result in - surprise
|
||
surprise! - the original (well almost).</p>
|
||
<p>Actually, This program is smarter than merely printing ITSELF in 180 different
|
||
layouts. It is self-improving, in that the programs it prints have three
|
||
advantages over the original:</p>
|
||
<ol type="1">
|
||
<li><p>Their layout is more precise (Notice the annoying <code>\</code> at the 10’th line of
|
||
the original program which is actually a ‘layout bug’).</p></li>
|
||
<li><p>Their binary output does not rely on the source file being in the same
|
||
directory, and will not dump core if it doesn’t (like the original does). :)</p></li>
|
||
<li><p>They have much more comments (Not very helpful ones though).</p></li>
|
||
</ol>
|
||
<p>In addition as we all know bugs can creep up on us in the most unexpected of
|
||
places, and checking that indeed the output is composed of 180 legal C
|
||
programs by hand can be quite tedious, hence the program also include a self-
|
||
test mode. Just run it with the output file as command line argument. It will
|
||
then try to compile each of the programs (printing the line number where the
|
||
program starts). It will stop where any compilation fails and the culprit
|
||
program would be in the file <code>c.c</code>. The exit code of the self-test will be
|
||
non-zero in that case. In case this entry wins, I do hope nobody by the name
|
||
of ‘c’ also wins this year otherwise that part of the program would have to be
|
||
changed!</p>
|
||
<p>Notice that the self-test does not try to run the result of the compilations
|
||
but this can easily be done. Try it and diff the output of any of the 180
|
||
results with the original output. Of course all 180 programs also include the
|
||
self-test mode.</p>
|
||
<h3 id="why-i-think-this-program-is-obfuscated">Why I think this program is obfuscated</h3>
|
||
<ul>
|
||
<li><p>Because it says so, and twice is better than once!</p></li>
|
||
<li><p>All the usual suspects i.e. <code>?:</code>, <code>&&</code>, <code>||</code>, <code>,</code> used to compress code
|
||
length in the noble tradition of this contest, meaningless one character
|
||
variable names, etc…</p></li>
|
||
<li><p>The board representation is efficiently compressed hence obfuscated, and
|
||
the algorithm that is used to generate possible moves is extremely efficient.</p>
|
||
<p>In fact it can compute several moves in parallel on one processor! Moreover
|
||
only the most efficient bitwise logical operations, shift,and subtraction by
|
||
one is used. No inefficient conditional tests and jumps are needed in that
|
||
part of the program.</p></li>
|
||
<li><p>The single expression I’m most proud of, and would have submitted to the
|
||
category of ‘best obfuscated short expression’ if there was one is:</p>
|
||
<pre><code> s=s^(b=s&s-1^s)</code></pre>
|
||
<p>Can you figure out what it does (very efficiently) and how it fits in the
|
||
scheme of things?</p></li>
|
||
<li><p>IMHO the program is easier to understand before running cpp on it. It is also
|
||
shorter that way to be sure.</p></li>
|
||
<li><p>It even takes care to obfuscate the comments in the output programs.</p></li>
|
||
<li><p>Having the output programs a bit different than the original is more
|
||
interesting.</p></li>
|
||
<li><p>I have written an earlier version of the program about half a year ago and
|
||
when returning to it now I had to sweat quite a lot to understand the f***ing
|
||
mess I’ve made.</p></li>
|
||
</ul>
|
||
<h3 id="known-bugsproblemswarningsportability-issues">Known Bugs/problems/warnings/portability issues</h3>
|
||
<p>Some <code>cpp</code>s issue a warning about empty macro parameters.</p>
|
||
<p><code>-pedantic</code> informs me that ‘ISO C’ does not allow extra ; outside of a
|
||
function, and to this I say to ISO what ???</p>
|
||
<p><code>-Wall</code> of course will suggest adding a lot of parenthesis, function prototypes,
|
||
and remove some unnecessary expressions, and to this I say: if I listen to you
|
||
where is my freedom to obfuscate in style?</p>
|
||
<p>As mentioned earlier if you try to run the original program without its source
|
||
in the working directory it will dump core.</p>
|
||
<p>The program relies heavily on the ASCII coding system (have I seen this
|
||
comment before ?). It also implicitly assumes that <code>sizeof(int) = sizeof(FILE *)</code>. On systems when that is not the case expect a core dump…</p>
|
||
<h3 id="challenges">Challenges</h3>
|
||
<p>What use are the <code>;;</code> for ?</p>
|
||
<p>Why do I use <code>126&</code> in the program? (except for the rather obvious fact that it
|
||
serves as comment obfuscater).</p>
|
||
<p>Why not write <code>s^=</code> instead of <code>s=s^</code> In the expression I’m most proud of ?</p>
|
||
<p>What is <code>40-(h&62)</code> doing ?</p>
|
||
<p>Use the program to solve for a different starting position. It is not that
|
||
difficult. Notice however that if there are more than two empty spaces the
|
||
outputs would not compile as the layout would not be sufficient to contain the
|
||
program.</p>
|
||
<p>Use the program to solve for board size different than <code>4*5</code>. That’s a bit more
|
||
tricky.</p>
|
||
<h3 id="hint-for-the-challenges">Hint for the challenges</h3>
|
||
<p>Just try to change the program, and use the self test to see what happens …</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/
|
||
|
||
-->
|
||
|
||
<!-- END: this line ends content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
|
||
<!-- START: this line starts content for HTML phase 22 by: bin/output-index-inventory.sh via bin/md2html.sh -->
|
||
|
||
<!-- START: this line starts content generated by: bin/output-index-inventory.sh -->
|
||
|
||
<h1 id="inventory-for-2005giljade"><a name="inventory"></a>Inventory for 2005/giljade</h1>
|
||
<p><a href="#top">Jump to top</a></p>
|
||
<h2 id="primary-files">Primary files</h2>
|
||
<ul>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2005/giljade/giljade.c">giljade.c</a> - entry source</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2005/giljade/Makefile">Makefile</a> - entry Makefile</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2005/giljade/giljade.orig.c">giljade.orig.c</a> - original source</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2005/giljade/test.sh">test.sh</a> - test tool</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2005/giljade/try.sh">try.sh</a> - how to run</li>
|
||
<li><a href="2005_giljade.tar.bz2">2005_giljade.tar.bz2</a> - download entry source</li>
|
||
</ul>
|
||
<h2 id="secondary-files">Secondary files</h2>
|
||
<ul>
|
||
<li><a href="index.html">index.html</a> - entry home page</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2005/giljade/README.md">README.md</a> - markdown source for index.html</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2005/giljade/.entry.json">.entry.json</a> - description of entry in JSON</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2005/giljade/.gitignore">.gitignore</a> - list of files that should not be committed under git</li>
|
||
<li><a href=".path">.path</a> - directory path from top directory</li>
|
||
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2005/giljade/.tar.tstamp">.tar.tstamp</a> - timestamp of compressed tarball formation</li>
|
||
</ul>
|
||
|
||
<!-- END: next line ends content generated by: bin/output-index-inventory.sh -->
|
||
|
||
<!-- END: this line ends content for HTML phase 22 by: bin/output-index-inventory.sh via bin/md2html.sh -->
|
||
<!-- START: this line starts content from: inc/after-content.default.html -->
|
||
|
||
<!-- 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 -->
|
||
|
||
<!--
|
||
|
||
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">
|
||
<h2>Copyright and CC BY-SA 4.0 License</h2>
|
||
<p>This file and web page is:</p>
|
||
<blockquote><b>Copyright © 1984-2024 by Landon Curt Noll. All Rights Reserved.</b></p></blockquote>
|
||
<p>You are free to share and adapt this file under the terms of this license:</p>
|
||
<blockquote><b>Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)</b></blockquote>
|
||
<p>For more information, see:</p>
|
||
<blockquote><a
|
||
href="https://creativecommons.org/licenses/by-sa/4.0/">https://creativecommons.org/licenses/by-sa/4.0/</a></blockquote>
|
||
<h2>Coda</h2>
|
||
<p><a href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fioccc-src.github.io%2Ftemp-test-ioccc%2F2005%2Fgiljade%2Findex.html">Nu HTML check this web page</a></p>
|
||
<p><a href="#top">Jump to top</a> <a href="#content">Jump to Content</a> <a href="#inventory">Jump to Inventory</a></p>
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/footer.default.html -->
|
||
<!-- START: this line starts content from: inc/bottom.default.html -->
|
||
|
||
</body>
|
||
</html>
|
||
|
||
<!-- END: this line ends content from: inc/bottom.default.html -->
|