diff --git a/1994/dodsond1/README.md b/1994/dodsond1/README.md index 2c281a99c..631e8d5ed 100644 --- a/1994/dodsond1/README.md +++ b/1994/dodsond1/README.md @@ -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: diff --git a/1994/dodsond2/README.md b/1994/dodsond2/README.md index e6c094ae7..e4334733f 100644 --- a/1994/dodsond2/README.md +++ b/1994/dodsond2/README.md @@ -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: diff --git a/1994/imc/README.md b/1994/imc/README.md index b230e6609..0a757f707 100644 --- a/1994/imc/README.md +++ b/1994/imc/README.md @@ -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 diff --git a/1994/schnitzi/README.md b/1994/schnitzi/README.md index 00629ffe8..df07269a0 100644 --- a/1994/schnitzi/README.md +++ b/1994/schnitzi/README.md @@ -5,7 +5,7 @@ ISX Corporation 1165 Northchase Pkwy, Suite 120 Marietta, GA 30067 USA - + ## 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 diff --git a/1994/shapiro/README.md b/1994/shapiro/README.md index bc2c87662..3c04cb0c2 100644 --- a/1994/shapiro/README.md +++ b/1994/shapiro/README.md @@ -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` 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 diff --git a/1994/smr/README.md b/1994/smr/README.md index 8d805a73c..2dc03ecf6 100644 --- a/1994/smr/README.md +++ b/1994/smr/README.md @@ -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: diff --git a/1994/tvr/README.md b/1994/tvr/README.md index 9968ce946..6638de54c 100644 --- a/1994/tvr/README.md +++ b/1994/tvr/README.md @@ -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. diff --git a/1994/weisberg/README.md b/1994/weisberg/README.md index 384f030b8..f21377b38 100644 --- a/1994/weisberg/README.md +++ b/1994/weisberg/README.md @@ -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 diff --git a/1994/westley/README.md b/1994/westley/README.md index 6326abd50..d01a1de4e 100644 --- a/1994/westley/README.md +++ b/1994/westley/README.md @@ -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 - +Brian Westley (Merlyn LeRoy on Usenet) +Digi International +1906 James Ave. +St. Paul, MN 55105 +USA + ## 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.