Files
ioccc/2020/endoh1/index.html
T
Cody Boone Ferguson 2e5372aa74 update index.html and .entry.json per recent manifest changes
Every index.html file (for entries) was updated as the tarball download
description was changed to 'download entry source' (though I think this
is a mistake as the C file is described as 'entry source' so it's
ambiguous - that might be fixed soon or it mightn't be until some other
changes are made that need a manifest update).
2024-02-25 06:09:28 -08:00

380 lines
18 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 -->
<!-- -->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- !!! 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/readme2index.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>2020/endoh1 - Most explosive</title>
<meta name="description" content="2020 IOCCC entry endoh1 - Most explosive">
<meta name="keywords" content="IOCCC, 2020, IOCCC 2020, IOCCC entry, endoh1, Most explosive">
</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>2020/endoh1 - Most explosive</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="../carlini/index.html">&larr; carlini</a>
<a class="Left" href="../index.html">&uarr; 2020 &uarr;</a>
<a class="Left" href="../endoh2/index.html">endoh2 &rarr;</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>
</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 &amp; (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#Yusuke_Endoh">Yusuke Endoh</a><br>
Location: <a href="../../location.html#JP">JP</a> <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>There is an alternate version provided by the author. See <a
href="#alternate-code">Alternate code</a> below.</p>
<h2 id="to-use">To use:</h2>
<div class="sourceCode" id="cb2"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="co"># IMPORTANT for macOS: run under Terminal.app</span></span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a><span class="ex">./prog</span></span></code></pre></div>
<h2 id="try">Try:</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="co"># IMPORTANT for macOS: run under Terminal.app</span></span>
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a><span class="co"># Try resizing the terminal window before the first click.</span></span>
<span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a><span class="co"># Try resizing the terminal window after the first click.</span></span>
<span id="cb3-6"><a href="#cb3-6" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb3-7"><a href="#cb3-7" aria-hidden="true" tabindex="-1"></a><span class="ex">./prog</span> ioccc.txt</span>
<span id="cb3-8"><a href="#cb3-8" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb3-9"><a href="#cb3-9" aria-hidden="true" tabindex="-1"></a><span class="ex">./prog</span> unwinnable.txt</span></code></pre></div>
<h2 id="alternate-code">Alternate code:</h2>
<p>An alternate version of this entry, <a
href="prog.alt.c">prog.alt.c</a>, is provided. This alternate code lacks
the additional rule to flag all unprobed cells. See the Author’s remarks
for more details.</p>
<h3 id="alternate-build">Alternate build:</h3>
<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="fu">make</span> alt</span></code></pre></div>
<h3 id="alternate-use">Alternate use:</h3>
<p>Use <code>prog.alt</code> as you would <code>prog</code> above.</p>
<h2 id="judges-remarks">Judges’ remarks:</h2>
<p>When playing <a
href="https://en.wikipedia.org/wiki/Minesweeper_(video_game)">Minesweeper</a>,
a misclick might ruin a game, so why not leave the routine to the
computer? This program automatically uncovers mines according to several
rules, and leaves guessing (and applying the most straightforward of the
rules – just for fun, perhaps?) to the user.</p>
<p>Try creating your own input files according to the author’s remarks.
Did you encounter any problems?</p>
<p>The submission was in violation of the “2053” size rule by one
character, likely a late typo. It was easy to fix.</p>
<h3 id="for-macos">For macOS:</h3>
<p>We observe that this entry may not work under macOS using iTerm2.
Users on macOS might want to run this entry under the macOS Terminal,
which is located in
<code>/System/Applications/Utilities/Terminal.app</code>.</p>
<h2 id="authors-remarks">Author’s remarks:</h2>
<h3 id="semi-automatic-minesweeper">Semi-automatic Minesweeper:</h3>
<p>Minesweeper is a game to sweep mines, as you know. The task consists
of two parts:</p>
<ol start="0" type="1">
<li>Choose a random cell based on your sixth sense.</li>
<li>Identify a non-mine cell based on logical inference.</li>
</ol>
<p>However, (1) is error-prone, and a waste of time. You must use a
computer to do such a boring task!</p>
<p>This program is a semi-automatic minesweeper which does part (1)
automatically. All you have to do is (0). You can test if you are lucky
or not.</p>
<h3 id="how-to-use">How to use:</h3>
<p>It uses ncurses:</p>
<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="fu">gcc</span> <span class="at">-o</span> prog prog.c <span class="at">-lncurses</span></span>
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a><span class="ex">./prog</span></span></code></pre></div>
<p>You will see a terminal-wide field of a minesweeper. Probe a cell by
mouse click.</p>
<p>If a cell turns out to have a mine (or not), the program determines
whether its neighbors have a mine or not, and automatically probes (or
flags) the cell.</p>
<h3 id="keyboard-commands">Keyboard commands:</h3>
<ul>
<li><code>r</code>: new game (You can also click the smiley face at the
top line.).</li>
<li><code>q</code>: quit.</li>
</ul>
<p>Input is case-sensitive.</p>
<h3 id="internals">Internals:</h3>
<p>The program uses four types of local inference:</p>
<h4 id="rule-1">Rule 1:</h4>
<p>If the number of a cell is equal to the count of the flagged
neighbors, all the unprobed neighbors are probed.</p>
<p>Example:</p>
<pre><code>? ? ? . . .
? 3 ? =&gt; . 3 .
! ! ! ! ! !</code></pre>
<p>Note that <code>?</code> is an unprobed cell (it is unknown whether
the cell has a mine or not); <code>!</code> is a flagged cell (it is
already known that the cell has a mine); and <code>.</code> is a probed
cell (it is already known that the cell has no mine).</p>
<h4 id="rule-2">Rule 2:</h4>
<p>If the number of a cell is equal to the count of the unprobed or
flagged neighbors, all the unprobed neighbors are flagged.</p>
<p>Example:</p>
<pre><code>. ? ? . ! !
. 4 ? =&gt; . 4 !
. 2 ! . 2 !</code></pre>
<h4 id="rule-3">Rule 3:</h4>
<p>Consider two number cells <code>A</code> and <code>B</code>. If
<code>A</code> is equal to the difference of <code>B</code> and the
count of <code>B</code>’s unprobed and flagged neighbors that are not
<code>A</code>’s neighbors, all <code>A</code>’s unprobed neighbors that
are not <code>B</code>’s neighbors are probed.</p>
<p>Example:</p>
<pre><code>? ? ? . . .
? 1 ? ? =&gt; . 1 ? ?
? ? 4 . . ? 4 .
? . ! ? . !</code></pre>
<p><code>A</code> and <code>B</code> are probed cells whose numbers are,
respectively, 1 and 4. The count of <code>B</code>’s unprobed and
flagged neighbors that are not <code>A</code>’s neighbors is three (one
<code>!</code> and two <code>?</code>s). Since
<code>A == B - count</code> (<code>1 == 4 - 3</code>), the left and top
unprobed cells are probed.</p>
<h4 id="rule-4">Rule 4</h4>
<p>Consider two number cells <code>A</code> and <code>B</code>. If
<code>B</code> is equal to the difference of <code>A</code> and the
count of <code>A</code>’s unprobed and flagged neighbors that are not
<code>B</code>’s neighbors, all of <code>A</code>’s unprobed neighbors
that are not <code>B</code>’s neighbors are flagged.</p>
<pre><code>? ? ? ? ! ? ? ?
? 3 1 2 =&gt; ! 3 1 2
2 2 . . 2 2 . .</code></pre>
<p><code>A</code> and <code>B</code> are probed cells whose numbers are,
respectively, 3 and 1. The count of <code>A</code>’s unprobed and
flagged neighbors that are not <code>B</code>’s neighbors is two (left
<code>?</code>s). Since <code>B == A - count</code>
(<code>1 == 3 - 2</code>), the left unprobed cells are flagged.</p>
<h3 id="note">Note</h3>
<p>Interestingly, these complex rules can be integrated to one simple
rule. Analyze the code.</p>
<h3 id="one-more-thing">One more thing</h3>
<p>You can also play with a prepared map.</p>
<div class="sourceCode" id="cb10"><pre
class="sourceCode sh"><code class="sourceCode bash"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a> <span class="ex">./prog</span> ioccc.txt</span></code></pre></div>
<p>The format of the text is:</p>
<pre><code>width height number-of-mines priorities-of-each-cell...</code></pre>
<p>There are mines in a cell whose “priorities-of-each-cell” is less
than “number-of-mines”. (But the mine in the first-clicked cell is
removed.)</p>
<h3 id="bug-fixes-and-credits">Bug fixes and Credits</h3>
<p>The judges pointed out a bug of the original version that I submitted
(<a href="prog.alt.c">prog.alt.c</a>). Because this program does not
provide a feature to flag unprobed cells manually, we can do nothing if
the number of unprobed cells are equal to the number of mines remaining;
<a href="unwinnable.txt">unwinnable.txt</a> is an example for such a
case.</p>
<p>Thus, I implemented an additional rule to flag all unprobed cells in
such a case into the final version (<a href="prog.c">prog.c</a>).</p>
<p><a href="/authors.html#Ilya_Kurdyukov">Ilya Kurdyukov</a> also
pointed out a warning “ignoring return value of ‘fscanf’” only when
<code>-O3</code> is used. So I changed the code a little to pretend to
use the return value of <code>fscanf(3)</code>.</p>
<p><a href="/authors.html#Don_Yang">Don Yang</a> (omoikane) contributed
another example map <a href="megumin.txt">megumin.txt</a> which is the
Explosion Arch-Wizard from KonoSuba.</p>
<h2 id="copyright-and-cc-by-sa-4.0-license">Copyright and CC BY-SA 4.0
License:</h2>
<p>This file is Copyright (c) 2023 by Landon Curt Noll. All Rights
Reserved. You are free to share and adapt this file under the terms of
this license:</p>
<pre><code>Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)</code></pre>
<p>For more information, see:
https://creativecommons.org/licenses/by-sa/4.0/</p>
<!-- 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-2020endoh1"><a name="inventory"></a>Inventory for
2020/endoh1</h1>
<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/2020/endoh1/prog.c">prog.c</a>
- entry source</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2020/endoh1/Makefile">Makefile</a>
- entry Makefile</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2020/endoh1/prog.alt.c">prog.alt.c</a>
- alternative source</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2020/endoh1/prog.orig.c">prog.orig.c</a>
- original source</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2020/endoh1/hilbert16x8.txt">hilbert16x8.txt</a>
- gameplay map</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2020/endoh1/hilbert2x2.txt">hilbert2x2.txt</a>
- gameplay map</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2020/endoh1/hilbert4x4.txt">hilbert4x4.txt</a>
- gameplay map</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2020/endoh1/hilbert8x8.txt">hilbert8x8.txt</a>
- gameplay map</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2020/endoh1/ioccc.txt">ioccc.txt</a>
- gameplay map</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2020/endoh1/megumin.txt">megumin.txt</a>
- gameplay map</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2020/endoh1/unwinnable.txt">unwinnable.txt</a>
- gameplay map</li>
<li><a href="2020_endoh1.tar.bz2">2020_endoh1.tar.bz2</a> - download
entry source</li>
</ul>
<h2 id="secondary-files">Secondary files</h2>
<ul>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2020/endoh1/.entry.json">.entry.json</a>
- description of entry in JSON</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2020/endoh1/.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/2020/endoh1/README.md">README.md</a>
- markdown source for index.html</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 -->
<div class="footer">
<hr>
<h2>Coda</h2>
<p><a href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fioccc-src.github.io%2Ftemp-test-ioccc%2F2020%2Fendoh1%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 -->