Update 1994 winning entries' README.md files

Format and typo fixes.
This commit is contained in:
Cody Boone Ferguson committed 2023-04-14 06:28:42 -07:00
1 parent ee4ee3497d
commit 2501c808c6
9 files changed
+155 -119

No files matched your search

+14 -10
View File
@@ -1,20 +1,24 @@
# Best Game # Best Game
Don Dodson Don Dodson
AG Communication Systems AG Communication Systems
17239 N. 19th Ave. #1003 17239 N. 19th Ave. #1003
Phoenix, AZ 85023 Phoenix, AZ 85023
USA USA
## To build: ## To build:
make all ```sh
make all
```
## To run ## To run:
./dodsond1 ```sh
./dodsond1
NOTE: At the prompt, try entering E3. ```
NOTE: At the prompt, try entering `E3`.
## Judges' remarks: ## Judges' remarks:
+20 -14
View File
@@ -1,18 +1,22 @@
# Most Obfuscated Packaging # Most Obfuscated Packaging
Don Dodson Don Dodson
AG Communication Systems AG Communication Systems
17239 N. 19th Ave. #1003 17239 N. 19th Ave. #1003
Phoenix, AZ 85023 Phoenix, AZ 85023
USA USA
## To build: ## To build:
make all ```sh
make all
```
## To run: ## To run:
./dodsond2 ```sh
./dodsond2
```
## Judges' remarks: ## Judges' remarks:
@@ -33,9 +37,11 @@ dodsond2.gz: gzip compressed data, last modified: Mon Aug 29 21:54:39 1994, max
The [dodsond2.gz](dodsond2.gz) file was submitted as source The [dodsond2.gz](dodsond2.gz) file was submitted as source
in an effort to get around the 1994 version of Rule 2: 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 } 2) Your entry must be <= 3217 bytes in length. The number of characters
followed by either whitespace or end of file, must be <= 1536. excluding whitespace (tab, space, newline), and excluding any ; { or }
followed by either whitespace or end of file, must be <= 1536.
```
Indeed, when [dodsond2.gz](dodsond2.gz) is uncompressed, it is identical Indeed, when [dodsond2.gz](dodsond2.gz) is uncompressed, it is identical
to the [dodsond2.c](dodsond2.c) file you find today. to the [dodsond2.c](dodsond2.c) file you find today.
@@ -58,11 +64,11 @@ be detected from 2 rooms away.
To win, you must find one or more arrows, determine where the Wumpus To win, you must find one or more arrows, determine where the Wumpus
is, and shoot him, all without falling into a pit or becoming the is, and shoot him, all without falling into a pit or becoming the
next meal for the Wumpus. To shoot an arrow, type "s". Then give a next meal for the Wumpus. To shoot an arrow, type `s`. Then give a
list of the rooms you want to shoot into. The rooms must be list of the rooms you want to shoot into. The rooms must be
connected in the order you list them, or else the arrow may bounce connected in the order you list them, or else the arrow may bounce
back and hit you. An arrow can go through as many as four rooms. back and hit you. An arrow can go through as many as four rooms.
But beware, because shooting an arrow and missing the Wumpus may But beware that shooting an arrow and missing the Wumpus may
awaken him. awaken him.
There is a robber who waits in an unknown room. If you enter There is a robber who waits in an unknown room. If you enter
@@ -71,8 +77,8 @@ and move to a new room. If he steals all the arrows in the
Caverns, you may catch him and recover all of them. Doing this Caverns, you may catch him and recover all of them. Doing this
gives you a bonus on your score. gives you a bonus on your score.
You can quit at any time by typing 'q'. Typing 'i' will tell You can quit at any time by typing `q`. Typing `i` will tell
you how many arrows you are carrying. 'l' prints the description you how many arrows you are carrying. `l` prints the description
of the current room again. of the current room again.
## Copyright and CC BY-SA 4.0 License: ## Copyright and CC BY-SA 4.0 License:
+37 -27
View File
@@ -1,28 +1,36 @@
# Most Obfuscated Algorithm # Most Obfuscated Algorithm
Ian Collier Ian Collier
Oxford University Oxford University
57 Wyndham Avenue (home address) 57 Wyndham Avenue (home address)
BOLTON Bolton
BL3 4LG BL3 4LG
England England
## To build: ## To build:
make all ```sh
make all
```
## To run: ## To run:
To use: ```sh
./imc INTEGER ./imc [NUMBER]
```
where `[NUMBER]` is an optional number. Default is 5.
## Try: ## Try:
./imc 3 ```sh
./imc 3 ./imc 3
./imc 4 ./imc 3
./imc 4 ./imc 4
./imc 6 ./imc 4
./imc 6
./imc 13
```
## Judges' remarks: ## Judges' remarks:
@@ -32,15 +40,15 @@ This entry's algorithm is as magic as its output!
## Author's remarks: ## Author's remarks:
This program may be compiled with an ANSI or K&R compiler. A few This program may be compiled with an ANSI or K&R compiler. A few
harmless warnings are displayed only if "gcc -Wall" is used. harmless warnings are displayed only if `gcc -Wall` is used.
This entry is really a set of library functions, but an example This entry is really a set of library functions, but an example
main function has been added so that the library can be tested. If main function has been added so that the library can be tested. If
the program appears too large, consider that functions o and s can the program appears too large, consider that functions `o` and `s` can
each be separated from the rest of the program (except for the short each be separated from the rest of the program (except for the short
functions p and r, which they require) and used alone. However, the functions `p` and `r`, which they require) and used alone. However, the
main part of the program is the function e, which does require all the main part of the program is the function `e`, which does require all the
other functions (apart from main). other functions (apart from `main`).
The program should be supplied with an integer parameter. If no The program should be supplied with an integer parameter. If no
parameter or an invalid parameter is given, then 5 is assumed. The parameter or an invalid parameter is given, then 5 is assumed. The
@@ -53,22 +61,24 @@ OK, so you have probably seen magic square printers before. But what
about one that deals with even sizes as well as odd ones, or one that about one that deals with even sizes as well as odd ones, or one that
prints out a different one each time (or attempts to, at any rate)? prints out a different one each time (or attempts to, at any rate)?
I have formatted the important functions o, s and e to show how useful I have formatted the important functions `o`, `s` and `e` to show how useful
the word "for" is, and (in function e) how useful the words "if" and the word "for" is, and (in function `e`) how useful the words "if" and
"else" are. In fact, hardly anything happens that isn't in one of these "else" are. In fact, hardly anything happens that isn't in one of these
instructions. I did this in order to simplify the code - the algorithms instructions. I did this in order to simplify the code - the algorithms
used to make the random squares are quite complex without being shrouded used to make the random squares are quite complex without being shrouded
in obfuscated code! :-) Incidentally, I was surprised to find out how in obfuscated code! :-) Incidentally, I was surprised to find out how
useful the exclusive-or operator was while writing function s. useful the exclusive-or operator was while writing function `s`.
Here are the descriptions of the functions in the library: Here are the descriptions of the functions in the library:
o(n,a,q,d): makes a magic square of order n when n is odd and at least 3. ```
s(n,a,q,d): makes a magic square of order n when n equals 4. o(n,a,q,d): makes a magic square of order n when n is odd and at least 3.
e(n,a,q,d): makes a magic square of order n when n is even and at least 6. s(n,a,q,d): makes a magic square of order n when n equals 4.
e(n,a,q,d): makes a magic square of order n when n is even and at least 6.
```
In the above, `a` (of type `int*`) points to an area of memory in which In the above, `a` (of type `int *`) points to an area of memory in which
the magic square will be stored and `q` (also of type `int*`) points to the magic square will be stored and `q` (also of type `int *`) points to
an area of memory of length at least `n*sizeof(int)` bytes which can be an area of memory of length at least `n*sizeof(int)` bytes which can be
used as a work space. Both `a` and `q` must be allocated by the caller. used as a work space. Both `a` and `q` must be allocated by the caller.
The integer parameter `d`, usually zero, indicates the length of a gap The integer parameter `d`, usually zero, indicates the length of a gap
+15 -10
View File
@@ -5,7 +5,7 @@ ISX Corporation
1165 Northchase Pkwy, Suite 120 1165 Northchase Pkwy, Suite 120
Marietta, GA 30067 Marietta, GA 30067
USA USA
<http://computronium.org/ioccc.html> <http://computronium.org/ioccc.html>
## To build: ## To build:
@@ -32,10 +32,11 @@ it is not as easy to change it to `fgets()`. [Cody Boone
Ferguson](/winners.html#Cody_Boone_Ferguson) gives some hints in the Ferguson](/winners.html#Cody_Boone_Ferguson) gives some hints in the
[bugs.md](/bugs.md) file on how this entry works which might be useful in order [bugs.md](/bugs.md) file on how this entry works which might be useful in order
to get this to use `fgets()` which would prevent a warning at linking or to get this to use `fgets()` which would prevent a warning at linking or
runtime. The file [schnitzi.alt.c](schnitzi.alt.c) has this to get anyone runtime, the latter of which is interspersed with the output of the program. The
started, should they wish to tackle it (Cody will in time). The problem with file [schnitzi.alt.c](schnitzi.alt.c) has this to get anyone started, should
changing the buffer size is that even when it works the generated output (see they wish to tackle it (Cody might in time). The problem with changing the buffer
judges' remarks below) will not be 100% correct duplication of the program. size is that even when it works the generated output (see judges' remarks below)
will not be 100% correct duplication of the program.
### Alternate code: ### Alternate code:
@@ -69,16 +70,20 @@ down to the bottom right. In other words, the first row in the
file ends up written down the first column of the result, the file ends up written down the first column of the result, the
second row is written down the second column, etc. The program second row is written down the second column, etc. The program
is run by redirecting a file into the executable on the command is run by redirecting a file into the executable on the command
line; for instance, for the included 'info' file, the program line; for instance, for the file 'info', the program
would be run as follows: would be run as follows:
schnitzi < info ```sh
schnitzi < info
```
The program generates interesting results when its source file is The program generates interesting results when its source file is
used as input: used as input:
```sh
schnitzi < schnitzi.c schnitzi < schnitzi.c
```
The result of this command is a program which does the exact same The result of this command is a program which does the exact same
thing -- in other words, both the program and the "flipped" thing -- in other words, both the program and the "flipped"
version of itself work identically (you'll need to redirect the version of itself work identically (you'll need to redirect the
+15 -11
View File
@@ -1,24 +1,26 @@
# Most Well Rounded Obfuscation # Most Well Rounded Obfuscation
Andrew T. Shapiro Andrew T. Shapiro
CSES/CIRES University of Colorado CSES/CIRES University of Colorado
Campus Box 216 Campus Box 216
Boulder, CO 80309-0216 Boulder, CO 80309-0216
USA USA
## To build: ## To build:
make all ```sh
make all
```
[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed a bug on systems [Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed a bug on systems
where `EOF != -1`. The problem is that `getc()` and the related functions do not where `EOF != -1`. The problem is that `getc()` and the related functions do not
return `-1` on EOF or error but rather `EOF`. However `EOF` is not required to be return `-1` on EOF or error but rather `EOF`. However `EOF` is not required to be
`-1` but merely an int < 0 and this program assumed that `getc()` will return `-1` but merely an int < 0 and this program assumed that `getc()` will return
`-1` on EOF or error, not `EOF`. On systems where `EOF != -1` it could be a `-1` on EOF or error, not `EOF`. On systems where `EOF != -1` it could result in
problem. For the same reason one should not use `EOF` for the `getopt()` an infinite loop (for the same reason one should not use `EOF` for the `getopt()`
functions as they return `-1` when all options are parsed (for details on the functions as they return `-1` when all options are parsed (for details on the
definition of `EOF` see `7.21 Input/output<stdio.h>` subsection 1 of the definition of `EOF` see `7.21 Input/output<stdio.h>` subsection 1 of the
standard). An interesting problem occurred where changing the `-1` to `EOF` standard)). An interesting problem occurred where changing the `-1` to `EOF`
caused both `warning: illegal character encoding in string literal` and `error: caused both `warning: illegal character encoding in string literal` and `error:
source file is not valid UTF-8`. But since `EOF` is simply an int < 0 and making source file is not valid UTF-8`. But since `EOF` is simply an int < 0 and making
the loop condition check that the return value is >= 0 does not cause a the loop condition check that the return value is >= 0 does not cause a
@@ -28,7 +30,9 @@ assistance!
## To run: ## To run:
./shapiro & ```sh
./shapiro &
```
## Try: ## Try:
@@ -86,7 +90,7 @@ obfuscation is a six member client/server hierarchy.
(See the [shapiro.md](shapiro.md) file for a detailed description of the (See the [shapiro.md](shapiro.md) file for a detailed description of the
algorithm.) algorithm.)
Lint complains about: precedence confusion, `K` may be used before set, `lint` complains about: precedence confusion, `K` may be used before set,
main() returns random value to invocation environment, value type used main() returns random value to invocation environment, value type used
inconsistently, value type declared inconsistently, function argument inconsistently, value type declared inconsistently, function argument
(number) used inconsistently, function returns value which is always (number) used inconsistently, function returns value which is always
+11 -10
View File
@@ -1,14 +1,16 @@
# Worst Abuse of the Rules # Worst Abuse of the Rules
Szymon Rusinkiewicz Szymon Rusinkiewicz
Massachusetts Institute of Technology Massachusetts Institute of Technology
305 Memorial Dr., Room 005B 305 Memorial Dr., Room 005B
Cambridge, Ma 02139 Cambridge, Ma 02139
USA USA
## To build: ## To build:
make all ```sh
make all
```
## To run: ## To run:
@@ -36,10 +38,9 @@ compiler can't, the build instructions supplied with this entry
will produce an executable file. On most systems, the stdout will produce an executable file. On most systems, the stdout
from the executable will exactly match original source. from the executable will exactly match original source.
In the future, the contest rules will specify a minimum size In the future, the contest rules will specify a minimum size that is one
that is one character larger than this entry, forever eliminating character larger than this entry, forever eliminating this sort of program from
this sort of program from contest. After all, how many variations the contest. After all, how many variations can one make on this entry? :-)
can one make on this entry? :-)
## Author's remarks: ## Author's remarks:
+24 -17
View File
@@ -1,14 +1,16 @@
# Best X11 Program # Best X11 Program
Teemu Rantanen Teemu Rantanen
Helsinki University of Technology Helsinki University of Technology
Melkonkatu 5 A 8 Melkonkatu 5 A 8
00210 Helsinki 00210 Helsinki
Finland Finland
## To build: ## To build:
make all ```sh
make all
```
## To run: ## To run:
@@ -98,13 +100,13 @@ the fourth is a variation of that with more nice effects.
The first parameter is the operating-mode of the program. There are 4 fractal The first parameter is the operating-mode of the program. There are 4 fractal
pairs, 3 display modes, making total of 12 modes. `Screensize` is half of the pairs and 3 display modes, making total of 12 modes. `screensize` is half of the
actual `screenlength/width`. I.e. if you use 128 as a second parameter, you will actual `screenlength/width`. I.e. if you use 128 as a second parameter, you will
get two 256x256 windows. get two 256x256 windows.
The program needs reasonable values for both of these parameters to The program needs reasonable values for both of these parameters to
operate. A good first try could be "0 128" or "8 128". `Colormap` has operate. A good first try could be "0 128" or "8 128". The `colormap` has
to be piped into the programs standard input. to be redirected into the programs standard input via the `colormapfile`.
Note that you will need approximately `(second_parameter^2)*64` bytes of free Note that you will need approximately `(second_parameter^2)*64` bytes of free
main memory or the machine will swap heavily (memory references are quite random main memory or the machine will swap heavily (memory references are quite random
@@ -112,23 +114,23 @@ and may confuse paging algorithms easily). This means that for 512x512 windows
you will need 4M of memory. you will need 4M of memory.
### `Colormapfile`: ### `colormapfile`
This is the file from which program reads colors for screen `colormap`. The This is the file from which program reads colors for screen `colormap`. The
first line of the file must be a number between `3..254`. This informs the first line of the file must be a number between `3..254`. This informs the
program how many colors there are to be expected. This is also the maximum program how many colors there are to be expected. This is also the maximum
number of iterations used on picture calculations. Lines after that are X11 number of iterations used on picture calculations. Lines after that are X11
color names. The program expects to find, and it uses, the number of colors color names. The program expects to find, and will use, the number of colors
reported on the first line. reported on the first line.
There are two `colormapfiles` to start with. One with colors and another with There are two `colormapfile`s to start with. One with colors and another with
only black and white. If you have enough colors on your display you can use the only black and white. If you have enough colors on your display you can use the
one with colors (even on `grayscale`). The other is meant mainly for a one bit one with colors (even on `grayscale`). The other is meant mainly for a one bit
plane display (on which the picture looks terrible compared to a 8 bit plane plane display (on which the picture looks terrible compared to a 8 bit plane
display). display).
### Compilation: ### Compilation
You should compile this entry with an optimizing compiler with the You should compile this entry with an optimizing compiler with the
highest level of optimization possible. You will also need an ANSI highest level of optimization possible. You will also need an ANSI
@@ -157,6 +159,8 @@ between the X server and the client is slow. (Don't try this on 9600 bps modem
line. I did ;) ) line. I did ;) )
### Obfuscation
Obfuscation is done on different levels. Almost none of it is made at the macro Obfuscation is done on different levels. Almost none of it is made at the macro
level, so `cpp`ing the code won't give you much. Perhaps most notable is the level, so `cpp`ing the code won't give you much. Perhaps most notable is the
algorithmic obfuscation. Simple formula has been turned into something algorithmic obfuscation. Simple formula has been turned into something
@@ -166,33 +170,36 @@ left out of the program because speed of animation was one of the key issues.
Well, obfuscated or not, some of the effects are very nice ;) Well, obfuscated or not, some of the effects are very nice ;)
### Memory refreshment: ### Memory refreshment
Mandelbrot set is calculated from the formula Mandelbrot set is calculated from the formula
```
2 2
Z = Z + Z Z = Z + Z
n+1 n 0 n+1 n 0
```
and the Julian set is calculated from the formula and the Julian set is calculated from the formula
```
2 2
Z = Z + C Z = Z + C
n+1 n n+1 n
```
where `C` is the same throughout the picture. Both calculation are finished where `C` is the same throughout the picture. Both calculation are finished
when `|Z| >= 2.0`. For the other fractals, the basic methods are the same but when `|Z| >= 2.0`. For the other fractals, the basic methods are the same but
the formula is different (look at the source ;) the formula is different (look at the source ;) )
Note that Mandelbrot and Julian on this program aren't exactly correct. Find out Note that Mandelbrot and Julian on this program aren't exactly correct. Find out
why ;) why ;)
### Bugs: ### Bugs
- No error checking. If DISPLAY is not set program dumps core. This may also - No error checking. If DISPLAY is not set program dumps core. This may also
happen if a request of some of the resources fails e.g. getting colors. happen if a request of some of the resources fails e.g. getting colors.
+9 -9
View File
@@ -1,11 +1,11 @@
# Best Short Program # Best Short Program
Jeff Weisberg Jeff Weisberg
University of Rochester University of Rochester
Dept of Electrical Engineering Dept of Electrical Engineering
Computer Studies Bldg Computer Studies Bldg
Rochester, NY 14627 Rochester, NY 14627
USA USA
## To build: ## To build:
@@ -43,7 +43,7 @@ it was read on stdin instead of via `cc -E`.
## Author's remarks: ## Author's remarks:
### Description: ### Description
The following short program implements the "Yet Another" algorithm for The following short program implements the "Yet Another" algorithm for
generating prime numbers. It will generate all primes up to 33554432, generating prime numbers. It will generate all primes up to 33554432,
@@ -53,7 +53,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 reception of a signal (any will do equally well), as well as in the
event of a system shutdown or reboot. event of a system shutdown or reboot.
### Bugs: ### Bugs
The alternative version ([weisberg.alt](weisberg.alt.c)) has never actually run The alternative version ([weisberg.alt](weisberg.alt.c)) has never actually run
to completion. After running for close to a week it had reached somewhere around to completion. After running for close to a week it had reached somewhere around
@@ -63,7 +63,7 @@ remarkably well). As there are quite a lot of primes to be found before reaching
the output through your favorite pager (`more` or `less`), and not output to a the output through your favorite pager (`more` or `less`), and not output to a
paper output device (unless you have *LOTS* of paper). paper output device (unless you have *LOTS* of paper).
### Technical: ### Technical
The original "Yet Another Prime Program" algorithm used here was developed as a The original "Yet Another Prime Program" algorithm used here was developed as a
Computer Architecture course micro-programming exercise, and was designed to Computer Architecture course micro-programming exercise, and was designed to
+10 -11
View File
@@ -1,11 +1,11 @@
# Worst Abuse of the C Preprocessor # Worst Abuse of the C Preprocessor
Brian Westley (Merlyn LeRoy on Usenet) Brian Westley (Merlyn LeRoy on Usenet)
Digi International Digi International
1906 James Ave. 1906 James Ave.
St. Paul, MN 55105 St. Paul, MN 55105
USA USA
<http://www.westley.org> <http://www.westley.org>
## To build: ## To build:
@@ -20,12 +20,8 @@ game!
## To run: ## To run:
```sh There is no running as such. See below.
./westley
```
NOTE: your terminal should be set to 80 columns, 8 character tabs, and
wraparound.
## Try: ## Try:
@@ -38,6 +34,9 @@ cc -Describe -Door westley.c
cc -Describe -Drain westley.c cc -Describe -Drain westley.c
``` ```
NOTE: your terminal should be set to 80 columns, 8 character tabs, and
wraparound.
## Judges' remarks: ## Judges' remarks:
Not all compiler errors are bad. Not all compiler errors are bad.