diff --git a/1984/decot/README.md b/1984/decot/README.md index e52a2a22a..af68a8a83 100644 --- a/1984/decot/README.md +++ b/1984/decot/README.md @@ -71,8 +71,8 @@ to: for(signal=0;*k *x * __FILE__ *i;) do { ``` -To see what we mean look at the [original source file](decot.orig.c). The -[alternate code](decot.alt.c) is the version that has this modification. The +To see what we mean look at the [original source file](%%REPO_URL%%/1984/decot/decot.orig.c). The +[alternate code](%%REPO_URL%%/1984/decot/decot.alt.c) is the version that has this modification. The fixed version has instead: ``` diff --git a/1984/decot/index.html b/1984/decot/index.html index 6a01d05ce..dac630ee6 100644 --- a/1984/decot/index.html +++ b/1984/decot/index.html @@ -406,8 +406,8 @@ changed it from:

    for(signal=0;*k * x * __FILE__ *i;) do {

to:

    for(signal=0;*k *x * __FILE__ *i;) do {
-

To see what we mean look at the original source file. The -alternate code is the version that has this modification. The +

To see what we mean look at the original source file. The +alternate code is the version that has this modification. The fixed version has instead:

    for(signal=0;*k *= * __FILE__ *i;) do {

Author’s remarks:

diff --git a/1984/mullender/README.md b/1984/mullender/README.md index 5e2235616..6588218d2 100644 --- a/1984/mullender/README.md +++ b/1984/mullender/README.md @@ -125,8 +125,8 @@ favorite entries! In 2023 remarks were discovered from [Sjoerd Mullender](../../authors.html#Sjoerd_Mullender), one of the authors, and so was the program that was used by the authors to generate the array that he referred to. -Because [a.out.h](a.out.h), which [gentab.c](gentab.c) uses, is not available in -all systems (like macOS) and more importantly because we wanted it to be as +Because [a.out.h](%%REPO_URL%%/1984/mullender/a.out.h), which [gentab.c](%%REPO_URL%%/1984/mullender/gentab.c) uses, +is not available in all systems (like macOS) and more importantly because we wanted it to be as close to as the original as possible we used a copy of in the *fabulous* [Unix History @@ -386,7 +386,7 @@ format randomly. So we wrote a program to choose an appropriate format at random. The program we wrote for that follows. This program actually also extracted the machine code from the object file. -NOTE from judges: see [gentab.c](gentab.c) for a copy of this file that can be +NOTE from judges: see [gentab.c](%%REPO_URL%%/1984/mullender/gentab.c) for a copy of this file that can be compiled in modern systems. ``` diff --git a/1984/mullender/index.html b/1984/mullender/index.html index 006dbd046..379eb3bd9 100644 --- a/1984/mullender/index.html +++ b/1984/mullender/index.html @@ -456,8 +456,8 @@ favorite entries!

In 2023 remarks were discovered from Sjoerd Mullender, one of the authors, and so was the program that was used by the authors to generate the array that he referred to. -Because a.out.h, which gentab.c uses, is not available in -all systems (like macOS) and more importantly because we wanted it to be as +Because a.out.h, which gentab.c uses, +is not available in all systems (like macOS) and more importantly because we wanted it to be as close to as the original as possible we used a copy of https://raw.githubusercontent.com/dspinellis/unix-history-repo/Research-Release/usr/include/a.out.h in the fabulous Unix History @@ -661,7 +661,7 @@ formats for each constant in the resulting array, and we wanted to choose the format randomly. So we wrote a program to choose an appropriate format at random. The program we wrote for that follows. This program actually also extracted the machine code from the object file.

-

NOTE from judges: see gentab.c for a copy of this file that can be +

NOTE from judges: see gentab.c for a copy of this file that can be compiled in modern systems.

    #include <stdio.h>
     #include <a.out.h>
diff --git a/1986/marshall/README.md b/1986/marshall/README.md
index 54c90a0bb..59c064072 100644
--- a/1986/marshall/README.md
+++ b/1986/marshall/README.md
@@ -27,7 +27,7 @@ if nothing else.
 
 Due to the different [conflicting problems](compilers.html) with gcc and clang, we
 instead offer the problematic code as an alternate version whereas
-[marshall.c](marshall.c) has both the infinite loop and the complicated arg to
+[marshall.c](%%REPO_URL%%/1986/marshall/marshall.c) has both the infinite loop and the complicated arg to
 `_exit()` commented out, changing the value passed into `_exit()` to `1`.
 
 
diff --git a/1986/marshall/index.html b/1986/marshall/index.html
index 54508cdb3..26504ebfa 100644
--- a/1986/marshall/index.html
+++ b/1986/marshall/index.html
@@ -393,7 +393,7 @@ if nothing else.

Alternate code:

Due to the different conflicting problems with gcc and clang, we instead offer the problematic code as an alternate version whereas -marshall.c has both the infinite loop and the complicated arg to +marshall.c has both the infinite loop and the complicated arg to _exit() commented out, changing the value passed into _exit() to 1.

Alternate build:

To see if your compiler has the problems noted:

diff --git a/1989/README.md b/1989/README.md index e47e450be..2e3c8d3a3 100644 --- a/1989/README.md +++ b/1989/README.md @@ -8,15 +8,15 @@ You may then wish to look at the Author's remarks for even more details. Instructions for use: Run `make` to compile entries (it is possible that on System V or non-Unix systems the Makefile needs to be changed). -The Makefile for ["Best self modifying program"](fubar/indx.html) always uses +The Makefile for ["Best self modifying program"](fubar/index.html) always uses the most portable version because there is no loss of functionality in -using it. In the case of the ["Best game"](tromp/README) entry, however, some +using it. In the case of the ["Best game"](tromp/index.html) entry, however, some functionality is lost in the portable version and so its Makefile uses the original program. This year, the [Best of Show](jar.2/index.html) was given to the most useful program. -The ["Strangest abuse of the rules"](jar.1/indx.html) award was given this year +The ["Strangest abuse of the rules"](jar.1/index.html) award was given this year to stress the fact that starting in 1990, compiling entries must result a regular executable file. diff --git a/1989/index.html b/1989/index.html index 1939dafb8..6fb30593f 100644 --- a/1989/index.html +++ b/1989/index.html @@ -369,13 +369,13 @@ Look at the winning source and try to figure how it does what it does! You may then wish to look at the Author’s remarks for even more details.

Instructions for use: Run make to compile entries (it is possible that on System V or non-Unix systems the Makefile needs to be changed).

-

The Makefile for “Best self modifying program” always uses +

The Makefile for “Best self modifying program” always uses the most portable version because there is no loss of functionality in -using it. In the case of the “Best game” entry, however, some +using it. In the case of the “Best game” entry, however, some functionality is lost in the portable version and so its Makefile uses the original program.

This year, the Best of Show was given to the most useful program.

-

The “Strangest abuse of the rules” award was given this year +

The “Strangest abuse of the rules” award was given this year to stress the fact that starting in 1990, compiling entries must result a regular executable file.

Rules and results were posted to diff --git a/1990/tbr/README.md b/1990/tbr/README.md index 9252af293..9a0a3c377 100644 --- a/1990/tbr/README.md +++ b/1990/tbr/README.md @@ -92,7 +92,7 @@ of the program which we include below: e(x){x<0?write(2,"?\n$ "-x/4,2),x+1||(exit(1),0):5;} ``` -and in the [alternate source](tbr.alt.c). It has the `exit()` returns `void` fix +and in the [alternate source](%%REPO_URL%%/1990/tbr/tbr.alt.c). It has the `exit()` returns `void` fix as well as the `gets()` to `fgets()` fix applied to it to make it functionally equivalent like the authors intended. diff --git a/1990/tbr/index.html b/1990/tbr/index.html index 31cfd724a..26f9a5d31 100644 --- a/1990/tbr/index.html +++ b/1990/tbr/index.html @@ -436,7 +436,7 @@ of the program which we include below:

0),e(open(*i,0)):5,t?dup2(t,1)D t):i[2]?9 D 1),e(creat(i[2],438)):2,e(execvp(*u,u))):e(chdir(u[1])*2):6;} e(x){x<0?write(2,"?\n$ "-x/4,2),x+1||(exit(1),0):5;}
-

and in the alternate source. It has the exit() returns void fix +

and in the alternate source. It has the exit() returns void fix as well as the gets() to fgets() fix applied to it to make it functionally equivalent like the authors intended.

Alternate build:

diff --git a/1991/westley/README.md b/1991/westley/README.md index 784f51448..a936fb1c9 100644 --- a/1991/westley/README.md +++ b/1991/westley/README.md @@ -61,7 +61,7 @@ game: ``` The shell script determines when the game is over, and automatically replaces -`merlyn.c` (copied from [westley.c](westley.c) with an improved version after a +`merlyn.c` (copied from [westley.c](%%REPO_URL%%/1991/westley/westley.c) with an improved version after a loss). The [ttt](%%REPO_URL%%/1991/westley/ttt.sh) script has two other modes: ``` diff --git a/1991/westley/index.html b/1991/westley/index.html index bc4150507..9ac477241 100644 --- a/1991/westley/index.html +++ b/1991/westley/index.html @@ -406,7 +406,7 @@ game:

./ttt [first_move] # <- omit first arg to have it move first ./ttt next_move

The shell script determines when the game is over, and automatically replaces -merlyn.c (copied from westley.c with an improved version after a +merlyn.c (copied from westley.c with an improved version after a loss). The ttt script has two other modes:

    ./ttt quitgame      # cancel any game in progress, revert to merlyn.c
     ./ttt clobber       # remove all game files, revert to original source
diff --git a/1992/albert/README.md b/1992/albert/README.md index 890d88d4d..316a8cfdc 100644 --- a/1992/albert/README.md +++ b/1992/albert/README.md @@ -57,7 +57,7 @@ judges this Email message: ``` The [albert.alt.c](%%REPO_URL%%/1992/albert/albert.c) file is the fixed file, whereas the -[albert.c](1992/albert/1992/albert/lbert.c) is the file before applying Leo Broukhis' fix. +[albert.c](%%REPO_URL%%/1992/albert/1992/albert/lbert.c) is the file before applying Leo Broukhis' fix. ### Alternate build: diff --git a/1992/albert/index.html b/1992/albert/index.html index 70a86c610..2c5eadddb 100644 --- a/1992/albert/index.html +++ b/1992/albert/index.html @@ -407,7 +407,7 @@ judges this Email message:

Both albert and albert.orig loop without printing anything, although the first factor is 101 and is usually found in an instant.

The albert.alt.c file is the fixed file, whereas the -albert.c is the file before applying Leo Broukhis’ fix.

+albert.c is the file before applying Leo Broukhis’ fix.

Alternate build:

To compile this alternate version:

    make alt
diff --git a/1992/gson/README.md b/1992/gson/README.md index ee0abc6e9..e39394fa0 100644 --- a/1992/gson/README.md +++ b/1992/gson/README.md @@ -58,7 +58,7 @@ Then using the proper dictionary file it does: where `/usr/share/dict/words` is the dictionary file. Then it uses the [mkdict.sh](%%REPO_URL%%/1992/gson/mkdict.sh) script to create a dictionary file out -of the files [README.md](%%REPO_URL%%/1992/gson/README.md), [try.sh](try.sh) (itself) and +of the files [index.html](%%REPO_URL%%/1992/gson/index.html), [try.sh](%%REPO_URL%%/1992/gson/try.sh) (itself) and [Makefile](%%REPO_URL%%/1992/gson/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. diff --git a/1992/gson/index.html b/1992/gson/index.html index 235567c25..9bcaef8c6 100644 --- a/1992/gson/index.html +++ b/1992/gson/index.html @@ -406,7 +406,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 README.md, 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.

diff --git a/1992/kivinen/README.md b/1992/kivinen/README.md index 1a3b0674f..a482642b0 100644 --- a/1992/kivinen/README.md +++ b/1992/kivinen/README.md @@ -77,7 +77,7 @@ you have with the program. :-) NOTE: Some systems do not need (or have) `-lsocket -lresolv -lnsl`. Such systems should compile using `-lX11`. -NOTE: The original winning source [kivinen.orig.c](kivinen.orig.c) assumed that +NOTE: The original winning source [kivinen.orig.c](%%REPO_URL%%/1992/kivinen/kivinen.orig.c) assumed that `exit(3)` returned a value which cause problems for some systems where `exit(3)` returns `void`. The file [kivinen.c](%%REPO_URL%%/1992/kivinen/kivinen.c) avoids this problem. diff --git a/1992/kivinen/index.html b/1992/kivinen/index.html index 5e0644849..aa149cc4e 100644 --- a/1992/kivinen/index.html +++ b/1992/kivinen/index.html @@ -414,7 +414,7 @@ code.

you have with the program. :-)

NOTE: Some systems do not need (or have) -lsocket -lresolv -lnsl. Such systems should compile using -lX11.

-

NOTE: The original winning source kivinen.orig.c assumed that +

NOTE: The original winning source kivinen.orig.c assumed that exit(3) returned a value which cause problems for some systems where exit(3) returns void. The file kivinen.c avoids this problem.

Author’s remarks:

diff --git a/1992/marangon/README.md b/1992/marangon/README.md index 964f67175..af034cf1f 100644 --- a/1992/marangon/README.md +++ b/1992/marangon/README.md @@ -22,7 +22,7 @@ NOTE: Some compilers have had trouble optimizing this entry. NOTE: Some systems need to compile with `-ltermcap` as well as `-lcurses`. -NOTE: The original winning source [marangon.orig.c](marangon.orig.c), found in +NOTE: The original winning source [marangon.orig.c](%%REPO_URL%%/1992/marangon/marangon.orig.c), found in the archive directory, assumed that `exit(3)` returns a value which cause problems for some systems where `exit(3)` returns a `void`. The file [marangon.c](%%REPO_URL%%/1992/marangon/marangon.c) avoids this problem. diff --git a/1992/marangon/index.html b/1992/marangon/index.html index 773f6e711..d9d12efd9 100644 --- a/1992/marangon/index.html +++ b/1992/marangon/index.html @@ -387,7 +387,7 @@ numbers as needed. It is the side effects that get you into trouble. If you are not careful, you may find things “at 6’s and 7’s”. :-)

NOTE: Some compilers have had trouble optimizing this entry.

NOTE: Some systems need to compile with -ltermcap as well as -lcurses.

-

NOTE: The original winning source marangon.orig.c, found in +

NOTE: The original winning source marangon.orig.c, found in the archive directory, assumed that exit(3) returns a value which cause problems for some systems where exit(3) returns a void. The file marangon.c avoids this problem.

diff --git a/1993/rince/README.md b/1993/rince/README.md index ac03f4956..a65db0368 100644 --- a/1993/rince/README.md +++ b/1993/rince/README.md @@ -49,7 +49,7 @@ and to another value like 18 or 19 which you can do with the alternate code. -In the case of [rince.alt2.c](rince.alt2.c) the movement keys for the default +In the case of [rince.alt2.c](%%REPO_URL%%/1993/rince/rince.alt2.c) the movement keys for the default game are slightly different and will feel more familiar to vi users: `h` for left, `l` for right (that was not changed) and `k` for fire (that was also not changed). diff --git a/1993/rince/index.html b/1993/rince/index.html index 39919c64e..521d68554 100644 --- a/1993/rince/index.html +++ b/1993/rince/index.html @@ -397,7 +397,7 @@ value 17 in the lines:

and

    refresh(),c=select(k,&y,0,0,(v.tv_usec=1<<17,&v))?getch():0;

to another value like 18 or 19 which you can do with the alternate code.

-

In the case of rince.alt2.c the movement keys for the default +

In the case of rince.alt2.c the movement keys for the default game are slightly different and will feel more familiar to vi users: h for left, l for right (that was not changed) and k for fire (that was also not changed).

diff --git a/1994/dodsond2/README.md b/1994/dodsond2/README.md index 55108efe7..32a020e3d 100644 --- a/1994/dodsond2/README.md +++ b/1994/dodsond2/README.md @@ -84,8 +84,8 @@ in an effort to get around the 1994 version of Rule 2: followed by either whitespace or end of file, must be <= 1536. ``` -Indeed, when [dodsond2.gz](dodsond2.gz) is uncompressed, it is identical -to the [dodsond2.c](%%REPO_URL%%/1994/dodsond2/dodsond2.c) file you find today. +Indeed the [dodsond2.c](%%REPO_URL%%/1994/dodsond2/dodsond2.c) file is +what you find today. The IOCCC rules and guidelines were modified in an effort to address this fun "_abuse of the rules_" style hack. diff --git a/1994/dodsond2/index.html b/1994/dodsond2/index.html index ca32e35c0..60ee8cec3 100644 --- a/1994/dodsond2/index.html +++ b/1994/dodsond2/index.html @@ -414,8 +414,8 @@ in an effort to get around the 1994 version of Rule 2:

    2) Your entry must be <= 3217 bytes in length.  The number of characters
        excluding whitespace (tab, space, newline), and excluding any ; { or }
        followed by either whitespace or end of file, must be <= 1536.
-

Indeed, when dodsond2.gz is uncompressed, it is identical -to the dodsond2.c file you find today.

+

Indeed the dodsond2.c file is +what you find today.

The IOCCC rules and guidelines were modified in an effort to address this fun “abuse of the rules” style hack.

It is worth noting that without this compression “abuse of the rules” diff --git a/1994/shapiro/README.md b/1994/shapiro/README.md index 0dff6ad5c..4ee67bbd4 100644 --- a/1994/shapiro/README.md +++ b/1994/shapiro/README.md @@ -51,7 +51,7 @@ source file is self documenting. :-) From time to time, run `ps(1)` and look at the new processes. See [shapiro.html](shapiro.html) for more information in the internals of this program. -The file [shapiro.alt.c](shapiro.alt.c) contains a non-obfuscated version of +The file [shapiro.alt.c](%%REPO_URL%%/1994/shapiro/shapiro.alt.c) contains a non-obfuscated version of this program. Note that this alt file is currently missing. See [1994 shapiro bugs](../../bugs.html#1994_shapiro) for details. @@ -67,18 +67,18 @@ The basic theme (pun) of this program is: ``` -My entry ([shapiro.c](shapiro.c)) is mostly comments, formatted in the shape of a +My entry ([shapiro.c](%%REPO_URL%%/1994/shapiro/shapiro.c)) is mostly comments, formatted in the shape of a clock. If you strip out the comments and look at the code you will quickly realize that the comments were the important part and that the code does very little (see pun above). It writes (to `stdout`) -another C program ([shapiro_t2.c](shapiro_t2.c)). This is the first level of +another C program ([shapiro_t2.c](%%REPO_URL%%/1994/shapiro/shapiro_t2.c)). This is the first level of obfuscation. -The second program ([shapiro_t2.c](shapiro_t2.c) (use `make everything` first) +The second program ([shapiro_t2.c](%%REPO_URL%%/1994/shapiro/shapiro_t2.c) (use `make everything` first) prints a clock in the upper right hand corner of your VTxxx/ANSI display. Most of the surface obfuscation in the second program -([shapiro_t2.c](shapiro_t2.c)) was an attempt to make it as small as possible. +([shapiro_t2.c](%%REPO_URL%%/1994/shapiro/shapiro_t2.c)) was an attempt to make it as small as possible. You should be able to see around this with `cb(1)` and some more intelligent variable names. Once you get past this you will realize that the third level of obfuscation is a six member client/server hierarchy. (See the diff --git a/1994/shapiro/index.html b/1994/shapiro/index.html index 7e4542b13..6306263e0 100644 --- a/1994/shapiro/index.html +++ b/1994/shapiro/index.html @@ -403,23 +403,23 @@ bring it back to the foreground.

source file is self documenting. :-)

From time to time, run ps(1) and look at the new processes.

See shapiro.html for more information in the internals of this program. -The file shapiro.alt.c contains a non-obfuscated version of +The file shapiro.alt.c contains a non-obfuscated version of this program. Note that this alt file is currently missing. See 1994 shapiro bugs for details.

Author’s remarks:

The basic theme (pun) of this program is:

    "This time (everything) is not where it should be."
           ~~~~
-

My entry (shapiro.c) is mostly comments, formatted in the shape of a +

My entry (shapiro.c) is mostly comments, formatted in the shape of a clock. If you strip out the comments and look at the code you will quickly realize that the comments were the important part and that the code does very little (see pun above). It writes (to stdout) -another C program (shapiro_t2.c). This is the first level of +another C program (shapiro_t2.c). This is the first level of obfuscation.

-

The second program (shapiro_t2.c (use make everything first) +

The second program (shapiro_t2.c (use make everything first) prints a clock in the upper right hand corner of your VTxxx/ANSI display.

Most of the surface obfuscation in the second program -(shapiro_t2.c) was an attempt to make it as small as possible. +(shapiro_t2.c) was an attempt to make it as small as possible. You should be able to see around this with cb(1) and some more intelligent variable names. Once you get past this you will realize that the third level of obfuscation is a six member client/server hierarchy. (See the diff --git a/1994/weisberg/README.md b/1994/weisberg/README.md index 447b73368..8a70f5a24 100644 --- a/1994/weisberg/README.md +++ b/1994/weisberg/README.md @@ -77,7 +77,7 @@ event of a system shutdown or reboot. ### Bugs -The alternative version ([weisberg.alt.c](weisberg.alt.c)) has never actually run +The alternative version ([weisberg.alt.c](%%REPO_URL%%/1994/weisberg/weisberg.alt.c)) has never actually run to completion. After running for close to a week it had reached somewhere around 250e6, when it became necessary to test the reboot feature (which worked remarkably well). As there are quite a lot of primes to be found before reaching diff --git a/1994/weisberg/index.html b/1994/weisberg/index.html index a81a1d526..84bad6850 100644 --- a/1994/weisberg/index.html +++ b/1994/weisberg/index.html @@ -413,7 +413,7 @@ run to completion, so as an added feature, it will cease execution upon reception of a signal (any will do equally well), as well as in the event of a system shutdown or reboot.

Bugs

-

The alternative version (weisberg.alt.c) has never actually run +

The alternative version (weisberg.alt.c) has never actually run to completion. After running for close to a week it had reached somewhere around 250e6, when it became necessary to test the reboot feature (which worked remarkably well). As there are quite a lot of primes to be found before reaching diff --git a/1994/westley/README.md b/1994/westley/README.md index 981fc43d1..466df2032 100644 --- a/1994/westley/README.md +++ b/1994/westley/README.md @@ -85,7 +85,7 @@ compiler line you will get a different message (**as compiler errors** due to _This is independent of the previous (if there are any previous) compiler invocations_ specified. That means with the right compiler invocation you can -'win' the game on the first go. But unlike the [alternate code](westley.alt.c), +'win' the game on the first go. But unlike the [alternate code](%%REPO_URL%%/1994/westley/westley.alt.c), you do not run this program as it will not compile: instead it will be compiler error messages; there is no running the program. diff --git a/1994/westley/index.html b/1994/westley/index.html index 20ae198f2..7a4f3f1aa 100644 --- a/1994/westley/index.html +++ b/1994/westley/index.html @@ -427,7 +427,7 @@ compiler line you will get a different message (as compiler errors

This is independent of the previous (if there are any previous) compiler invocations specified. That means with the right compiler invocation you can -‘win’ the game on the first go. But unlike the alternate code, +‘win’ the game on the first go. But unlike the alternate code, you do not run this program as it will not compile: instead it will be compiler error messages; there is no running the program.

Original try:

diff --git a/1996/august/README.md b/1996/august/README.md index e936ff85e..b31e9bc5d 100644 --- a/1996/august/README.md +++ b/1996/august/README.md @@ -104,7 +104,7 @@ of operators, and control constructs. The compiler has absolutely no error checking, so things can go wrong. But this is what seasoned C programmers are used to. -Assume that the interpreter has been compiled (source in [august.c](august.c) +Assume that the interpreter has been compiled (source in [august.c](%%REPO_URL%%/1996/august/august.c) and binary in august) and that we have this in a file named `test.oc`: ``` diff --git a/1996/august/index.html b/1996/august/index.html index df54f4954..b25f1c093 100644 --- a/1996/august/index.html +++ b/1996/august/index.html @@ -429,7 +429,7 @@ syntax). Arrays can only be global. There is a rather limited set of operators, and control constructs.

The compiler has absolutely no error checking, so things can go wrong. But this is what seasoned C programmers are used to.

-

Assume that the interpreter has been compiled (source in august.c +

Assume that the interpreter has been compiled (source in august.c and binary in august) and that we have this in a file named test.oc:

    main() { putchar('!'); putchar('\n'); exit(0); }

We can then compile by

diff --git a/1996/schweikh2/README.md b/1996/schweikh2/README.md index c226c8291..bf4d88267 100644 --- a/1996/schweikh2/README.md +++ b/1996/schweikh2/README.md @@ -48,7 +48,7 @@ make it easier to see what is happening. ## Judges' remarks: The original program, with only slight obfuscations, may be found -in [hunni.c](%%REPO_URL%%/1996/schweikh2/hunni.c). The perl script, [hunni.pl](hunni.pl), obfuscates it +in [hunni.c](%%REPO_URL%%/1996/schweikh2/hunni.c). The perl script, [hunni.pl](%%REPO_URL%%/1996/schweikh2/hunni.pl), obfuscates it appropriately. Try: ``` diff --git a/1996/schweikh2/index.html b/1996/schweikh2/index.html index a7676f88e..8d515d777 100644 --- a/1996/schweikh2/index.html +++ b/1996/schweikh2/index.html @@ -399,7 +399,7 @@ ctrl-c to stop it. Observe how the Judges’ remarks:

The original program, with only slight obfuscations, may be found -in hunni.c. The perl script, hunni.pl, obfuscates it +in hunni.c. The perl script, hunni.pl, obfuscates it appropriately. Try:

    less hunni.c
 
diff --git a/1996/schweikh3/README.md b/1996/schweikh3/README.md
index 930c1b921..94b0239ba 100644
--- a/1996/schweikh3/README.md
+++ b/1996/schweikh3/README.md
@@ -131,7 +131,7 @@ situation and effectively halts.
 I had the pleasure and pain to find all three behaviours on the
 platforms I use regularly.
 
-The file [schweikh3.info](schweikh3.info) has output for
+The file [schweikh3.info](%%REPO_URL%%/1996/schweikh3/schweikh3.info) has output for
 Solaris, FreeBSD and Linux. The Linux case is interesting in that
 the behaviour changes when `calloc(3)` is used instead of `malloc(3)`.
 For FreeBSD, the last two lines are not messages stemming from
diff --git a/1996/schweikh3/index.html b/1996/schweikh3/index.html
index 485ea76b2..ebd59b00e 100644
--- a/1996/schweikh3/index.html
+++ b/1996/schweikh3/index.html
@@ -463,7 +463,7 @@ situation and effectively halts.

I had the pleasure and pain to find all three behaviours on the platforms I use regularly.

-

The file schweikh3.info has output for +

The file schweikh3.info has output for Solaris, FreeBSD and Linux. The Linux case is interesting in that the behaviour changes when calloc(3) is used instead of malloc(3). For FreeBSD, the last two lines are not messages stemming from diff --git a/1996/westley/README.md b/1996/westley/README.md index 28d24dabe..476a44a6a 100644 --- a/1996/westley/README.md +++ b/1996/westley/README.md @@ -60,8 +60,8 @@ This 1-line program allows various analog ASCII clocks to print out the time; the ASCII clock is built from the command line arguments, so many different types of clocks can be generated. Three different scripts are supplied to print out a grandfather clock, a mantle clock that runs backwards, and a linear-style -clock. (they are [clock1.sh](clock1.sh), [clock2.sh](clock2.sh), and -[clock3.sh](clock3.sh)) +clock. (they are [clock1.sh](%%REPO_URL%%/1996/westley/clock1.sh), [clock2.sh](%%REPO_URL%%/1996/westley/clock2.sh), and +[clock3.sh](%%REPO_URL%%/1996/westley/clock3.sh)) The program makes the following (possibly non-portable) assumptions: diff --git a/1996/westley/index.html b/1996/westley/index.html index c37f68bd0..5f3da1911 100644 --- a/1996/westley/index.html +++ b/1996/westley/index.html @@ -406,8 +406,8 @@ understand it.

the ASCII clock is built from the command line arguments, so many different types of clocks can be generated. Three different scripts are supplied to print out a grandfather clock, a mantle clock that runs backwards, and a linear-style -clock. (they are clock1.sh, clock2.sh, and -clock3.sh)

+clock. (they are clock1.sh, clock2.sh, and +clock3.sh)

The program makes the following (possibly non-portable) assumptions:

  1. Command line strings can be written to.

  2. diff --git a/1998/banks/README.md b/1998/banks/README.md index 71c859cd8..ca5d12e97 100644 --- a/1998/banks/README.md +++ b/1998/banks/README.md @@ -219,7 +219,7 @@ Here is a brief description of the scenery files: Simple obstacle course. Try to fly over the buildings and under the bridges. -- [pyramids.sc](1998/banks/pyramids.sc) +- [pyramids.sc](%%REPO_URL%%/1998/banks/pyramids.sc) Fly over the tombs of the ancient Pharaohs, in this (fictitious) Egyptian landscape. diff --git a/1998/banks/index.html b/1998/banks/index.html index 8d86993b2..4377a4a84 100644 --- a/1998/banks/index.html +++ b/1998/banks/index.html @@ -519,7 +519,7 @@ to your right.

  3. bb.sc

    Simple obstacle course. Try to fly over the buildings and under the bridges.

  4. -
  5. pyramids.sc

    +
  6. pyramids.sc

    Fly over the tombs of the ancient Pharaohs, in this (fictitious) Egyptian landscape.

  7. river.sc

    diff --git a/1998/fanf/README.md b/1998/fanf/README.md index 5c08f365e..0e62ccbde 100644 --- a/1998/fanf/README.md +++ b/1998/fanf/README.md @@ -28,7 +28,7 @@ Enter an expression on standard input. To try some we have selected: ### Historical aside: -At a time the code in [fanf.c](%%REPO_URL%%/1998/fanf/fanf.c) was that of [fanf.orig.c](fanf.orig.c) +At a time the code in [fanf.c](%%REPO_URL%%/1998/fanf/fanf.c) was that of [fanf.orig.c](%%REPO_URL%%/1998/fanf/fanf.orig.c) but to get this to compile in modern systems it had to be translated to what you now see. The intermediate steps can still be performed but they might be different from the past. This should be kept in mind as you read the below diff --git a/1998/fanf/index.html b/1998/fanf/index.html index 9399ee304..a416d0bb0 100644 --- a/1998/fanf/index.html +++ b/1998/fanf/index.html @@ -388,7 +388,7 @@ this entry because of the system resources it requires.

        ./try.sh

    Judges’ remarks:

    Historical aside:

    -

    At a time the code in fanf.c was that of fanf.orig.c +

    At a time the code in fanf.c was that of fanf.orig.c but to get this to compile in modern systems it had to be translated to what you now see. The intermediate steps can still be performed but they might be different from the past. This should be kept in mind as you read the below diff --git a/1998/schnitzi/README.md b/1998/schnitzi/README.md index cbec70cfd..d7fc68330 100644 --- a/1998/schnitzi/README.md +++ b/1998/schnitzi/README.md @@ -78,7 +78,7 @@ the letter `e`. The IOCCC has been no stranger to this concept. Several winning entries from years past have accomplished interesting feats while completely avoiding the use of certain C constructs thought to be essential (e.g. -[1988/robison.c](../../1988/robison/robison.c)). If you have to ask why they would +[1988/robison.c](%%REPO_URL%%/1988/robison/robison.c)). If you have to ask why they would do it this way, then this contest just isn't for you. In continuing with this fine tradition, this program suggests to the ANSI diff --git a/1998/schnitzi/index.html b/1998/schnitzi/index.html index 957578ffc..e86873ac8 100644 --- a/1998/schnitzi/index.html +++ b/1998/schnitzi/index.html @@ -422,7 +422,7 @@ the letter e.

    The IOCCC has been no stranger to this concept. Several winning entries from years past have accomplished interesting feats while completely avoiding the use of certain C constructs thought to be essential (e.g. -1988/robison.c). If you have to ask why they would +1988/robison.c). If you have to ask why they would do it this way, then this contest just isn’t for you.

    In continuing with this fine tradition, this program suggests to the ANSI committee some new practical simplifications for the C language. For instance, diff --git a/1998/schweikh1/README.md b/1998/schweikh1/README.md index c7729e283..e6b90de6e 100644 --- a/1998/schweikh1/README.md +++ b/1998/schweikh1/README.md @@ -247,7 +247,7 @@ printer when you make a hard copy of the source... While I'm at it, the rules state that only space, tab and newline are ignored for the count (plus '`{`', '`}`', '`;`' followed by -whitespace). The [mkentry.c](../mkentry.c) program, however, uses `isspace(3)` which +whitespace). The [mkentry.c](%%REPO_URL%%/1998/mkentry.c) program, however, uses `isspace(3)` which returns nonzero for `\v` and `\f` and other characters as well. I could have used a lot more `^K` and `^L` probably undetected by your counter but decided to err on the side of safety. I use a perl diff --git a/1998/schweikh1/index.html b/1998/schweikh1/index.html index 85e81b98e..ed2722cca 100644 --- a/1998/schweikh1/index.html +++ b/1998/schweikh1/index.html @@ -546,7 +546,7 @@ something new – after 14 years of IOCCC. Be sure to have enough paper in your printer when you make a hard copy of the source…

    While I’m at it, the rules state that only space, tab and newline are ignored for the count (plus ‘{’, ‘}’, ‘;’ followed by -whitespace). The mkentry.c program, however, uses isspace(3) which +whitespace). The mkentry.c program, however, uses isspace(3) which returns nonzero for \v and \f and other characters as well. I could have used a lot more ^K and ^L probably undetected by your counter but decided to err on the side of safety. I use a perl diff --git a/2000/README.md b/2000/README.md index 94895be1e..e9b7e9206 100644 --- a/2000/README.md +++ b/2000/README.md @@ -45,7 +45,7 @@ them for the next IOCCC. We believe you will be impressed with this year's winning entries. The [Best of Show](jarijyrki/index.html) is a fine example of compact obfuscation. But don't ignore the shorter entries. The [Best Small Program](natori/index.html), [Best -Abuse of User](briddlebane/README.m) and [Most Complete Program](tomx/index.html) +Abuse of User](briddlebane/index.html) and [Most Complete Program](tomx/index.html) are well worth studying in detail. The [Worst Abuse of the Rules](dlowe/index.html) is technically allowed by the diff --git a/2000/bmeyer/README.md b/2000/bmeyer/README.md index 7e13881b7..146a5775d 100644 --- a/2000/bmeyer/README.md +++ b/2000/bmeyer/README.md @@ -324,7 +324,7 @@ en/decoded[^4]. ### Photo Credit: [Lavabus](%%REPO_URL%%/2000/bmeyer/lavabus.pgm) was taken by the judge, Landon Curt Noll. -[Michael](%%REPO_URL%%/2000/bmeyer/michael.pgm) was provided by the author. [Lenna](lenna.glic) is a +[Michael](%%REPO_URL%%/2000/bmeyer/michael.pgm) was provided by the author. [Lenna](%%REPO_URL%%/2000/bmeyer/lenna.glic) is a 1972 Playboy centerfold (doesn't show very much). - [michael.pgm](%%REPO_URL%%/2000/bmeyer/michael.pgm) diff --git a/2000/bmeyer/index.html b/2000/bmeyer/index.html index bfc846303..8ea6eb668 100644 --- a/2000/bmeyer/index.html +++ b/2000/bmeyer/index.html @@ -584,7 +584,7 @@ interval halving repeated until the precise value has been en/decoded5.

    Photo Credit:

    Lavabus was taken by the judge, Landon Curt Noll. -Michael was provided by the author. Lenna is a +Michael was provided by the author. Lenna is a 1972 Playboy centerfold (doesn’t show very much).

NOTE: if the 32-bit version cannot be compiled the script will at least compile -anonymous.ten as a 64-bit program (or whatever your system is +anonymous.ten as a 64-bit program (or whatever your system is set to) and run it directly.

What happens if the x86 program has already been modified by this program? The judges’ remarks below might give you a hint!

@@ -436,7 +436,7 @@ quite a lot of bit twiddling.

run x86 programs on any machine (x86 or otherwise).

I have included a simple 10 Green Bottles -program (try make anonymous.ten), meant to be compiled as a +program (try make anonymous.ten), meant to be compiled as a 32-bit ELF binary.

The program anonymous.ten, and its source (dull) are included as data files.

@@ -453,7 +453,7 @@ generates a translation for an entire basic block of subject code. Having translated a block once, the target code generated will be stored for the duration that the program is running, so as a program runs its performance will improve, as it hits cached blocks. This can be clearly observed in the example -program, anonymous.ten which must be compiled as a 32-bit ELF +program, anonymous.ten which must be compiled as a 32-bit ELF binary.

Target Library Linking:

The program runs dynamically @@ -523,7 +523,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.

+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/README.md b/2001/bellard/README.md index bee0b9db5..f159d7c57 100644 --- a/2001/bellard/README.md +++ b/2001/bellard/README.md @@ -82,7 +82,10 @@ put `#!/usr/local/bin/otcc` at the beginning of your C source if you installed `otcc` at this place. -### Supported C language subset (read joint example [bellard.otccex.c](bellard.otccex.c) to have an introduction to `OTCC` dialect) +### Supported C language subset + + +Read joint example [bellard.otccex.c](%%REPO_URL%%/2001/bellard/bellard.otccex.c) to have an introduction to `OTCC` dialect. #### Expressions: diff --git a/2001/bellard/index.html b/2001/bellard/index.html index d92172b16..57d9ce546 100644 --- a/2001/bellard/index.html +++ b/2001/bellard/index.html @@ -418,7 +418,8 @@ program.

An alternate syntax is to use it as a script interpreter: you can put #!/usr/local/bin/otcc at the beginning of your C source if you installed otcc at this place.

-

Supported C language subset (read joint example bellard.otccex.c to have an introduction to OTCC dialect)

+

Supported C language subset

+

Read joint example bellard.otccex.c to have an introduction to OTCC dialect.

Expressions:

  • binary operators, in decreasing precedence order: * / %, diff --git a/2004/README.md b/2004/README.md index c2b2f38ca..e6a6c3e62 100644 --- a/2004/README.md +++ b/2004/README.md @@ -26,11 +26,11 @@ local compiler. ## Remarks on some of the entries We believe you will be impressed with this year's winning entries. The [Best of -Show](gavin/gavin.c) is a fine example of obfuscation. But don't ignore the +Show](%%REPO_URL%%/2004/gavin/gavin.c) is a fine example of obfuscation. But don't ignore the other entries! There are games, utilities, programs that output images and a one-liner that is incredibly compact for what it can do. -The [Best Abuse of the Guidelines](hibachi/hibachi.c) is technically allowed by +The [Best Abuse of the Guidelines](%%REPO_URL%%/2004/hibachi/hibachi.c) is technically allowed by the rules. This year we allowed it due to the functionality of the program. This entry is one of the easiest to read! Don't assume you can win using similar techniques next time ... :-) diff --git a/2004/index.html b/2004/index.html index 6348628f0..8494b3bc8 100644 --- a/2004/index.html +++ b/2004/index.html @@ -379,11 +379,11 @@ require certain changes (add or remove a library, add or remove a yours is lacking, you may need to compile using gcc instead of your local compiler.

    Remarks on some of the entries

    -

    We believe you will be impressed with this year’s winning entries. The Best of +

    We believe you will be impressed with this year’s winning entries. The Best of Show is a fine example of obfuscation. But don’t ignore the other entries! There are games, utilities, programs that output images and a one-liner that is incredibly compact for what it can do.

    -

    The Best Abuse of the Guidelines is technically allowed by +

    The Best Abuse of the Guidelines is technically allowed by the rules. This year we allowed it due to the functionality of the program. This entry is one of the easiest to read! Don’t assume you can win using similar techniques next time … :-)

    diff --git a/2004/jdalbec/README.md b/2004/jdalbec/README.md index 6891e0571..337d5c545 100644 --- a/2004/jdalbec/README.md +++ b/2004/jdalbec/README.md @@ -114,7 +114,7 @@ last digit. Four common elements could also be written as isotopes of these two elements: `He=Np(2)`, `Li=Pu(2)`, `Ta=Np(3)`, `W=Pu(3)`. To get other isotopes, just change the last digit to a number greater than 3. -The build file runs [jdalbec.c](jdalbec.c) through the C preprocessor to +The build file runs [jdalbec.c](%%REPO_URL%%/2004/jdalbec/jdalbec.c) through the C preprocessor to generate `jdalbec2.c` which is edited with `ed(1)` (NOTE: this was changed to `sed(1)` by the judges) to correct spacing problems caused by some preprocessors. (I know you dislike @@ -122,10 +122,10 @@ Perl, but hopefully `ed(1)` is more common on POSIX systems than Perl.) The build file then compiles `jdalbec2.c]` and removes the `jdalbec2.c` file. -I don't think I'm abusing the [Makefile](Makefile) since I'm only using +I don't think I'm abusing the [Makefile](%%REPO_URL%%/2004/jdalbec/Makefile) since I'm only using 147 characters including white space and the `#!` line and the commented-out `-Wall -pedantic` options. The [rules for the -16th IOCCC](../../2004/rules.txt) specifically allowed build files up to 521 +16th IOCCC](../rules.txt) specifically allowed build files up to 521 characters long so my build file would have been well within those limits. (What typo?) @@ -168,7 +168,7 @@ line 3 because the compiler doesn't recognize `??=` as a trigraph step on Mac OS X 10.1.5 generates lots of errors in "smart mode" because the "smart" preprocessor expects a valid C program as input. The preprocessor then falls back to "basic -mode" and preprocesses [jdalbec.c](jdalbec.c) successfully without warnings, +mode" and preprocesses [jdalbec.c](%%REPO_URL%%/2004/jdalbec/jdalbec.c) successfully without warnings, even when I give it the `-Wall -pedantic` options. It inserts a lot of extra spaces into the preprocessed output which is why I had to add the `ed(1)` step to the build file so that my @@ -191,7 +191,7 @@ it if you run into this feature (e.g. `1 22` instead of `122`). Note: you may want to be sure you have a limit on stack size before trying this. I ran it on Debian GNU/Linux and discovered that I did not have a limit on stack size. Fortunately the OS killed the process after a while. This is consistent -with the output of [1996/schweikh3](../../1996/schweikh3/schweikh3.c) which reports +with the output of [1996/schweikh3](%%REPO_URL%%/1996/schweikh3/schweikh3.c) which reports `malloc lied! Killed by SIGKILL`. Arguments matching `/(?:.){10,}/` will produce visually incorrect diff --git a/2004/jdalbec/index.html b/2004/jdalbec/index.html index 2133788fe..e136ae00d 100644 --- a/2004/jdalbec/index.html +++ b/2004/jdalbec/index.html @@ -434,16 +434,16 @@ the isotopes of last digit. Four common elements could also be written as isotopes of these two elements: He=Np(2), Li=Pu(2), Ta=Np(3), W=Pu(3). To get other isotopes, just change the last digit to a number greater than 3.

    -

    The build file runs jdalbec.c through the C preprocessor to +

    The build file runs jdalbec.c through the C preprocessor to generate jdalbec2.c which is edited with ed(1) (NOTE: this was changed to sed(1) by the judges) to correct spacing problems caused by some preprocessors. (I know you dislike Perl, but hopefully ed(1) is more common on POSIX systems than Perl.) The build file then compiles jdalbec2.c] and removes the jdalbec2.c file.

    -

    I don’t think I’m abusing the Makefile since I’m only using +

    I don’t think I’m abusing the Makefile since I’m only using 147 characters including white space and the #! line and the -commented-out -Wall -pedantic options. The rules for the +commented-out -Wall -pedantic options. The rules for the 16th IOCCC specifically allowed build files up to 521 characters long so my build file would have been well within those limits. (What typo?)

    @@ -481,7 +481,7 @@ line 3 because the compiler doesn’t recognize ??= as a trigraph step on Mac OS X 10.1.5 generates lots of errors in “smart mode” because the “smart” preprocessor expects a valid C program as input. The preprocessor then falls back to “basic -mode” and preprocesses jdalbec.c successfully without warnings, +mode” and preprocesses jdalbec.c successfully without warnings, even when I give it the -Wall -pedantic options. It inserts a lot of extra spaces into the preprocessed output which is why I had to add the ed(1) step to the build file so that my @@ -500,7 +500,7 @@ it if you run into this feature (e.g. 1 22 instead of 122Note: you may want to be sure you have a limit on stack size before trying this. I ran it on Debian GNU/Linux and discovered that I did not have a limit on stack size. Fortunately the OS killed the process after a while. This is consistent -with the output of 1996/schweikh3 which reports +with the output of 1996/schweikh3 which reports malloc lied! Killed by SIGKILL.

    Arguments matching /(?:.){10,}/ will produce visually incorrect results (e.g., generation 1 starting from 1111111111 will diff --git a/2004/kopczynski/README.md b/2004/kopczynski/README.md index ffabaa7fe..ad8d63bd2 100644 --- a/2004/kopczynski/README.md +++ b/2004/kopczynski/README.md @@ -101,7 +101,7 @@ the number from 8 to 11 that it thinks it is. (`$?` is shorter) * I achieved some additional tightness by `-Dif=while` which saved 9 chars of -source for the cost of 11 chars of the [Makefile](Makefile). If I used +source for the cost of 11 chars of the [Makefile](%%REPO_URL%%/2004/kopczynski/Makefile). If I used `-DB=while`, I would save 12 for 10, but I think the current version is slightly more obfuscated. diff --git a/2004/kopczynski/index.html b/2004/kopczynski/index.html index bab67d382..c496375de 100644 --- a/2004/kopczynski/index.html +++ b/2004/kopczynski/index.html @@ -436,7 +436,7 @@ number, not to print it, but if you think otherwise, the change would cost 6 chars (plus a warning). Change return * to printf("%d",*). ($? is shorter)

  • I achieved some additional tightness by -Dif=while which saved 9 chars of -source for the cost of 11 chars of the Makefile. If I used +source for the cost of 11 chars of the Makefile. If I used -DB=while, I would save 12 for 10, but I think the current version is slightly more obfuscated.

diff --git a/2005/aidan/README.md b/2005/aidan/README.md index 90b3984eb..8b872d19c 100644 --- a/2005/aidan/README.md +++ b/2005/aidan/README.md @@ -58,7 +58,7 @@ more while it puzzles out some puzzles: all in a puzzling way! `goto` the source and notice the lack of functions. Jump to the `switch` statement. And if you think you can puzzle -it out better, try solving [insane1.sudoku](insane1.sudoku) all by yourself! +it out better, try solving [insane1.sudoku](%%REPO_URL%%/2005/aidan/insane1.sudoku) all by yourself! NOTE: the tarball named by the author was removed after the files were extracted into the directory instead. These files were added to the list. @@ -91,7 +91,7 @@ Yes, the test suite really is 5 times larger than the actual program. You ### IMPORTANT -[test.perl](test-su.perl) expects the `sudoku-sf` executable to be +[test.perl](%%REPO_URL%%/2005/aidan/test-su.perl) expects the `sudoku-sf` executable to be `./sudoku-sf`. If you rename it, please change the definition of `$sf_exe` to the new name. @@ -219,7 +219,7 @@ Input should be the numbers of each row in turn. Empty spaces can be represented as a full stop (`.`) or zero (`0`). Other characters are ignored, so you can cut-and-paste either example sudoku puzzle from above into a file and feed that in. The program has coped with every input I've thrown at it so far, including -an [empty grid](blank.sudoku). +an [empty grid](%%REPO_URL%%/2005/aidan/blank.sudoku). Output consists of the problem, then the solution, then a message of success/failure. diff --git a/2005/aidan/index.html b/2005/aidan/index.html index a3516cce7..8e2faef3e 100644 --- a/2005/aidan/index.html +++ b/2005/aidan/index.html @@ -402,7 +402,7 @@ which is slower, inelegant and not as obscure, as the author put it.

more while it puzzles out some puzzles: all in a puzzling way!

goto the source and notice the lack of functions. Jump to the switch statement. And if you think you can puzzle -it out better, try solving insane1.sudoku all by yourself!

+it out better, try solving insane1.sudoku all by yourself!

NOTE: the tarball named by the author was removed after the files were extracted into the directory instead. These files were added to the list.

Author’s remarks:

@@ -425,7 +425,7 @@ generate new ones.

Yes, the test suite really is 5 times larger than the actual program. You did say this was a parody of the software development process…

IMPORTANT

-

test.perl expects the sudoku-sf executable to be +

test.perl expects the sudoku-sf executable to be ./sudoku-sf. If you rename it, please change the definition of $sf_exe to the new name.

Judges’ note: this was done.

@@ -507,7 +507,7 @@ really.

represented as a full stop (.) or zero (0). Other characters are ignored, so you can cut-and-paste either example sudoku puzzle from above into a file and feed that in. The program has coped with every input I’ve thrown at it so far, including -an empty grid.

+an empty grid.

Output consists of the problem, then the solution, then a message of success/failure.

./aidan U may also be useful, or perhaps not. It only took diff --git a/2006/meyer/README.md b/2006/meyer/README.md index 265b4790b..32a0e64f9 100644 --- a/2006/meyer/README.md +++ b/2006/meyer/README.md @@ -37,8 +37,8 @@ NOTE: if your move is invalid it will prompt you again but not show the board. This entry turns a newspaper solitaire puzzle into a competition with the computer to be the last one moving. The object of this -[source code](meyer.c) is to determine the object of this [source -code](meyer.c)! :-) +[source code](%%REPO_URL%%/2006/meyer/meyer.c) is to determine the object of this [source +code](%%REPO_URL%%/2006/meyer/meyer.c)! :-) ## Author's remarks: diff --git a/2006/meyer/index.html b/2006/meyer/index.html index 3e7e8298d..d44a7579e 100644 --- a/2006/meyer/index.html +++ b/2006/meyer/index.html @@ -393,7 +393,7 @@ more text to fulfil the program’s requirements.

Judges’ remarks:

This entry turns a newspaper solitaire puzzle into a competition with the computer to be the last one moving. The object of this -source code is to determine the object of this source +source code is to determine the object of this source code! :-)

Author’s remarks:

I wanted submit a fully object-oriented entry to show that diff --git a/2006/sykes1/README.md b/2006/sykes1/README.md index a40ca40b1..147fffaa0 100644 --- a/2006/sykes1/README.md +++ b/2006/sykes1/README.md @@ -4,7 +4,7 @@ make ``` -There is an alt version based on the author's remarks. The [try.sh](try.sh) +There is an alt version based on the author's remarks. The [try.sh](%%REPO_URL%%/2006/sykes1/try.sh) script will compile and use both but if you wish to see the alternate version specifically see the [Alternate code](#alternate-code) section below. @@ -127,7 +127,7 @@ Some instructions on how to make your own cube are in the included file [bedlam-cubes.pdf](%%REPO_URL%%/2006/sykes1/bedlam-cubes.pdf). Finally, you can watch it being solved with the video file here, -[solving-bedlam-cube.mp4](solving-bedlam-cube.mp4). +[solving-bedlam-cube.mp4](%%REPO_URL%%/2006/sykes1/solving-bedlam-cube.mp4). Actually the cube is very hard to do by hand by just trying to fit it together. I have not known anyone to solve it in this way - you would diff --git a/2006/sykes1/index.html b/2006/sykes1/index.html index 1d9352c67..f4228ac40 100644 --- a/2006/sykes1/index.html +++ b/2006/sykes1/index.html @@ -379,7 +379,7 @@ Location: FI - Republic of Finland

To build:

    make
-

There is an alt version based on the author’s remarks. The try.sh +

There is an alt version based on the author’s remarks. The try.sh script will compile and use both but if you wish to see the alternate version specifically see the Alternate code section below.

Bugs and (Mis)features:

@@ -431,7 +431,7 @@ puzzles in wikipedia.

Some instructions on how to make your own cube are in the included file bedlam-cubes.pdf.

Finally, you can watch it being solved with the video file here, -solving-bedlam-cube.mp4.

+solving-bedlam-cube.mp4.

Actually the cube is very hard to do by hand by just trying to fit it together. I have not known anyone to solve it in this way - you would need to be very lucky indeed to stumble across a solution.

diff --git a/2006/toledo2/README.md b/2006/toledo2/README.md index 9a8c67a7a..0042d36d7 100644 --- a/2006/toledo2/README.md +++ b/2006/toledo2/README.md @@ -102,8 +102,8 @@ and a disk controller, just like at the start of the personal computers revolution (circa 1975). It needs an initial memory image to do something usable, so along with it you -will find two files: ([C.BASIC](C.BASIC) and [C.BIOS](C.BIOS)). Rename -[C.BASIC](C.BASIC) to `C` (NOTE from the judges: running `make` will do this for +will find two files: ([C.BASIC](%%REPO_URL%%/2006/toledo2/C.BASIC) and [C.BIOS](%%REPO_URL%%/2006/toledo2/C.BIOS)). Rename +[C.BASIC](%%REPO_URL%%/2006/toledo2/C.BASIC) to `C` (NOTE from the judges: running `make` will do this for you), run the emulator, and et voila! you have the public domain Palo Alto [Tiny BASIC](https://en.wikipedia.org/wiki/Tiny_BASIC) (by Li-Chen Wang), published in the very first volume of [Dr. Dobb's diff --git a/2006/toledo2/index.html b/2006/toledo2/index.html index 282168dec..e7cd35a87 100644 --- a/2006/toledo2/index.html +++ b/2006/toledo2/index.html @@ -432,8 +432,8 @@ removes those files extracted from the KAYPROII.ZIP.

and a disk controller, just like at the start of the personal computers revolution (circa 1975).

It needs an initial memory image to do something usable, so along with it you -will find two files: (C.BASIC and C.BIOS). Rename -C.BASIC to C (NOTE from the judges: running make will do this for +will find two files: (C.BASIC and C.BIOS). Rename +C.BASIC to C (NOTE from the judges: running make will do this for you), run the emulator, and et voila! you have the public domain Palo Alto Tiny BASIC (by Li-Chen Wang), published in the very first volume of Dr. Dobb’s diff --git a/2011/blakely/README.md b/2011/blakely/README.md index 36d22c598..7e1a4a79f 100644 --- a/2011/blakely/README.md +++ b/2011/blakely/README.md @@ -96,7 +96,7 @@ When evolving forwards, the code can only be stopped by killing the program. In the reverse direction, the code can either be killed, or will stop if it is unable to find a grid that will evolve to the current layout correctly. This can be seen with the sample grid -[t0_3.dat](t0_3.dat), which evolves backwards by only two time-steps. +[t0_3.dat](%%REPO_URL%%/2011/blakely/t0_3.dat), which evolves backwards by only two time-steps. ### Input file format diff --git a/2011/blakely/index.html b/2011/blakely/index.html index 9ed1f8bff..e0e6771b0 100644 --- a/2011/blakely/index.html +++ b/2011/blakely/index.html @@ -428,7 +428,7 @@ line option.

program. In the reverse direction, the code can either be killed, or will stop if it is unable to find a grid that will evolve to the current layout correctly. This can be seen with the sample grid -t0_3.dat, which evolves backwards by only two time-steps.

+t0_3.dat, which evolves backwards by only two time-steps.

Input file format

The input files must encode a square grid, where a space is a dead cell, and any other character (except a newline) is a living cell. Each line must be the same diff --git a/2011/dlowe/README.md b/2011/dlowe/README.md index f8d195824..cd913e454 100644 --- a/2011/dlowe/README.md +++ b/2011/dlowe/README.md @@ -228,11 +228,11 @@ The learning rate is hard-coded as `0.3`. No momentum factor is used. #### png corpora -The [png-1](dlowe-aux-data/png-1) corpus was obtained by manually scraping the first results from an +The `dlowe-aux-data/png-1` corpus was obtained by manually scraping the first results from an search for "[obfuscate filetype:png](https://www.google.com/search?tbm=isch&sxsrf=APwXEddqIU34dxhpFdjEa8emNJKHOkYXIw:1683049158657&source=hp&biw=1727&bih=952&ei=xkpRZLapJtLKkPIP8bGKkAk&iflsig=AOEireoAAAAAZFFY1nbmEUHC74Cmg3Y5rEY1fV7ocASZ&ved=0ahUKEwi2pPXZltf-AhVSJUQIHfGYApIQ4dUDCAY&uact=5&oq=obfuscate+filetype:png&gs_lcp=CgNpbWcQA1AAWABg9QNoAHAAeACAATuIATuSAQExmAEAoAECoAEBqgELZ3dzLXdpei1pbWc&sclient=img&q=obfuscate&tbs=ift:png)". -The [png-0](dlowe-aux-data/png-0) corpus was obtained by manually scraping the first results from an +The `dlowe-aux-data/png-0` corpus was obtained by manually scraping the first results from an search for "[obfuscate filetype:gif](https://www.google.com/search?tbm=isch&ved=2ahUKEwiowo7fltf-AhXSOUQIHbJBDp8Q2-cCegQIABAA&oq=obfuscate+filetype:gif&gs_lcp=CgNpbWcQAzoECCMQJzoHCAAQigUQQzoFCAAQgARQ6AxY6AxgpBJoAHAAeACAAUeIAcsBkgEBM5gBAKABAaoBC2d3cy13aXotaW1nwAEB&sclient=img&ei=0UpRZOiVINLzkPIPsoO5-Ak&bih=952&biw=1727&q=obfuscate&tbs=ift:gif)". @@ -242,7 +242,7 @@ filetype:gif](https://www.google.com/search?tbm=isch&ved=2ahUKEwiowo7fltf-AhXSOU * Using these corpora as a training set; * Using several hundred random `*.gif` and `*.png` files from my home computer as a test set; -* Using the included [earlystop.pl](earlystop.pl) script, which stopped after 67000 iterations. +* Using the included [earlystop.pl](%%REPO_URL%%/2011/dlowe/earlystop.pl) script, which stopped after 67000 iterations. * Interpreting output of `> 0.5` as "probably a `.png`" and `< 0.5` as "probably a `.gif`" @@ -303,7 +303,7 @@ representation and [endianness](https://en.wikipedia.org/wiki/Endianness). Making sure not to [overfit](https://en.wikipedia.org/wiki/Overfitting#Machine_learning) the network to the training data is a bit of a -black art. I have enclosed [earlystop.pl](earlystop.pl), a wrapper script that implements +black art. I have enclosed [earlystop.pl](%%REPO_URL%%/2011/dlowe/earlystop.pl), a wrapper script that implements a simple 'early stopping' algorithm; other techniques are possible. Bad input (e.g. nonexistent files, non-numeric number of iterations, etc.) diff --git a/2011/dlowe/index.html b/2011/dlowe/index.html index bf93dcc3b..47a30ef6b 100644 --- a/2011/dlowe/index.html +++ b/2011/dlowe/index.html @@ -501,10 +501,10 @@ assigned a target value of 0. Intervening directories (if any) will intermediate target values.

The learning rate is hard-coded as 0.3. No momentum factor is used.

png corpora

-

The png-1 corpus was obtained by manually scraping the first results from an +

The dlowe-aux-data/png-1 corpus was obtained by manually scraping the first results from an https://images.google.com search for “obfuscate filetype:png”.

-

The png-0 corpus was obtained by manually scraping the first results from an +

The dlowe-aux-data/png-0 corpus was obtained by manually scraping the first results from an https://images.google.com search for “obfuscate filetype:gif”.

Results:
@@ -512,7 +512,7 @@ filetype:gif”.

  • Using these corpora as a training set;
  • Using several hundred random *.gif and *.png files from my home computer as a test set;
  • -
  • Using the included earlystop.pl script, which stopped after 67000 iterations.
  • +
  • Using the included earlystop.pl script, which stopped after 67000 iterations.
  • Interpreting output of > 0.5 as “probably a .png” and < 0.5 as “probably a .gif”
  • @@ -554,7 +554,7 @@ figuring out how to concatenate directory and file names…).

    representation and endianness.

    Making sure not to overfit the network to the training data is a bit of a -black art. I have enclosed earlystop.pl, a wrapper script that implements +black art. I have enclosed earlystop.pl, a wrapper script that implements a simple ‘early stopping’ algorithm; other techniques are possible.

    Bad input (e.g. nonexistent files, non-numeric number of iterations, etc.) tends to result in empty output.

    diff --git a/2011/hamaji/README.md b/2011/hamaji/README.md index c57ec59af..5dde2423c 100644 --- a/2011/hamaji/README.md +++ b/2011/hamaji/README.md @@ -159,7 +159,7 @@ cannot execute deeper recursions). First of all, as you see, my program looks like a nonogram puzzle which results in a [dragon](https://www.draconika.com/what). This puzzle is -[dragon.nono](dragon.nono) in this directory. Note that whitespaces in character +[dragon.nono](%%REPO_URL%%/2011/hamaji/dragon.nono) in this directory. Note that whitespaces in character literals, a string literal, and around the last comment are considered as a boxed cell. @@ -214,7 +214,7 @@ The second author wrote the picture, and the first author did everything else. The [dragon.nono](%%REPO_URL%%/2011/hamaji/dragon.nono), [samurai.nono](%%REPO_URL%%/2011/hamaji/samurai.nono), and -[penguin.nono](penguin.nono) were written by the +[penguin.nono](%%REPO_URL%%/2011/hamaji/penguin.nono) were written by the second author. The [soccer.nono](%%REPO_URL%%/2011/hamaji/soccer.nono) was from a wikipedia entry. This file is important because it requires some guesses. The [random.nono](%%REPO_URL%%/2011/hamaji/random.nono) file was randomly generated. The [codegolf.nono](%%REPO_URL%%/2011/hamaji/codegolf.nono) and diff --git a/2011/hamaji/index.html b/2011/hamaji/index.html index 1ed0d1486..da210d0ba 100644 --- a/2011/hamaji/index.html +++ b/2011/hamaji/index.html @@ -484,7 +484,7 @@ cannot execute deeper recursions).

    Obfuscation

    First of all, as you see, my program looks like a nonogram puzzle which results in a dragon. This puzzle is -dragon.nono in this directory. Note that whitespaces in character +dragon.nono in this directory. Note that whitespaces in character literals, a string literal, and around the last comment are considered as a boxed cell.

    My program is based on bit operations for speed. Many values are @@ -518,7 +518,7 @@ dragon.

    The second author wrote the picture, and the first author did everything else.

    The dragon.nono, samurai.nono, and -penguin.nono were written by the +penguin.nono were written by the second author. The soccer.nono was from a wikipedia entry. This file is important because it requires some guesses. The random.nono file was randomly generated. The codegolf.nono and diff --git a/2011/toledo/README.md b/2011/toledo/README.md index 9b672e431..c91171a96 100644 --- a/2011/toledo/README.md +++ b/2011/toledo/README.md @@ -8,7 +8,7 @@ If you have X11 installed: There are two alternate versions, [one that lets you reconfigure the controls and size](%%REPO_URL%%/2011/toledo/toledo.alt.c) and [another that should work for -Windows](toledo.alt2.c). See [Alternate code](#alternate-code) below. +Windows](%%REPO_URL%%/2011/toledo/toledo.alt2.c). See [Alternate code](#alternate-code) below. ## To use: diff --git a/2011/toledo/index.html b/2011/toledo/index.html index a74c2d5f4..0dfad5790 100644 --- a/2011/toledo/index.html +++ b/2011/toledo/index.html @@ -381,7 +381,7 @@ Location: MX - United Mexican StatesIf you have X11 installed:

        make

    There are two alternate versions, one that lets you reconfigure the -controls and size and another that should work for +controls and size and another that should work for Windows. See Alternate code below.

    To use:

        ./toledo
    diff --git a/2012/deckmyn/README.md b/2012/deckmyn/README.md index 9d9a19ba7..a16ebfc04 100644 --- a/2012/deckmyn/README.md +++ b/2012/deckmyn/README.md @@ -102,13 +102,13 @@ etc. The program expects *two command line arguments*. The first is a (very long) string that contains the complete music font. Note that it should *not* be given as a file name! The default music font is encoded in the (whitespace of the) -source code [deckmyn.c](deckmyn.c) itself. Therefore, the first argument should +source code [deckmyn.c](%%REPO_URL%%/2012/deckmyn/deckmyn.c) itself. Therefore, the first argument should be `"`` ` ``cat deckmyn.c`` ` ``"`. The second command line argument is the music itself. This is, again, a string, not a file name. All music signs are entered as tokens of exactly 3 characters. The code is very sensitive to bad spacing! So for instance, if you use a file to -write the music (e.g. [example\_greensleeves](example_greensleeves)), you should +write the music (e.g. [example\_greensleeves](%%REPO_URL%%/2012/deckmyn/example_greensleeves)), you should keep in mind that newline is also a character! diff --git a/2012/deckmyn/index.html b/2012/deckmyn/index.html index ffba65f9c..a5565b3bd 100644 --- a/2012/deckmyn/index.html +++ b/2012/deckmyn/index.html @@ -427,12 +427,12 @@ etc.

    The program expects two command line arguments. The first is a (very long) string that contains the complete music font. Note that it should not be given as a file name! The default music font is encoded in the (whitespace of the) -source code deckmyn.c itself. Therefore, the first argument should +source code deckmyn.c itself. Therefore, the first argument should be "`` cat deckmyn.c ``".

    The second command line argument is the music itself. This is, again, a string, not a file name. All music signs are entered as tokens of exactly 3 characters. The code is very sensitive to bad spacing! So for instance, if you use a file to -write the music (e.g. example_greensleeves), you should +write the music (e.g. example_greensleeves), you should keep in mind that newline is also a character!

    Internals

    To minimise the memory footprint, this program has no variable declarations at diff --git a/2012/tromp/README.md b/2012/tromp/README.md index 5b8d9666d..928b6030d 100644 --- a/2012/tromp/README.md +++ b/2012/tromp/README.md @@ -512,7 +512,7 @@ and detract from its single minded focus on conciseness. It implicitly declares functions `read(2)`, `write(2)`, `exit(3)` and `calloc(3)`, the latter two incompatibly. 32 bit and 64 bit executables are -separate [Makefile](Makefile) targets, involving a change from `int` to `long` +separate [Makefile](%%REPO_URL%%/2012/tromp/Makefile) targets, involving a change from `int` to `long` and from a hardcoded sizeof of 4 to 8. The program has been tested to work correctly on Linux/Solaris/MacOSX both in 32 diff --git a/2012/tromp/index.html b/2012/tromp/index.html index 2fd7d3129..c69ca32ef 100644 --- a/2012/tromp/index.html +++ b/2012/tromp/index.html @@ -715,7 +715,7 @@ many warnings;

    and detract from its single minded focus on conciseness.

    It implicitly declares functions read(2), write(2), exit(3) and calloc(3), the latter two incompatibly. 32 bit and 64 bit executables are -separate Makefile targets, involving a change from int to long +separate Makefile targets, involving a change from int to long and from a hardcoded sizeof of 4 to 8.

    The program has been tested to work correctly on Linux/Solaris/MacOSX both in 32 and 64 bits.

    diff --git a/2013/birken/README.md b/2013/birken/README.md index b970a4902..95ef510b2 100644 --- a/2013/birken/README.md +++ b/2013/birken/README.md @@ -333,7 +333,7 @@ rate in which the terminal application receives and displays the [ANSI escape](https://en.wikipedia.org/wiki/ANSI_escape_code) sequences. To slow down the output programmatically, introduce a delay immediately after the -call to `fflush(3)` (N.B: see [birken.alt.c](birken.alt.c)). +call to `fflush(3)` (N.B: see [birken.alt.c](%%REPO_URL%%/2013/birken/birken.alt.c)). ### IOCCC Size Tool Bug diff --git a/2013/birken/index.html b/2013/birken/index.html index 400fe8cdd..37707de7c 100644 --- a/2013/birken/index.html +++ b/2013/birken/index.html @@ -600,7 +600,7 @@ represented using ANSI escape sequences.

    rate in which the terminal application receives and displays the ANSI escape sequences.

    To slow down the output programmatically, introduce a delay immediately after the -call to fflush(3) (N.B: see birken.alt.c).

    +call to fflush(3) (N.B: see birken.alt.c).

    IOCCC Size Tool Bug

    This program demonstrates how to exploit a bug in IOCCC size tool version 2013-07-30-v17. The first line of the program is reproduced below.

    diff --git a/2013/cable3/README.md b/2013/cable3/README.md index cba1d2e13..34ba3a8cb 100644 --- a/2013/cable3/README.md +++ b/2013/cable3/README.md @@ -112,7 +112,7 @@ little endian machine. ### RULE 2 ABUSE DISCLAIMER -- [cable3.c](cable3.c) is 4043 bytes in length (half an 8086). +- [cable3.c](%%REPO_URL%%/2013/cable3/cable3.c) is 4043 bytes in length (half an 8086). - `iocccsize -i < cable3.c` returns 1977 (the year the 4.77 MHz 8086 CPU was announced) - Therefore, any suspicions the judges may have regarding rule 2 non-compliance might be well-intentioned but are groundless. diff --git a/2013/cable3/index.html b/2013/cable3/index.html index de911e65c..4a3331478 100644 --- a/2013/cable3/index.html +++ b/2013/cable3/index.html @@ -445,7 +445,7 @@ and somewhat useless beast. For everyone else, please run the emulator on a little endian machine.

    RULE 2 ABUSE DISCLAIMER