Return to IOCCC Year 2025
A “fun challenge” for a winning IOCCC entry is a puzzle or task that an IOCCC judge suggested people consider solving. After you figure out what a given winning entry does, we encourage you to attempt the fun challenge(s).
Some fun challenges ask you to explain something about a winning
IOCCC entry. Other fun challenges ask you to produce a variant of the
prog.c program that has a different or enhanced behaviour. And still,
other types of fun challenges may be posed.
NOTE: Some of these challenges are easier than others.
See the FAQ on “fun challenges” and, to provide a solution, the FAQ on “submitting a solution to a fun challenge”, as well as the FAQ on “opening a pull request”.
Fun challenge for 2025/ayu
This fun challenge is CLOSED.
Modify prog.c so that the code allows for N to be
defined for values larger than 11, e.g., that works with -DN=12,
and up to some reasonable limit.
Fun challenge solution for 2025/ayu
GitHub user Master-Hash on 2026 Jun 09 presented this 2025/ayu fun challenge solution.
Fun challenges for 2025/cable
Fun challenge 0 for 2025/cable
This fun challenge is still OPEN.
Use the toolchain to compile your own software to run on this VM.
Fun challenge 1 for 2025/cable
This fun challenge is still OPEN.
Produce a variant of the vmlinux bootimage that contains a C compiler for this VM.
Fun challenge for 2025/cesmoak
This fun challenge is still OPEN.
Modify prog.c so that the code supports the
FORTRAN READ statement.
Fun challenge for 2025/diels-grabsch
This fun challenge is still OPEN.
Explain the purpose of the constant 9018655 as used in prog.c.
Fun challenges for 2025/dogon
Fun challenge 0 for 2025/dogon
This fun challenge is still OPEN.
Explain why prog.c prints the number of digits of the constant that it
prints.
Fun challenge 1 for 2025/dogon
This fun challenge is still OPEN.
Given the “constant” that is printed, explain the last line of output:
./prog | tail -1
Fun challenge 2 for 2025/dogon
This fun challenge is CLOSED.
Modify prog.c so that the code that prints IOCCC 2025 at
the very end, in honor of the contest year in which it won, instead of
IOCCC 2026. Of course, the digits printed beforehand should remain
the same.
Fun challenge 2 solution for 2025/dogon
Samantha Howard on 2026 Jun 09 presented this 2025/dogon fun challenge 2 solution.
Fun challenge 3 for 2025/dogon
This fun challenge is CLOSED.
Additionally, observe the try.sh script uses the following display the program’s output:
./prog | cat
However, the following may, for some environments, print what seems like garbage:
./prog
Explain why this command:
./prog | cat > foo
may produce, for some environments, different output than the following command:
./prog > bar
Fun challenge 3 solution for 2025/dogon
Ilya Kurdyukov on 2026 Jun 09 presented this 2025/dogon fun challenge 3 solution:
In 2025/dogon/prog.c we find:
int *e; e=(int*)calloc(-~(e==e)<<-~(!(e>e)<<-~-~-~!(e<e)),-~!(e>e));
The pointer to the integer e is uninitialized in the expressions that
form both arguments to the calloc(3) library call.
In some environments, the clang compiler might compile that C code as:
int *e; e=(int*)calloc(2, 1);
In some environments, the gcc compiler might compile that C code as:
int *e; e=(int*)calloc(262144, 2);
If you move the declaration of the pointer to the integer int*e; out of
main() and into global variable space where it will be initialized to 0,
the standard output will be “normal”.
For example, and ignoring the fun layout of 2025/dogon/prog.c:
--- prog.c 2026-06-09 11:26:01
+++ prog.fix.c 2026-06-17 00:25:40
@@ -2,10 +2,11 @@
#include <stdlib.h>
#define E printf
#define F char
+int*e;
main()
- { int*e;for( e
+ { for( e
=( int*)calloc (-
~( e==e)<<-~(! (e
>e )<<- ~-~- ~!
When you compile prog.fix.c into prog.fix, the standard output will be “normal”.
Fun challenge for 2025/endoh1
This fun challenge is still OPEN.
Modify prog.c so that the code also works with UPPER CASE LETTERS.
You would certainly have to
embiggen
the tube size to better distinguish individual letters and digits.
Such code would be a cromulent
addition to 2025/endoh1 code.
Fun challenge for 2025/endoh2
This fun challenge is CLOSED.
Modify prog.c so that the code prints a line instead of varying brightness of a yellow line,
using 256 ANSI Color Codes.
Choose a colors/brightness palette to represent the charge intensity.
Fun challenge solution for 2025/endoh2
GitHub user omoikane on 2026 Jun 7 contributed a solution that was added as 2025/endoh2/prog.alt.c.
NOTE: The above mentioned file was added before this page was available. Future solutions to other fun challenges should be presented as external GitHub repos.
See the FAQ on “submitting a solution” for more details.
Fun challenge for 2025/endoh3
This fun challenge is CLOSED.
Explain why the git-am patch generator must be used about 25 times (see
try.sh for details) to produce a unified diff tool.
Fun challenge solution for 2025/endoh3
Jack Mahoney on 2026 Jul 10 presented this 2025/endoh3 fun challenge solution.
Fun challenges for 2025/ferguson
Fun challenge 0 for 2025/ferguson
This fun challenge is still OPEN.
Modify prog.c so that the code
allows for different map projections.
Add -p projection as a command line option to change the default projection.
Add this to a debug.c as well for extra points.
NOTE: you will want to provide PPM images for each type you work in. It would be preferable if it was scientific but as the author also provided an equirectangular of Flat Earth for fun, it need not be scientific if you cannot find one or you wish for some fun.
NOTE: the author did NOT use a library so you should make sure to do this as well (in fact trying to use the library would totally break the code and defeat the purpose of some of the obfuscation).
Fun challenge 1 for 2025/ferguson
This fun challenge is still OPEN.
Explain why there are four args (in one invocation) but yet the value of argc, g, is
only checked once, besides g!= 3 && g < 5 (which should tell you the two forms of
invocation).
Fun challenge 2 for 2025/ferguson
This fun challenge is still OPEN.
Modify prog.c so that the code renders smaller (or larger) sized
arrows, making sure that coordinates at the edge of the map are placed
correctly as well as the other coordinates. Add a debug.alt3.c with the same
updates.
Hint: To test that the arrows fit on the edge of the map, you should
test coordinates such as 0 0, 90 180, -90 0, etc. (I.e., coordinates that
cause the arrows to be at the very edge of a map).
Fun challenge 3 for 2025/ferguson
This fun challenge is still OPEN.
Modify prog.c the code that solves challenge 2,
with a -p projection option.
Fun challenge 4 for 2025/ferguson
This fun challenge is CLOSED.
Explain why d has to start at -1 (bonus: experiment with different values
and explain what happens and specifically why) and why you can’t change
the !=1 in the code:
if (d=(c!=e==!d!=d!=d==1&&e!=c)!=1||/* NOW YOU KNOW d IS 1! */fread(c, -*(S[F])-d*3 ,
b*j,q)^j *j *2)X;
Hint: the above are related to each other.
Fun challenge solution for 2025/ferguson
Antoine Mathys on 2026 Jul 11 presented this 2025/ferguson fun challenge 4 solution.
Fun challenge for 2025/howe
This fun challenge is still OPEN.
Modify prog.c so that the code is
slightly harder to play by allowing the closest invader to be killed.
Compensate slightly for that difficulty increase by allowing the shift TAB key
to cycle in the opposite direction of the TAB key.
Fun challenge for 2025/jhshrvdp
This fun challenge is still OPEN.
Modify prog.c so that the code that has an “Amulet of Yendor”.
In particular, add an “Amulet of Yendor” (similar to the “,” comma character in the
rogue 5.4 game) to floor 26. If the
player descends below floor 26 without the amulet, place it on that lower
floor until the player eventually acquires it. Block the player’s ascent
(to a lower floor number) unless they possess the amulet. If the player
returns to the top floor 0 with the amulet, display a winning message, and exit.
Fun challenge for 2025/jingp49
This fun challenge is still OPEN.
Modify prog.c so that the code displays IOCCC 2025 instead of DOCTOR WHO.
Fun challenge for 2025/kurdyukov
This fun challenge is still OPEN.
Modify prog.c so that the code allows for the use of numbers in the
interval [1, 2^31), or even the interval [1, 2^63).
Fun challenge for 2025/mattpep
This fun challenge is still OPEN.
Explain how the argument to ./prog determines if input is encoded or decoded.
Fun challenge for 2025/ncw1
Fun challenge 0 for 2025/ncw1
This fun challenge is still OPEN.
Create a 32K ROM file that tests if 2^p-1, is a Mersenne prime using the
Lucas–Lehmer primality test.
Fun challenge 1 for 2025/ncw1
This fun challenge is still OPEN.
Create a 32K ROM file that tests if h*2^n-1 is prime, using the
Lucas–Lehmer–Riesel primality test.
You may find the pages related to the Riesel Test in the
A Grand Coding Challenge
helpful.
Fun challenge for 2025/ncw2
This fun challenge is CLOSED.
Modify prog.c so that the code with a modified p[] array prints
the string IOCCC 2025 followed by a newline.
Fun challenge solution for 2025/ncw2
Antoine Mathys on 2026 Jun 09 presented this 2025/ncw2 fun challenge solution.
Fun challenge for 2025/ncw3
This fun challenge is still OPEN.
Modify prog.c so that the code draws a Julia set.
Fun challenge for 2025/tompng
This fun challenge is still OPEN.
Explain the purpose of the constant .5, used several times in prog.c.
How does changing .5 to a different value affect the generated sound?
Fun challenge for 2025/uellenberg
Fun challenge 0 for 2025/uellenberg
This fun challenge is still OPEN.
Write an alternate version of try.sh that detects when the quasi-quine,
left to its own iterative devices, starts to repeat.
If you do not attempt to move the paddle, and let the game run on its own, the game should “evolve” to other “modes”, and eventually cycle back to the original style of game play.
Fun challenge 1 for 2025/uellenberg
This fun challenge is still OPEN.
Implement an additional game mode using only the original game objects (the ball and two paddles).
For example, you could implement a “flappy bird” game using the ball as the bird and the paddles as the pipes.
As an extra challenge, try to keep the original behavior of the program the same, with this new game mode added on top.
Fun challenge 2 for 2025/uellenberg
This fun challenge is still OPEN.
Create a version of the game that “plays itself”, running through all the gameplay without user input and returning to the exact source code it started with.
Fun challenge for 2025/yang1
This fun challenge is still OPEN.
Modify prog.c so that the code allows for integers, somewhat
larger than 9999, to be tested for primality.
Fun challenge for 2025/yang2
This fun challenge is still OPEN.
Modify prog.c so that the code implements the compression algorithm
used in the entry as a standalone program outputting a bitstream, and
compare its performance with gzip -1.
Fun challenge for 2025/yang3
This fun challenge is still OPEN.
Explain the purpose of the constant 114 in prog.c.
Are there any alternative values that could replace 114 without affecting the
program’s functionality?
