force use of pandoc version >= 3.1.12.2

The `bin/pandoc-wrapper.sh` tool will verify that the ssytem
has a recent enough version of `pandoc(1)`.

We explain why we insist on `pandoc(1)`. version >= 3.1.12.2
in comments where the $PANDOC_MIN_VERSION is set.

Added `--wrap=preserve` as a default argument to `pandoc(1)`.
While this change will impact every HTML file generated,
we believe this will improve the ability of someone to look
at the generated HTML and correlate with the original markdown.

Changed `bin/pandoc-wrapper.sh` VERSION from "1.4.2 2024-03-17"
to "1.4.3 2024-03-18".

Performed `make www` to achieve all of the above and to generate
HTML using the new  `--wrap=preserve` `pandoc(1)` mode.
This commit is contained in:
Landon Curt Noll committed 2024-03-18 01:26:39 -07:00
1 parent 9eb7a54e9f
commit b0b212acb1
402 files changed
+37061 -55132

No files matched your search

+152 -208
View File
@@ -129,9 +129,9 @@
<h2 id="author"><a name="author"></a>Author:</h2>
<ul>
<li>Name: <a href="../../authors.html#Kimmo_Fredriksson">Kimmo
Fredriksson</a><br> Location: <a href="../../location.html#FI">FI</a> -
<em>Republic of Finland </em> (<em>Finland</em>) <br><br></li>
<li>Name: <a href="../../authors.html#Kimmo_Fredriksson">Kimmo Fredriksson</a><br>
Location: <a href="../../location.html#FI">FI</a> - <em>Republic of Finland </em> (<em>Finland</em>)
<br><br></li>
</ul>
<!-- END: next line ends content generated by: bin/output-index-author.sh -->
@@ -144,91 +144,80 @@ Fredriksson</a><br> Location: <a href="../../location.html#FI">FI</a> -
<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#2011_fredriksson">2011 fredriksson bugs</a>.</p>
<p>For more detailed information see <a href="../../bugs.html#2011_fredriksson">2011 fredriksson 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">./fredriksson</span> <span class="pp">[-</span><span class="ss">icvtnk#</span><span class="pp">]</span> regexp <span class="op">&lt;</span> file</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>
<p>NOTE: you need to be allowed to change your stack size or else the
last command in the script would likely cause the program to dump core,
which is why the script checks the exit code of <code>ulimit</code>
first.</p>
<p>NOTE: you need to be allowed to change your stack size or else the last command
in the script would likely cause the program to dump core, which is why the
script checks the exit code of <code>ulimit</code> first.</p>
<h2 id="judges-remarks">Judges’ remarks:</h2>
<p>The author of this entry was making sure that it does not win the
“Best Short Program” award. On the outside, the program behaves as an
approximate <code>grep</code>. On the inside, it is a <a
href="https://en.wikipedia.org/wiki/Burrows-Wheeler_transform">Burrows-Wheeler
transform</a> decompressor that produces the source code of the actual
obfuscated approximate <code>grep</code> program and calls it. As an
exercise, try writing the compressor.</p>
<p>The author of this entry was making sure that it does not win the “Best Short
Program” award. On the outside, the program behaves as an approximate <code>grep</code>.
On the inside, it is a <a href="https://en.wikipedia.org/wiki/Burrows-Wheeler_transform">Burrows-Wheeler
transform</a> decompressor
that produces the source code of the actual obfuscated approximate <code>grep</code>
program and calls it. As an exercise, try writing the compressor.</p>
<h2 id="authors-remarks">Author’s remarks:</h2>
<h3 id="approximate-grep">Approximate grep</h3>
<p>Implements a variant of <code>grep</code>.</p>
<h3 id="usage">Usage</h3>
<p>To search regexp from file, do:</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="ex">./fredriksson</span> <span class="pp">[-</span><span class="ss">icvtnk#</span><span class="pp">]</span> regexp <span class="op">&lt;</span> file</span></code></pre></div>
<p>Pipes might not work, see the section Limitations. The options
<code>-i</code>, <code>-c</code>, <code>-v</code> and <code>-n</code>
are the classic ones:</p>
<p>Pipes might not work, see the section Limitations.
The options <code>-i</code>, <code>-c</code>, <code>-v</code> and <code>-n</code> are the classic ones:</p>
<ul>
<li><p><code>-i</code> Ignore case.</p></li>
<li><p><code>-c</code> Count only, prints the number of matches, but not
the matching lines.</p></li>
<li><p><code>-c</code> Count only, prints the number of matches, but not the matching lines.</p></li>
<li><p><code>-v</code> Invert match.</p></li>
<li><p><code>-n</code> Prefixes each printed line by its line number
(only if <code>-c</code> was not given).</p></li>
<li><p><code>-n</code> Prefixes each printed line by its line number (only if
<code>-c</code> was not given).</p></li>
</ul>
<p>This version of <code>grep</code> recognizes two more options, not
present in normal <code>grep</code> implementations:</p>
<p>This version of <code>grep</code> recognizes two more options, not present in normal
<code>grep</code> implementations:</p>
<ul>
<li><p><code>-kN</code> Permit <code>N</code> insertions, deletions or
mismatches of characters in the matches (aka <a
href="https://en.wikipedia.org/wiki/Edit_distance">edit-distance</a>).
E.g. “<code>obfuscated</code>” matches “<code>obfuscation</code>” with
one deletion and two mismatches. Likewise, “<code>obfuscate</code>” and
“<code>oversimplify</code>” match with 7 <a
href="https://en.wikipedia.org/wiki/Edit_distance#Formal_definition_and_properties">edit
operations</a>. The default is <code>-k0</code> (i.e. exact
match).</p></li>
<li><p><code>-t</code> Add local transpositions to the set of allowed <a
href="https://en.wikipedia.org/wiki/Edit_distance#Formal_definition_and_properties">edit-operations</a>.
That is, “<code>ab</code>” matches “<code>ba</code>” with one
transposition (swap), and “<code>obfuscated</code>” matches
“<code>bofsuact</code>” with three swaps and two insertions, i.e. use
<code>-tk5</code> to find this.</p></li>
<li><p><code>-kN</code> Permit <code>N</code> insertions, deletions or mismatches of characters in the
matches (aka
<a href="https://en.wikipedia.org/wiki/Edit_distance">edit-distance</a>). E.g.
“<code>obfuscated</code>” matches “<code>obfuscation</code>”
with one deletion and two mismatches. Likewise, “<code>obfuscate</code>” and
“<code>oversimplify</code>” match with 7 <a href="https://en.wikipedia.org/wiki/Edit_distance#Formal_definition_and_properties">edit
operations</a>.
The default is <code>-k0</code> (i.e. exact match).</p></li>
<li><p><code>-t</code> Add local transpositions to the set of allowed
<a href="https://en.wikipedia.org/wiki/Edit_distance#Formal_definition_and_properties">edit-operations</a>.
That is, “<code>ab</code>” matches “<code>ba</code>” with one transposition (swap), and
“<code>obfuscated</code>” matches “<code>bofsuact</code>” with three swaps and two insertions,
i.e. use <code>-tk5</code> to find this.</p></li>
</ul>
<p>Of course, one could construct a standard <a
href="https://www.regular-expressions.info">regexp</a> that matches the
same patterns, but the problem is that such a regexp grows exponentially
in size when the number of allowed <a
href="https://en.wikipedia.org/wiki/Edit_distance#Formal_definition_and_properties">edit
operations</a> is increased.</p>
<p>Of course, one could construct a standard
<a href="https://www.regular-expressions.info">regexp</a> that matches the same
patterns, but the problem is that such a regexp grows exponentially in
size when the number of allowed <a href="https://en.wikipedia.org/wiki/Edit_distance#Formal_definition_and_properties">edit
operations</a>
is increased.</p>
<p>This version does not recognize all regular expressions, but the
following are allowed:</p>
<ul>
<li><p>Wildcard: <code>.</code> (dot) matches any character.</p></li>
<li><p>Bracket expression: list of characters enclosed by <code>[</code>
and <code>]</code>, matches any single character in the list.</p></li>
<li><p>Range expression: two characters separated by hyphen and enclosed
in brackets, matches any character that is lexicographically between the
two characters (inclusive). E.g. <code>[a-d]</code> is the same as
<code>[abcd]</code>.</p></li>
<li><p>Bracket expression: list of characters enclosed by <code>[</code> and <code>]</code>,
matches any single character in the list.</p></li>
<li><p>Range expression: two characters separated by hyphen and enclosed in
brackets, matches any character that is lexicographically between the
two characters (inclusive). E.g. <code>[a-d]</code> is the same as <code>[abcd]</code>.</p></li>
</ul>
<p>The special characters must be escaped, if they are to be taken
literally (e.g. <code>\.</code> to match period). You might want to
protect these with <code>'</code>, i.e. use <code>'foo\[bar'</code>
instead of <code>foo\[bar</code>. If you want to use the literal
<code>-</code> in bracket expression, protect that too
(<code>\-</code>), otherwise this is not needed. Note that the syntax
differs from standard (?) grep a bit, i.e. in plain grep you can use
<code>]</code> and <code>-</code> in bracket expressions by putting
<code>]</code> as the first character, and putting <code>-</code>
last.</p>
literally (e.g. <code>\.</code> to match period). You might want to protect
these with <code>'</code>, i.e. use <code>'foo\[bar'</code> instead of <code>foo\[bar</code>. If you want to
use the literal <code>-</code> in bracket expression, protect that too (<code>\-</code>),
otherwise this is not needed. Note that the syntax differs from standard
(?) grep a bit, i.e. in plain grep you can use <code>]</code> and <code>-</code> in bracket
expressions by putting <code>]</code> as the first character, and putting <code>-</code> last.</p>
<h3 id="other-uses">Other uses</h3>
<ul>
<li>You can use this in place of <a
href="https://en.wikipedia.org/wiki/Cat_(Unix)">cat</a>. Just say</li>
<li>You can use this in place of <a href="https://en.wikipedia.org/wiki/Cat_(Unix)">cat</a>.
Just say</li>
</ul>
<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="ex">./fredriksson</span> <span class="at">-k3</span> cat <span class="op">&lt;</span> file</span></code></pre></div>
<ul>
@@ -237,52 +226,42 @@ href="https://en.wikipedia.org/wiki/Cat_(Unix)">cat</a>. Just say</li>
<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="ex">./fredriksson</span> <span class="at">-nk3</span> cat <span class="op">&lt;</span> file</span></code></pre></div>
<h3 id="other-features">Other features</h3>
<ul>
<li><p>It is assumed that the user knows how to feed correct input to
the program. If undefined options are given, the result is also
undefined. This is a feature.</p></li>
<li><p>It may consume huge amounts of memory, and a stack overflow may
occur. This results in Segmentation fault (or the equivalent of your
favorite system, such as Bus error). This is a feature, that can be used
to detect overly long lines in the input file, such as checking the
length of one liners in IOCCC entries, just adjust your stack size to a
suitable threshold, and search for “<code>ioccc</code>”, with option
<code>-vk5</code>.</p></li>
<li><p>It is assumed that the user knows how to feed correct input to the
program. If undefined options are given, the result is also undefined.
This is a feature.</p></li>
<li><p>It may consume huge amounts of memory, and a stack overflow may occur.
This results in Segmentation fault (or the equivalent of your favorite
system, such as Bus error). This is a feature, that can be used to detect
overly long lines in the input file, such as checking the length of one
liners in IOCCC entries, just adjust your stack size to a suitable
threshold, and search for “<code>ioccc</code>”, with option <code>-vk5</code>.</p></li>
</ul>
<h3 id="limitations-and-remarks">Limitations and remarks</h3>
<ul>
<li><p>Using warning options (such as <code>-Wall</code>) when building
gives a lot of warning, such as
<code>suggest parentheses around '&amp;&amp;' within '||'</code>,
<code>value computed is not used</code>,
<code>implicit declaration of function 'putchar'</code>,
<code>implicit declaration of function 'getchar'</code>,
<code>control reaches end of non-void function</code> and
<code>format not a string literal and no format arguments</code>. Please
ignore them all, since they just try to tell you that the source is
obfuscated.</p></li>
<li><p>Only standard input is handled. And <em>only</em> if
<code>stdin</code> comes from a file, i.e. pipes may or may not work. If
you want to count only (<code>-c</code> option), then this shouldn’t be
an issue.</p></li>
<li><p>Using warning options (such as <code>-Wall</code>) when building gives a lot of warning,
such as <code>suggest parentheses around '&amp;&amp;' within '||'</code>, <code>value computed is not used</code>, <code>implicit declaration of function 'putchar'</code>, <code>implicit declaration of function 'getchar'</code>, <code>control reaches end of non-void function</code> and <code>format not a string literal and no format arguments</code>.
Please ignore them all, since they just try to tell you that the source
is obfuscated.</p></li>
<li><p>Only standard input is handled. And <em>only</em> if <code>stdin</code> comes from a file,
i.e. pipes may or may not work. If you want to count only (<code>-c</code> option),
then this shouldn’t be an issue.</p></li>
<li><p>The total length of the (preprocessed) pattern is at most
<code>sizeof(long)*CHAR_BIT</code>. That does not count things like
bracket expressions or escape chars, that is, the pattern
<code>'a[bcd]e\.f'</code> is 5 chars long, not 10 chars. That does not
mean that the matched substring in the standard input has this limit, as
using the edit operations can make the string longer. However, no
assumptions are made for <code>sizeof(long)</code>. In fact, you can
easily use <code>long long</code> instead,</p></li>
<li><p>Depending on the file, it might require a lot of stack space. If
the program segfaults (because of this), say</p>
<code>sizeof(long)*CHAR_BIT</code>. That does not count things like bracket expressions
or escape chars, that is, the pattern <code>'a[bcd]e\.f'</code> is 5 chars long, not
10 chars. That does not mean that the matched substring in the standard
input has this limit, as using the edit operations can make the string
longer. However, no assumptions are made for <code>sizeof(long)</code>. In fact,
you can easily use <code>long long</code> instead,</p></li>
<li><p>Depending on the file, it might require a lot of stack space. If the
program segfaults (because of this), say</p>
<p>ulimit -s unlimited</p>
<p>cross your fingers, hope it is enough, and try again.</p></li>
<li><p>Assumes C99 standard, because of the one very long line. Most C
compilers handle this just fine even in C89 mode, though.</p></li>
<li><p>The code should be reasonably portable, it assumes standard ASCII
codes for each char, and that a C compiler is on <code>$PATH</code>; the
latter is hard coded to be ‘gcc’, but any compiler would work, provided
that it supports C99, or long lines as an extension. This code has been
tested on:</p>
<li><p>Assumes C99 standard, because of the one very long line. Most C compilers
handle this just fine even in C89 mode, though.</p></li>
<li><p>The code should be reasonably portable, it assumes standard ASCII codes
for each char, and that a C compiler is on <code>$PATH</code>; the latter is hard coded
to be ‘gcc’, but any compiler would work, provided that it supports
C99, or long lines as an extension. This code has been tested on:</p>
<ul>
<li>GNU/Linux FC4, i386, gcc</li>
<li>GNU/Linux FC7, x86_64, gcc 4.1.2, tcc 0.9.24 and icc 10.0</li>
@@ -295,154 +274,119 @@ tested on:</p>
</ul>
<p>(Btw, tcc has its roots in IOCCC…)</p></li>
</ul>
<h3 id="obfuscations-a.k.a.-spoilers">Obfuscations (a.k.a.
spoilers…)</h3>
<h3 id="obfuscations-a.k.a.-spoilers">Obfuscations (a.k.a. spoilers…)</h3>
<ul>
<li><p>The initialized char array includes the source code of the real
program, as well as its name and commands to build and run it, all <a
href="https://en.wikipedia.org/wiki/Burrows-Wheeler_transform">Burrows-Wheeler</a>
-transformed, then run-length-encoded with unary coding. The main
program extracts and builds that, and then calls it. More precisely, the
command to build is</p>
<li><p>The initialized char array includes the source code of the real program,
as well as its name and commands to build and run it, all
<a href="https://en.wikipedia.org/wiki/Burrows-Wheeler_transform">Burrows-Wheeler</a>
-transformed, then run-length-encoded with unary coding. The main program
extracts and builds that, and then calls it. More precisely, the command
to build is</p>
<pre><code> gcc -O3 ag.c -o ag</code></pre>
<p>To change that you need to edit the char array <code>p[]</code> and
(possibly) two specially encoded constants, <code>-~('('*'(')</code> and
<code>'C'*' '-'-'</code>. The extracted source (<code>ag.c</code>) is
obfuscated as well.</p>
<p>To change that you need to edit the char array <code>p[]</code> and (possibly) two
specially encoded constants, <code>-~('('*'(')</code> and <code>'C'*' '-'-'</code>.
The extracted source (<code>ag.c</code>) is obfuscated as well.</p>
<p>(The original version also deleted the generated source and the
corresponding binary after running it, but this feature was removed from
the submitted entry.)</p></li>
<li><p>The code demonstrates several useful programming paradigms, such
as:</p>
corresponding binary after running it, but this feature was removed
from the submitted entry.)</p></li>
<li><p>The code demonstrates several useful programming paradigms, such as:</p>
<ul>
<li>recursion to remove all loops</li>
<li>subroutines (<code>main()</code> contains several logical
subroutines, selected by the first argument)</li>
<li>subroutines (<code>main()</code> contains several logical subroutines,
selected by the first argument)</li>
<li>function pointers</li>
</ul></li>
<li><p>Algorithmically, it incorporates the following:</p>
<ul>
<li>(inverse) Burrows-Wheeler transform (used also e.g. in
<code>bzip2(1)</code>)</li>
<li>data compression (really expansion :-), run-length-encoding, unary
coding (this is why it is expansion rather than compression)</li>
<li>(inverse) Burrows-Wheeler transform (used also e.g. in <code>bzip2(1)</code>)</li>
<li>data compression (really expansion :-), run-length-encoding,
unary coding (this is why it is expansion rather than compression)</li>
<li>approximate string matching</li>
<li>dynamic programming to compute the edit distance</li>
<li>parallel computation in sequential computers (by packing several
objects into a single <code>long</code>, to speed up the dynamic
<li>parallel computation in sequential computers (by packing
several objects into a single <code>long</code>, to speed up the dynamic
programming)</li>
<li>self extracting, compiling and running code</li>
</ul></li>
<li><p>As a C program, it demonstrates that</p>
<ul>
<li>a C subset without reserved words is complete enough, excluding data
type specific things (<code>int</code>, <code>char</code>,
<code>void</code> …)</li>
<li>only letters are needed (i.e. the digits <code>0-9</code> are
not)</li>
<li>only one statement is enough to code any program (plus variable
definitions)</li>
<li>a C subset without reserved words is complete enough,
excluding data type specific things (<code>int</code>, <code>char</code>, <code>void</code> …)</li>
<li>only letters are needed (i.e. the digits <code>0-9</code> are not)</li>
<li>only one statement is enough to code any program (plus
variable definitions)</li>
<li>white space has other uses than just indenting the code</li>
</ul></li>
<li><p>It also shows the power of boolean logic and bitwise
arithmetic.</p></li>
<li><p>This is the first (?) entry in the history of IOCCC, that cannot
be totally de-obfuscated by the author. This is due to the clever choice
of the actual algorithm, that is obfuscated by nature, and it is an open
<li><p>It also shows the power of boolean logic and bitwise arithmetic.</p></li>
<li><p>This is the first (?) entry in the history of IOCCC, that cannot be
totally de-obfuscated by the author. This is due to the clever choice of
the actual algorithm, that is obfuscated by nature, and it is an open
research problem whether a simpler algorithm exists, with the same time
complexity.</p></li>
<li><p>The main obfuscation comes from using only arithmetic and boolean
(short-circuit) logic combined with recursion to remove all loops and
if-then-else constructs (also, no ternary <code>?:</code> constructs are
present). Two’s complement representation of integers is also abused.
E.g. instead of writing <code>x++</code> or <code>x-1</code>, it is much
better to write <code>x=-~x</code> and <code>~-x</code>.</p></li>
<li><p>No numerical values, other than in the initialized char array,
try</p>
if-then-else constructs (also, no ternary <code>?:</code> constructs are present).
Two’s complement representation of integers is also abused. E.g. instead
of writing <code>x++</code> or <code>x-1</code>, it is much better to write <code>x=-~x</code> and <code>~-x</code>.</p></li>
<li><p>No numerical values, other than in the initialized char array, try</p>
<pre><code> ./fredriksson -ck0 [0-9] &lt; fredriksson.c</code></pre>
<p>This should print 1, as there is a number <code>3</code> in the char
array (only). You can also try</p>
<p>This should print 1, as there is a number <code>3</code> in the char array (only).
You can also try</p>
<pre><code> ./fredriksson -ck0 [0-9] &lt; ag.c</code></pre>
<p>after running <code>fredriksson</code> at least once (since this
generates that <code>ag.c</code> file), and this should print
0.</p></li>
<li><p>The source code is best viewed with cat (or using the program
itself), instead of some editor. (This is a somewhat system dependent
thing.)</p>
<p>after running <code>fredriksson</code> at least once (since this generates that
<code>ag.c</code> file), and this should print 0.</p></li>
<li><p>The source code is best viewed with cat (or using the program itself),
instead of some editor. (This is a somewhat system dependent thing.)</p>
<p>One reason for this is that the code builds (some of the) constant
values from string literal <code>"\b"</code>, except that the backspace
<code>\b</code> is not escaped like that; the source uses the raw ASCII
value (<code>010</code> octal) instead. Thus when viewing with cat or
something, that backspace erases the leading quotation mark. Makes it
appear uncompilable, and it is: if you copy-paste the cat output from
terminal to some editor, save it, the result would not compile.</p>
<p>Some other constants are built from ASCII values of
<code>char</code>s.</p>
<p>Besides of making the code hard to read, all this makes it also quite
large.</p></li>
<li><p>Running it through GNU <code>indent(1)</code> or
<code>bcpp(1)</code> (C beautifiers) does not beautify it a bit. In
fact, <code>indent</code> makes it only worse (at least with the default
values from string literal <code>"\b"</code>, except that the backspace <code>\b</code> is not
escaped like that; the source uses the raw ASCII value (<code>010</code> octal) instead.
Thus when viewing with cat or something, that backspace erases the leading
quotation mark. Makes it appear uncompilable, and it is: if you copy-paste
the cat output from terminal to some editor, save it, the result would not
compile.</p>
<p>Some other constants are built from ASCII values of <code>char</code>s.</p>
<p>Besides of making the code hard to read, all this makes it also quite large.</p></li>
<li><p>Running it through GNU <code>indent(1)</code> or <code>bcpp(1)</code> (C beautifiers) does not beautify
it a bit. In fact, <code>indent</code> makes it only worse (at least with the default
options). Running it through the preprocessor does basically nothing,
since no <code>#define</code>s are used.</p></li>
<li><p>Some <em>abuse of the rules</em>. The number of non-whitespace
and <code>;</code>, <code>{</code> and <code>}</code> chars is below the
limit, but most of the whitespace chars are in an <em>initialized
character array</em>. That is, the number of chars in the program
exceeds the 2048 limit. However, whitespace is whitespace and the rules
did not specify that these must be in between the statements. A
character is a whitespace if <code>isspace()</code> returns non-zero
value. Even if deleting even one of those chars it breaks the program!
(This does not apply to the generated source
<code>ag.c</code>.)</p></li>
<li><p>Some <em>abuse of the rules</em>. The number of non-whitespace and <code>;</code>, <code>{</code>
and <code>}</code> chars is below the limit, but most of the whitespace chars are
in an <em>initialized character array</em>. That is, the number of chars in the
program exceeds the 2048 limit. However, whitespace is whitespace and
the rules did not specify that these must be in between the statements.
A character is a whitespace if <code>isspace()</code> returns non-zero value. Even
if deleting even one of those chars it breaks the program! (This does not
apply to the generated source <code>ag.c</code>.)</p></li>
</ul>
<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>
<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>
<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-2011fredriksson"><a name="inventory"></a>Inventory
for 2011/fredriksson</h1>
<h1 id="inventory-for-2011fredriksson"><a name="inventory"></a>Inventory for 2011/fredriksson</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/2011/fredriksson/fredriksson.c">fredriksson.c</a>
- entry source</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2011/fredriksson/Makefile">Makefile</a>
- entry Makefile</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2011/fredriksson/fredriksson.orig.c">fredriksson.orig.c</a>
- original source</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2011/fredriksson/try.sh">try.sh</a>
- how to run</li>
<li><a href="2011_fredriksson.tar.bz2">2011_fredriksson.tar.bz2</a> -
download entry source</li>
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2011/fredriksson/fredriksson.c">fredriksson.c</a> - entry source</li>
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2011/fredriksson/Makefile">Makefile</a> - entry Makefile</li>
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2011/fredriksson/fredriksson.orig.c">fredriksson.orig.c</a> - original source</li>
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2011/fredriksson/try.sh">try.sh</a> - how to run</li>
<li><a href="2011_fredriksson.tar.bz2">2011_fredriksson.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/2011/fredriksson/.entry.json">.entry.json</a>
- description of entry in JSON</li>
<li><a
href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2011/fredriksson/.gitignore">.gitignore</a>
- list of files that should not be committed under git</li>
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2011/fredriksson/.entry.json">.entry.json</a> - description of entry in JSON</li>
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2011/fredriksson/.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/2011/fredriksson/README.md">README.md</a>
- markdown source for index.html</li>
<li><a href="https://github.com/ioccc-src/temp-test-ioccc/blob/master/2011/fredriksson/README.md">README.md</a> - markdown source for index.html</li>
</ul>
<!-- END: next line ends content generated by: bin/output-index-inventory.sh -->