From 5d7f4c95c4a9f9ce70c98a0c0e8220440561810a Mon Sep 17 00:00:00 2001 From: Cody Boone Ferguson <53008573+xexyl@users.noreply.github.com> Date: Sat, 21 Mar 2026 02:03:57 -0700 Subject: [PATCH 1/5] Add a fun INABIAF to 2024/ferguson1 This is merely irony and satire and maybe a touch of sarcasm as well but importantly is right on theme. At the same time I fixed an error in bugs.html where the last entry there had text in the summary part of the file. Also I added a missing 'Jump to top' link in 2024/ferguson2 (also INABIAF). But still this is mostly for fun I just happened to notice the issues at the same time. --- 2024/ferguson1/README.md | 9 +++++++++ 2024/ferguson1/index.html | 6 ++++++ bugs.html | 40 +++++++++++++++++++++++++++++++++---- bugs.md | 42 +++++++++++++++++++++++++++++++++++++-- 4 files changed, 91 insertions(+), 6 deletions(-) diff --git a/2024/ferguson1/README.md b/2024/ferguson1/README.md index 095d7d2e47..a540bcb609 100644 --- a/2024/ferguson1/README.md +++ b/2024/ferguson1/README.md @@ -12,6 +12,15 @@ YouTube show for this entry: make all ``` +### Bugs and (Mis)features: + +The current status of this entry is: + +> **STATUS: INABIAF - please DO NOT fix** + +For more detailed information see [2024/ferguson1 in bugs.html](../../bugs.html#2024_ferguson1). + + ## To use: diff --git a/2024/ferguson1/index.html b/2024/ferguson1/index.html index e1118e2f84..262b5a976f 100644 --- a/2024/ferguson1/index.html +++ b/2024/ferguson1/index.html @@ -481,6 +481,12 @@
make all
+The current status of this entry is:
+++STATUS: INABIAF - please DO NOT fix
+
For more detailed information see 2024/ferguson1 in bugs.html.
./prog
When printing a 0 digit, the fib.bin 4004 program will print a space instead of a “0”.
Jump to: top
+Upon starting this game you will immediately have a sinful night and playing it +will lead you directly to a date with the Devil in HELL after things such as:
+Whether or not you make it to Oregon Trail be prepared to meet the DEVIL in +HELL!
+And MAKE SURE to say hi to +him! :-) +He is waiting. 😈
Jump to: top
-As the language is a spoken language and as spaces are required to separate @@ -3647,6 +3678,7 @@
Jump to: top
-The 2024/kurdyukov4/try.sh script @@ -3700,6 +3732,8 @@
Jump to: top
For more information see the “Large input size issues” section of -2024/kurdyukov4/index.html.
Jump to: top
grep -E 'heaven|goto|666|hell' prog.gotos.c @@ -108,7 +112,23 @@ depend on what you're doing): /heaven\|goto\|666\|hell ``` -Read it andYou will have to go to “Fun-Damentals” to understand the logic flow of this
-game. While the code might goto as many as 152 times to travel from main() to
-a successful exit(666) you may have a devil of a time trying to figure out how
-this program actually does what it does as it jumps hundreds if not thousands of
-times.
gotos, to travel
+from main() to a successful exit(666);, you may have a devil of a time trying
+to figure out how this program actually does what it does.
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. You’ll be driving for 2170 miles through a wild wilderness inspired @@ -519,26 +518,46 @@
If you wish to jump straight to the remarks about the game, go here.
-+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 just the few functions in prog.c), there were a total of 1416 (!) -line jumps. Skipping prog.c function calls and it was still 1131 jumps! The -prog.c, if you remove
+#includes, blank lines, lines with just a brace and -lines that have only variables, only has 55 (!) lines of code. A very tiny -fraction of the time a line might be repeated in a row ONCE but that does not -really matter, as it is still technically a jump.FUN FACT: the judges stated in the 2024 +index.html the following:
++
+- Using a lot of goto statements to make your code harder to understand might +not help it pass the final rounds of judging.
+
…and Landon told me personally:
++-One might say that the number of gotos were nearly countless. 😉
SUGGESTION: if you dare, try opening
-prog.gotos.c in an editor with
-syntax highlighting and then highlight goto. Alternatively, try it with grep
-if your grep has colours enabled (probably easier). This is a nice one to try:
…which made me EXTREMELY happy and I decided to demonstrate exactly what this
+means, and why lots of gotos are now frowned upon, something I aimed to do. If
+you dare, try opening gotos.ruined.c
+in an editor with syntax highlighting and then highlight goto. Alternatively,
+try it with grep if your grep has colours enabled (probably easier). This is a
+nice one to try:
grep -E 'heaven|goto|666|hell' prog.gotos.c
Alternatively, in vim you might try, making sure you’re in command mode first (hit ESC if you don’t know - if that doesn’t work try hitting it again as it can depend on what you’re doing):
/heaven\|goto\|666\|hell
-Read it and weep scream (or curse :-) )!
After that, to see just the gotos before pre-processing, take a look at
+prog.gotos.c, using the same methods
+as above (you could also try, if your grep has the -o option, which is not
+required by POSIX, just doing grep -o goto gotos.ruined.c and grep -o goto prog.gotos.c but this is less fun).
Read them and weep scream (or curse the
+devil :-) )!
+FUN FACT: after winning this, I played the game in gdb from start +to finish and not counting macros but counting all function calls (not libc +functions just the few functions in prog.c), there were a total of 1416 (!) +line jumps. Skipping prog.c function calls and it was still 1131 jumps! The +prog.c, if you remove
+#includes, blank lines, lines with just a brace and +lines that have only variables, only has 55 (!) lines of code. A very tiny +fraction of the time a line might be repeated in a row ONCE but that does not +really matter as it’s still a jump.
NOTE: I actually submitted two versions, one encrypted (even emojis); any
document mentioning encryption is left for personal reasons out of
laziness and exhaustion from working on improving the presentation even after it
@@ -547,6 +566,12 @@
The server is backed by solar panels with batteries and two SmartUPSes, one for
+the Internet and one for the server, so except for upgrades and/or hardware
+maintenance (which I hate doing and depending on what needs to be done can be
+longer than one might expect), it should usually be available, though if I
+have time am not too lazy, one day I’ll add it to the IOCCC website
+instead.
Actually, you get to see progression more, comparing the alt code with the -submission code, and you can appreciate much more this way.
+entry code, and you can appreciate much more this way.Anyway, I made a huge amount of effort to repeatedly reduce bytes for more events and more obfuscation but if it was not for the size limit increase (or decrease depending on how you think of it) AND the data file this would @@ -1495,12 +1520,12 @@
There are several other events at the bare minimum or at least there were; as I continued to optimise the code size I got more in: but not all. But unfortunately due to the obfuscation it’s hard to be sure what is where. I do -know that limb loss one (though there’s a similar one that is in the submission -code but not one that causes a death) is not in the submission code.
+know that limb loss one (though there’s a similar one that is in the entry +code but not one that causes a death) is not in the entry code.It uses too many bytes. As noted (and as you would see if you looked) the -submission code got way more obfuscated than the alt code but there were it felt +entry code got way more obfuscated than the alt code but there were it felt better to add more obfuscation than to add even more events as it already has -more. I think the alt code has 25 events and the submission has 23. That’s not +more. I think the alt code has 25 events and the entry has 23. That’s not even counting the mountain events or the events that are part of other events!
Realistically I could even get rid of the alt code but since there are more jokes there I am keeping it. In any case 23+ is plenty.
@@ -1557,7 +1582,7 @@This all took a lot of care in calculating things, manipulating values and much more. Throw in all the many jokes (many of which are utterly ridiculous) and -you have a really fun submission!
+you have a really fun entry!Of course there’s also the hell label and many of the strings in the game
refer to the devil and the player character’s (PC’s) pact. The goto hell is
discussed more in the Humour section, as well as perhaps the
@@ -2014,8 +2039,8 @@
A reference to ‘Casper the friendly ghost’ is also present: also it has no effect on gameplay but it’s fun.
There are possibly other cultural references I am forgetting in the alt code -that aren’t in the submission code: not sure. There likely are others in the -submission code too.
+that aren’t in the entry code: not sure. There likely are others in the +entry code too.There are vampires (supposedly) and werewolves (supposedly) too in the both (I think) versions but possibly in a way you might not expect (hence supposedly).
On a lighter note (or maybe this is darker?): did you know that every time a
-goto is used an angel (whatever you consider an angel) DIES and goes
-straight to HELL? You don’t really want that do you? I didn’t think so. Yes I
-killed 134 152 angels. YES I condemned 134 152 angels to
-eternal torment. I HAD to. I don’t regret it - but you should, if you
-ever write something like this outside the IOCCC. In fact you should regret
-a single goto angel dying. Even if they did not go straight to hell
-in a handcart, you should still regret it. But they do. Okay so I don’t really
-believe that but there is no denying there is goto hell here.
On a lighter note (some might say ‘darker’ but I know better as I wrote the code
+:-) ): did you know that every time a goto is used an angel (whatever you
+consider an angel) DIES and goes straight to HELL? You don’t really want
+that do you? I didn’t think so. Yes I killed 134 152 angels. YES I
+condemned 134 152 angels to eternal torment. I HAD to. I don’t
+regret it - but you should, if you ever write something like this outside
+the IOCCC. In fact you should regret a single goto angel dying. Even
+if they did not go straight to hell in a handcart, you should still regret it.
+But they do. Okay so I don’t really believe that but there is no denying there
+is goto hell here.
I found find my abuse of goto hilarious. It was good intentions -
the contest. But sadly sometimes the worst things that happen start with good
intentions; and some of the best things strangely start with horrible
@@ -3399,13 +3425,16 @@
I could change all but one of the break;s to goto Z; and that would increase
-it a bit. I might be able to move one or two blocks of code before reaching the
-2503 limit. With the exception of the goto Z; (which incidentally is done in
-some sneaky places) the others would be perilous.
So if I have not reached the actual logical conclusion of goto then it has to be
-in a much bigger program, but after doing this, I pity anyone who would do that,
-for they’re only going to cause themselves and others problems. I believe in any
-case this finally reaches the logical conclusion of gotos in the IOCCC,
-unless the size limit is changed a lot again, and I it doesn’t, as 2503 is a
-nice number and also allows for so much, as I have shown.
Something it allows too much of though: gotos. I have shown that. I’ve
-dethroned 1987/hines by a staggering amount.
During submission I thought: I could change all but one of the break;s to
+goto Z; and that would increase it a bit. I might be able to move one or two
+blocks of code before reaching the 2503 limit. With the exception of the goto Z; (which incidentally is done in some sneaky places) the others would be
+perilous. But after this won I decided to finish the job as the only reason I
+did not do this was for practical reasons: due to the other version I wanted to
+make it easier to test and having the same flow control made this much easier.
In any case, I finally did what was thought to be done in 1987: goto truly has
+reached its final conclusion. If I’ve not reached the logical conclusion out of
+the contest then it has to be a much bigger program but after doing this I pity
+anyone who would do that, for they’re only going to cause themselves and others
+nightmarish debugging sessions.
I’ve dethroned 1987/hines by a staggering amount.
One final thing to ponder. This is from an article about tools that obfuscate code, C and C++ (which I hate). It is called ‘Code Obfuscation For the C and CPP Programming Languages’:
@@ -3494,7 +3523,7 @@And although it might not be, I would not be surprised if this submission, or +
And although it might not be, I would not be surprised if this entry, or
the encrypted one, makes you fed up with gotos. I know I am, and as far as I
am concerned, they only belong in obfuscated code! I would understand if you
wanted something else new, including some new things I have put in here as well
@@ -3533,6 +3562,16 @@
But again, as I made an ASCII only file any issues there shouldn’t be a problem anyway. That is why I included it, for portability. I think it’s pretty amazing what I did with encryption though.
+Actually, to be truly horrible, I ended up doing it after all; the
+prog.orig.c has the much fewer 134 gotos and prog.c
+has 152 gotos. To be strictly technical prog.c has 134 gotos and the
+pre-processed version has 152 whereas the prog.orig.c has 116 gotos before
+pre-processing. Yes there was a certain amount of cheating for this but it only
+adds to the hellish spaghetti code and even without that ‘cheating’ even 100
+gotos would be awful but whether you call it 116, 134 or 152, it is still
+horrific. In any case the lowest amount is 116. Additionally, it adds to
+confusion because the goto hell; goto M; actually occurs naturally in the code
+dependent on an if where it will do goto hell; OR goto M;.
IMPORTANT: if the program exits without doing anything then either the data file could not be read (see below) although that would likely only happen if a @@ -3567,12 +3606,12 @@
Just to be clear, in case I made an error in describing this (or was not clear
enough or more possibly have the filenames messed up), the point of the .asc
-programs (compiled with prog.c for submission and prog.alt.c for alt code
+programs (compiled with prog.c for entry and prog.alt.c for alt code
with more events) is to be ASCII only (again if there is such a thing as a
character that’s >4 bytes that is unknown to me to check).
This is why I have the DATA macro. Rather than trying to keep the same code in
multiple files (aside from a lot of the same code in the alt version that is in
-the submission code and trying to do this with the commented code
+the entry code and trying to do this with the commented code
too) based on how it’s compiled it will open the right data file. The only other
macro at compilation is discussed in another place and it’s only for the theme.
I was considering having it in the code itself but that would look REALLY
@@ -3644,7 +3683,7 @@ Compiling
need. And isn’t it lovely that emojis are encrypted with this code? I mean can
you figure out how this works?
The -Wformat-nonliteral is part of obfuscation AND allowing me to even
-have this as a submission. The format conversions for scanf and printf are way
+have this as an entry. The format conversions for scanf and printf are way
too long and would consume a huge amount of bytes3. It would also make the
program much less pretty and FAR MORE obvious. Well: maybe not: I guess it
depends on if it would complain about how V() is done. But let’s be honest:
@@ -3783,6 +3822,7 @@
Depending on the address of a variable as the single source of +
If a submission’s obfuscation strongly resembles a past IOCCC winning +ID, etc.) so that subsequent runs will behave differently.
When working with modern C compilers, it’s crucial to explicitly +then the submission is likely to not make it into the final rounds of judging.
int.Sadly, K&C-style C code does not compile well under modern C compilers.
A submission that only works under gcc or clang does not work as well -as submissions that can work under either compiler.
Shrinking an existing open-source program to meet rule 2 size might
+automatically default to an int.
If your submission relies on mathematical algorithms, be sure that the -C code that implements the mathematics is well obfuscated.
Just a friendly reminder that before you upload your submissions, +might not be the most innovative approach.
Using a lot of goto statements to make your code harder to understand -might not help it pass the final rounds of judging.
We know many of you that submitted to the IOCCC put in a ton of effort