build index.html for all winners
Updated manifest as per recent file changes. Updated winner `.winner.json` to reflect the manifest changes. Added [bin/all_run.sh](bin/all_run.sh) tool to run a command over all winning entries. These tools had slight improvements in the help usage message: * bin/gen-author.sh VERSION="1.3.1 2024-01-16" * bin/gen-inventory.sh VERSION="1.0.1 2024-01-16" * bin/pandoc_wrapper.sh VERSION="1.3.1 2024-01-16" * bin/subst.default.sh VERSION="1.1.1 2024-01-16" * bin/subst.winner-index.sh VERSION="1.1.1 2024-01-16" The `bin/readme2index.sh` tool was improved so that if the `index.html` file exists and the tool forms the exact same content, then the file `index.html` file is NOT touched. * bin/readme2index.sh VERSION="1.1 2024-01-16" We used the following command to generate `index.html` files for all winning entries: ```sh bin/all_run.sh -v 3 bin/readme2index.sh ``` NOTE: We have not (yet) built HTML files above the winner directory level (e.g., no year level nor top level HTML), nor have be built non-index HTML files for winners. NOTE: By default we are running `pandoc(1)` with: ``` --fail-if-warnings=true ``` This means that any problems with markdown to HTML generates an error. This is done to be sure that the HTML conversion is clean. We had to fix the following `README.md` files: * `2000/rince/README.md` The reference [^2] was never used. We made a guess that [^2] applies to the same spot as [^1]. Perhaps there is a better spot where [^2] applies? NOTE: For every reference, there MUST be some place where that reference is used. * 2012/vik/README.md The string "$...$" is assumed to be a TeX encoded string. NOTE: Every "$..$" needs to be backslashed as in "\$..\$". * 2018/burton1/README.md The reference [2] was duplicated. We changed the second [2] to [3]. NOTE: Every reference needs to have a unique number. * 2020/carlini/README.md The string "$...$" is assumed to be a TeX encoded string. NOTE: Every "$..$" needs to be backslashed as in "\$..\$". We also found 2 errors in the `author/author_handle.json` file set: * author/Anonymous_2001.json The `author/Anonymous_2001.json` file was missing. * author/Jari_Arkko.json The winner ID for `1989_jar.1` had a typo.
This commit is contained in:
1 parent
893cd915b6
commit
c1466f5165
350 files changed
+95242
-4217
No files matched your search
+713
-13
@@ -1,4 +1,6 @@
|
||||
<!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 !!! -->
|
||||
@@ -6,27 +8,725 @@
|
||||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<!-- -->
|
||||
<!-- file: 2018/burton2/index.html created by: fake.gen_index.sh version: 1.0.5 2023-10-31 -->
|
||||
<html lang="en">
|
||||
<!-- END: this line ends content from: inc/top.default.html -->
|
||||
<!-- -->
|
||||
<!-- This file was formed by the tool: bin/readme2index.sh version: 1.1 2024-01-16 -->
|
||||
<!-- -->
|
||||
<!-- START: this line starts content from: inc/head.default.html -->
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>2018 burton2</title>
|
||||
<meta name="description" content="IOCCC year: 2018 IOCCC winner: burton2 winner index page">
|
||||
<meta name="keywords" content="IOCCC,2018,burton2,winner index page">
|
||||
<link rel="stylesheet" href="/temp-test-ioccc/ioccc.css">
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||||
<title>2018/burton2</title>
|
||||
<meta name="description" content="2018 IOCCC winner burton2">
|
||||
<meta name="keywords" content="IOCCC, 2018, IOCCC 2018, IOCCC winner, burton2">
|
||||
</head>
|
||||
|
||||
<!-- END: this line ends content from: inc/head.default.html -->
|
||||
<!-- START: this line starts content from: inc/body.default.html -->
|
||||
|
||||
<body>
|
||||
|
||||
<h1>2018 burton2</h1>
|
||||
<!-- END: this line ends content from: inc/body.default.html -->
|
||||
<!-- START: this line starts content from: inc/header.default.html -->
|
||||
|
||||
<p>XXX - fake content until readme2index is working - XXX</p>
|
||||
<div class="header">
|
||||
<img src="/temp-test-ioccc/png/ioccc.png" alt="IOCCC image by Matt Zucker" width=300 height=110>
|
||||
<h1>The International Obfuscated C Code Contest</h1>
|
||||
<h2>2018/burton2</h2>
|
||||
</div>
|
||||
|
||||
<hr style="width:50%;text-align:left;margin-left:0">
|
||||
<!-- END: this line ends content from: inc/header.default.html -->
|
||||
<!-- START: this line starts content from: inc/topnav.mid.html -->
|
||||
|
||||
<!-- Start Nu Html Checker -->
|
||||
<p><a href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fioccc-src.github.io%2Ftemp-test-ioccc%2F2018%2Fburton2%2Findex.html">Nu Html check https://ioccc-src.github.io/temp-test-ioccc/2018/burton2/index.html</a></p>
|
||||
<!-- End Nu Html Checker -->
|
||||
<div class="topnav">
|
||||
<a class="Left" href="../burton1/index.html">← burton1</a>
|
||||
<a class="Left" href="../index.html">↑ 2018 ↑</a>
|
||||
<a class="Left" href="../ciura/index.html">ciura →</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="/temp-test-ioccc/index.html">IOCCC Home</a>
|
||||
<a href="/temp-test-ioccc/years.html">Winning Entries</a>
|
||||
<a href="/temp-test-ioccc/winners.html">People who have won</a>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="sidenav">
|
||||
<a href="/temp-test-ioccc/news.html">IOCCC News</a>
|
||||
<a href="/temp-test-ioccc/faq.html#submit">How to enter the IOCCC</a>
|
||||
<a href="/temp-test-ioccc/faq.html">FAQ</a>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="sidenav">
|
||||
<a href="/temp-test-ioccc/bugs.html">Bugs & (mis)features</a>
|
||||
<a href="/temp-test-ioccc/faq.html#fix_a_winner">Fixing IOCCC winners</a>
|
||||
<a href="/temp-test-ioccc/faq.html#fix_web_site">Fixing the web site</a>
|
||||
<a href="/temp-test-ioccc/faq.html#fix_author">Fixing winner info</a>
|
||||
<a href="/temp-test-ioccc/thanks-for-help.html">Thanks for the help</a>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="sidenav">
|
||||
<a href="/temp-test-ioccc/judges.html">The IOCCC Judges</a>
|
||||
<a href="/temp-test-ioccc/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 generated by: bin/gen-author.sh -->
|
||||
|
||||
<p><a name="author"><strong>Author:</strong></a> <br><br>Name: <a
|
||||
href="/temp-test-ioccc/winners.html#Dave_Burton">Dave Burton</a><br>
|
||||
Location: <a href="/temp-test-ioccc/location.html#US">US</a></p>
|
||||
|
||||
<!-- END: next line ends content generated by: bin/gen-author.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>
|
||||
<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="ex">./prog</span> <span class="pp">[-</span><span class="ss">tcksri</span><span class="pp">]</span> <span class="op"><</span> file.c</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="ex">./try.sh</span></span></code></pre></div>
|
||||
<p>If you get really stuck, try:</p>
|
||||
<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">man</span> ./tac.1</span></code></pre></div>
|
||||
<h2 id="judges-remarks">Judges’ remarks:</h2>
|
||||
<p>They say size isn’t everything, and in the case of IOCCC <a
|
||||
href="https://www.ioccc.org/2018/iocccsize.c">iocccsize.c</a> that is
|
||||
saying something! What is this program weighing and how much does it
|
||||
weigh?</p>
|
||||
<h2 id="authors-remarks">Author’s remarks:</h2>
|
||||
<h3 id="tac---tokenize-and-count-c-and-derivative-languages">tac -
|
||||
tokenize and count C and derivative languages:</h3>
|
||||
<p><code>tac</code> computes C program size<br />
|
||||
(obfuscated / otherwise)<br />
|
||||
by splitting code as tokens small,<br />
|
||||
ignoring space, then counting all.<br />
|
||||
</p>
|
||||
<p>It tries quite hard to act the same<br />
|
||||
as counting tool of I-OCCC fame.<br />
|
||||
Some bugs were fixed, it’s faster too,<br />
|
||||
and does more things, just add some glue!<br />
|
||||
</p>
|
||||
<p>It does far more than print the size:<br />
|
||||
the token part’s a better prize!<br />
|
||||
With each upon on a single line,<br />
|
||||
how many things can you design?<br />
|
||||
</p>
|
||||
<p>Included is a keyword sorter,<br />
|
||||
de-obfuscator, freq reporter.<br />
|
||||
With code produced as little parts,<br />
|
||||
just add your own creative arts.<br />
|
||||
</p>
|
||||
<p>But first you have to figure out<br />
|
||||
the braces part, without a doubt!<br />
|
||||
And then the code - it isn’t easy:<br />
|
||||
for as else? That’s rather cheesy!<br />
|
||||
</p>
|
||||
<p>The rest of it is standard fare:<br />
|
||||
expressions strange, the globals bare,<br />
|
||||
confusing symbols one and oh,<br />
|
||||
and precedence you have to know.<br />
|
||||
</p>
|
||||
<p>The keyword list was made external,<br />
|
||||
because of standards change eternal.<br />
|
||||
Thus other languages can now,<br />
|
||||
be counted just like C, somehow!<br />
|
||||
</p>
|
||||
<p>I hope you find this code obscure<br />
|
||||
enough to win, and thus procure<br />
|
||||
a public place for all to see<br />
|
||||
how badly I can butcher C!<br />
|
||||
</p>
|
||||
<h3 id="said-another-way.">Said another way….</h3>
|
||||
<p><code>tac</code> is the inverse of <code>cat</code>(1): it
|
||||
un-concatenates its input into C tokens, writing the token stream to
|
||||
<code>stdout</code>. There are options to suppress the token ids,
|
||||
summarize the token counts, and several options to allow it to be
|
||||
compatible with <code>iocccsize</code>.</p>
|
||||
<p>The token-based output is quite useful in analyzing source code (see
|
||||
below), and the counter is more accurate than <code>iocccsize</code>
|
||||
(see below); but this can be fixed by using the <code>-c</code>
|
||||
compatibility flag, restoring the following problems as in the official
|
||||
tool:</p>
|
||||
<ul>
|
||||
<li>Whitespace <strong>within</strong> a string is <strong>not</strong>
|
||||
counted; this seems wrong, as these chars <strong>are</strong>
|
||||
significant.</li>
|
||||
<li>“<code>{;}</code>” is not counted within a double-quoted
|
||||
string.</li>
|
||||
<li>Whitespace preceding a comment is <code>char</code>-counted, unless
|
||||
the comment starts a line.</li>
|
||||
<li><code>-k</code> processes the reserved words within <code>//</code>
|
||||
comments(!), but not <code>/*</code>, changing the counts.</li>
|
||||
</ul>
|
||||
<p>The following bugs are always corrected:</p>
|
||||
<ul>
|
||||
<li>Treats <code>/*/</code> as a complete comment
|
||||
(<code>/*/int if for/*/</code> has three keywords)</li>
|
||||
<li><code>-k</code> enables <code>//*</code> or within a line comment
|
||||
<code>/*</code> to initiate a comment block until following
|
||||
<code>*/</code></li>
|
||||
<li><code>-k</code> processes double quote characters in <code>//</code>
|
||||
comments - thus a solitary quote consumes everything until the next
|
||||
quote</li>
|
||||
<li>Single quotes are not handled correctly (<code>'"'</code> starts a
|
||||
double quote in <code>iocccsize</code>)</li>
|
||||
<li><code>#ifndef</code> is omitted as a keyword (but
|
||||
<code>#ifdef</code> is allowed?)</li>
|
||||
<li><code>I</code> is not a reserved word.</li>
|
||||
<li><code>tac</code> correctly penetrates <a
|
||||
href="/2014/birken/README.md" title="Best use of port 1701">23rd century
|
||||
cloaking technology</a>. ;-)</li>
|
||||
</ul>
|
||||
<p>There is one (known) remaining problem with detection:</p>
|
||||
<ul>
|
||||
<li>Comments between preprocessor hash and keyword are not replaced with
|
||||
whitespace; the following counts #include as two tokens, <code>#</code>
|
||||
and <code>include</code> (not as a reserved word):</li>
|
||||
</ul>
|
||||
<div class="sourceCode" id="cb5"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#</span><span class="er">/*this will not be counted*/include/*correctly*/<stdio.h></span></span></code></pre></div>
|
||||
<p>Fixing this properly hampers backwards compatibility in counting.
|
||||
This requires eliding comments during the translation phases (ISO
|
||||
5.1.1.2, phase 3), and yet still counting words correctly absent
|
||||
<code>-k</code>.</p>
|
||||
<h3 id="backwards-compatibility">Backwards Compatibility:</h3>
|
||||
<p><code>tac</code> was run over all 366 previous IOCCC winning
|
||||
entries:</p>
|
||||
<div class="sourceCode" id="cb6"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="fu">find</span> ~/src/obc <span class="at">-type</span> f <span class="at">-name</span> <span class="dt">\*</span>.c <span class="kw">|</span> <span class="fu">wc</span></span></code></pre></div>
|
||||
<p>The discrepancies found are documented and explained in the file <a
|
||||
href="discrepancies.md">discrepancies.md</a>.</p>
|
||||
<div class="sourceCode" id="cb7"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a><span class="fu">find</span> ~/src/obc <span class="at">-type</span> f <span class="at">-a</span> <span class="at">-name</span> <span class="st">"*.c"</span> <span class="kw">|</span> <span class="fu">xargs</span> ./spotcheck.sh ./prog <span class="kw">|</span> <span class="ex">./spotdiff.sh</span> <span class="kw">|</span></span>
|
||||
<span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a> <span class="fu">grep</span> <span class="at">-v</span> keep <span class="kw">|</span> <span class="fu">diff</span> <span class="at">-bw</span> <span class="at">-</span> discrep<span class="pp">*</span> <span class="kw">|</span> <span class="fu">grep</span> <span class="st">"[<>] cl "</span></span></code></pre></div>
|
||||
<p>In summary, there are only 6 unique entries out of 366 that have any
|
||||
variation in Rule 2 counts; in all cases, the differences are due to
|
||||
bugs within <code>iocccsize</code>, described in detail in the file <a
|
||||
href="discrepancies.md">discrepancies.md</a>. There are only 40 files
|
||||
(40/366, ~11%, including originals and variations) that differ at all,
|
||||
31 only in word count; most word count differences appear related to
|
||||
comment block detection, weighted more towards recent entries (2011 and
|
||||
onward = 20/40 ~50%).</p>
|
||||
<p>This (minor) variation in word count values has not been addressed
|
||||
since it is not a qualifying metric, nor is it very useful in a
|
||||
programming context: whitespace surrounds English words, not necessarily
|
||||
C tokens, as in <code>a+=1;</code>.</p>
|
||||
<p>Accuracy (versus compatibility) is demonstrated through a series of
|
||||
small test cases designed to allow exhaustive, hand-counted values for
|
||||
comparison with the tool values. These test cases were vital in
|
||||
debugging and regression testing, and provided a way to determine which
|
||||
tool was correct when there were differences.</p>
|
||||
<blockquote>
|
||||
<p>A version of this tool in more clearly written C (<a
|
||||
href="tac.c">tac.c</a>) is presented for the Judge’s consideration as a
|
||||
more accurate replacement for <code>iocccsize</code>. This obfuscated
|
||||
entry is derived from (and compatible with) that code, but due to
|
||||
obfuscation, has had some significant, deep changes for the contest.
|
||||
Nevertheless, the more clearly written code remains a spoiler for this
|
||||
entry.</p>
|
||||
</blockquote>
|
||||
<p>NB: <code>iocccsize</code> gets a different answer from
|
||||
<code>tac</code> on its own (<a
|
||||
href="/2018/iocccsize.c">iocccsize.c</a>) source code; <code>tac</code>
|
||||
gets the correct answer. This is due to the aforementioned bugs within
|
||||
<code>iocccsize</code>, proved by fixing <a
|
||||
href="/2018/iocccsize.c">iocccsize.c</a> with the included patch, so
|
||||
<code>iocccsize</code> reports the correct answer for itself.</p>
|
||||
<h3 id="but-wait-theres-more">But wait… There’s More!</h3>
|
||||
<p>There is no limit on line length, file length, comment length, or
|
||||
identifier length.</p>
|
||||
<p><code>tac</code> features an accurate tokenizer; which presents each
|
||||
C token on a line by itself. This feature enables interesting analyses
|
||||
of C (and C++) code that’s hard to get any other way.</p>
|
||||
<p>For instance, here is a simple token counter, useful in finding
|
||||
repeated long tokens, or operator frequency, or counting the references
|
||||
to identifiers, constants, or breadth of use of the language:</p>
|
||||
<div class="sourceCode" id="cb8"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a><span class="co">#!/usr/bin/env bash</span></span>
|
||||
<span id="cb8-2"><a href="#cb8-2" aria-hidden="true" tabindex="-1"></a><span class="fu">cat</span> <span class="va">$*</span> <span class="kw">|</span> <span class="ex">./prog</span> <span class="at">-t</span> <span class="kw">|</span> <span class="fu">sort</span> <span class="kw">|</span> <span class="fu">uniq</span> <span class="at">-c</span> <span class="kw">|</span> <span class="fu">sort</span> <span class="at">-k1nr</span></span></code></pre></div>
|
||||
<p>And here is a C keyword frequency counter:</p>
|
||||
<div class="sourceCode" id="cb9"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a><span class="co">#!/usr/bin/env bash</span></span>
|
||||
<span id="cb9-2"><a href="#cb9-2" aria-hidden="true" tabindex="-1"></a><span class="kw">function</span><span class="fu"> iskeyword</span> <span class="kw">{</span></span>
|
||||
<span id="cb9-3"><a href="#cb9-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">awk</span> <span class="st">'BEGIN{f="c11";while(getline<f)k[$1]=0} {if($1 in k)k[$1]++}END{for(i in k)print k[i],i}'</span></span>
|
||||
<span id="cb9-4"><a href="#cb9-4" aria-hidden="true" tabindex="-1"></a><span class="kw">}</span></span>
|
||||
<span id="cb9-5"><a href="#cb9-5" aria-hidden="true" tabindex="-1"></a><span class="fu">cat</span> <span class="va">$*</span> <span class="kw">|</span> <span class="ex">./prog</span> <span class="at">-t</span> <span class="kw">|</span> <span class="ex">iskeyword</span> <span class="kw">|</span> <span class="fu">sort</span> <span class="at">-k1nr</span></span></code></pre></div>
|
||||
<p>This script was used to “optimize” the reserved word order so the
|
||||
most frequent IOCCC winning entry keywords are checked first.</p>
|
||||
<p>An interesting aside: as might be expected, obfuscation has changed
|
||||
the frequency of keyword distribution over time. The top five for the
|
||||
decades:</p>
|
||||
<pre><code>1980s 1990s 2000s 2010s
|
||||
----- ----- ----- -----
|
||||
94 if 532 char 375 if 254 int
|
||||
69 for 524 if 372 char 217 for
|
||||
59 while 417 int 332 int 198 if
|
||||
48 char 223 for 184 for 121 return
|
||||
43 int 223 void 165 return 104 char</code></pre>
|
||||
<p>The keyword list is external to the program, and is easily changed,
|
||||
sorted, checked, verified. This allows such additional programs in
|
||||
concert with the tool’s primary operation.</p>
|
||||
<p>A poor-man’s de-obfuscator can be based upon the output of
|
||||
<code>tac -t</code> and a handful of simple rules (and another use of
|
||||
the external keyword file). A more refined version of this is included
|
||||
in the file <a href="unob.sh">unob.sh</a>, but the simple code below is
|
||||
a serviceable obfuscated C de-obfuscator in a <em>scripting
|
||||
language</em>. It really is this easy with <code>tac</code>:</p>
|
||||
<div class="sourceCode" id="cb11"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a><span class="co">#!/usr/bin/env bash</span></span>
|
||||
<span id="cb11-2"><a href="#cb11-2" aria-hidden="true" tabindex="-1"></a><span class="va">script</span><span class="op">=</span><span class="st">'</span></span>
|
||||
<span id="cb11-3"><a href="#cb11-3" aria-hidden="true" tabindex="-1"></a><span class="st">BEGIN {</span></span>
|
||||
<span id="cb11-4"><a href="#cb11-4" aria-hidden="true" tabindex="-1"></a><span class="st"> last=nl="\n";</span></span>
|
||||
<span id="cb11-5"><a href="#cb11-5" aria-hidden="true" tabindex="-1"></a><span class="st"> f="c11"; while(getline <f > 0) kw[$0]++; close(f);</span></span>
|
||||
<span id="cb11-6"><a href="#cb11-6" aria-hidden="true" tabindex="-1"></a><span class="st">}</span></span>
|
||||
<span id="cb11-7"><a href="#cb11-7" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb11-8"><a href="#cb11-8" aria-hidden="true" tabindex="-1"></a><span class="st">function iskw(a) { return a in kw }</span></span>
|
||||
<span id="cb11-9"><a href="#cb11-9" aria-hidden="true" tabindex="-1"></a><span class="st">function indent(a) { return sprintf("%*s", n*3, " ") }</span></span>
|
||||
<span id="cb11-10"><a href="#cb11-10" aria-hidden="true" tabindex="-1"></a><span class="st">function newline() { if (!infor && last != nl) printf last=nl; }</span></span>
|
||||
<span id="cb11-11"><a href="#cb11-11" aria-hidden="true" tabindex="-1"></a><span class="st">function show(a) {</span></span>
|
||||
<span id="cb11-12"><a href="#cb11-12" aria-hidden="true" tabindex="-1"></a><span class="st"> if (last==nl) printf "%s", indent()</span></span>
|
||||
<span id="cb11-13"><a href="#cb11-13" aria-hidden="true" tabindex="-1"></a><span class="st"> printf "%s%s", space(), a</span></span>
|
||||
<span id="cb11-14"><a href="#cb11-14" aria-hidden="true" tabindex="-1"></a><span class="st"> last=a</span></span>
|
||||
<span id="cb11-15"><a href="#cb11-15" aria-hidden="true" tabindex="-1"></a><span class="st">}</span></span>
|
||||
<span id="cb11-16"><a href="#cb11-16" aria-hidden="true" tabindex="-1"></a><span class="st">function space() {</span></span>
|
||||
<span id="cb11-17"><a href="#cb11-17" aria-hidden="true" tabindex="-1"></a><span class="st"> return iskw(last) ||</span></span>
|
||||
<span id="cb11-18"><a href="#cb11-18" aria-hidden="true" tabindex="-1"></a><span class="st"> (last ~ /[A-Za-z0-9_+-\/%^[&\]\)=:<>;]$/ && $0 !~ /[:;()\[\],]/) ? " " : ""</span></span>
|
||||
<span id="cb11-19"><a href="#cb11-19" aria-hidden="true" tabindex="-1"></a><span class="st">}</span></span>
|
||||
<span id="cb11-20"><a href="#cb11-20" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb11-21"><a href="#cb11-21" aria-hidden="true" tabindex="-1"></a><span class="st">/^\(/ { ++paren }</span></span>
|
||||
<span id="cb11-22"><a href="#cb11-22" aria-hidden="true" tabindex="-1"></a><span class="st">/^\)/ { --paren }</span></span>
|
||||
<span id="cb11-23"><a href="#cb11-23" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb11-24"><a href="#cb11-24" aria-hidden="true" tabindex="-1"></a><span class="st">/^for/ { newline(); infor=1 }</span></span>
|
||||
<span id="cb11-25"><a href="#cb11-25" aria-hidden="true" tabindex="-1"></a><span class="st">infor && /^;/ { ++infor; show($0 " "); next }</span></span>
|
||||
<span id="cb11-26"><a href="#cb11-26" aria-hidden="true" tabindex="-1"></a><span class="st">infor==1 && /^:/ { ++infor }</span></span>
|
||||
<span id="cb11-27"><a href="#cb11-27" aria-hidden="true" tabindex="-1"></a><span class="st">infor>1 && paren==0 { infor=0 }</span></span>
|
||||
<span id="cb11-28"><a href="#cb11-28" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb11-29"><a href="#cb11-29" aria-hidden="true" tabindex="-1"></a><span class="st">/^\?/ { tern++; n++; newline(); show($0 " "); next }</span></span>
|
||||
<span id="cb11-30"><a href="#cb11-30" aria-hidden="true" tabindex="-1"></a><span class="st">tern && /^:/ { newline(); show($0); --tern; --n; next }</span></span>
|
||||
<span id="cb11-31"><a href="#cb11-31" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb11-32"><a href="#cb11-32" aria-hidden="true" tabindex="-1"></a><span class="st">/^#/ { newline(); show($0); newline(); next }</span></span>
|
||||
<span id="cb11-33"><a href="#cb11-33" aria-hidden="true" tabindex="-1"></a><span class="st">/^;/ { show($0); newline(); next }</span></span>
|
||||
<span id="cb11-34"><a href="#cb11-34" aria-hidden="true" tabindex="-1"></a><span class="st">/^{/ { show($0); ++n; newline(); next }</span></span>
|
||||
<span id="cb11-35"><a href="#cb11-35" aria-hidden="true" tabindex="-1"></a><span class="st">/^}/ { n--; newline(); show($0); newline(); next }</span></span>
|
||||
<span id="cb11-36"><a href="#cb11-36" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb11-37"><a href="#cb11-37" aria-hidden="true" tabindex="-1"></a><span class="st">{ show($0) }</span></span>
|
||||
<span id="cb11-38"><a href="#cb11-38" aria-hidden="true" tabindex="-1"></a><span class="st">'</span></span>
|
||||
<span id="cb11-39"><a href="#cb11-39" aria-hidden="true" tabindex="-1"></a><span class="fu">cat</span> <span class="va">$*</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">'s/#include/##include/'</span> <span class="kw">|</span> <span class="fu">cpp</span> <span class="at">-E</span> <span class="at">-trigraphs</span> <span class="kw">|</span></span>
|
||||
<span id="cb11-40"><a href="#cb11-40" aria-hidden="true" tabindex="-1"></a><span class="fu">sed</span> <span class="st">'s/^# .*$//'</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">'s/^#//'</span> <span class="kw">|</span></span>
|
||||
<span id="cb11-41"><a href="#cb11-41" aria-hidden="true" tabindex="-1"></a><span class="ex">./prog</span> <span class="at">-t</span> <span class="kw">|</span> <span class="fu">awk</span> <span class="st">"</span><span class="va">$script</span><span class="st">"</span></span></code></pre></div>
|
||||
<h3 id="on-the-question-of-obfuscation">On the question of
|
||||
obfuscation:</h3>
|
||||
<ul>
|
||||
<li><p>I assume you noticed the <a
|
||||
href="https://www.youtube.com/watch?v=fUspLVStPbk&start=53"
|
||||
title="Meaning of Life">braces</a>?</p>
|
||||
<p><em>Every brace is sacred,<br />
|
||||
Every brace is great.<br />
|
||||
If a brace is wasted,<br />
|
||||
Clang gets quite irate</em>.</p></li>
|
||||
<li><p>Keywords follow the 2010s top five, without the <code>if</code>,
|
||||
for interesting flow control.</p></li>
|
||||
<li><p>Sometimes a <code>for</code> can be an <code>else</code> - <a
|
||||
href="https://www.youtube.com/watch?v=OHVjs4aobqs"
|
||||
title="Inconceivable">inconceivable</a>!</p></li>
|
||||
<li><p>I see the <code>getopt(3)</code>. But “<a
|
||||
href="https://www.youtube.com/watch?v=Ug75diEyiA0"
|
||||
title="Where's the beef?">where’s the beef?</a>”</p></li>
|
||||
<li><p>No character constants, several <code>int</code> constants, and
|
||||
one string (hint: which does not encode letters) – how does this code
|
||||
parse code?</p>
|
||||
<ul>
|
||||
<li><p>Interesting aside: how many is “several <code>int</code>
|
||||
constants”?</p>
|
||||
<p>./prog < prog.c 2>/dev/null | awk ‘$1~/260/{a[$2]++}END{for(i
|
||||
in a)print i,a[i]}’ … | wc</p></li>
|
||||
</ul>
|
||||
<p>Which numbers are most often used?</p>
|
||||
<pre><code> ... | sort -k2nr | sed 5q</code></pre></li>
|
||||
<li><p>The code describes its function by careful arrangement of
|
||||
variables up front…</p></li>
|
||||
<li><p>…coupled with a description of the typical IOCCC contestant, or
|
||||
at least the author</p></li>
|
||||
<li><p>Why shouldn’t trigraph parsing be written in trigraph?</p></li>
|
||||
<li><p>Where <a href="/2018/iocccsize.c">iocccsize.c</a> mocks, this
|
||||
code flaunts: “<em>no matter how well you may think you understand this
|
||||
code, you don’t, so don’t mess with it. :-)</em>”</p></li>
|
||||
<li><p><code>O,0,l,1</code> are used to confusing effect, local names
|
||||
obscure global names.</p></li>
|
||||
<li><p>Globals are used to pass information between routines: don’t
|
||||
reorder “unrelated” statements….</p></li>
|
||||
<li><p>How does the compatibility mode account for the fundamentally
|
||||
different manner of computation?</p></li>
|
||||
<li><p>The algorithm is quite efficient; reserved word detection and
|
||||
trigraph parsing particularly so.</p></li>
|
||||
<li><p>This may be the first obfuscated submission that provides the
|
||||
means for its own de-obfuscation.</p></li>
|
||||
</ul>
|
||||
<h3 id="rule-2">Rule 2:</h3>
|
||||
<p>The keyword list is externalized as an include file. This presents a
|
||||
useful feature for the source code: not only can the reserved word
|
||||
script above be produced, but the tool can be rebuilt with any set of
|
||||
reserved words, just by using a different list. For instance: removing
|
||||
all the secondary keywords; removing all the C11 keywords; trying just
|
||||
K&R C. Since C++ and Java share the same operators as C, just change
|
||||
the keyword list and <code>tac</code> will correctly tokenize both of
|
||||
these; the tokens <code>>>></code> and <code>::</code> can be
|
||||
handled with a short post-filter (<a href="tokenfix.sh">tokenfix.sh</a>,
|
||||
included).</p>
|
||||
<p>I believe this entry may also satisfy the request for gratuitous use
|
||||
of all the C11 keywords? Whether this context satisfies “intended C
|
||||
language context” is a matter of interpretation. ;-) And
|
||||
<code>tac</code> is ready for the IOCCC++ contest. And the IOJCC trash
|
||||
can.</p>
|
||||
<p>The following reserved word files are included:</p>
|
||||
<ul>
|
||||
<li><a href="kandr">kandr</a> from my venerable 1978 18th printing “The
|
||||
C Programming Language”</li>
|
||||
<li><a href="v7unix">v7unix</a> 7th edition Unix source code, extracted
|
||||
from c00.c</li>
|
||||
<li><a href="kandr2">kandr2</a> from my 1988 1st printing “The C
|
||||
Programming Language”, 2e</li>
|
||||
<li><a href="ansi">ansi</a> ANSI X3.159-1989</li>
|
||||
<li><a href="c99">c99</a> ISO/IEC 9899:1999(E)</li>
|
||||
<li><a href="c11">c11</a> ISO/IEC 9899:201x(E) N1570</li>
|
||||
<li><a href="c++98">c++98</a>
|
||||
http://en.cppreference.com/w/cpp/keyword</li>
|
||||
<li><a href="c++11">c++11</a> ISO/IEC 14882:2011(E) N3337
|
||||
2012-01-16</li>
|
||||
<li><a href="c++14">c++14</a> ISO/IEC 14882:2014(E) N4296
|
||||
2014-11-09</li>
|
||||
<li><a href="java8">java8</a> <a
|
||||
href="http://docs.oracle.com/javase/specs/index.html"
|
||||
class="uri">http://docs.oracle.com/javase/specs/index.html</a></li>
|
||||
<li><a href="ioccc.kw.freq">ioccc.kw.freq</a> c11 + additional words,
|
||||
sorted on frequency of occurrence in IOCCC winners</li>
|
||||
</ul>
|
||||
<p>NB: The keyword file used in this code is derived from the list in <a
|
||||
href="https://www.ioccc.org/2018/iocccsize.c">iocccsize.c</a>, which is
|
||||
neither complete (<code>#define</code>, <code>#ifndef</code>,
|
||||
<code>#undef</code> are missing – yes, Virginia knows about
|
||||
<code>#define</code> omitted on purpose), nor correct (many more are
|
||||
added: <code>I</code>, <code>true</code>, <code>bool</code>,
|
||||
<code>compl</code>, …):</p>
|
||||
<div class="sourceCode" id="cb13"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a><span class="kw">(</span><span class="fu">sed</span> <span class="at">-n</span> <span class="st">'1p'</span> c11<span class="kw">;</span> <span class="fu">sed</span> <span class="at">-n</span> <span class="st">'2,$p'</span> ioccc.kw.freq <span class="kw">|</span> <span class="fu">sort</span><span class="kw">)</span> <span class="kw">|</span> <span class="fu">comm</span> <span class="at">-3</span> <span class="at">-</span> c11</span></code></pre></div>
|
||||
<p>That is an obfuscated way to say “diff”. But it also more clearly
|
||||
shows the, um, diffs.</p>
|
||||
<p>The usage string is similarly externalized, providing a better
|
||||
usability string than the limits would otherwise allow. If this is
|
||||
considered bending the rules too far, just <code>-DU=O</code> to get a
|
||||
passible, if cryptic, usage message using no additional octets than
|
||||
without the define. This also allows the builder to configure the amount
|
||||
of help a utility should provide (<a
|
||||
href="https://www.youtube.com/watch?v=VU0GYSA1POs" title="Ants">you want
|
||||
a manpage? Because that’s how you get a manpage.</a>) – a rather
|
||||
significant point of contention made moot.</p>
|
||||
<p>There is definitely abuse of the Rule2 counter, exploiting a
|
||||
“feature” of <code>iocccsize</code>: <code>iocccsize</code> does not
|
||||
Rule2 count <code>{</code>, <code>}</code> and <code>;</code> when
|
||||
followed by whitespace – even within a string! Thus: Freecode, a simple,
|
||||
uncounted, highly obfuscated encoding of a central part of this program.
|
||||
(The reserved word list is not Freecoded, both because it is useful
|
||||
apart from the program, and because Freecode is not entirely free.)</p>
|
||||
<ul>
|
||||
<li>Some restrictions apply. Not approved for all uses. Some assembly
|
||||
required.</li>
|
||||
</ul>
|
||||
<h3 id="compilation">Compilation:</h3>
|
||||
<p>The code is ANSI compliant, but it does have a string longer than 509
|
||||
characters. It has been tested on OSX and Linux, Clang and GCC.</p>
|
||||
<p>The code uses trigraphs, ironically: it parses trigraphs with
|
||||
trigraph code. Because that’s funny. And it remains obscure after, so
|
||||
trigraphs are not used for obfuscation. Thus
|
||||
<code>-trigraphs -Wno-trigraphs</code> (which is also humorous).</p>
|
||||
<p>It’s obfuscated C. Thus
|
||||
<code>-Wno-parentheses -Wno-empty-body -Wno-char-subscripts</code>.</p>
|
||||
<p>The code uses <code>unsigned char</code>s, but C strings are
|
||||
<code>signed</code>. Thus <code>-Wno-pointer-sign</code>. NB: This is
|
||||
<em>not</em> a portability concern, the one string holds only printable
|
||||
ASCII characters.</p>
|
||||
<p>Thus:</p>
|
||||
<div class="sourceCode" id="cb14"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a><span class="fu">cc</span> <span class="at">-ansi</span> <span class="at">-Wall</span> <span class="at">-trigraphs</span> <span class="at">-Wno-trigraphs</span> <span class="at">-Wno-parentheses</span> <span class="at">-Wno-empty-body</span> <span class="at">-Wno-char-subscripts</span> <span class="at">-Wno-pointer-sign</span> <span class="at">-DU</span><span class="op">=</span>O <span class="at">-DW</span><span class="op">=</span><span class="dt">\"</span>keywords<span class="dt">\"</span> <span class="at">-o</span> prog prog.c</span></code></pre></div>
|
||||
<h3 id="coda">Coda:</h3>
|
||||
<p><a href="/winners.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a>
|
||||
was relentless in his pursuit of bugs. Thanks to his reports, the
|
||||
version of <a href="unob.sh">unob.sh</a> is stronger, <code>tac</code>
|
||||
groks digraphs, <a href="tokenfix.sh">tokenfix.sh</a> corrects for
|
||||
missing digraphs in <a href="prog.c">prog.c</a>, and the program <a
|
||||
href="manpage.sh">manpage.sh</a> was added to the corpus.</p>
|
||||
<p><a href="manpage.sh">manpage.sh</a> is a useful program that turns
|
||||
ASCII versions of man pages (e.g. <a href="tac.man">tac.man</a>) into
|
||||
real man pages. It works for C and C-like languages, command lines, and
|
||||
was designed to handle man page sections 1-8. It works well on most
|
||||
inputs, but tends to need some raw nroff for more fancy constructions,
|
||||
such as combined arguments (e.g. the <code>-r</code> and <code>-s</code>
|
||||
arguments to tac are not recognised when written as <code>-rs</code> in
|
||||
prose).</p>
|
||||
<p>Try:</p>
|
||||
<div class="sourceCode" id="cb15"><pre
|
||||
class="sourceCode sh"><code class="sourceCode bash"><span id="cb15-1"><a href="#cb15-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./manpage.sh</span> tac</span>
|
||||
<span id="cb15-2"><a href="#cb15-2" aria-hidden="true" tabindex="-1"></a></span>
|
||||
<span id="cb15-3"><a href="#cb15-3" aria-hidden="true" tabindex="-1"></a><span class="ex">./manpage.sh</span> <span class="at">-h</span></span>
|
||||
<span id="cb15-4"><a href="#cb15-4" aria-hidden="true" tabindex="-1"></a><span class="ex">./manpage.sh</span> <span class="at">-h</span> <span class="kw">|</span> <span class="ex">./manpage.sh</span></span>
|
||||
<span id="cb15-5"><a href="#cb15-5" aria-hidden="true" tabindex="-1"></a><span class="ex">./manpage.sh</span> <span class="at">-h</span> <span class="kw">|</span> <span class="ex">./manpage.sh</span> <span class="at">-R</span> <span class="kw">|</span> <span class="fu">less</span></span>
|
||||
<span id="cb15-6"><a href="#cb15-6" aria-hidden="true" tabindex="-1"></a><span class="ex">./manpage.sh</span> <span class="at">-h</span> <span class="kw">|</span> <span class="ex">./manpage.sh</span> <span class="at">-P</span> <span class="kw">|</span> <span class="fu">lpr</span></span></code></pre></div>
|
||||
<p>NOTE: in 2023 the <code>tac.man</code> was updated to proper man
|
||||
format and renamed <a href="tac.1">tac.1</a>.</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>
|
||||
<!-- START: this line starts content generated by: bin/gen-inventory.sh -->
|
||||
|
||||
<h1 id="inventory-for-2018burton2"><a name="inventory"></a>Inventory for
|
||||
2018/burton2</h1>
|
||||
<h2 id="primary-files">Primary files</h2>
|
||||
<ul>
|
||||
<li><a href="index.html">index.html</a> - winner home page</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/prog.c">prog.c</a>
|
||||
- winning source</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/Makefile">Makefile</a>
|
||||
- winner Makefile</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/prog.orig.c">prog.orig.c</a>
|
||||
- original source</li>
|
||||
<li><a href="discrepancies.html">discrepancies.html</a> - field-by-field
|
||||
difference between iocccsize and ion</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/freqcount.sh">freqcount.sh</a>
|
||||
- frequency count utility</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/tac.1">tac.1</a>
|
||||
- tokenize and count man page</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/tokcount.sh">tokcount.sh</a>
|
||||
- count the tokens produced by prog -t</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/try.sh">try.sh</a>
|
||||
- how to run</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/fixed_iocccsize.c">fixed_iocccsize.c</a>
|
||||
- iocccsize with patch applied</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/ioc_without_quote">ioc_without_quote</a>
|
||||
- test suite data</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/ioccc.kw.freq">ioccc.kw.freq</a>
|
||||
- iocccsize keywords: sorted by 201x frequency</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/iocccbug01.c">iocccbug01.c</a>
|
||||
- test cases demonstrating problems with iocccsize</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/iocccbug02.c">iocccbug02.c</a>
|
||||
- test cases demonstrating problems with iocccsize</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/iocccbug03.c">iocccbug03.c</a>
|
||||
- test cases demonstrating problems with iocccsize</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/iocccbug04.c">iocccbug04.c</a>
|
||||
- test cases demonstrating problems with iocccsize</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/iocccbug05.c">iocccbug05.c</a>
|
||||
- test cases demonstrating problems with iocccsize</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/iocccbug06.c">iocccbug06.c</a>
|
||||
- test cases demonstrating problems with iocccsize</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/manpage.sh">manpage.sh</a>
|
||||
- turns ASCII versions of man into real man pages</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/mkkeywords.sh">mkkeywords.sh</a>
|
||||
- reads a file from variations produces string for prog.c</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/results.k">results.k</a>
|
||||
- results with -k</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/tac.c">tac.c</a>
|
||||
- tokenize and count C-like languages</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/test01.c">test01.c</a>
|
||||
- test case source code</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/test02.c">test02.c</a>
|
||||
- test case source code</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/test03.c">test03.c</a>
|
||||
- test case source code</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/test04.c">test04.c</a>
|
||||
- test case source code</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/test05.c">test05.c</a>
|
||||
- test case source code</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/test06.c">test06.c</a>
|
||||
- test case source code</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/test07.c">test07.c</a>
|
||||
- test case source code</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/test08.c">test08.c</a>
|
||||
- test case source code</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/test09.c">test09.c</a>
|
||||
- test case source code</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/test10.c">test10.c</a>
|
||||
- test case source code</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/test11.c">test11.c</a>
|
||||
- test case source code</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/test12.c">test12.c</a>
|
||||
- test case source code</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/test13.c">test13.c</a>
|
||||
- test case source code</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/test14.c">test14.c</a>
|
||||
- test case source code</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/tokenfix.sh">tokenfix.sh</a>
|
||||
- short post-filter</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/unob.sh">unob.sh</a>
|
||||
- refined version of de-obfuscator</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/ansi">ansi</a>
|
||||
- reserved words for a given C standard</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/author-README.txt">author-README.txt</a>
|
||||
- author supplied README</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/c++11">c++11</a>
|
||||
- reserved words for a given C standard</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/c++14">c++14</a>
|
||||
- reserved words for a given C standard</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/c++98">c++98</a>
|
||||
- reserved words for a given C standard</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/c11">c11</a>
|
||||
- reserved words for a given C standard</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/c99">c99</a>
|
||||
- reserved words for a given C standard</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/java8">java8</a>
|
||||
- reserved words for a Java v8</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/kandr2">kandr2</a>
|
||||
- reserved words for a given C standard</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/kandr">kandr</a>
|
||||
- reserved words for a given C standard</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/patch">patch</a>
|
||||
- patch to fix iocccsize source</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/results">results</a>
|
||||
- results without -k</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/runtest.sh">runtest.sh</a>
|
||||
- test suite</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/spotcheck.sh">spotcheck.sh</a>
|
||||
- script to test a lot of files vs iocccsize</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/v7unix">v7unix</a>
|
||||
- reserved words for a given C standard</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/spotdiff.sh">spotdiff.sh</a>
|
||||
- summarize the results of spotcheck</li>
|
||||
<li><a href="2018_burton2.tar.bz2">2018_burton2.tar.bz2</a> - download
|
||||
winning source</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/src.doc.txt">src.doc.txt</a>
|
||||
- SPOILER WARNING hints about the source</li>
|
||||
</ul>
|
||||
<h2 id="secondary-files">Secondary files</h2>
|
||||
<ul>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/.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/2018/burton2/.winner.json">.winner.json</a>
|
||||
- description of winner in JSON</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/README.md">README.md</a>
|
||||
- markdown source for index.html</li>
|
||||
<li><a
|
||||
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2018/burton2/discrepancies.md">discrepancies.md</a>
|
||||
- markdown source for discrepancies.html</li>
|
||||
</ul>
|
||||
|
||||
<!-- END: next line ends content generated by: bin/gen-inventory.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%2F2018%2Fburton2%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 -->
|
||||
Reference in new issue
Block a user