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
Don Dodson
AG Communication Systems
17239 N. 19th Ave. #1003
Phoenix, AZ 85023
USA
Don Dodson
AG Communication Systems
17239 N. 19th Ave. #1003
Phoenix, AZ 85023
USA
## To build:
make all
```sh
make all
```
## To run
## To run:
./dodsond1
NOTE: At the prompt, try entering E3.
```sh
./dodsond1
```
NOTE: At the prompt, try entering `E3`.
## Judges' remarks:
+20 -14
View File
@@ -1,18 +1,22 @@
# Most Obfuscated Packaging
Don Dodson
AG Communication Systems
17239 N. 19th Ave. #1003
Phoenix, AZ 85023
USA
Don Dodson
AG Communication Systems
17239 N. 19th Ave. #1003
Phoenix, AZ 85023
USA
## To build:
make all
```sh
make all
```
## To run:
./dodsond2
```sh
./dodsond2
```
## 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
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.
```
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](dodsond2.gz) is uncompressed, it is identical
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
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
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.
But beware, because shooting an arrow and missing the Wumpus may
But beware that shooting an arrow and missing the Wumpus may
awaken him.
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
gives you a bonus on your score.
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 can quit at any time by typing `q`. Typing `i` will tell
you how many arrows you are carrying. `l` prints the description
of the current room again.
## Copyright and CC BY-SA 4.0 License:
+37 -27
View File
@@ -1,28 +1,36 @@
# Most Obfuscated Algorithm
Ian Collier
Oxford University
57 Wyndham Avenue (home address)
BOLTON
BL3 4LG
England
Ian Collier
Oxford University
57 Wyndham Avenue (home address)
Bolton
BL3 4LG
England
## To build:
make all
```sh
make all
```
## To run:
To use:
./imc INTEGER
```sh
./imc [NUMBER]
```
where `[NUMBER]` is an optional number. Default is 5.
## Try:
./imc 3
./imc 3
./imc 4
./imc 4
./imc 6
```sh
./imc 3
./imc 3
./imc 4
./imc 4
./imc 6
./imc 13
```
## Judges' remarks:
@@ -32,15 +40,15 @@ This entry's algorithm is as magic as its output!
## Author's remarks:
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
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
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
other functions (apart from main).
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
other functions (apart from `main`).
The program should be supplied with an integer parameter. If no
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
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
the word "for" is, and (in function e) how useful the words "if" and
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
"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
used to make the random squares are quite complex without being shrouded
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:
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.
e(n,a,q,d): makes a magic square of order n when n is even and at least 6.
```
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.
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
the magic square will be stored and `q` (also of type `int*`) points to
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
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.
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
Marietta, GA 30067
USA
<http://computronium.org/ioccc.html>
<http://computronium.org/ioccc.html>
## 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
[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
runtime. The file [schnitzi.alt.c](schnitzi.alt.c) has this to get anyone
started, should they wish to tackle it (Cody will in time). The problem with
changing the buffer size is that even when it works the generated output (see
judges' remarks below) will not be 100% correct duplication of the program.
runtime, the latter of which is interspersed with the output of the program. The
file [schnitzi.alt.c](schnitzi.alt.c) has this to get anyone started, should
they wish to tackle it (Cody might in time). The problem with changing the buffer
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:
@@ -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
second row is written down the second column, etc. The program
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:
schnitzi < info
```sh
schnitzi < info
```
The program generates interesting results when its source file is
used as input:
```sh
schnitzi < schnitzi.c
```
The result of this command is a program which does the exact same
thing -- in other words, both the program and the "flipped"
version of itself work identically (you'll need to redirect the
+15 -11
View File
@@ -1,24 +1,26 @@
# Most Well Rounded Obfuscation
Andrew T. Shapiro
CSES/CIRES University of Colorado
Campus Box 216
Boulder, CO 80309-0216
USA
Andrew T. Shapiro
CSES/CIRES University of Colorado
Campus Box 216
Boulder, CO 80309-0216
USA
## To build:
make all
```sh
make all
```
[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
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` on EOF or error, not `EOF`. On systems where `EOF != -1` it could be a
problem. For the same reason one should not use `EOF` for the `getopt()`
`-1` on EOF or error, not `EOF`. On systems where `EOF != -1` it could result in
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
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:
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
@@ -28,7 +30,9 @@ assistance!
## To run:
./shapiro &
```sh
./shapiro &
```
## 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
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
inconsistently, value type declared inconsistently, function argument
(number) used inconsistently, function returns value which is always
+11 -10
View File
@@ -1,14 +1,16 @@
# Worst Abuse of the Rules
Szymon Rusinkiewicz
Massachusetts Institute of Technology
305 Memorial Dr., Room 005B
Cambridge, Ma 02139
USA
Szymon Rusinkiewicz
Massachusetts Institute of Technology
305 Memorial Dr., Room 005B
Cambridge, Ma 02139
USA
## To build:
make all
```sh
make all
```
## 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
from the executable will exactly match original source.
In the future, the contest rules will specify a minimum size
that is one character larger than this entry, forever eliminating
this sort of program from contest. After all, how many variations
can one make on this entry? :-)
In the future, the contest rules will specify a minimum size that is one
character larger than this entry, forever eliminating this sort of program from
the contest. After all, how many variations can one make on this entry? :-)
## Author's remarks:
+24 -17
View File
@@ -1,14 +1,16 @@
# Best X11 Program
Teemu Rantanen
Helsinki University of Technology
Melkonkatu 5 A 8
00210 Helsinki
Finland
Teemu Rantanen
Helsinki University of Technology
Melkonkatu 5 A 8
00210 Helsinki
Finland
## To build:
make all
```sh
make all
```
## 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
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
get two 256x256 windows.
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
to be piped into the programs standard input.
operate. A good first try could be "0 128" or "8 128". The `colormap` has
to be redirected into the programs standard input via the `colormapfile`.
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
@@ -112,23 +114,23 @@ and may confuse paging algorithms easily). This means that for 512x512 windows
you will need 4M of memory.
### `Colormapfile`:
### `colormapfile`
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
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
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.
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
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
display).
### Compilation:
### Compilation
You should compile this entry with an optimizing compiler with the
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 ;) )
### Obfuscation
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
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 ;)
### Memory refreshment:
### Memory refreshment
Mandelbrot set is calculated from the formula
```
2
Z = Z + Z
n+1 n 0
```
and the Julian set is calculated from the formula
```
2
Z = Z + C
n+1 n
```
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
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
why ;)
### Bugs:
### Bugs
- 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.
+9 -9
View File
@@ -1,11 +1,11 @@
# Best Short Program
Jeff Weisberg
University of Rochester
Dept of Electrical Engineering
Computer Studies Bldg
Rochester, NY 14627
USA
Jeff Weisberg
University of Rochester
Dept of Electrical Engineering
Computer Studies Bldg
Rochester, NY 14627
USA
## To build:
@@ -43,7 +43,7 @@ it was read on stdin instead of via `cc -E`.
## Author's remarks:
### Description:
### Description
The following short program implements the "Yet Another" algorithm for
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
event of a system shutdown or reboot.
### Bugs:
### Bugs
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
@@ -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
paper output device (unless you have *LOTS* of paper).
### Technical:
### Technical
The original "Yet Another Prime Program" algorithm used here was developed as a
Computer Architecture course micro-programming exercise, and was designed to
+10 -11
View File
@@ -1,11 +1,11 @@
# Worst Abuse of the C Preprocessor
Brian Westley (Merlyn LeRoy on Usenet)
Digi International
1906 James Ave.
St. Paul, MN 55105
USA
<http://www.westley.org>
Brian Westley (Merlyn LeRoy on Usenet)
Digi International
1906 James Ave.
St. Paul, MN 55105
USA
<http://www.westley.org>
## To build:
@@ -20,12 +20,8 @@ game!
## To run:
```sh
./westley
```
There is no running as such. See below.
NOTE: your terminal should be set to 80 columns, 8 character tabs, and
wraparound.
## Try:
@@ -38,6 +34,9 @@ cc -Describe -Door westley.c
cc -Describe -Drain westley.c
```
NOTE: your terminal should be set to 80 columns, 8 character tabs, and
wraparound.
## Judges' remarks:
Not all compiler errors are bad.