Best of Show: <theorem@blake.u.washington.edu> Adrian Mariano
        Adrian Mariano
        University of Washington
        2729 72nd Ave SE
        Mercer Island, WA 98040 USA

Judges' comments:

     The  program's  source  implements  four  functions, all from the same
     source file!

     Usage:
        theorem expression x1 x2 h y1

	where:  expression - function f(x,y)  (see below)
                x1 - start of interval
                x2 - end of interval
                h - step size
                y1 - initial value  (y(x1) == y1)

     When  you  compile theorem.c as is and run with 5 args, it numerically
     solves  the  equation  y'=f(x,y),  with  a  step  size  of h, over the
     interval x=[x1,x2], with the initial condition of y(x1)=y1.

     The  'expression'  f(x,y),  is  any  function  of 'x' and 'y' with the
     operators:
                +	-	*	/	^

     The  symbol  '^'  is  the  power operator.  Note that it only supports
     integer powers.  Also note that all expressions are evaluated strictly
     left to right.  (i.e., parenthesis aren't supported).

     Try running the program with the following args:
        theorem y 0 1 0.1 1
        theorem 1/x 1 2 0.1 0
        theorem 'x^2/y+x' 0 1 0.1 6
    
     But  wait,  there  is more!  You also get, free of charge, a reversing
     filter!  Try:
        theorem -r 0 0 0 0 < theorem.c > sorter.c
    
     Still  not  impressed?  The author throws in for free, a sort program!
     Try:
        cc sorter.c -o sorter
        ls | sorter
    
     This  program is safe for home use as well.  The author has included a
     safety feature in case you misplace the original program source:
        sorter -r 0 0 0 0 < sorter.c > theorem_bkp.c
    
     And  finally,  as  a  special offer to users of this entry, the author
     provides a Fibonacci sequence generator!  Try:
        sorter 0 0 0 0 < theorem.c > fibonacci.c
        cc fibonacci.c -o fibonacci
        fibonacci 1 1
        fibonacci 2 1

     Program  available  9  track  and cartridge cassette.  Gensu knife not
     included!  :-)

     When   this  program  was  first  shown  at  the  1990  Summer  Usenix
     conference,  it  received  a  standing  ovation; a first for a contest
     entry.

     It should be noted that the 4 trailing args '0 0 0 0', are required on
     systems that dump core when NULL is dereferenced.

Selected notes from the author:

     Differential  equations  are  solved via the Runge-Kutta method, which
     guarantees  local  error proportional to h^5, and total error across a
     finite interval is at most a constant times h^4.
    
     Sorting is accomplished with a standard shell sort.

     Note  that  the  sorting  and reversing is limited to files with fewer
     than 500 lines, each less than 99 characters long.


As  this  program  is  not  much fun to look at, we did't print the source here,
however  you  can  find  it, along with the other winners' sources in the (guess
which?   Yes...) SOURCES directory.  I should all work fine, I tried them out on
PC (I would have also on Amiga, but I erased Aztec C some time ago :-).