diff --git a/1993/lmfjyh/README.md b/1993/lmfjyh/README.md index 882f07aa8..8f96c5af1 100644 --- a/1993/lmfjyh/README.md +++ b/1993/lmfjyh/README.md @@ -9,9 +9,11 @@ make all -NOTE: This entry will not compile on modern systems because it -relies on a compiler bug which was fixed in gcc 2.3.3 (a very -long time ago now). +NOTE: This entry will not compile on modern systems because it relies on a +compiler bug which was fixed in gcc 2.3.3 (a very long time ago now). Trying to +compile it will also make a bogus file on your file system. To delete it you +can use the inode option `-inum` with `find` with the delete option after +finding the inode with `ls -li`. ### To run diff --git a/1998/bas1/README.md b/1998/bas1/README.md index 789723dab..7a83e08e2 100644 --- a/1998/bas1/README.md +++ b/1998/bas1/README.md @@ -12,65 +12,66 @@ ### To run - If lpr on your system can print PostScript: +If lpr on your system can print PostScript: ./bas1 | gunzip | lpr - else, while in X Window System, +else, while in X Window System, ./bas1 | gunzip | gv - - or: +or: + ./bas1 | gunzip | gs -sDEVICE=pgmraw -sOutputFile='|xv -' - ## Judges' comments - The output is supposed to be a 3D maze, but it is somewhat more - than that. If you've seen any of the Maurits Escher's works, - you'll know what we're talking about. +The output is supposed to be a 3D maze, but it is somewhat more +than that. If you've seen any of the Maurits Escher's works, +you'll know what we're talking about. - When trying to run the program with command line arguments, be generous. +When trying to run the program with command line arguments, be generous. ## Author's comments - BEMAZING - ======== +BEMAZING +======== - "You're in a twisty little maze of beams, all different." +"You're in a twisty little maze of beams, all different." - Bemazing is "amazing" taken one step (letter) further. Bemazing - creates a 3D maze of beams. Try to go from the entrance (the - unfinished beam in one corner) to the exit (the unfinished beam in the - opposite corner) or vice versa. +Bemazing is "amazing" taken one step (letter) further. Bemazing +creates a 3D maze of beams. Try to go from the entrance (the +unfinished beam in one corner) to the exit (the unfinished beam in the +opposite corner) or vice versa. - For maximum portability, Bemazing is not tied to any window system, - but creates postscript. The picture it makes will fit on either A4 or - letter size paper. +For maximum portability, Bemazing is not tied to any window system, +but creates postscript. The picture it makes will fit on either A4 or +letter size paper. - In addition, because postscript is rather verbose, Bemazing creates - the postscript in gzip format, in order to save precious bits on your - hard disk for the latest version of GNU Emacs (after all, you wouldn't - want to use an editor without a psychoanalyze-pinhead function, now - would you). Again for maximum portability, Bemazing will take special - care that the binary output will not contain any newline or return - characters that may get weird treatment on systems that do not use the - One True Line Separator. +In addition, because postscript is rather verbose, Bemazing creates +the postscript in gzip format, in order to save precious bits on your +hard disk for the latest version of GNU Emacs (after all, you wouldn't +want to use an editor without a psychoanalyze-pinhead function, now +would you). Again for maximum portability, Bemazing will take special +care that the binary output will not contain any newline or return +characters that may get weird treatment on systems that do not use the +One True Line Separator. - NOTES - ===== +NOTES +===== - Be sure to view the source with something that can display characters - \240-\377. Use LESSCHARSET=latin1, M-x standard-display-european in - GNU Emacs etc. The source does not use characters in the range - \200-\237 (we are not an unnamed word processor that tends to create - HTML containing these control characters). +Be sure to view the source with something that can display characters +`\240-\377`. Use `LESSCHARSET=latin1`, `M-x` `standard-display-european` in +GNU Emacs etc. The source does not use characters in the range +`\200-\237` (we are not an unnamed word processor that tends to create +HTML containing these control characters). - Because this is not the obfuscated postscript contest, the postscript - does not contain any "for", "if" or other control structures. All the - logic is in the C code. There are only a few straightforward "def"s, - because otherwise the output would become much larger. +Because this is not the obfuscated postscript contest, the postscript +does not contain any "for", "if" or other control structures. All the +logic is in the C code. There are only a few straightforward "def"s, +because otherwise the output would become much larger. - Try running Bemazing with command line arguments and see what - happens. (But note that the program only guarantees that there - actually is a route from entrance to exit if you run it without - command line arguments.) +Try running `Bemazing` with command line arguments and see what +happens. (But note that the program only guarantees that there +actually is a route from entrance to exit if you run it without +command line arguments.) diff --git a/1998/bas2/README.md b/1998/bas2/README.md index 3e930e75b..eb973a54a 100644 --- a/1998/bas2/README.md +++ b/1998/bas2/README.md @@ -10,38 +10,38 @@ make all -### To run +### To run: ./bas2 < bas2.c -## Judges' comments +## Judges' comments: - Questions to ponder: +### Questions to ponder: - Can you determine the relationship between the input and the - resulting numeric output? +Can you determine the relationship between the input and the +resulting numeric output? - The program was not designed to process files with a certain - octet value, what value is that? +The program was not designed to process files with a certain +octet value, what value is that? - Hint and Extra Credit: +### Hint and Extra Credit: - This entry points our a minor flaw in the IOCCC rules that has - been around since 1992. It processes a certain octet value in - a way that differs from a strict reading of one of the - official IOCCC rules. What is the rule and what is the octet - value? +This entry points our a minor flaw in the IOCCC rules that has +been around since 1992. It processes a certain octet value in +a way that differs from a strict reading of one of the +official IOCCC rules. What is the rule and what is the octet +value? -## Author's comments +## Author's comments: - The main obfuscation is the way characters are recognized, which is - done by matching the bit patterns. Minor obfuscations are: +The main obfuscation is the way characters are recognized, which is +done by matching the bit patterns. Minor obfuscations are: - - Useless layout. +- Useless layout. - - Useless variable names. +- Useless variable names. - - Recursive main() instead of 2 loops (over input characters and over - bits in the character). +- Recursive main() instead of 2 loops (over input characters and over bits in +the character). - - ? and || instead of if statements. +- ? and || instead of if statements. diff --git a/1998/chaos/README.md b/1998/chaos/README.md index 41d56bb5a..e79098f09 100644 --- a/1998/chaos/README.md +++ b/1998/chaos/README.md @@ -1,4 +1,4 @@ -Best Object Orientation: +# Best Object Orientation: Alan De Smet 8531 Greenway Blvd. #206 @@ -8,70 +8,72 @@ Best Object Orientation: http://www.upl.cs.wisc.edu/~chaos/ -Judge's Comments: - - To build: +## To build: make chaos - To use: - - ./chaos - - This is the authors first IOCCC entry. We thought the entry was - a nice example of a compact collection of obfuscations. - - Can you figure our why, in some cases, it wants to read itself? - - Some systems do not implement halfdelay() in their libcurses. - You might try compiling with -lncurses of you have that library. - Or you can build this entry without the halfdelay() call by: +NOTE: Some systems do not implement `halfdelay()` in their `libcurses`. +You might try compiling with -lncurses of you have that library. +Or you can build this entry without the `halfdelay()` call by: make chaos_nohalf -Selected Author's Comments: +## To run: - * Usage + ./chaos - The executable takes a single argument for the data file to use. - If no argument is given, it will find a data file by itself, don't - worry about it... +## Judge's Comments: + +This is the author's first IOCCC entry. We thought the entry was +a nice example of a compact collection of obfuscations. + +Can you figure our why, in some cases, it wants to read itself? - * Summary - - This is a simple ncurses 3D object viewer. The keys 'y', 'u', 'i', - 'h', 'j', and 'k' rotate. 'a' and 'z' zoom in and out. 'q' quits. - Given about 3 seconds of no input, it will start rotating until - interrupted by user input. +## Selected Author's Comments: - * Features (aka Bugs): +### Usage - Memory malloced is never freed. This shouldn't be a big deal, - since only one block is ever allocated, and the OS should recover it. +The executable takes a single argument for the data file to use. +If no argument is given, it will find a data file by itself, don't +worry about it... - My local flavor of lint doesn't seem to like the fact that I never - "return" from main. Feh, what does it know? Otherwise, ignoring - lint's over protectiveness ("Of course I'm not using all of the - functions defined in curses.h!"), it's lint clean. - If the compiler happens to generate the byte sequence "AlWuzEre" - in the executable by chance, the program may be unable to locate - the embedded string. As a result, running the program without an - external data file may act in undefined ways. +### Summary - If the compiler doesn't store char * P's data in a nice contiguous - stream, it would be bad. As above, it would break running the - program without an external data file. +This is a simple ncurses 3D object viewer. The keys 'y', 'u', 'i', +'h', 'j', and 'k' rotate. 'a' and 'z' zoom in and out. 'q' quits. +Given about 3 seconds of no input, it will start rotating until +interrupted by user input. - If the incoming data is corrupt, the results are undefined. - (Although dumping core is a popular result.) - When a point passes behind the camera, it is still plotted. - The object will "bounce" off the camera, but the result (some points - in front, some reflected from the rear) looks really odd. And it - sometimes hangs. So just don't fly through objects. You'll be - happier. +### Features (aka Bugs): + +Memory malloced is never freed. This shouldn't be a big deal, +since only one block is ever allocated, and the OS should recover it. + +My local flavor of lint doesn't seem to like the fact that I never +"return" from main. Feh, what does it know? Otherwise, ignoring +lint's over protectiveness ("Of course I'm not using all of the +functions defined in curses.h!"), it's lint clean. + +If the compiler happens to generate the byte sequence "AlWuzEre" +in the executable by chance, the program may be unable to locate +the embedded string. As a result, running the program without an +external data file may act in undefined ways. + +If the compiler doesn't store `char * P`'s data in a nice contiguous +stream, it would be bad. As above, it would break running the +program without an external data file. + +If the incoming data is corrupt, the results are undefined. +(Although dumping core is a popular result.) + +When a point passes behind the camera, it is still plotted. +The object will "bounce" off the camera, but the result (some points +in front, some reflected from the rear) looks really odd. And it +sometimes hangs. So just don't fly through objects. You'll be +happier. diff --git a/1998/df/README.md b/1998/df/README.md index 0cd8ed619..aaf72a202 100644 --- a/1998/df/README.md +++ b/1998/df/README.md @@ -10,133 +10,135 @@ make all -### To run +### To run: ./df -## Judges' comments +## Judges' comments; - Everyone talks about how data hiding can produce clearer code; I am - pleased to offer this charming refutation. +Everyone talks about how data hiding can produce clearer code; I am +pleased to offer this charming refutation. - The program is a simple game. A bit of observation reveals that the - game has some data - but where? It's unclear which of the contents of - the program are used. +The program is a simple game. A bit of observation reveals that the +game has some data - but where? It's unclear which of the contents of +the program are used. - Curiously, the program only works if its source is in the directory - it's run in. More curiously, the program will fail if the program's - name's second letter isn't "r" (the source has been changed for your - convenience and this restriction does no longer exist). +Curiously, the program only works if its source is in the directory +it's run in. More curiously, the program will fail if the program's +name's second letter isn't "r" (the source has been changed for your +convenience and this restriction does no longer exist). - Modern design has come a long way since the unreadable, tightly-coupled - systems we used to have. +Modern design has come a long way since the unreadable, tightly-coupled +systems we used to have. - Extra credit questions: +Extra credit questions: - Where are the words stored? - How many words does this entry use? - Can you add more words to the program and still make it work? +- Where are the words stored? +- How many words does this entry use? +- Can you add more words to the program and still make it work? ## Author's comments - This program lets you guess English words. It displays an underscore - for each letter in the word; guessing a letter that actually is in - the word replaces the corresponding underscores with the letter - itself. You can guess a letter simply by typing it in. If your C - implementation requires it, you may have to hit Return before it - is recognized. In this case, you can also type multiple guesses - on the same line (completely solve it by entering - "abcdefghijklmnopqrstuvwxyz"). Execution stops when all underscores - have been replaced. +This program lets you guess English words. It displays an underscore +for each letter in the word; guessing a letter that actually is in +the word replaces the corresponding underscores with the letter +itself. You can guess a letter simply by typing it in. If your C +implementation requires it, you may have to hit Return before it +is recognized. In this case, you can also type multiple guesses +on the same line (completely solve it by entering +"abcdefghijklmnopqrstuvwxyz"). Execution stops when all underscores +have been replaced. - The program offers a number of different words to guess, time() is - used to pick one at random. All words are eight characters long. +The program offers a number of different words to guess, time() is +used to pick one at random. All words are eight characters long. - The source should compile with any ANSI C compiler (I used CodeWarrior - w/ ANSI strict). Using non-ANSI compilers that implement the ANSI - features it uses will not work (unless they defined __STDC__ 1 - which they shouldn't). Due to space restrictions, I did not use - any trigraph sequences. It does not require any special -D defines. +The source should compile with any ANSI C compiler (I used CodeWarrior +w/ ANSI strict). Using non-ANSI compilers that implement the ANSI +features it uses will not work (unless they defined `__STDC__ 1` +which they shouldn't). Due to space restrictions, I did not use +any trigraph sequences. It does not require any special -D defines. - The source passes lint without any complaint (if invoked with - >/dev/null). (My lclint is unable to recover from some parts of it.) +The source passes lint without any complaint (if invoked with +`>/dev/null`). (My lclint is unable to recover from some parts of it.) - Actually, the code not only is compliant with the ANSI specifications, - but uses a near minimum subset of them. C keywords that were not - used have been re(de)fined to avoid unnecessary introduction of - new, unknown character patterns. The source also includes all ANSI - headers it needs (after most of the functions have been used), and - the declaration of main() follows the guidelines (but the return - type has a different meaning and the arguments are either mis- or - unused). There also may be some compiler warnings. These are not - bugs, but features. The more warnings, the better the compiler. - There wouldn't be any if I had been allowed to use some extra space - for prototypes etc. +Actually, the code not only is compliant with the ANSI specifications, +but uses a near minimum subset of them. C keywords that were not +used have been re(de)fined to avoid unnecessary introduction of +new, unknown character patterns. The source also includes all ANSI +headers it needs (after most of the functions have been used), and +the declaration of main() follows the guidelines (but the return +type has a different meaning and the arguments are either mis- or +unused). There also may be some compiler warnings. These are not +bugs, but features. The more warnings, the better the compiler. +There wouldn't be any if I had been allowed to use some extra space +for prototypes etc. - Multiple defines are used (but not all of them define), and #define - y define is used with #y but the code doesn't assume #y to expand - to #define. I have also included comments in the code, and vital - code in the comments. And of course there is code that doesn't do - anything but will crash the program if it is removed (just like - those comments I mentioned above). Additionally, since you said - you'd be preprocessing entries ignoring includes I figured I should - use some more of them instead of other obfuscation methods. Did - I mention that preprocessed or beautified sources will crash or - hang your system? The program will also crash on non-ASCII machines. +Multiple defines are used (but not all of them define), and `#define +y define` is used with `#y` but the code doesn't assume `#y` to expand +to `#define`. I have also included comments in the code, and vital +code in the comments. And of course there is code that doesn't do +anything but will crash the program if it is removed (just like +those comments I mentioned above). Additionally, since you said +you'd be preprocessing entries ignoring includes I figured I should +use some more of them instead of other obfuscation methods. Did +I mention that preprocessed or beautified sources will crash or +hang your system? The program will also crash on non-ASCII machines. - The executable needs its source file present in the current directory - or, depending on your system, in your path. The name of the source - file is not hard-coded, __FILE__ is used instead. +The executable needs its source file present in the current directory +or, depending on your system, in your path. The name of the source +file is not hard-coded, `__FILE__` is used instead. - In the original version which was sent in to the contest, there were - some restrictions on the file name: - The second letter had to be a lowercase 'r'. - The third letter could never be a '+' or a 'b'. - Valid names would have been "pr4.c", "pr.c", "prog.c", "brownie.c" etc. - My first private version would only run when compiled on a Friday. - I decided it would be better this way... - These restrictions have been removed for your convenience. +In the original version which was sent in to the contest, there were +some restrictions on the file name: - The following lines describe how this program works; if you don't - want to know it at this time, please skip them. If this entry would - by some mistake win the contest, please do not rot13 this - I hate - rot13'd spoilers since it is somewhat complicated on a Mac to - reverse them. Anyone out there should have enough discipline and - rot13 shouldn't be required, really. After all, we are no children - anymore :-) +- The second letter had to be a lowercase 'r'. +- The third letter could never be a '+' or a 'b'. - This paragraph is not part of the author's comments, but is a helpful - gift from the judges; if you read too fast to stop yourself, this should - give you enough time to stop, which you really need to do RIGHT NOW if - you don't want to read the spoilers, which really do spoil everything, - we mean it. +Valid names would have been "pr4.c", "pr.c", "prog.c", "brownie.c" etc. +My first private version would only run when compiled on a Friday. +I decided it would be better this way... +These restrictions have been removed for your convenience. - The source file needs to be present because the words are read from - it. The wordlist is encoded within the source using a 24 entry - sliding dictionary where lowercase letters are offsets into the - dictionary, uppercase letters are new letters not yet in the - dictionary, and all other characters are ignored. The words are - spread over six lines in the source; decoding starts on a line - after a tab and a whitespace have been found, and stops on a newline. - The grin after the "Demonic Smiley" actually is one encoded letter - while the string is completely ignored; and the "cut" in "cut here" - is required while "here" is not. +The following lines describe how this program works; if you don't +want to know it at this time, please skip them. If this entry would +by some mistake win the contest, please do not rot13 this - I hate +rot13'd spoilers since it is somewhat complicated on a Mac to +reverse them. Anyone out there should have enough discipline and +rot13 shouldn't be required, really. After all, we are no children +anymore :-) - "For extra credit", explain why the words are sorted alphabetically - (because I extracted them from a dictionary :-) +This paragraph is not part of the author's comments, but is a helpful +gift from the judges; if you read too fast to stop yourself, this should +give you enough time to stop, which you really need to do RIGHT NOW if +you don't want to read the spoilers, which really do spoil everything, +we mean it. - The file name had to fulfill the restrictions mentioned above - because __FILE__+1 was used as a second parameter to fopen(). (It - essentially was fopen(__FILE__,__FILE__+1) ). This was an extra joke - that does no longer exist in the released version. +The source file needs to be present because the words are read from +it. The wordlist is encoded within the source using a 24 entry +sliding dictionary where lowercase letters are offsets into the +dictionary, uppercase letters are new letters not yet in the +dictionary, and all other characters are ignored. The words are +spread over six lines in the source; decoding starts on a line +after a tab and a whitespace have been found, and stops on a newline. +The grin after the "Demonic Smiley" actually is one encoded letter +while the string is completely ignored; and the "cut" in "cut here" +is required while "here" is not. - You probably discovered that the while(FILE) in main is not a while loop - but the statement that opens the file and initializes the dictionary. - Similarly, int and signed have been redefined (to save space, of - course). +"For extra credit", explain why the words are sorted alphabetically +(because I extracted them from a dictionary :-) - The main function (the guessing part) is between the last #else..#endif, - but still is declared before main(). The 5[O]() in main() calls - this function. Similarly, Most indexing operations have been - changed to this form; and I tried to write each such operation - different. +The file name had to fulfill the restrictions mentioned above +because `__FILE__+1` was used as a second parameter to fopen(). (It +essentially was `fopen(__FILE__,__FILE__+1)` ). This was an extra joke +that does no longer exist in the released version. + +You probably discovered that the `while(FILE)` in main is not a while loop +but the statement that opens the file and initializes the dictionary. +Similarly, int and signed have been redefined (to save space, of +course). + +The main function (the guessing part) is between the last #else..#endif, +but still is declared before main(). The `5[O]()` in main() calls +this function. Similarly, Most indexing operations have been +changed to this form; and I tried to write each such operation +different. diff --git a/1998/dlowe/README.md b/1998/dlowe/README.md index 9c52cd211..27134bf02 100644 --- a/1998/dlowe/README.md +++ b/1998/dlowe/README.md @@ -18,18 +18,19 @@ ## Judges' comments - Why is this entry would be considered a utility? Well because it - is able to convert content-free web pages into useful web pages. +Why is this entry would be considered a utility? Well because it +is able to convert content-free web pages into useful web pages. - To see why, try using an online version, modified for use as - a CGI program: +To see why, try using an online version, modified for use as +a CGI program: - http://pootpoot.com/poot/pootify?URL=http%3A%2F%2Fwww.microsoft.com + https://web.archive.org/web/20001025182142/http://pootpoot.com/poot/pootify?URL=http://www.microsoft.com - We are sure that you will find that new web page to make a much - more consistent level of quality. :-) +We are sure that you will find that new web page to make a much +more consistent level of quality. :-) + +A CGI script such as: - A CGI script such as: #!/bin/sh # pootify - a sample CGI pootifier @@ -53,29 +54,29 @@ fi fi - can be used to pootify web pages. +can be used to pootify web pages. - For further information see: +For further information see: - http://pootpoot.com/poot/pootify?URL=http%3A%2F%2Fwww.ioccc.org + https://web.archive.org/web/20040326083431/http://www.pootpoot.com/poot/pootify/?URL=http%3A%2F%2Fwww.ioccc.org - NOTE: The original entry was just a text based pootifier. To build - that version try: +NOTE: The original entry was just a text based pootifier. To build +that version try: make dlowe.alt ./dlowe.alt < anyfile > pootfile ## Author's comments - This program is a text filter, it reads stdin and outputs the - "corrected" text to stdout. +This program is a text filter, it reads stdin and outputs the +"corrected" text to stdout. - It is obfuscated in that the code is painful to look at and - its purpose and mode of operation are not terribly obvious. - More importantly, it is a tool for further obfuscation, in that it - can take any text and render it unintelligible. +It is obfuscated in that the code is painful to look at and +its purpose and mode of operation are not terribly obvious. +More importantly, it is a tool for further obfuscation, in that it +can take any text and render it unintelligible. - Suggested uses: add to your MANROFFSEQ environment variable for man page - enjoyment; use it to turn the GPL into the PPL; see what happens when you - run perl4 programs after they've been run through it; "encrypt" sensitive - (but unnecessary) documents... +Suggested uses: add to your MANROFFSEQ environment variable for man page +enjoyment; use it to turn the GPL into the PPL; see what happens when you +run perl4 programs after they've been run through it; "encrypt" sensitive +(but unnecessary) documents... diff --git a/1998/dloweneil/README.md b/1998/dloweneil/README.md index 345ad24f1..c49c16fc0 100644 --- a/1998/dloweneil/README.md +++ b/1998/dloweneil/README.md @@ -18,89 +18,115 @@ ## Judges' comments - Read the Author's comments below. We believe that your experience may - mirror one of our experiences: +Read the Author's comments below. We believe that your experience may +mirror one of our experiences: - Originally, I didn't appreciate the game. Then I actually read the - description of the controls. I started playing. I struggled. - I spelled my first "poot". I was hooked ... +> Originally, I didn't appreciate the game. Then I actually read the +> description of the controls. I started playing. I struggled. +> I spelled my first "poot". I was hooked ... ## Author's comments - Usage: +Usage: ./pootris [X size of board] [Y size of board] - Synopsis: - The object of this game is to spell "POOT" as much as possible. There - is no time pressure. You're given one letter at a time (sort of randomly - chosen from the set 'P', 'O', and 'T') and you get to move it freely - around the border of the playing board, and decide when and where to drop - it into the board. Sound easy? Of course, there's a catch... +### Synopsis: - Controls: - . Only three controls: - 'a' moves the current letter one position counterclockwise around - the border of the playing field. - 's' moves the current letter one position clockwise around the border - of the playing field. - 'd' drops the current letter onto the board. - . To quit, send a fatal signal to the process. +The object of this game is to spell "POOT" as much as possible. There +is no time pressure. You're given one letter at a time (sort of randomly +chosen from the set 'P', 'O', and 'T') and you get to move it freely +around the border of the playing board, and decide when and where to drop +it into the board. Sound easy? Of course, there's a catch... - Rules of motion: - . The different letters move in different directions once dropped onto - the board: - 'P' moves diagonally, at a 45 degree angle and in a clockwise - direction around the board once dropped. - 'O' moves in a straight line perpendicular to the border from which - it is dropped. - 'T' moves diagonally, at a 45 degree angle and in a counterclockwise - direction around the board once dropped. - . The letters bounce off the top and sides of the board. They bounce - in a 'natural' way, with the exception that 'O's will fall straight - down if they hit a side wall. - . The letters stop when they hit another letter or the bottom of the - board. +### Controls: - Rules of spelling: - . When you spell 'POOT' on the board, in any direction, the letters - comprising the word will disappear, and any letters which may have - accumulated above the disappeared letters will 'fall'. - . Letters can be used in multiple spellings of 'POOT'. - . Chain reactions are possible. + +Only three controls: - Rules of scoring: - . You get one (1) point for each letter you drop onto the board. - . You get a bunch of points for spelling 'POOT'. More if you spell - it in more than one way simultaneously. +'a' moves the current letter one position counterclockwise around + the border of the playing field. +'s' moves the current letter one position clockwise around the border + of the playing field. +'d' drops the current letter onto the board. - Some of the obfuscations: - . Several different coordinate systems are used. There's the "real" X - by Y system used for curses, the "inside the box" X by Y system used - for moving things around and finding instances of "POOT" inside the - box, and the position of the current letter, which is a single value - from 0 to 2 * xsize + 2 * ysize - 1. - . The fact that x%3 is a perfect hash function for x values 'P', 'O' - and 'T' is used. - . Of course, the code is as hideous as possible, and spells poot for - fun (It's also exactly 3217 bytes in length, with exactly 1536 - counted characters for purposes of this contest.) - . Love that modulus operator! Mmmm... - . There are some equations used which are really unnecessarily ugly, - which served the dual purposes of compacting the code and making it - trickier to understand. I'm thinking of the equations used to convert - between coordinate systems when dropping pieces into the game board. - . Simple and silly ones: short, meaningless (and sometimes misleading - (see 'x')) variable names; hard-coded ASCII numeric values used for - character constants; using goto for fun and profit; reusing and - re-purposing variables in different places. - . The game itself is simple, but still weird and quite difficult. +To quit, send a fatal signal to the process. - Some things I wish I could have fit into this, but didn't have the space: - . Seeding the random number generator (doh!) - . Something to detect when the game is over. - . Some kind of scoreboard. - . Sound. - . Some way of quitting gracefully. +### Rules of motion: - Good Luck! +The different letters move in different directions once dropped onto the board: + +'P' moves diagonally, at a 45 degree angle and in a clockwise direction around +the board once dropped. +'O' moves in a straight line perpendicular to the border from which it is +dropped. +'T' moves diagonally, at a 45 degree angle and in a counterclockwise direction +around the board once dropped. + +The letters bounce off the top and sides of the board. They bounce in a +'natural' way, with the exception that 'O's will fall straight down if they hit +a side wall. + +The letters stop when they hit another letter or the bottom of the board. + +### Rules of spelling: + +- When you spell 'POOT' on the board, in any direction, the letters comprising +the word will disappear, and any letters which may have accumulated above the +disappeared letters will 'fall'. + +- Letters can be used in multiple spellings of 'POOT'. + +- Chain reactions are possible. + +### Rules of scoring: + +- You get one (1) point for each letter you drop onto the board. + +- You get a bunch of points for spelling 'POOT'. More if you spell it in more +than one way simultaneously. + + +### Some of the obfuscations: + +- Several different coordinate systems are used. There's the "real" X by Y +system used for curses, the "inside the box" X by Y system used for moving +things around and finding instances of "POOT" inside the box, and the position +of the current letter, which is a single value from 0 to 2 * xsize + 2 * ysize - +1. + +- The fact that x%3 is a perfect hash function for x values 'P', 'O' and 'T' is +used. + +- Of course, the code is as hideous as possible, and spells poot for fun (It's +also exactly 3217 bytes in length, with exactly 1536 counted characters for +purposes of this contest.) + +- Love that modulus operator! Mmmm... + +- There are some equations used which are really unnecessarily ugly, which +served the dual purposes of compacting the code and making it trickier to +understand. I'm thinking of the equations used to convert between coordinate +systems when dropping pieces into the game board. + +- Simple and silly ones: short, meaningless (and sometimes misleading (see 'x')) +variable names; hard-coded ASCII numeric values used for character constants; +using goto for fun and profit; reusing and re-purposing variables in different +places. + +- The game itself is simple, but still weird and quite difficult. + +### Some things I wish I could have fit into this, but didn't have the space: + +- Seeding the random number generator (doh!) + +- Something to detect when the game is over. + +- Some kind of scoreboard. + +- Sound. + +- Some way of quitting gracefully. + + +Good Luck! diff --git a/1998/schnitzi/README.md b/1998/schnitzi/README.md index 4160e732b..2a2e5afe2 100644 --- a/1998/schnitzi/README.md +++ b/1998/schnitzi/README.md @@ -15,7 +15,7 @@ ### To run ./schnitzi 5 > sort.c - cc sort.c -o sort + make sort echo 123 > data echo 234 >> data echo 413 >> data diff --git a/2000/primenum/README.md b/2000/primenum/README.md index 16181110a..0554f6c18 100644 --- a/2000/primenum/README.md +++ b/2000/primenum/README.md @@ -44,7 +44,7 @@ it successfully fooled half of the judges, including me. For 15 years, IOCCC winners have obfuscated programs using esoteric, difficult-to-interpret, confusing algorithms. This entry finally bucks that trend and obfuscates in the most "obvious" way possible: by -painstakenly describing the algorithm in clear pseudocode. Even novice +painstakingly describing the algorithm in clear pseudocode. Even novice programmers will recognize that the program should find and print prime numbers up to a given number (as specified on the command line). diff --git a/2004/anonymous/README.md b/2004/anonymous/README.md index a270a0eea..00c2e621d 100644 --- a/2004/anonymous/README.md +++ b/2004/anonymous/README.md @@ -32,6 +32,20 @@ don't have a "pgm" viewer then we suggest the "netpbm" toolkit graphics format that you can view - most graphical Web browsers can display PNG or JPEG images. +BTW: if you haven't read The Lord of the Rings what are you waiting for? :-) You'll +find out the source of the text above though you'll see that there are some +circumflexes missing! That's okay though due to I/O of the entry and in earlier +drafts sometimes the û with an umlaut had a H added to it. The real text is: + +> Ash nazg durbatulûk, ash nazg gimbatul, ash nazg thrakatulûk, agh +> burzum-ishi krimpatul. + +which when translated from Black Speech means: + +> One Ring to rule them all, One Ring to find them, +> One Ring to bring them all and in the darkness bind them. + + p.s. Frodo lives! ## Author's comments: @@ -42,7 +56,7 @@ transcription to standard output as a portable graymap (PGM) file. The specific transcription mode is the Black Speech Tengwar mode, as used in the inscription on the One Ring. The program handles the -following diagraphs: +following digraphs: - "gh", "sh", "th": the corresponding tengwar are output for these specific sounds diff --git a/2004/arachnid/README.md b/2004/arachnid/README.md index c676a4dbe..5f0e3b880 100644 --- a/2004/arachnid/README.md +++ b/2004/arachnid/README.md @@ -26,6 +26,12 @@ make ./arachnid arachnid.info ``` +and then try: + +```sh +./arachnid arachnid.c +``` + ## Judges' comments The fun part comes when you realize that the maze scrolls. The overall diff --git a/2004/gavin/README.md b/2004/gavin/README.md index 14199951d..436b6f01b 100644 --- a/2004/gavin/README.md +++ b/2004/gavin/README.md @@ -16,7 +16,7 @@ make ### To run: ```sh -./prog +./gavin ``` ### Try: @@ -59,7 +59,7 @@ sh Can have several shell windows: ```sh -vi gavin.hint +vi README.md ./prim ``` diff --git a/2004/hibachi/README.md b/2004/hibachi/README.md index d9e41ecbc..542fa9adc 100644 --- a/2004/hibachi/README.md +++ b/2004/hibachi/README.md @@ -17,13 +17,13 @@ make ### To run: ```sh -./hibachi-start.sh +cd build; ./hibachi-start.sh ``` ### Try: ```sh -./hibachi-start.sh +cd build; ./hibachi-start.sh ``` Then use your web browser to visit http://localhost:8008/ diff --git a/2004/sds/README.md b/2004/sds/README.md index 910fd8000..fce5973ee 100644 --- a/2004/sds/README.md +++ b/2004/sds/README.md @@ -23,7 +23,7 @@ make ```sh ./sds < sds.c > encoder.c -cc -o encoder encoder.c +make encoder ./encoder sds.hint sds_msg.c ``` diff --git a/2004/vik2/README.md b/2004/vik2/README.md index 48de3120a..1eb85f995 100644 --- a/2004/vik2/README.md +++ b/2004/vik2/README.md @@ -16,7 +16,7 @@ make ### To run: ```sh -./prog +./vik2 ``` ### Try: diff --git a/2005/aidan/README.md b/2005/aidan/README.md index 06a3ce079..106208e0a 100644 --- a/2005/aidan/README.md +++ b/2005/aidan/README.md @@ -13,13 +13,13 @@ make ### To run: ```sh -./aidan +./aidan < puzzle ``` ### Try: ```sh -echo "Do or do not. There is no try." +./aidan < insane1.sudoku ``` ## Judges' comments: diff --git a/2005/vik/README.md b/2005/vik/README.md index 6324c4eda..af8920cba 100644 --- a/2005/vik/README.md +++ b/2005/vik/README.md @@ -28,7 +28,7 @@ make An amazing use of the X libraries with twisty code passages, all different. One risks running in code path circles as main is -called again and again. be sure to pay attention to commas! :-) +called again and again. Be sure to pay attention to commas! :-) ## Author's comments: @@ -44,7 +44,7 @@ submitted with the entry. This program is a complete 3D engine with * Easy configurable maze maps - * Up to 26 differnt bitmap textures in a maze + * Up to 26 different bitmap textures in a maze * Support for animated bitmap textures * Uses default bitmaps in case the configured bitmaps can't be found * A default map in case no one is specified @@ -54,7 +54,7 @@ backward) ### Build and Run -Compile the source code and link x libraries if nessecary. The program takes +Compile the source code and link x libraries if necessary. The program takes three options which have to be typed in a specific order as described below. Usage: prog [-w ] [mapfile] @@ -79,7 +79,7 @@ Use the cursor keys to navigate through the labyrinth. A maze consist of a map file and texture bitmap files. The map file is an ascii text file where lower case letters represent walls. The letter tells the -engine what bitmap texture file to use. The '*' character lets the engine know +engine what bitmap texture file to use. The `'*'` character lets the engine know where to position the user. The example below shows how a map file can look: aaaaaaaaaaaaa @@ -99,7 +99,7 @@ current directory). ### Obfuscation -The program is obfuscated in several ways, bad use of variables, use of the ? +The program is obfuscated in several ways, bad use of variables, use of the `?` operator, recursive calls to main, bad use of for variables and the comma operator. To make the final obfuscated touch I ran indent which really made the program unreadable (I guess that is not really the intent with indent ;)