Conflicting compilers and optimisers that broke this entry in 2023
-
As briefly noted in the index.html gcc and clang caused different
+
As briefly noted in the index.html gcc and clang caused different
problems with this entry depending on the optimiser being enabled or not, where
if the optimiser was enabled it would work with one compiler and not the other.
But if you then disabled the optimiser the opposite problem would occur: the
@@ -379,7 +399,7 @@ segfault.
It was not only one compiler that dumped core. Both dumped core with other
behaviour, depending on what changes in code were made and the optimiser being
on or off. Clang in macOS also dumped core!
The index.html has the original fix
for clang which works with some compilers depending on the optimiser. When we
refer to the code below we refer to the alternate code.
@@ -386,7 +406,7 @@ Location: NO - Kingdom of Norway (
Judges’ remarks:
We changed the alias that the author’s suggested alias from a
C-shell alias to a Bourne-like shell alias.
-
Note that shst.c is renamed to stig.c in the distribution.
+
Note that shst.c is renamed to stig.c in the distribution.
WARNING: This program’s how to compile is too specific to a particular shell.
The obfuscation of this program is more related to shell obfuscation than C
obfuscation. This type of entry will not be permitted in future contests.
What happens if you give the program a C program like itself? Try:
./dds dds.c
You’ll get errors yes but what does the generated file look like? What about
diff --git a/1991/fine/index.html b/1991/fine/index.html
index eed719f94..b39292953 100644
--- a/1991/fine/index.html
+++ b/1991/fine/index.html
@@ -48,8 +48,8 @@
@@ -406,7 +426,7 @@ following locations though the last one is more ironic:
./ag paul e tsongas < /usr/share/dict/words
where /usr/share/dict/words is the dictionary file.
Then it uses the mkdict.sh script to create a dictionary file out
-of the files index.html, try.sh (itself) and
+of the files index.html, try.sh (itself) and
Makefile and it repeats the same commands as above. In the case no
dictionary file can be found in the first step it only runs the commands once
with the created dictionary file.
If you are running SunOS 4.1.x (assuming you can find an ANSI
compiler in the first place), this program may be used to log
diff --git a/1993/schnitzi/index.html b/1993/schnitzi/index.html
index ac13cf13f..0405018b1 100644
--- a/1993/schnitzi/index.html
+++ b/1993/schnitzi/index.html
@@ -48,8 +48,8 @@
@@ -523,7 +543,7 @@ turn up - yes the program is unsafe, but it’s pretty cool anyway.
anonymous.ten program. Other trivial x86 programs may
run on the translator - and I have successfully run a wide range of “Hello
World” programs, including one of last year’s IOCCC entries,
-tomx.
+2000/tomx.
Complete Program
The fact that the program makes calls to system(3) and execv(3) may imply that
it is not a complete program in its own right, as it relies on other programs.
diff --git a/2001/bellard/index.html b/2001/bellard/index.html
index 57d9ce546..18d741651 100644
--- a/2001/bellard/index.html
+++ b/2001/bellard/index.html
@@ -48,8 +48,8 @@
@@ -383,15 +403,15 @@ Location: DE - Federal Republic of Germ
./herrmann2
Try:
./try.sh
-
If you use vi(m) you can see a pattern in herrmann2.cup and
-[herrmann2.ioccc][(https://github.com/ioccc-src/temp-test-ioccc/blob/master/2001/herrmann2herrmann2.ioccc]) by say:
+
If you use vi(m) you can see a pattern in herrmann2.cup and
+[herrmann2.ioccc][(https://github.com/ioccc-src/temp-test-ioccc/blob/master/2001/herrmann2/herrmann2.ioccc]) by say:
Be careful when staring at the source code - your eyes might cross, but
diff --git a/2001/index.html b/2001/index.html
index afcb8c1d6..658436c45 100644
--- a/2001/index.html
+++ b/2001/index.html
@@ -48,8 +48,8 @@
Read the sykes1.html page source.
Now then read the C source. Confused? :-) If it’s not clear try:
diff -s sykes1.c sykes1.html
For extra credit, understand what happens when you give this entry
diff --git a/2006/sykes2/index.html b/2006/sykes2/index.html
index e6ff9e6fd..dacfe0b1a 100644
--- a/2006/sykes2/index.html
+++ b/2006/sykes2/index.html
@@ -48,8 +48,8 @@
@@ -493,7 +513,7 @@ competition (see above).
supplied is good for Mac OS X, Linux and probably other Unices. I have received
reports that the emulator works on Raspberry Pi/Android/ARM (you will need to
compile with -fsigned-char) and iOS. You will need to adjust the
-Makefile if your system lacks sdl-config to correctly point to the
+Makefile if your system lacks sdl-config to correctly point to the
SDL libraries and header files.
On UNIX-based systems we can get raw keystrokes using stty. However Windows
has no stty. Therefore the Makefile includes a -D option to define a
@@ -527,7 +547,7 @@ the fd.img provided, which is a FreeDOS boot disk.
Before running the emulator on a Unix-type system, stty needs to be used to
put the keyboard into raw mode (and afterwards it needs to be put back to
cooked). So, run the emulator using something like this script (provided as
-cable3.sh):
The whole program is interpreted by macro expansion.
For example, S (K I) is translated to a normal C code, (s)((k)(i)), or
simply s(k(i)).
-
This expression returns an abstract syntax tree, and endoh1.c
+
This expression returns an abstract syntax tree, and endoh1.c
evaluates it.
This program uses a very simple “term rewriting” approach for evaluating SKI
combinator calculus. The rewriting rules are shown in the shape of the code.
@@ -441,7 +461,7 @@ doesn’t count whitespace in strings differently than whitespace outside of
them.
User-modifiable Features
The code can be user-modified simply by changing the build command line.
-The following symbols are defined in the Makefile:
+The following symbols are defined in the Makefile:
-DLT=x1,y1,z1,x2,y2,z2,... defines the coordinates of the lights in the
scene. It should be a comma-separated list of coordinates (x, y, z), three per
@@ -456,7 +476,7 @@ The eye is looking at the origin (0, 0, 0).
experience the server’s output. The Judges suggested that I instead restrict
the bind to INADDR_LOOPBACK to reduce security alarms. As a compliant veteran
of innumerable post-ship late feature additions, I have modified the
-Makefile to inject the new code without destroying the beautiful
+Makefile to inject the new code without destroying the beautiful
spherical symmetry of the source code. In addition, I have altered the word
sin_port to the more family-friendly version win_port (via
-Dwin_port="sin_addr.s_addr=htonl(2130706433),R.sin_port") to protect against
diff --git a/2013/misaka/index.html b/2013/misaka/index.html
index f4fd93fe2..c84a1c3e0 100644
--- a/2013/misaka/index.html
+++ b/2013/misaka/index.html
@@ -48,8 +48,8 @@
The shape of prog.c is “Undead Parrot” based on “dead parrot”. The
message that appears in the bottom line of the output source code is the subject
of the dialogue that appears in “Dead Parrot” and explains in various
expressions that the parrot died. Also, the second **__<-_Source_of_Parrots__**
diff --git a/2018/ferguson/index.html b/2018/ferguson/index.html
index a52770372..c64d22826 100644
--- a/2018/ferguson/index.html
+++ b/2018/ferguson/index.html
@@ -48,8 +48,8 @@
@@ -411,7 +431,7 @@ which you should disregard its shape, unless you like it, and the rest, which is
separator in the form of a single line followed by a section signifying the
function of the program, a block with removed shape of lambda character. Even
the official IOCCC size tool acknowledges this: When you call ./iocccsize -i <prog.c, using the 2019 version of
-iocccsize, iocccsize returns 955,
+iocccsize.c, iocccsize returns 955,
which is the Unicode codepoint of the λ character.
It might be a surprise for you that according to the IOCCC size tool the program is
actually a one-liner. It certainly was for me. I like to think the tool is overwhelmed
@@ -428,7 +448,7 @@ and run it like this:
There is an alternative build path that requires the 2018 IOCCC size tool to complete. Put the tool
-source iocccsize_2018.c in the project directory and call
It will build the tool and use it to build an alternative program prog2, which in turn will
produce an Unlambda program identify.unl. make identify runs this program to identify
@@ -502,7 +522,7 @@ since it was developed using chars it should be always used safely.
Spoilers:
-
You can examine the progSpoiler.c file. It is the original
+
You can examine the progSpoiler.c file. It is the original
final version of the interpreter, before I started the downsizing. It accepts
one more optional parameter that specifies a filename for the output Unlambda
function (it’s the Unlambda function that remains after all function
diff --git a/2019/burton/index.html b/2019/burton/index.html
index f944b9b10..f53145a4e 100644
--- a/2019/burton/index.html
+++ b/2019/burton/index.html
@@ -48,8 +48,8 @@
@@ -473,7 +493,7 @@ They require a UTF-8 locale.
among the programs that won IOCCC in the past), and obscure bugs (see
the questions about Linux core dumps below).
To a casual eye, this entry may look similar to
-2005/klausler.
+2005/klausler.
However, prog is internationalized and way faster. On my machine,
./klausler abcdefghijklmnopqrstuvwxyz printed only 3,965 perfect
pangrams until I killed it after 144 hours running, while the
diff --git a/2019/diels-grabsch1/index.html b/2019/diels-grabsch1/index.html
index 248aa3317..8ab7fd9c3 100644
--- a/2019/diels-grabsch1/index.html
+++ b/2019/diels-grabsch1/index.html
@@ -48,8 +48,8 @@
Of course you can also use 2015/mills2 instead of
+
Of course you can also use 2015/mills2prog.c instead of
zcat to verify the output file. The achieved compression ratio roughly matches
that of the classic Unix compress(1) tool. And the source code is very
compressed, too: It has exactly the same size as the paragraph you are reading
diff --git a/2019/diels-grabsch2/index.html b/2019/diels-grabsch2/index.html
index df37275d3..4a93a5ed9 100644
--- a/2019/diels-grabsch2/index.html
+++ b/2019/diels-grabsch2/index.html
@@ -48,8 +48,8 @@
@@ -390,8 +410,8 @@ Location: IL - State of Israel (Make sure that you keep focus of windows in mind when going back and forth to
the program and the script.
Output of iocccsize, using the 2019 version of
iocccsize, is carefully selected. For
the sake of clarity, I used single letter variables in the code. I also avoided
unnecessary use of functions. Like a
diff --git a/2019/yang/index.html b/2019/yang/index.html
index 3b050e14e..9dc2b8f2a 100644
--- a/2019/yang/index.html
+++ b/2019/yang/index.html
@@ -48,8 +48,8 @@
@@ -364,7 +384,7 @@ C99+ and ncurses; note that for some platforms (e.g. Red Hat based Linux) you
will need two different packages: the library itself but also the dev package
that has the header files etc. If you use the Makefile obviously you need make
too.
-
In gameplay.html
I show how to easily customise the colours, set up
different gameplay modes and various other things. The troubleshooting.md
and terminals.md as well as bugs.md include a variety of information
diff --git a/2020/ferguson1/HACKING.html b/2020/ferguson1/HACKING.html
index 3793e555f..e128689da 100644
--- a/2020/ferguson1/HACKING.html
+++ b/2020/ferguson1/HACKING.html
@@ -48,8 +48,8 @@
@@ -798,7 +818,7 @@ been warned.
additional obfuscation technique (see spoilers) but it also has more digraphs
and as the judges said they feel that digraphs are dated so that’s probably why
they chose the first layout. The prog.3-j.c version is
-prog.3.c with a shorter J macro.
+prog.3.c with a shorter J macro.
The prog.alt.c version is the one that allows for customising the bug colour and
it’s used in both snake-colours.sh and play.sh. It also calls erase()
first, clearing the screen, which the play.sh and snake-colours.sh scripts also
diff --git a/2020/ferguson1/spoilers.html b/2020/ferguson1/spoilers.html
index 2d068cfa8..3a7816dff 100644
--- a/2020/ferguson1/spoilers.html
+++ b/2020/ferguson1/spoilers.html
@@ -48,8 +48,8 @@
@@ -688,7 +708,7 @@ make it more flexible by a wrapper program.
A parser subtlety that could cause confusion
The parser is in a sense rather rudimentary but allows for both interactive and
-automatic (e.g. via the recode input. This does mean that
+automatic (e.g. via the recode input. This does mean that
something like the following can happen: