Merge pull request #167 from xexyl/oregon

Several updates to 2024/ferguson1

Lets update the commits and PRs pending and then process and X's.
This commit is contained in:
Landon Curt Noll authored and GitHub committed 2025-08-03 11:56:20 -07:00
commit 6fec3bb213
5 files changed
+87 -21

No files matched your search

+1
View File
@@ -9,6 +9,7 @@ addpadding
bytecheck bytecheck
bytecount bytecount
byteread byteread
bytes.txt
bytetest bytetest
data data
data.asc data.asc
+38 -10
View File
@@ -46,18 +46,34 @@ figure out how this program actually does what it does.
Before you set off on your adventure to decode this program's logic, make Before you set off on your adventure to decode this program's logic, make
sure you have enough food, ammo, clothes, oxen, and programming supplies. sure you have enough food, ammo, clothes, oxen, and programming supplies.
You’ll be driving for 2170 miles through a wild wilderness inspired You’ll be driving for 2170 miles through a wild wilderness inspired
by Oregon, so you’ll need to be prepared for anything! Regardless of by [Oregon Trail](https://en.wikipedia.org/wiki/The_Oregon_Trail_(series)), so you’ll need to be prepared for anything! Regardless of
how well prepared you are, you will have a devil of a time jumping around how well prepared you are, you will have a devil of a time jumping around
inside this C code. :-) inside this C code. :-)
## Author's remarks: ## Author's remarks:
<div id="devil"> <div id="devil">
### A Pact With the Devil On the Oregon Trail (...and his 134 regrets of goto) ### A Pact With the Devil On the Oregon Trail (...and his 134 regrets of goto)
</div> </div>
<hr style="width:10%;text-align:left;margin-left:0">
> Fun fact: after winning this, the author played the game in gdb from start to
finish and not counting macros but counting all function calls (not libc
functions, functions in prog.c), there were a total of **985** (!) line jumps.
The prog.c, counting `#include`s, `#define`s, functions and some lines that have
only braces, as well as 14 blank lines, has only 85 lines. A very tiny fraction
of the time a line might be repeated in a row ONCE but that does not really matter.
**NOTE**: I actually submitted two versions. This one is not encrypted. The
encrypted one even encrypted emojis without having to decrypt them in order to
print them (and everything else). I have kept references to encryption in this
file even after publication. I do have a copy of it if anyone is interested.
<hr style="width:10%;text-align:left;margin-left:0">
The **Go To Hell In A Handcart Travel Company** PROUDLY welcomes all sinners to The **Go To Hell In A Handcart Travel Company** PROUDLY welcomes all sinners to
our GREATEST destination yet, with: our GREATEST destination yet, with:
@@ -78,7 +94,7 @@ all the way back to the 1950s, all the while taking place in the 1800s),
**PLEASE** either read the (probably totally unnecessary) **PLEASE** either read the (probably totally unnecessary)
[disclaimer](#disclaimer) or skip this perilous journey entirely. Obviously the [disclaimer](#disclaimer) or skip this perilous journey entirely. Obviously the
judges will have no choice in the matter :-) but it's not really for them anyway judges will have no choice in the matter :-) but it's not really for them anyway
but rather in case this wins. but rather in case this wins (which, of course, it did).
Everyone might or might not want to look at the [commentary on the Everyone might or might not want to look at the [commentary on the
jokes](#jokes) as well as the [humour](#humour) section, [historical jokes](#jokes) as well as the [humour](#humour) section, [historical
@@ -2954,7 +2970,7 @@ comparison):
and of course some of those spaces are not necessary but some are. I think you and of course some of those spaces are not necessary but some are. I think you
get the idea: my code is **FAR MORE** compact than the original game (and I do get the idea: my code is **FAR MORE** compact than the original game (and I do
it with **MORE** gotos too) and I do more and even have lots of jokes even in it with **MORE** `goto`s too) and I do more and even have lots of jokes even in
the code, and the code is also thematic! Now to be fair there are some things the code, and the code is also thematic! Now to be fair there are some things
that my code does not do but the original does: it requires you to type some that my code does not do but the original does: it requires you to type some
strings and it requires you to choose how to eat and tactics for the riders. But strings and it requires you to choose how to eat and tactics for the riders. But
@@ -3233,18 +3249,29 @@ traits I do not even know how to describe. Perhaps they would be utterly
ineffable. ineffable.
Actually I wanted to see what it was like. It was VERY amusing - but only Actually I wanted to see what it was like. It was VERY amusing - but only
because I did not have to debug it. I ran out of files to include and I'm low on because I did not have to debug it. For the submission I included line changes
for JUST the third prompt. It looked like:
time (mere hours left) but to get to JUST the third prompt this is the lines it time (mere hours left) but to get to JUST the third prompt this is the lines it
went in the following sequence:
``` ```
19 20 21 32 69 82 34 33 34 47 45 47 50 83 34 33 34 47 45 47 50 83 34 33 34 19 20 21 32 69 82 34 33 34 47 45 47 50 83 34 33 34 47 45 47 50 83 34 33 34
``` ```
The game loop is almost certainly much worse, especially those two for loops I I said the game loop is almost certainly much worse, especially those two for
mentioned, but there is much much more. If this is easier to follow then I'm a loops I mentioned, but there is much much more. If this is easier to follow then
dragon. I'm not a dragon. I have a secret for you: dragons don't exist. Except I'm a dragon. I'm not a dragon. I have a secret for you: dragons don't exist.
on the Oregon Trail. Except on the Oregon Trail.
I was right too: the entire game is worse, far far worse. After this won I did a
full sequence. This is from start to finish and I include it for your amusement.
Or horror. There are a few times where the line is the same but that only shows
how very often the line changes. It is a total of 985 changes, counting
function calls (i.e. each call to one of the few functions is a jump); calls to
the macros are not counted.
This is in a program that is JUST 85 lines! A program that has only 85 lines
COUNTING the `#include`s, `#define`s, other functions and 14 blank lines that
jumps 985 times is astonishing.
> I have yet to see a single study that supported the supposition that GOTOs are > I have yet to see a single study that supported the supposition that GOTOs are
harmful (I presume this is not because nobody has tried). Nonetheless, people harmful (I presume this is not because nobody has tried). Nonetheless, people
@@ -3263,6 +3290,7 @@ my program - or maintain it. Or write it.
It would have been SO MUCH EASIER if I did not use 134 `goto`s. Actually, even a It would have been SO MUCH EASIER if I did not use 134 `goto`s. Actually, even a
tiny portion of that would make it harder. Nobody, whether they're in their tiny portion of that would make it harder. Nobody, whether they're in their
right mind or not, would WANT to maintain this, or something even close to it. right mind or not, would WANT to maintain this, or something even close to it.
Feel free to pass on judgement to me. I welcome it!
Even flex/bison code, which as far as I am aware uses FAR fewer `goto`s, is Even flex/bison code, which as far as I am aware uses FAR fewer `goto`s, is
notorious for `goto`s and is quite hard to follow. It would be a nightmare to notorious for `goto`s and is quite hard to follow. It would be a nightmare to
+35 -11
View File
@@ -491,13 +491,27 @@ figure out how this program actually does what it does.</p>
<p>Before you set off on your adventure to decode this program’s logic, make <p>Before you set off on your adventure to decode this program’s logic, make
sure you have enough food, ammo, clothes, oxen, and programming supplies. sure you have enough food, ammo, clothes, oxen, and programming supplies.
You’ll be driving for 2170 miles through a wild wilderness inspired You’ll be driving for 2170 miles through a wild wilderness inspired
by Oregon, so you’ll need to be prepared for anything! Regardless of by <a href="https://en.wikipedia.org/wiki/The_Oregon_Trail_(series)">Oregon Trail</a>, so you’ll need to be prepared for anything! Regardless of
how well prepared you are, you will have a devil of a time jumping around how well prepared you are, you will have a devil of a time jumping around
inside this C code. :-)</p> inside this C code. :-)</p>
<h2 id="authors-remarks">Author’s remarks:</h2> <h2 id="authors-remarks">Author’s remarks:</h2>
<div id="devil"> <div id="devil">
<h3 id="a-pact-with-the-devil-on-the-oregon-trail-and-his-134-regrets-of-goto">A Pact With the Devil On the Oregon Trail (…and his 134 regrets of goto)</h3> <h3 id="a-pact-with-the-devil-on-the-oregon-trail-and-his-134-regrets-of-goto">A Pact With the Devil On the Oregon Trail (…and his 134 regrets of goto)</h3>
</div> </div>
<hr style="width:10%;text-align:left;margin-left:0">
<blockquote>
<p>Fun fact: after winning this, the author played the game in gdb from start to
finish and not counting macros but counting all function calls (not libc
functions, functions in prog.c), there were a total of <strong>985</strong> (!) line jumps.
The prog.c, counting <code>#include</code>s, <code>#define</code>s, functions and some lines that have
only braces, as well as 14 blank lines, has only 85 lines. A very tiny fraction
of the time a line might be repeated in a row ONCE but that does not really matter.</p>
</blockquote>
<p><strong>NOTE</strong>: I actually submitted two versions. This one is not encrypted. The
encrypted one even encrypted emojis without having to decrypt them in order to
print them (and everything else). I have kept references to encryption in this
file even after publication. I do have a copy of it if anyone is interested.</p>
<hr style="width:10%;text-align:left;margin-left:0">
<p>The <strong>Go To Hell In A Handcart Travel Company</strong> PROUDLY welcomes all sinners to <p>The <strong>Go To Hell In A Handcart Travel Company</strong> PROUDLY welcomes all sinners to
our GREATEST destination yet, with:</p> our GREATEST destination yet, with:</p>
<p><img src="devil.png" <p><img src="devil.png"
@@ -514,7 +528,7 @@ all the way back to the 1950s, all the while taking place in the 1800s),
<strong>PLEASE</strong> either read the (probably totally unnecessary) <strong>PLEASE</strong> either read the (probably totally unnecessary)
<a href="#disclaimer">disclaimer</a> or skip this perilous journey entirely. Obviously the <a href="#disclaimer">disclaimer</a> or skip this perilous journey entirely. Obviously the
judges will have no choice in the matter :-) but it’s not really for them anyway judges will have no choice in the matter :-) but it’s not really for them anyway
but rather in case this wins.</p> but rather in case this wins (which, of course, it did).</p>
<p>Everyone might or might not want to look at the <a href="#jokes">commentary on the <p>Everyone might or might not want to look at the <a href="#jokes">commentary on the
jokes</a> as well as the <a href="#humour">humour</a> section, <a href="#history">historical jokes</a> as well as the <a href="#humour">humour</a> section, <a href="#history">historical
references</a> and <a href="#cultural">cultural references</a> as well. The references</a> and <a href="#cultural">cultural references</a> as well. The
@@ -2841,7 +2855,7 @@ comparison):</p>
3826</code></pre> 3826</code></pre>
<p>and of course some of those spaces are not necessary but some are. I think you <p>and of course some of those spaces are not necessary but some are. I think you
get the idea: my code is <strong>FAR MORE</strong> compact than the original game (and I do get the idea: my code is <strong>FAR MORE</strong> compact than the original game (and I do
it with <strong>MORE</strong> gotos too) and I do more and even have lots of jokes even in it with <strong>MORE</strong> <code>goto</code>s too) and I do more and even have lots of jokes even in
the code, and the code is also thematic! Now to be fair there are some things the code, and the code is also thematic! Now to be fair there are some things
that my code does not do but the original does: it requires you to type some that my code does not do but the original does: it requires you to type some
strings and it requires you to choose how to eat and tactics for the riders. But strings and it requires you to choose how to eat and tactics for the riders. But
@@ -3070,14 +3084,23 @@ proverbial hat to them. They would have to be extremely patient - and have
traits I do not even know how to describe. Perhaps they would be utterly traits I do not even know how to describe. Perhaps they would be utterly
ineffable.</p> ineffable.</p>
<p>Actually I wanted to see what it was like. It was VERY amusing - but only <p>Actually I wanted to see what it was like. It was VERY amusing - but only
because I did not have to debug it. I ran out of files to include and I’m low on because I did not have to debug it. For the submission I included line changes
time (mere hours left) but to get to JUST the third prompt this is the lines it for JUST the third prompt. It looked like:
went in the following sequence:</p> time (mere hours left) but to get to JUST the third prompt this is the lines it</p>
<pre><code> 19 20 21 32 69 82 34 33 34 47 45 47 50 83 34 33 34 47 45 47 50 83 34 33 34</code></pre> <pre><code> 19 20 21 32 69 82 34 33 34 47 45 47 50 83 34 33 34 47 45 47 50 83 34 33 34</code></pre>
<p>The game loop is almost certainly much worse, especially those two for loops I <p>I said the game loop is almost certainly much worse, especially those two for
mentioned, but there is much much more. If this is easier to follow then I’m a loops I mentioned, but there is much much more. If this is easier to follow then
dragon. I’m not a dragon. I have a secret for you: dragons don’t exist. Except I’m a dragon. I’m not a dragon. I have a secret for you: dragons don’t exist.
on the Oregon Trail.</p> Except on the Oregon Trail.</p>
<p>I was right too: the entire game is worse, far far worse. After this won I did a
full sequence. This is from start to finish and I include it for your amusement.
Or horror. There are a few times where the line is the same but that only shows
how very often the line changes. It is a total of 985 changes, counting
function calls (i.e. each call to one of the few functions is a jump); calls to
the macros are not counted.</p>
<p>This is in a program that is JUST 85 lines! A program that has only 85 lines
COUNTING the <code>#include</code>s, <code>#define</code>s, other functions and 14 blank lines that
jumps 985 times is astonishing.</p>
<blockquote> <blockquote>
<p>I have yet to see a single study that supported the supposition that GOTOs are <p>I have yet to see a single study that supported the supposition that GOTOs are
harmful (I presume this is not because nobody has tried). Nonetheless, people harmful (I presume this is not because nobody has tried). Nonetheless, people
@@ -3093,7 +3116,8 @@ sure is WRONG NOW. Anyone who thinks otherwise needs to try and debug
my program - or maintain it. Or write it.</p> my program - or maintain it. Or write it.</p>
<p>It would have been SO MUCH EASIER if I did not use 134 <code>goto</code>s. Actually, even a <p>It would have been SO MUCH EASIER if I did not use 134 <code>goto</code>s. Actually, even a
tiny portion of that would make it harder. Nobody, whether they’re in their tiny portion of that would make it harder. Nobody, whether they’re in their
right mind or not, would WANT to maintain this, or something even close to it.</p> right mind or not, would WANT to maintain this, or something even close to it.
Feel free to pass on judgement to me. I welcome it!</p>
<p>Even flex/bison code, which as far as I am aware uses FAR fewer <code>goto</code>s, is <p>Even flex/bison code, which as far as I am aware uses FAR fewer <code>goto</code>s, is
notorious for <code>goto</code>s and is quite hard to follow. It would be a nightmare to notorious for <code>goto</code>s and is quite hard to follow. It would be a nightmare to
try and maintain without the .l/.y source files.</p> try and maintain without the .l/.y source files.</p>
+6
View File
@@ -509,6 +509,12 @@ that many and that is ridiculous.</p>
YES I think it’s HILARIOUS. But if it was not for the IOCCC… Well, as I YES I think it’s HILARIOUS. But if it was not for the IOCCC… Well, as I
mention in my <a href="#devil">remarks above</a>, EVEN ONE IS TOO MANY mention in my <a href="#devil">remarks above</a>, EVEN ONE IS TOO MANY
in real code.</p> in real code.</p>
<p>I dare you to run the program in a debugger from start to finish to see how many
line jumps there truly are. After I won I did it once: in a program with just 85
lines (14 blank, some with just a brace, <code>#include</code>s, <code>#define</code>s included) there
were a total of 985 line changes (a tiny tiny fraction had the same line number
repeated once). I rarely went to the fort and I only hunted once (I might not
have hunted at all). This is obscene.</p>
<p>The best (or worst, depending on how you look at it :-) ) part is this works. As <p>The best (or worst, depending on how you look at it :-) ) part is this works. As
I note in those concluding remarks, a company actually introduced a security I note in those concluding remarks, a company actually introduced a security
hole from ONE <code>goto</code>. Yet I have 116/134 and it actually works? That is surely hole from ONE <code>goto</code>. Yet I have 116/134 and it actually works? That is surely
+7
View File
@@ -67,6 +67,13 @@ YES I think it's HILARIOUS. But if it was not for the IOCCC... Well, as I
mention in my [remarks above](#devil), EVEN ONE IS TOO MANY mention in my [remarks above](#devil), EVEN ONE IS TOO MANY
in real code. in real code.
I dare you to run the program in a debugger from start to finish to see how many
line jumps there truly are. After I won I did it once: in a program with just 85
lines (14 blank, some with just a brace, `#include`s, `#define`s included) there
were a total of 985 line changes (a tiny tiny fraction had the same line number
repeated once). I rarely went to the fort and I only hunted once (I might not
have hunted at all). This is obscene.
The best (or worst, depending on how you look at it :-) ) part is this works. As The best (or worst, depending on how you look at it :-) ) part is this works. As
I note in those concluding remarks, a company actually introduced a security I note in those concluding remarks, a company actually introduced a security
hole from ONE `goto`. Yet I have 116/134 and it actually works? That is surely hole from ONE `goto`. Yet I have 116/134 and it actually works? That is surely