diff --git a/1988/applin/README.md b/1988/applin/README.md index ac93de6e2..696edacb8 100644 --- a/1988/applin/README.md +++ b/1988/applin/README.md @@ -11,7 +11,8 @@ Best of show: make all -### To run + +### Try: ./applin @@ -25,10 +26,10 @@ When we compiled applin.c on an Amdahl 5890-300E, we found that it spent over 75 minutes in the System V C preprocessor! Besides showing that the standard System V cpp is slow, it showed that it contained a memory usage problem. The applin.c only uses 29 different preprocessor -symbols (besides and yet the preprocessor ran out of space! +symbols (besides `stdio.h`) and yet the preprocessor ran out of space! The GNU C preprocessor took less than 45 seconds to perform the 2nd pass -on the Amdahl 5890-300E. But due to the ANSI-ness of GNU cpp (v. 1-21), +on the Amdahl 5890-300E. But due to the ANSI-likeness of GNU cpp (v. 1-21), it was not able to cleanly substitute a symbol that began with a '#'. Clearly the GNU C preprocessor is faster. diff --git a/1988/dale/README.md b/1988/dale/README.md index 7a9202627..ac2bd3a22 100644 --- a/1988/dale/README.md +++ b/1988/dale/README.md @@ -1,4 +1,4 @@ -Best abuse of system calls: +## Best abuse of system calls Paul Dale University of Queensland @@ -7,14 +7,49 @@ Best abuse of system calls: Uni of Qld, 4067 Australia -Try: dale hello world - dale these files are in this directory: * +## To build: + + make all + +NOTE: for modern compilers we had to change the C pre-processor lines like: + + #define _ define + -#_ foo bar + +to be + + #define foo bar + +Even so this entry will not compile under macOS. If we change the + + + #define a(x)get/***/x/***/id()) + +to + + + #define a(x)get/***/##x##/***/id()) + +it almost works under macOS but there will still be a compilation error. There +need not be any other changes under linux. + +NOTE: this program will likely dump core. + +## Try: + + + ./dale hello world + ./dale these files are in this directory: * + + +## Judges' comments This entry has a very twisted flow of control via recursion, iteration and multi-processing. Try to understand what is being done with the system calls. -NOTE: This program assumes the ascii character set is being used. +NOTE: This program assumes the ASCII character set is being used. + Copyright (c) 1988, Landon Curt Noll & Larry Bassel. All Rights Reserved. Permission for personal, educational or non-profit use is diff --git a/1988/dale/dale.c b/1988/dale/dale.c index 29a27ea59..2931f7cad 100644 --- a/1988/dale/dale.c +++ b/1988/dale/dale.c @@ -1,17 +1,17 @@ #define _ define -#_ P char -#_ p int -#_ O close( -#_ H strlen(* -#_ h case_2 -#_ case_3 default -#_ while switch -#_ L if -#_ I goto -#_ l 1 -#_ f write -#_ J else -#_ a(x)get/***/x/***/id()) +#define P char +#define p int +#define O close( +#define H strlen(* +#define h case_2 +#define case_3 default +#define while switch +#define L if +#define I goto +#define l 1 +#define f write +#define J else +#define a(x)get/***/x/***/id()) P z[l<<(1< -is given on the last line. Why is this needed? Note the unusual calls -to sprintf. +This works on some systems. Why? Note that `#include ` is given on +the last line. Why is this needed? Note the unusual calls to sprintf. -NOTE: The program relies heavily on ASCII. Don't even think of - running it on an EBCDIC machine. If you name the file anything - other than "isaak.c", you must change the #include on line 7. +NOTE: The program relies heavily on ASCII. Don't even think of running it on +an EBCDIC machine. If you name the file anything other than "isaak.c", you must +change the `#include` on line 7. -NOTE: The use of null comments to separate macros to construct different - tokens from a single macro (e.g., "O/**/O" creates either "++" or "--" - by defining "O" to be "+" or "-") may cause some strict ANSI - C preprocessors to object. +NOTE: The use of null comments to separate macros to construct different tokens +from a single macro (e.g., `"O/**/O"` creates either `++` or `--` by defining +`O` to be `+` or `-`) may cause some strict ANSI C preprocessors to object. -NOTE: Most System V machines will not be able to execute this program - correctly due to the fact that BSD style systems have an sprintf() - that returns a char *. +NOTE: Most System V machines will not be able to execute this program correctly +due to the fact that BSD style systems have an sprintf() that returns a `char *`. -Due to the above problems, we have replaced the output of this program +Due to the above problems, we have placed the output of this program in the file: isaak.encode. To read this file do: uudecode < isaak.encode diff --git a/1988/litmaath/README.md b/1988/litmaath/README.md index bf45afb33..04667b774 100644 --- a/1988/litmaath/README.md +++ b/1988/litmaath/README.md @@ -1,4 +1,4 @@ -Best small program: +## Best small program Maarten Litmaath Free University (VU) Amsterdam @@ -7,28 +7,39 @@ Best small program: 1183 AK Amstelveen The Netherlands -Try: litmaath eschew obfuscation +## Try: + + ./litmaath eschew obfuscation + + +## Judges' comments Note the unusual structure: + while () ; + Did you notice that the body is empty? + The best one can do to understand how the program works is to give it two small strings as arguments, and follow the program closely. One could make the body of the 'while' loop an 'fprintf' with interesting variables like: - fprintf(stderr, + + fprintf(stderr, "argv=%lo *argv=%lo **argv=%c argv[1]=%lo *argv[1]=%c argc=%d\n", (long) argv, (long) *argv, *argv && **argv ? **argv : '@', (long) argv[1], argv[1] && *argv[1] ? *argv[1] : '@', argc); + Furthermore, it's interesting to note that only two variables are used to achieve everything. + Copyright (c) 1988, Landon Curt Noll & Larry Bassel. All Rights Reserved. Permission for personal, educational or non-profit use is granted provided this this copyright and notice are included in its entirety diff --git a/1988/phillipps/README.md b/1988/phillipps/README.md index c26a31d1e..d9bcbee42 100644 --- a/1988/phillipps/README.md +++ b/1988/phillipps/README.md @@ -1,4 +1,4 @@ -Least likely to compile successfully: +## Least likely to compile successfully: Ian Phillipps Cambridge Consultants Ltd @@ -7,6 +7,17 @@ Least likely to compile successfully: Cambridge CB4 4DW England + +## To build: + + + make all + +NOTE: this program will likely segfault under macOS. + + +## Judges' comments + Compile and run without parameters. The program is smaller than even the 'compressed' form of its output, diff --git a/1988/reddy/README.md b/1988/reddy/README.md index 3baa0b56e..a0524a6df 100644 --- a/1988/reddy/README.md +++ b/1988/reddy/README.md @@ -1,4 +1,4 @@ -Most useful Obfuscated C program: +## Most useful Obfuscated C program: Amperif Corporation 9232 Eton Avenue @@ -7,10 +7,19 @@ Most useful Obfuscated C program: U.S.A. -Compile and give the following line as input: +## To build: + + make all + +## Try: + + ./reddy char *(*(fun[16])(); + +## Judges' comments + This is a somewhat restricted version of a useful program that has been posted to Usenet. What is unusual is what it is able to do so much in such little space. diff --git a/1988/robison/README.md b/1988/robison/README.md index 837de9db1..372cd15b9 100644 --- a/1988/robison/README.md +++ b/1988/robison/README.md @@ -1,4 +1,4 @@ -Best abuse of C constructs: +## Best abuse of C constructs: Arch D. Robison University of Illinois at Urbana-Champaign @@ -7,31 +7,37 @@ Best abuse of C constructs: 61801 USA -Try: robison 80 10 - robison 40 16 +## To build: + + make all + +## Try: + + ./robison 80 10 + ./robison 40 16 The first and second parameters are optional. You might also try: - robison 80 2 <--- can you find the bug? - robison 80 -246 + ./robison 80 2 <--- can you find the bug? + ./robison 80 -246 The author says: - This program shows that C has many unnecessary constructs, in fact - only "while","--", and ">=" are required. (The two assignments at - the beginning could be avoided if "atoi" was rewritten with this - new paradigm.) Note that the lack of both the controversial "goto" - and assignment statements makes the meaning crystal clear. The current - ANSI committee should look into this practical simplification of C. +> This program shows that C has many unnecessary constructs, in fact +> only "while","--", and ">=" are required. (The two assignments at +> the beginning could be avoided if "atoi" was rewritten with this +> new paradigm.) Note that the lack of both the controversial "goto" +> and assignment statements makes the meaning crystal clear. The current +> ANSI committee should look into this practical simplification of C. The following might make an interesting benchmark: - robison 100 + ./robison 100 [Amdahl 5890-300E with System V cc: 8.40 seconds] -We suggest that you C preprocess and perhaps C-beautify this program. -All is not what it may appear to be in this program. When does a whi1e +We suggest that you C pre-process and perhaps C-beautify this program. +All is not what it may appear to be in this program. Why does a whi1e not take a while to execute? Copyright (c) 1988, Landon Curt Noll & Larry Bassel. diff --git a/1988/spinellis/Makefile b/1988/spinellis/Makefile index 47efecb08..1b27d3fdf 100644 --- a/1988/spinellis/Makefile +++ b/1988/spinellis/Makefile @@ -182,7 +182,7 @@ all: data ${TARGET} supernova deep_magic magic charon pluto ${PROG}: ${PROG}.c - @echo "NOTE: This entry requires a non-standard K&R C compiler to compile." + @echo "NOTE: This entry will not compile with some compilers like clang." ${CC} ${CFLAGS} $< -o $@ ${LIBS} # alternative executable diff --git a/1988/spinellis/README.md b/1988/spinellis/README.md index f6ed25b50..ce99ab61c 100644 --- a/1988/spinellis/README.md +++ b/1988/spinellis/README.md @@ -1,22 +1,50 @@ -Best abuse of the rules: +## Best abuse of the rules: Diomidis Spinellis (currently at Imperial College, London, England) 1 Myrsinis Str. GR-145 62 Kifissia GREECE -How to compile: +## To build: - /lib/cpp spinellis.c > spin.c -and type the following text followed by an EOF ('^D'): + make all +and then type a C program into followed by EOF two times (`^D^D`). + +NOTE: this entry will not compile with clang. Also be advised that gcc in macOS +is actually clang so this will not work even with the default compiler in macOS. + + +## Try: + + make clobber all main() { printf("Hello world\n"); } + ^D + ^D + ./spinellis -The author says: + make clobber all + int main() + { + int i; + for (i = 0; i < 5; ++i) + printf("%d\n", i); + } + ^D + ^D + ./spinellis + + +## Judges' comments + +We enjoyed this entry this year, however in the future programs must be able to +be compiled from within a Makefile without the need of human intervention. + +The author originally wrote: This program can be configured to do almost everything. The configuration is done during compile time by typing @@ -25,9 +53,7 @@ The author says: but the possibilities are clearly limited only by your imagination and programming skills. -FYI: We enjoyed this entry this year, however in the future programs - must be able to be compiled from within a makefile without the - need of human intervention. + Copyright (c) 1988, Landon Curt Noll & Larry Bassel. All Rights Reserved. Permission for personal, educational or non-profit use is diff --git a/1988/westley/README.md b/1988/westley/README.md index b3ae95715..b54f5a1d9 100644 --- a/1988/westley/README.md +++ b/1988/westley/README.md @@ -1,4 +1,4 @@ -Best layout: +## Best layout: Merlyn LeRoy (Brian Westley) Rosemount, Inc. @@ -7,17 +7,23 @@ Best layout: 55108 U.S.A. -Compile and execute without arguments. +## Try: -Note: Your compiler must parse + make all + ./westley + + +## Judges' comments + +Your compiler must parse #define _ -a -_ - as "--a" and not "-(-a)" or some other tokenized form. Some strictly - conforming ANSI C Preprocessors may object to this: for such - compilers, you can elide the nonstandard token-pasting requirement - by changing the #define line to: +as "--a" and not "-(-a)" or some other tokenized form. Some strictly +conforming ANSI C Preprocessors may object to this: for such +compilers, you can elide the non-standard token-pasting requirement +by changing the #define line to: #define _ F-->00||F-OO--; @@ -25,6 +31,7 @@ You might enjoy looking at the output of: cc -E westley.c + Copyright (c) 1988, Landon Curt Noll & Larry Bassel. All Rights Reserved. Permission for personal, educational or non-profit use is granted provided this this copyright and notice are included in its entirety