home *** CD-ROM | disk | FTP | other *** search
- From: chongo@hoptoad.uucp (Landon C. Noll)
- Newsgroups: comp.lang.c,comp.unix.wizards,alt.sources,comp.sources.d,misc.misc
- Subject: 1990 International Obfuscated C Code Contest Winners
- Message-ID: <11555@hoptoad.uucp>
- Date: 12 Jul 90 11:01:45 GMT
-
- The shar file below contains the 1st public release of the winners of the
- 1990 International Obfuscated C Code Contest.
-
- Prior to submitting these winners to UUNET source archives, we would
- like to collect porting comments, If you run encounter problems
- compiling/running these programs and YOU HAVE A FIX, please send
- a PATCH FILE (diff -c) via Email to:
-
- ...!{sun,pacbell,uunet,pyramid,amdahl}!hoptoad!judges
- judges@toad.com
-
- We expect that a number of problems will be encountered on some systems,
- so we would like to include a number of PATCH fixes along with the
- 2nd public release.
-
- Comments on the included text (in the form of a PATCH) are welcome too.
-
- The 1991 international Obfuscated C Code Contest will start when the
- 1991 rules are posted to this newsgroup. This will happen around
- the beginning of March 1991. Please wait until the new 1991 rules
- are posted before sending in new contest entries. If you think you
- have missed the 1991 rules posting and it is after March 15, 1991,
- send us a note (to the address above) requesting a copy and we will
- attempt to Email them to you.
-
- chongo <Happy Hacking, Share & Enjoy> /\cc/\
-
- # This is a shell archive. Remove anything before this line, then
- # unpack it by saving it in a file and typing "sh file". (Files
- # unpacked will be owned by you and have default permissions.)
- #
- # This archive contains:
- # README Makefile ansi.mk common.mk baruch.c cmills.c dds.c dg.c jaw.c pjr.c
- # scjones.c stig.c tbr.c theorem.c westley.c baruch.hint cmills.hint dds.hint
- # dg.hint jaw.hint pjr.hint scjones.hint stig.hint tbr.hint theorem.hint
- # westley.hint LANDER.BAS stig.ksh shark.sh rules
-
- : =-=-=-=-=-=-= first line of shar 1 of 1 =-=-=-=-=-=-=-=-=-
- echo mkdir ./1990
- mkdir ./1990
- echo cd ./1990
- cd ./1990
- echo x - README
- sed -e 's/^X//' > "README" << '//E*O*F README//'
- X1990 marked the "The Seventh International Obfuscated C Code Contest"
- X
- XInstructions for use: Run make to compile entries (it is possible that
- Xon System V or non-unix systems the makefile needs to be changed). The
- Xansi.mk may need to be changed if your ANSI C compiler is not gcc.
- X
- XLook at the source and try to figure out what the programs do, and run
- Xthem with various inputs. If you want to, look at the hints files for
- X(minor) spoilers.
- X
- XThis year, the Grand Prize won a standing ovation at USENIX.
- X
- XThe "Strangest abuse of the rules" award was given this year to stress
- Xthe fact that starting in 1991, entries should be shell-specific.
- X
- XThis year was the first year that we accepted ANSI C entries. It was
- Xinteresting to note that the ANSI C entries were as a whole less
- Xportable than the K&R C entries. We hope that in future contests
- Xpeople will enter more obfuscated and challenging ANSI C programs.
- X
- XWe would like to thank Barbara Frezza (loving wife of Larry Bassel) for
- Xher role as official chef of the contest. Her opinions regarding
- Xsome of the contest entries were appreciated.
- X
- XRules and results were posted to comp.lang.c, comp.sources.unix, and
- Xalt.sources. They have been made available on a wide number of Usenet
- Xarchive sites such as uunet.
- //E*O*F README//
-
- echo x - rules
- sed -e 's/^X//' > "rules" << '//E*O*F rules//'
- X7th International Obfuscated C Code Contest Rules
- X
- X Obfuscate: tr.v. -cated, -cating, -cates. 1. a. To render obscure.
- X b. To darken. 2. To confuse: his emotions obfuscated his
- X judgment. [LLat. obfuscare, to darken : ob(intensive) +
- X Lat. fuscare, to darken < fuscus, dark.] -obfuscation n.
- X obfuscatory adj.
- X
- XGOALS OF THE CONTEST:
- X
- X * To write the most Obscure/Obfuscated C program under the rules below.
- X * To show what should NOT be done in C programs.
- X * To provide a safe forum for poor C code. :-)
- X
- XDEDICATION:
- X
- X The 1990 International Obfuscated C Code Contest is dedicated to ANSI C.
- X
- XRULES:
- X
- X To help us handle the vast volume of entries, we ask that you
- X follow the rules below. Sorry for the length, but we need all
- X the help we can get!
- X
- X 1) Your source MUST be 1536 bytes or less, and it must be a complete
- X program, not just a subroutine.
- X
- X 2) To help us process your entries, we ask that you submit entries
- X in the following format. Please be sure to include ALL --- lines,
- X otherwise our extraction program may skip your entry!
- X
- X---header items---
- Xname: Your name, of course!
- Xorg: School/Company/Organization
- Xemail address: Email address from a well known site, or in a registered domain
- Xpostal address: Postal address
- X include your country as well
- Xenvironment: Indicate the Hardware
- X and OS under which your program was tested
- Xentry: 5 <number of entries sent so far including this one>
- Xremarks: Remarks may be continued with leading whitespace until the
- X line ---how to compile-- is encountered. (see #3 below)
- X---how to ANSI compile---
- XX Give the command(s) needed to compile your program using an ANSI C
- XX compiler. If you program should not be compiled under an ANSI C compiler,
- XX leave this section blank. Follow the format rules for the program
- XX section below, except that command size must be 160 characters or less.
- X---how to common compile---
- XX Give the command(s) needed to compile your program using an K&R/traditional
- XX C compiler. If you program should not be compiled under a K&R style C,
- XX leave this section blank. Follow the format rules for the program section
- XX below, except that command size must be 160 characters or less.
- X---program---
- XX Place obfuscated source of 1536 characters or less in this section.
- XX Add a leading X to each line to avoid problems with mailers.
- XX Some mailers don't like files with very long lines. If your entry contains E
- XC lines longer 80 chars we ask you to form continuation line sets. To form E
- XC a continuation line set, place an 'E' character at the point of a split E
- XC and place a C (instead of an X) at the beginning of the next line. E
- XC Finally, end the continuation line set as normal.
- XX The E\nC's and leading X's will be removed prior to extraction and thus E
- XC they don't contribute toward the source character count. All other E
- XC characters are considered to be source. Whitespace after 'X' or 'C' E
- XC and before the 'E' is significant, we added it here for readability.
- XX Newlines and tabs each count as 1 character. Assume 8 character tab stops.
- XX If your entry does not end in a newline, leave a final 'E' on the end. E
- X---end---
- X
- X 3) Regarding the header items:
- X
- X * Any text outside of the above format will be kept confidential.
- X
- X * All header lines are required, but you may use 'anonymous'
- X for any header line other than 'remarks' or 'entry'.
- X
- X * In the 'remarks' please include:
- X - what this program does
- X - why you think the program is obfuscated
- X - any other remarks (humorous or otherwise)
- X
- X 4) Your entry should be written in common C (K&R + common extensions)
- X or ANSI C. If your program will NOT compile under an ANSI C or
- X K&R C compiler, leave the particular 'how to' section blank.
- X
- X You do not have to fill in both 'how to' sections, though you must
- X fill in at least one 'how to' section.
- X
- X If you leave a 'how to' section blank, include the '---' line, but
- X but having no command lines after it.
- X
- X 5) The program must be of original work. All programs must be
- X in the public domain. All copyrighted programs will be rejected.
- X
- X 6) Entries must be received between 16-Mar-90 0:00 GMT and
- X 26-May-90 0:00 GMT. Email your entries to:
- X
- X ...!{sun,pacbell,uunet,utzoo,pyramid,amdahl}!hoptoad!obfuscate
- X
- X We will attempt to Email a confirmation of receipt of contest
- X entries, however since Email is not reliable you may not receive it.
- X We regret that we can no longer accept entries via postal mail.
- X
- X 7) Each person may submit up to 8 entries. Multiple entries must
- X be sent in separate Email letters.
- X
- X 8) Entries that can not be built automatically in a portable makefile
- X are not allowed. (e.g., don't use #include "/dev/tty")
- X
- X 9) Starting this year, compiling entries must result an regular file
- X which can be executed. (No -o /dev/tty or similar compile lines)
- X
- X
- XANNOUNCEMENT OF WINNERS:
- X
- X * First announcement will likely be at the Summer 90 Usenix BOF.
- X
- X * Winning entries will be posted in mid June 1990 to
- X comp.sources.unix as well as news groups where these rules
- X were posted. (depending on the judges work load)
- X
- X * Winning entries will be deposited into the uunet archives.
- X
- X * An article containing the winning entries will be published
- X in a future issue of the "Micro/Systems Journal".
- X
- X * Winners receive international fame and flames! :-)
- X
- X
- XJUDGING:
- X
- X Awards will be given to the best entry in a number of categories.
- X The actual category list will vary depending on the types of entries
- X we receive. As a guide, consider using the following:
- X
- X * The best small one line program
- X * The strangest source layout
- X * The most useful obfuscated program
- X * The most creatively obfuscated program
- X * Best obfuscated entry smaller than 256 bytes
- X * Best obfuscated entry smaller than 1024 bytes
- X * Best abuse of ANSI
- X * Worse abuse of the rules (no abuse of entry format please!)
- X * <anything else so strange that it deserves an award>
- X
- XPOINTS TO PONDER:
- X
- X People are encouraged to examine winners of the previous
- X contests. A copy of these entries was posted to
- X comp.sources.unix. Contact the comp.sources.unix moderator, or
- X some archive site (such as uunet). Keep in mind that rules
- X change from year to year, so some winning entries may not be
- X valid entries this year. What was unique and novel one year
- X might be 'old' the next year. In short, use your best judgment.
- X
- X We examine each entry on several levels of confusion. For example
- X each entry is judged when we:
- X
- X * look at the original source
- X * run it through: sed -e ',^#[ ]*define,d' | /lib/cpp
- X * run it through: sed -e ',^#[ ]*include,d' | /lib/cpp
- X * run it through a C beautifier
- X * examine the algorithm
- X * compile and lint it
- X * execute it
- X
- X One line programs are best when they are short, obscure and concise.
- X
- X We tend to dislike programs that:
- X
- X * are very hardware specific
- X * are very OS or Un*x version specific
- X (index/strchr differences are ok, but socket/streams specific
- X code is likely not to be)
- X * dump core or have compiler warnings
- X (it is ok only if you warn us in the 'remark' header item)
- X * won't compile under both BSD or SYS V Un*x
- X * use an excessively long compile line to get around the size limit
- X * are longer than they need to be
- X * are similar to previous winners
- X * are similar to previous losers :-)
- X
- X Simply abusing #defines or -Dfoo=bar won't go as far as a program
- X that is more well rounded in confusion.
- X
- X Unless you are cramped for space, or unless you are entering the
- X 'best one liner' category, we suggest that you format your program
- X in a more creative way than simply forming excessively long lines.
- X
- X We like programs that:
- X
- X * are as concise and small as they need to be
- X * do something quasi-interesting
- X * pass lint without complaint (particularly strict ANSI ones)
- X * are portable
- X * are unique or novel in their obfuscation style
- X * MAKE USE OF A NUMBER OF DIFFERENT TYPES OF OBFUSCATION
- X * make us laugh and/or throw up :-)
- X
- X Some types of programs can't excel in some areas. Of course, your
- X program doesn't have to excel in all areas, but doing well in several
- X areas really does help.
- X
- X Be creative!
- X
- X The Judging will be done by Landon Noll and Larry Bassel. If you have
- X any QUESTIONS or COMMENTS, please feel free to send them to:
- X
- X ...!{sun,pacbell,uunet,pyramid,amdahl}!hoptoad!judges
- X judges@toad.com
- X
- X however contest entries should be sent to:
- X
- X ...!{sun,pacbell,uunet,pyramid,amdahl}!hoptoad!obfuscate
- X obfuscate@toad.com
- X
- X
- Xchongo <Landon Curt Noll> /\cc/\ hoptoad!chongo
- XLarry Bassel {amdahl,ucbvax,cbosgd}|sun!lab
- //E*O*F rules//
-
- echo x - Makefile
- sed -e 's/^X//' > "Makefile" << '//E*O*F Makefile//'
- X# %W% %G% %U%
- X#
- X# 1990 makefile
- X
- XSHELL=/bin/sh
- XMAKE=make
- XMAKEFLAGS=e
- X
- X# uncomment the line to select the preferred type of compile
- X#
- X# You should also check the ansi.mk or common.mk for the
- X# proper compiler name and flags.
- X#
- X# NOTE ==> USE=ansi compile with an ANSI compiler by default
- X#USE=ansi
- X# NOTE ==> USE=common compile with a common K&R compiler by default
- XUSE=common
- X
- XWINNERS=cmills pjr westley stig tbr db dds theorem baruch jaw scjones
- X
- Xall:
- X -@if [ ${USE} = common ]; then \
- X ${MAKE} -f common.mk all; \
- X elif [ ${USE} = ansi ]; then \
- X ${MAKE} -f ansi.mk all; \
- X else \
- X echo "set USE= in Makefile to be ansi or common as desired"; \
- X echo "or type: make -f ansi.mk for ansi makes"; \
- X echo "or type: make -f common.mk for common K&R makes"; \
- X exit 1; \
- X fi
- X
- Xansi:
- X ${MAKE} -f ansi.mk all
- X
- Xcommon:
- X ${MAKE} -f common.mk all
- X
- X${WINNERS}:
- X -@if [ ${USE} = common ]; then \
- X ${MAKE} -f common.mk $@; \
- X elif [ ${USE} = common ]; then \
- X ${MAKE} -f ansi.mk $@; \
- X else \
- X echo "USE not correctly set in makefile"; \
- X exit 1;\
- X fi
- X
- Xclean:
- X ${MAKE} -f ansi.mk clean
- X ${MAKE} -f common.mk clean
- Xclobber:
- X ${MAKE} -f ansi.mk clobber
- X ${MAKE} -f common.mk clobber
- Xnuke: clobber
- X ${MAKE} -f ansi.mk nuke
- X ${MAKE} -f common.mk nuke
- Xinstall:
- X ${MAKE} -f ansi.mk install
- X ${MAKE} -f common.mk install
- //E*O*F Makefile//
-
- echo x - ansi.mk
- sed -e 's/^X//' > "ansi.mk" << '//E*O*F ansi.mk//'
- X# %W% %G% %U%
- X#
- X# 1990 makefile
- X
- XSHELL=/bin/sh
- X
- X# flags for ANSI compiles
- X#
- X# These flags are setup for gcc, change as/if needed
- X#
- XPEDANTIC=-pedantic
- XCFLAGS=-O -ansi
- XCHMOD=chmod
- XCC=gcc
- XCP=cp
- XRM=rm
- XLN=ln
- X
- X# winners that may be ok to compile with ANSI
- X#
- XWINNERS=cmills pjr westley stig tbr dg baruch jaw scjones
- X
- Xall: ${WINNERS}
- X
- Xansi: all
- X
- Xcommon:
- X @echo "wrong makefile, use common.mk"
- X exit 1
- X
- Xcmills: cmills.c
- X ${CC} ${CFLAGS} -DM=500 -DN=52 -DX="srand((int)time(0L))" -DV=void \
- X -o cmills cmills.c
- X
- Xpjr: pjr.c
- X ${CC} ${CFLAGS} pjr.c -o pjr
- X
- Xwestley: westley.c
- X ${CC} ${CFLAGS} westley.c -o westley
- X
- Xstig: stig.c stig.ksh
- X @echo "run the Korn shell, and source stig.ksh"
- X @echo "or read stig.hint and create your own aliases"
- X
- Xscjones: scjones.c
- X ${CC} ${CFLAGS} scjones.c -o scjones
- X
- Xtbr: tbr.c
- X ${CC} ${CFLAGS} tbr.c -o tbr
- X
- Xdg: dg.c
- X ${CC} ${CFLAGS} dg.c -o dg
- X # compile with the following if you don't have index()
- X #${CC} ${CFLAGS} dg.c -Dindex=strchr -o dg
- X
- Xdds: dds.c LANDER.BAS
- X ${CC} ${CFLAGS} dds.c -o dds
- X
- Xtheorem: theorem.c
- X ${CC} ${CFLAGS} theorem.c -o theorem
- X ${RM} -f sorter.c
- X -./theorem -r 0 0 0 0 < theorem.c > sorter.c
- X ${CC} ${CFLAGS} sorter.c -o sorter
- X ${RM} -f fibonacci.c
- X -./sorter 0 0 0 0 < theorem.c > fibonacci.c
- X ${CC} ${CFLAGS} fibonacci.c -o fibonacci
- X
- Xbaruch: baruch.c
- X ${CC} ${CFLAGS} baruch.c -o baruch
- X
- Xjaw: jaw.c shark.sh
- X ${RM} -f ./zcat ./atob ./jaw
- X ${CC} ${CFLAGS} ${PEDANTIC} jaw.c -o zcat
- X ${LN} zcat atob
- X echo 'PATH=;export PATH;atob|zcat' > jaw
- X ${CHMOD} 0555 ./jaw
- X
- Xclean:
- X ${RM} -f *.o a.out core
- Xclobber: clean
- X ${RM} -f ${WINNERS} sorter.c sorter
- X ${RM} -f fibonacci.c fibonacci atob zcat
- Xnuke: clobber
- X @true
- Xinstall: all
- X cat ${WINNERS} > /dev/null
- //E*O*F ansi.mk//
-
- echo x - common.mk
- sed -e 's/^X//' > "common.mk" << '//E*O*F common.mk//'
- X# %W% %G% %U%
- X#
- X# 1990 makefile
- X
- XSHELL=/bin/sh
- XCHMOD=chmod
- XCC=gcc
- XCP=cp
- XRM=rm
- XSED=sed
- XLN=ln
- X
- X# flags for common K&R compiles
- X#
- XCFLAGS=-O
- XCC=cc
- X
- X# winners that may be ok to compile with common K&R
- X#
- XWINNERS=cmills pjr westley tbr dg dds theorem baruch jaw scjones
- X
- Xall: ${WINNERS}
- X
- Xansi:
- X @echo "wrong makefile, use ansi.mk"
- X exit 1
- X
- Xcommon: all
- X
- Xcmills: cmills.c
- X ${CC} ${CFLAGS} -DM=500 -DN=52 -DX="srand((int)time(0L))" -DV=int \
- X -o cmills cmills.c
- X
- Xpjr: pjr.c
- X ${CC} ${CFLAGS} pjr.c -o pjr
- X
- Xwestley: westley.alt.c
- X ${CC} ${CFLAGS} westley.alt.c -o westley
- X
- Xwestley.alt.c: westley.c
- X ${RM} -f westley.alt.c
- X -${SED} -e 's/signed//' -e 's/1s/1/g' -e 's/^ #/#/' \
- X westley.c > westley.alt.c
- X
- Xstig: stig.c stig.ksh
- X @echo "run the Korn shell, and source stig.ksh"
- X @echo "or read stig.hint and create your own aliases"
- X
- Xtbr: tbr.c
- X ${CC} ${CFLAGS} tbr.c -o tbr
- X
- Xdg: dg.c
- X ${CC} ${CFLAGS} dg.c -o dg
- X # compile with the following if you don't have index()
- X #${CC} ${CFLAGS} dg.c -Dindex=strchr -o dg
- X
- Xdds: dds.c LANDER.BAS
- X ${CC} ${CFLAGS} dds.c -o dds
- X
- Xtheorem: theorem.c
- X ${CC} ${CFLAGS} theorem.c -o theorem
- X ${RM} -f sorter.c
- X -./theorem -r 0 0 0 0 < theorem.c > sorter.c
- X ${CC} ${CFLAGS} sorter.c -o sorter
- X ${RM} -f fibonacci.c
- X -./sorter 0 0 0 0 < theorem.c > fibonacci.c
- X ${CC} ${CFLAGS} fibonacci.c -o fibonacci
- X
- Xbaruch: baruch.c
- X ${CC} ${CFLAGS} baruch.c -o baruch
- X
- Xjaw: jaw.c
- X ${RM} -f ./zcat ./atob ./jaw
- X ${CC} ${CFLAGS} jaw.c -o zcat
- X ${LN} zcat atob
- X echo 'PATH=;export PATH;atob|zcat' > jaw
- X ${CHMOD} 0555 ./jaw
- X
- Xscjones: scjones.alt.c stdlib.h
- X ${CC} ${CFLAGS} -I. scjones.alt.c -o scjones
- X
- X# NOTE: scjones.alt.c is just a de-ANSI-fied scjones.c for example only
- X#
- Xscjones.alt.c: scjones.c
- X ${RM} -f scjones.alt.c
- X -${SED} -e 's#??/#\\#g' -e 's/??=/#/g' -e 's/??(/[/g' -e 's/??)/]/g' \
- X -e "s/??'/^/g" -e 's/??</{/g' -e 's/??!/|/g' -e 's/??>/}/g' \
- X -e 's/??-/~/g' scjones.c > scjones.alt.c
- X
- Xstdlib.h:
- X ${RM} -f stdlib.h
- X echo "#define EXIT_SUCCESS 0" >stdlib.h
- X echo "#define EXIT_FAILURE 1" >>stdlib.h
- X echo "void exit(); /* may need to be int on some systems */" >>stdlib.h
- X
- Xclean:
- X rm -f *.o a.out core
- Xclobber: clean
- X ${RM} -f ${WINNERS} sorter.c sorter westley.alt.c stdlib.h
- X ${RM} -f fibonacci.c fibonacci atob zcat scjonds.alt.c
- Xnuke: clobber
- X @true
- Xinstall: all
- X cat ${WINNERS} > /dev/null
- //E*O*F common.mk//
-
- echo x - baruch.c
- sed -e 's/^X//' > "baruch.c" << '//E*O*F baruch.c//'
- Xv,i,j,k,l,s,a[99];
- Xmain()
- X{
- X for(scanf("%d",&s);*a-s;v=a[j*=v]-a[i],k=i<s,j+=(v=j<s&&(!k&&!!printf(2
- X+"\n\n%c"-(!l<<!j)," #Q"[l^v?(l^j)&1:2])&&++l||a[i]<s&&v&&v-i+j&&v+i-j))&&!(l%=
- Xs),v||(i==j?a[i+=k]=0:++a[i])>=s*k&&++a[--i])
- X ;
- X}
- //E*O*F baruch.c//
-
- echo x - cmills.c
- sed -e 's/^X//' > "cmills.c" << '//E*O*F cmills.c//'
- X#include<stdio.h>
- X#include<time.h>
- X#define S(q)B(*e=0),q,p);
- X#define W(w)if((w)<22)v= -v;else v-=10;else
- X#define F for(r=d;r<d+N;
- X#define H(v,g)v=h(v,*g++= *r++),*g=0;
- X#define B(n)b(l,n),(V)printf(l
- XV
- Xexit();char*g,c[M],d[N],q[N],p[N],*e,*r=d+N,l[M],*t="??",*k,*m="DEATHISDSev2oin
- Xpohae3ttsluuln4a?uibfe 5l\0rtlfrb6 ?a?el:e7$!n\0?e t8%ccp\0.%s9deelc.s T.@?-t.\
- Xt<J /\0=a\nP=Q Sex \0l KW Sin a$\0ane-lay% ge#-slediefuk ar r$via-:o ?+}:r? n \
- X0:) ee%lone 1-esy666!-~v\n.!^`'~@#\0\np~===:=q";b(o,n)char*o;{for(k=n+m;*o++=*k;k+=9);}int
- Xy=M*2,v,x,s,f,j,o;u(s){B(s));if(!gets(l))exit(0);return(o=
- X*l)=='y'||o=='Y'||o!='n'&&o!='N'&&u(s);}h(v,m){for(k=c;*k!='J';)if(m==*k++)break;m=k-c;if(v<0)W(v=m-v)
- Xif(m==1)W(v+=11)
- Xv+=m;return
- Xv;}main(w,z)char**z;{b(c,2)*X;for(--w&&(y=atoi(1[z]));y>1;){if(r-d>N*3/4){B(8));F++r)*r=c[(r-d)%13];F)w=
- X*(g=d+rand()%N),*g=
- X*r,*r++=w;r=d;}for(;;){B(3),y);if(!gets(l)||(w=atoi(l))<1)exit(0);if(w&1||w>M||w>y)B(1),y<M?y:M);else
- Xbreak;}y-=w,s=f=j=x=v=0,g=q,e=p;H(x,g)H(x,g)H(v,e)H(v,e)*t=
- X*q;S(t)*q=='A'&&y>=w/2&&u(5)&&(y+=(3*(h(0,1[q])==10)-1)*w/2);if(x==-21)goto
- X_;if(v==-21){y+=w/2;goto
- X_;}while(x>-17&&x<17)H(x,g)while((v==20||*p==-1[e])&&y>=w&&u(6)){y-=w;++s;for(g=e++;2[g]=
- X*g,g!=p;)--g;*g++=
- X*e;*g=' ';i:v=h(h(0,*p),*e++=
- X*r++);S(t)if(*p=='A'&&-1[e]!=
- X*p)goto
- X_;}if(f=y>=w&&u(7))y-=w,H(v,e)while(!f&&v<22&&u(4)){H(v,e)if(v<22)S(t)}_:x<0&&(x=
- X-x);v<0&&(v=
- X-v);if(v<22)if(v==x)j+=w*++f;else
- Xif(x>21||v>x)j+=w*2*++f;if(s--){*e++=' ';*e++=
- X*p;*e=0;for(e=p;*e=2[e];)e++;goto
- Xi;}y+=j;S(q)};}
- //E*O*F cmills.c//
-
- echo x - dds.c
- sed -e 's/^X//' > "dds.c" << '//E*O*F dds.c//'
- X#define O(b,f,u,s,c,a)b(){int o=f();switch(*p++){X u:_ o s b();X c:_ o a b();default:p--;_ o;}}
- X#define t(e,d,_,C)X e:f=fopen(B+d,_);C;fclose(f)
- X#define U(y,z)while(p=Q(s,y))*p++=z,*p=' '
- X#define N for(i=0;i<11*R;i++)m[i]&&
- X#define I "%d %s\n",i,m[i]
- X#define X ;break;case
- X#define _ return
- X#define R 999
- Xtypedef char*A;int*C,E[R],L[R],M[R],P[R],l,i,j;char B[R],F[2];A m[12*R],malloc
- X(),p,q,x,y,z,s,d,f,fopen();A Q(s,o)A s,o;{for(x=s;*x;x++){for(y=x,z=o;*z&&*y==
- X*z;y++)z++;if(z>o&&!*z)_ x;}_ 0;}main(){m[11*R]="E";while(puts("Ok"),gets(B)
- X)switch(*B){X'R':C=E;l=1;for(i=0;i<R;P[i++]=0);while(l){while(!(s=m[l]))l++;if
- X(!Q(s,"\"")){U("<>",'#');U("<=",'$');U(">=",'!');}d=B;while(*F=*s){*s=='"'&&j
- X++;if(j&1||!Q(" \t",F))*d++=*s;s++;}*d--=j=0;if(B[1]!='=')switch(*B){X'E':l=-1
- XX'R':B[2]!='M'&&(l=*--C)X'I':B[1]=='N'?gets(p=B),P[*d]=S():(*(q=Q(B,"TH"))=0,p
- X=B+2,S()&&(p=q+4,l=S()-1))X'P':B[5]=='"'?*d=0,puts(B+6):(p=B+5,printf("%d\n",S
- X()))X'G':p=B+4,B[2]=='S'&&(*C++=l,p++),l=S()-1 X'F':*(q=Q(B,"TO"))=0;p=B+5;P[i
- X=B[3]]=S();p=q+2;M[i]=S();L[i]=l X'N':++P[*d]<=M[*d]&&(l=L[*d]);}else p=B+2,P[
- X*B]=S();l++;}X'L':N printf(I)X'N':N free(m[i]),m[i]=0 X'B':_ 0 t('S',5,"w",N
- Xfprintf(f,I))t('O',4,"r",while(fgets(B,R,f))(*Q(B,"\n")=0,G()))X 0:default:G()
- X;}_ 0;}G(){l=atoi(B);m[l]&&free(m[l]);(p=Q(B," "))?strcpy(m[l]=malloc(strlen(p
- X)),p+1):(m[l]=0,0);}O(S,J,'=',==,'#',!=)O(J,K,'<',<,'>',>)O(K,V,'$',<=,'!',>=)
- XO(V,W,'+',+,'-',-)O(W,Y,'*',*,'/',/)Y(){int o;_*p=='-'?p++,-Y():*p>='0'&&*p<=
- X'9'?strtol(p,&p,0):*p=='('?p++,o=S(),p++,o:P[*p++];}
- //E*O*F dds.c//
-
- echo x - dg.c
- sed -e 's/^X//' > "dg.c" << '//E*O*F dg.c//'
- X#include <stdio.h>
- X
- X#define d define
- X
- X#d b12(x) 12 x
- X#d a13(x) x 13
- X#d a16(x) x 16
- X#d a32(x) x 32
- X#d acb(x) x]
- X#d acc(x) x}
- X#d aco(x) x:
- X#d bco(x) :x
- X#d acp(x) x)
- X#d bef(x) EOF x
- X#d aeq(x) x=
- X#d afo(x) x for
- X#d age(x) x fgetc
- X#d asi(x) x stdin
- X#d aso(x) x stdout
- X#d bgt(x) >x
- X#d ai(x) x i
- X#d aj(x) x j
- X#d al(x) x l
- X#d ami(x) x-
- X#d bne(x) !=x
- X#d aob(x) x[
- X#d aop(x) x(
- X#d apl(x) x+
- X#d bpu(x) fputc x
- X#d bqm(x) ?x
- X#d aqm(x) x?
- X#d aqu(x) x'
- X#d ase(x) x;
- X#d awh(x) x while
- X#d axo(x) x^
- X#d a0(x) x 0
- X#d b13(x) 13 x
- X#d b16(x) 16 x
- X#d b19(x) 19 x
- X#d b48(x) 48 x
- X#d a64(x) x 64
- X#d b66(x) 66 x
- X#d bcb(x) ]x
- X#d bch(x) char x
- X#d bcm(x) ,x
- X#d acm(x) x,
- X#d bcp(x) )x
- X#d beq(x) =x
- X#d bex(x) extern x
- X#d bi(x) i x
- X#d bin(x) int x
- X#d bix(x) index x
- X#d bj(x) j x
- X#d bl(x) l x
- X#d alt(x) x<
- X#d bma(x) main x
- X#d bob(x) [x
- X#d boc(x) {x
- X#d bop(x) (x
- X#d bpl(x) +x
- X#d app(x) x++
- X#d bqu(x) 'x
- X#d bse(x) ;x
- X#d bst(x) *x
- X
- Xbma(acp(bop(app(bcp(ai(boc(ase(bch(a16(bl(alt(bob(ai(b66(ase(bcb(a0(bcm(aeq(bst
- X(acb(bj(a64(bse(aob(bin(al(bi(aeq(bse(ai(bex(aop(bch(afo(bst(ase(bix(()))))))))
- X)))))))))))))))))))))))))))))))
- Xbl(ai(bob(aob(bi(al(bcb(aop(beq(apl(b13(a13(bpl(aeq(bop(acb(bl(bob(a32(bi(bpl(a
- Xpl(b16(bcb(ai(beq(b19(aob(bpl(bop(l))))))))))))))))))))))))))))))
- Xbpl(acp(b48(acp(asi(bcb(aop(beq(age(bop(aeq(bi(ai(bgt(aop(b12(aop(bqm(awh(b12(a
- Xse(bco(acp(bi(acp(bcp(acp(bpl(aqu(bqu(A))))))))))))))))))))))))))))))
- Xbne(acc(bef(ase(bcp(acp(aso(bpu(acm(ai(bop(aco(bop(acb(bj(al(beq(ami(bix(aj(axo
- X(bop(a16(aob(bl(al(aqm(bcm(acp(acp(i))))))))))))))))))))))))))))))
- //E*O*F dg.c//
-
- echo x - jaw.c
- sed -e 's/^X//' > "jaw.c" << '//E*O*F jaw.c//'
- X#define C char
- X#define F X,perror("oops"),1
- X#define G getchar()
- X#define I ;if(
- X#define P putchar
- X#define Q 256
- X#define W ;while(
- X#define X return 0
- X#include<stdio.h>
- Xlong M,N,c,f,m,o,r,s,w;y(l){o^=l;m+=l+1;f=f*2+l+(f>>31&1);}int
- XO,S,e,i,k,n,q,t[69001];b(g){k=4 W g<k)y(P((C)(w>>--k*8)&255));w=0;}C D[Q*Q],h
- X[Q*Q];main(g,V)C**V;{I**V-97)X,a()W G-10)W(g=G)+1&&g-'x')if(g-10){I
- X4<k)b(0)I g>32&g<'v')w=w*85+g-33,++k;else{I
- Xg-'z'|k)F;w=0;k=5;}}W G-78)I scanf("%ld%lx E%lx S%lx R%lx ",&M,&N,&c,&s,&r)-5)F
- XI M){b(g=3-(M-1&3))W g--)y(0);}I(M-N|c-o|s-m|r-f)&4294967295)F;X;}long
- Xg(){C*p I m<f&n<k&&(m=(1L<<++n)-1)||O>=S){O=0;S=fread(D,1,n,stdin)*8 I
- XS<8)X-1;S-=n-1;}p=D+O/8;q=O&7;O+=n;X,(1<<8-q)-1&*p>>q|m&((15<n+q)*p[2]*Q|p[1]&
- X255)<<8-q;}a(){C*p=D+Q;G;G;k=G;e=k>>7&1;k&=31 I k>16)F;w=Q
- XW w--)t[w]=0,h[w]=w;n=8;f=Q+e;i=o=w=g()I o<0)X,1;P(i)W(w=g())+1){I
- Xw==Q&e){W w--)t[w]=0;m=n=8;f=Q I(w=g())<0)X;}c=w
- XI w>=f)*p++=i,w=o W w>=Q)*p++=h[w],w=t[w];P(i=h[w])W
- Xp>D+Q)P(*--p)I(w=f)<1L<<k)t[w]=o,h[f++]=i;o=c;}X;}
- //E*O*F jaw.c//
-
- echo x - pjr.c
- sed -e 's/^X//' > "pjr.c" << '//E*O*F pjr.c//'
- X#include <stdio.h>
- X#define A(a) G a();
- X#define B(a) G (*a)();
- X#define C(a,b) G a() { printf(b); return X; }
- Xtypedef struct F G;A(a)A(b)A(c)A(d)A(e)A(f)A(g)A(h)A(i)A(j)A(k)A(l)A(m)A(n)A(
- Xo)A(p)A(q)A(r)A(s)A(t)A(u)A(v)A(w)A(x)A(y)A(z)A(S)A(N)void Q();struct F{B(a)B
- X(b)B(c)B(d)B(e)B(f)B(g)B(h)B(i)B(j)B(k)B(l)B(m)B(n)B(o)B(p)B(q)B(r)B(s)B(t)B(
- Xu)B(v)B(w)B(x)B(y)B(z)B(S)B(N)void(*Q)();}X={a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,
- Xq,r,s,t,u,v,w,x,y,z,S,N,Q};C(a,"z")C(b,"y")C(c,"x")C(d,"w")C(e,"v")C(f,"u")C(
- Xg,"t")C(h,"s")C(i,"r")C(j,"q")C(k,"p")C(l,"o")C(m,"n")C(n,"m")C(o,"l")C(p,"k"
- X)C(q,"j")C(r,"i")C(s,"h")C(t,"g")C(u,"f")C(v,"e")C(w,"d")C(x,"c")C(y,"b")C(z,
- X"a")C(S," ")C(N,"\n") void Q(){}main(){X=g().s().v().S().j().f().r().x().p().
- XS().y().i().l().d().m().S().u().l().c().S().q().f().n().k().v().w().S().l().e
- X().v().i().S().g().s().v().S().o().z().a().b().S().w().l().t().N();}
- //E*O*F pjr.c//
-
- echo x - scjones.c
- sed -e 's/^X//' > "scjones.c" << '//E*O*F scjones.c//'
- Xchar*a??(??)=??<
- X"??=include<stdio.h>",
- X"??=include<stdlib.h>",
- X"??=define o stdout",
- X"??=define b break;case",
- X"??=define s(p)fputs(p,o);",
- X"??=define c(p)fputc(p,o);",
- X"void t(p,f)char*p;??<f&&c('??/"')",
- X"for(;;p++)??<switch(*p)??<case 0:f&&",
- X"s(??/"??/??/??/",??/")c('??/??/n')return;case",
- X"'??=':s(??/"???/??/?=??/")b'??<':s(??/"???/??/?<??/")",
- X"b'??>':s(??/"???/??/?>??/")b'??(':s(??/"???/??/?(??/")b'??)'",
- X":s(??/"???/??/?)??/")b'??/??/??/??/':f&&s(??/"???/??/?/??/")",
- X"s(??/"???/??/?/??/")b'??/??/n':if(f)s(??/"???/??/?/n??/")",
- X"else case'??/"':if(f)s(??/"???/??/?/??/??/??/"??/")",
- X"else default:c(*p)??>??>??>main()??<char**p",
- X";t(??/"char*a??(??)=??<??/",0);for(p=a;*p",
- X";p++)t(*p,1);t(??/"0??>;??/",0);for(p=a",
- X";*p;p++)t(*p,0);exit(!ferror(o)&&",
- X"!fclose(o)?EXIT_SUCCESS",
- X":EXIT_FAILURE);",
- X"/*NOTREACHED*/",
- X"??>",
- X0??>;
- X??=include<stdio.h>
- X??=include<stdlib.h>
- X??=define o stdout
- X??=define b break;case
- X??=define s(p)fputs(p,o);
- X??=define c(p)fputc(p,o);
- Xvoid t(p,f)char*p;??<f&&c('"')
- Xfor(;;p++)??<switch(*p)??<case 0:f&&
- Xs("??/",")c('??/n')return;case
- X'??=':s("???/?=")b'??<':s("???/?<")
- Xb'??>':s("???/?>")b'??(':s("???/?(")b'??)'
- X:s("???/?)")b'??/??/':f&&s("???/?/")
- Xs("???/?/")b'??/n':if(f)s("???/?/n")
- Xelse case'"':if(f)s("???/?/??/"")
- Xelse default:c(*p)??>??>??>main()??<char**p
- X;t("char*a??(??)=??<",0);for(p=a;*p
- X;p++)t(*p,1);t("0??>;",0);for(p=a
- X;*p;p++)t(*p,0);exit(!ferror(o)&&
- X!fclose(o)?EXIT_SUCCESS
- X:EXIT_FAILURE);
- X/*NOTREACHED*/
- X??>
- //E*O*F scjones.c//
-
- echo x - stig.c
- sed -e 's/^X//' > "stig.c" << '//E*O*F stig.c//'
- Xc
- //E*O*F stig.c//
-
- echo x - tbr.c
- sed -e 's/^X//' > "tbr.c" << '//E*O*F tbr.c//'
- X
- X#define D ,close(
- X
- Xchar *c,q [512 ],m[ 256
- X],*v[ 99], **u, *i[3];int f[2],p;main (){for
- X (m[m [60]= m[62 ]=32 ]=m[* m=124 [m]= 9]=6;
- X e(-8) ,gets (1+( c=q) )|| exit (0); r(0,0)
- X )for( ;*++ c;); }r(t, o){ *i=i [2]= 0;for
- X (u=v +98 ;m[*--c] ^9;m [*c] &32 ?i[*c
- X &2]= *u,u- v^98 &&++u:
- X
- X 3 )if(!m[*c]){for(*++c=0;!m[*--c];);
- X * --u= ++c;}u-v^98?strcmp(*u,"cd")?*c?pipe(f),o=f[
- X 1 ]:
- X 4 ,(p=fork())?e(p),o?r(o,0)D o)D*f):
- X 1 ,wait(0):(o?dup2(*f,0)D*f)D o):*i?
- X 5 D 0),e(open(*i,0)):
- X 9 ,t?dup2(t,1)D t):i[
- X 2 ]?
- X 6 D 1),e(creat(i[2],438)):
- X 5 ,e(execvp(*u,u))):e(chdir(u[1])*2):
- X 3 ;}e(x){x<0?write(2,"?\n$ "-x/4,2),x+1||exit(1):
- X 5 ;}
- //E*O*F tbr.c//
-
- echo x - theorem.c
- sed -e 's/^X//' > "theorem.c" << '//E*O*F theorem.c//'
- X#include <stdio.h>
- X#include <math.h>
- X#define X
- X#define Y {}
- X#define C }
- X#define o {
- X#undef main
- Xchar m[500][99],v[99],R;
- Xint*a,b,n,i,j,W,A;
- Xfloat Q,G,D,M,T,B,O,U,V,N,y,e();
- XP(g,R,u)float*g,R,u;{int c;for(*g=1,c=u;c--;*g*=R);}
- XX
- XK(g,R,u)float*g,u;char R;
- Xo
- Xif(R=='+')*g+=u;
- Xif(R=='-')*g-=u;
- Xif(R=='*')*g*=u;
- Xif(R=='/')*g/=u;
- Xif(R=='^')P(g,*g,u);
- XC
- Xw(g,R,u)float*g,u;char R;
- X/**/{int b,f;A=atoi(*++a);b=atoi(*++a);while((f=A+b)<15000){printf("%d\n",f);A=b;b=f;}}
- Xmain(A,a)int A;char*a[];
- Xo o
- Xif(!strcmp(*++a,"-r"))S();
- XD=atof(*++a);
- XT=atof(*++a);
- XB=atof(*++a);
- XM=atof(*(4+(a-=3)));
- XC
- Xwhile(D<T)
- Xo
- XU=e((G=B/2,*a),D,M,a);
- XV=e(*a,Q=D+G,M+G*U,a);
- X/*/
- Xz;/*/
- XN=2*e(*a,Q,M+G*V,a);
- XM+=B*V/3+B*N/6+B*e(*a,D+=B,M+G*N,a)/6+G*U/3;
- Xprintf("%f %f\n",D,M);
- XC
- Xwhile(T=0)
- X;
- XW=D=1;
- X;
- Xwhile(W!=1)
- Xo o
- Xstrcpy(j+m,v);
- Xo
- Xif((j-=W)<=W)break;
- Xstrcpy(j+m,m+j-W);
- XC
- Xwhile(strcmp(m+j-W,v)>0)
- Xj=i;
- Xstrcpy(v,i+m);
- XC
- Xfor(i=(W/=3)-1;++i<n;)
- X;
- XC
- Xdo
- X;
- Xwhile(0);
- Xfor(W=1;(W=W*3+1)<n;);
- XC
- Xfloat e(f,D,M,a)char*f,*a[];float D,M;
- Xo
- X#define main L
- XO=0;
- XR='+';
- Xfor(;*f;f++)
- Xif(*f=='y')K(&O,R,M);
- Xelse if((*f>='0')&&(*f<='9'))K(&O,R,(float)*f-'0');
- Xelse if(*f=='x')K(&O,R,D);
- Xelse if(1)R=*f;
- Xif(1);
- Xreturn O;
- Xfor(j=0;j<n;puts(j++[m]));
- Xe("",O,&O,a);
- Xn=j-(O=1);
- Xwhile(gets(j++[m]));
- Xif(!strcmp(*++a,"-r"))S();
- XC
- X/**/main(A,a)int A;char*a[];
- XY
- XS(){while(gets(b++[m]));for(b--;b--;puts(b[m]));}
- Xchar*f,m[500][99],R,v[99];
- Xint b,W,n,i,j,z;
- Xfloat Q,G,D,M,T,O,B,U,V,N,e();
- X#define Y
- X#define X {}
- X#define o }
- X#define C {
- X#include <stdio.h>
- X#include <math.h>
- //E*O*F theorem.c//
-
- echo x - westley.c
- sed -e 's/^X//' > "westley.c" << '//E*O*F westley.c//'
- Xchar*lie;
- X
- X double time, me= !0XFACE,
- X
- X not; int rested, get, out;
- X
- X main(ly, die) char ly, **die ;{
- X
- X signed char lotte,
- X
- X
- Xdear; (char)lotte--;
- X
- X for(get= !me;; not){
- X
- X 1 - out & out ;lie;{
- X
- X char lotte, my= dear,
- X
- X **let= !!me *!not+ ++die;
- X
- X (char*)(lie=
- X
- X
- X"The gloves are OFF this time, I detest you, snot\n\0sed GEEK!");
- X
- X do {not= *lie++ & 0xF00L* !me;
- X
- X #define love (char*)lie -
- X
- X love 1s *!(not= atoi(let
- X
- X [get -me?
- X
- X (char)lotte-
- X
- X
- X(char)lotte: my- *love -
- X
- X 'I' - *love - 'U' -
- X
- X 'I' - (long) - 4 - 'U' ])- !!
- X
- X (time =out= 'a'));} while( my - dear
- X
- X && 'I'-1l -get- 'a'); break;}}
- X
- X (char)*lie++;
- X
- X
- X(char)*lie++, (char)*lie++; hell:0, (char)*lie;
- X
- X get *out* (short)ly -0-'R'- get- 'a'^rested;
- X
- X do {auto*eroticism,
- X
- X that; puts(*( out
- X
- X - 'c'
- X
- X-('P'-'S') +die+ -2 ));}while(!"you're at it");
- X
- X
- Xfor (*((char*)&lotte)^=
- X
- X (char)lotte; (love ly) [(char)++lotte+
- X
- X !!0xBABE];){ if ('I' -lie[ 2 +(char)lotte]){ 'I'-1l ***die; }
- X
- X else{ if ('I' * get *out* ('I'-1l **die[ 2 ])) *((char*)&lotte) -=
- X
- X '4' - ('I'-1l); not; for(get=!
- X
- X
- Xget; !out; (char)*lie & 0xD0- !not) return!!
- X
- X (char)lotte;}
- X
- X
- X(char)lotte;
- X
- X do{ not* putchar(lie [out
- X
- X *!not* !!me +(char)lotte]);
- X
- X not; for(;!'a';);}while(
- X
- X love (char*)lie);{
- X
- X
- Xregister this; switch( (char)lie
- X
- X [(char)lotte] -1s *!out) {
- X
- X char*les, get= 0xFF, my; case' ':
- X
- X *((char*)&lotte) += 15; !not +(char)*lie*'s';
- X
- X this +1s+ not; default: 0xF +(char*)lie;}}}
- X
- X get - !out;
- X
- X if (not--)
- X
- X goto hell;
- X
- X exit( (char)lotte);}
- //E*O*F westley.c//
-
- echo x - baruch.hint
- sed -e 's/^X//' > "baruch.hint" << '//E*O*F baruch.hint//'
- XBest Small Program: <baruch@genius.tau.ac.il> Osovlanski & Nissenbaum
- X
- X Doron Osovlanski
- X CADTECH - CAD/CAM Systems Ltd
- X 24 Ben-Yosef st.
- X Givat-Shmuel 51905
- X Israel
- X
- X Baruch Nissenbaum BARUCH@TAUNIVM.TAU.AC.IL
- X Tel-Aviv University
- X The Faculty of Engineering
- X Tel-Aviv
- X Israel
- X
- X
- XJudges' comments:
- X
- X Compile. Try:
- X
- X echo 4 | baruch
- X echo 7 | baruch
- X
- X This program reads an integer between 4 and 99 from the stdin.
- X
- X NOTE: The original program did not have a newline at the end of
- X the file. We added a final newline to the file to make
- X unpacking easy.
- X
- X
- XSelected notes from the author:
- X
- X The goal of this work was to write a program that solves the
- X classic n-queen problem, with a board size of up to 99x99, while
- X keeping the program as short as possible.
- X
- X The program finds all possibilities to place N chess queens on
- X a NxN chess board so that no queen is in range of any other queen
- X (not in the same column row or diagonal). For each solution the
- X chess board and the place of the queens is printed to stdout.
- X
- X
- X This program is about as simple and as readable as possible.
- X To make things even more simple we used a very limited subset of C:
- X
- X No pre-processor statements
- X Only one, harmless, 'for' statement
- X No ifs
- X No breaks
- X No cases
- X No functions
- X No gotos
- X No structures
- X
- X In short, it contains no C language that might confuse the
- X innocent reader. :-)
- X
- X
- X This program demonstrates the claim that in C, any program
- X can be written using a single 'for' statement, as long as it is
- X long enough..
- X
- XThe authors further note:
- X
- X For PC users:
- X In order to compile the program under Turbo-C or MSC, 'int '
- X should be inserted at the beginning of the program.
- X For better looking results it is recommended to replace the " #Q"
- X string with " \261\2".
- //E*O*F baruch.hint//
-
- echo x - cmills.hint
- sed -e 's/^X//' > "cmills.hint" << '//E*O*F cmills.hint//'
- XBest Game: <cmills@wyse.com> Chris Mills
- X
- X Chris Mills
- X Wyse Technology
- X 3471 N. 1st St.
- X San Jose CA 95134
- X USA
- X
- X
- XJudges notes:
- X
- X Compile notes:
- X
- X cc -DM=500 -DN=52 -DX="srand((int)time(0L))" -DV=void -o cmills cmills.c
- X
- X -DM=<max bet allowed>
- X -DN=<52 * number of decks used>
- X -DX=<how to seed the rand() generator>
- X -DV=<void ot int>
- X
- X Usage: cmills [starting_cash]
- X
- X
- XSelected notes from the author:
- X
- X This is a blackjack program. It does splits, doubling down,
- X insurance, etc.
- X
- X As best I can figure, it should be ANSI-compliant, as well as
- X portable to BSD & sysV (as well as the irritating compiler I
- X was using which assumes x=*p++ means x*=p++!). It is
- X reasonably robust in its error handling---it won't let you
- X split, double, etc. unless you actually have the cash, etc. To
- X terminate the program, hit EOF or type 0 or a negative number
- X for you wager.
- X
- X The way it deals with splits is particularly cool (IMHO). You
- X can split many times, and it will show all hands as they are
- X played.
- //E*O*F cmills.hint//
-
- echo x - dds.hint
- sed -e 's/^X//' > "dds.hint" << '//E*O*F dds.hint//'
- XBest Language Tool: <dds@cc.ic.ac.uk> Diomidis Spinellis
- X
- X Diomidis Spinellis
- X Imperial College, University of London
- X Myrsinis 1
- X GR-145 62 Kifissia
- X Greece
- X
- X
- XJudges' comments:
- X
- X Compile and run. Give the following lines as input:
- X
- X OLD LANDER.BAS
- X RUN
- X
- X Be sure not to run out of fuel!
- X
- X
- XSelected notes from the author:
- X
- X This is the DDS-BASIC Interpreter (Version 1.00).
- X
- X Immediate commands:
- X
- X RUN LIST NEW OLD filename
- X BYE SAVE filename
- X
- X Program commands:
- X
- X variable names a to z variables initialized to 0 on RUN
- X FOR var = exp TO exp NEXT variable
- X GOSUB exp RETURN
- X GOTO exp IF exp THEN exp
- X INPUT variable PRINT string
- X PRINT exp var = exp
- X REM any text END
- X
- X Expressions (ranked by precedence):
- X
- X Bracketed expressions
- X number (leading 0 for octal, 0x for hex, else decimal), variable
- X Unary -
- X * /
- X + -
- X = <>
- X > <
- X <= >=
- X (* and + are also used for boolean AND and boolean OR)
- X Boolean expressions evaluate to 0 for false and 1 for true
- X
- X Editing:
- X
- X - Line editor using line re-entry.
- X - A line number with nothing following it, deletes the line.
- X
- X Input format:
- X
- X - Free format positioning of tokens on the line.
- X - No space is allowed before the line number.
- X - Exactly one space is needed between the OLD or SAVE command and
- X the filename.
- X - ALL INPUT MUST BE UPPERCASE.
- X
- X Limits:
- X
- X Line numbers 1-10000
- X Line length 999 characters
- X FOR nesting 26
- X GOSUB 999 levels
- X Program Dynamically allocated
- X Expressions -32768 - 32767 for 16 bit machines,
- X -2147483648 - 2147483647 for 32 bit machines
- X
- X Error checking / error reports:
- X
- X No error checking is performed.
- X The message `core dumped' signifies a syntax or semantic error.
- X
- X Hosting Environment:
- X
- X ANSI C, traditional K&R C or OSF ANDF
- X ASCII or EBCIDIC character set
- X 48K bytes memory
- X
- X The Speed of DDS-BASIC Interpreter (Version 1.00). relative to
- X Microsoft Advanced BASIC 3.31 is Approximately 60%.
- X
- X The code size could be further reduced by doing ugly things like
- X not declaring the return type of functions, not freeing memory,
- X #defining define, and joining lines. In its present 1536 character
- X form the program is reasonably portable (it may fail to run in a
- X tagged object architecture) and nicely formatted (it fits in an
- X 80*25 screen).
- //E*O*F dds.hint//
-
- echo x - dg.hint
- sed -e 's/^X//' > "dg.hint" << '//E*O*F dg.hint//'
- XBest Abuse of the C Preprocessor: <harvard!xait!pallio!dg> David Goodenough
- X
- X David Goodenough
- X anonymous organization
- X 541 Commonwealth Ave,
- X Newton, MA 02159
- X USA
- X
- XJudges' comments:
- X
- X Compile and run. Try:
- X
- X echo "to C or not to C" | dg
- X
- X Some C preprocessors get confused about single quotes in certain cases.
- X In particular, the following source line:
- X
- X Cb12(ase(bco(acp(bi(acp(bcp(acp(bpl(aqu(bqu(A))))))))))))))))))))))))))))))
- X
- X may need to be changed to:
- X
- X Cb12(ase(bco(acp(bi(acp(bcp(acp(bpl('A'))))))))))))))))))))))))))))
- X
- X if your C preprocessor botches single quotes in cpp expansions.
- X
- X Systems that use strchr() instead of index() (e.g., SVR3) should
- X compile with -Dindex=strchr.
- X
- XSelected notes from the author:
- X
- X If my preprocessor could hack it, I could write this as one single
- X line rather than 4, but when I do that I get a complaint "defines
- X nested too deeply".
- X
- X Spoiler: (rot13 to read)
- X
- X Guvf vf nabgure ebg13 wbo (oryvrir vg be abg) - gur #qrsvarf ner n
- X abiry jnl bs nqqvat gbxraf: '#qrsvar o12(k) 12 k' zrnaf gung ng
- X fbzr cbvag va gur fbhepr n 12 vf sbyybjrq ol gur pbzcerffrq arfgrq
- X qrsvarf. Gur o12 trgf gur cerivbhf pbzcerffvba nf na nethzrag, naq
- X cercraqf gur 12, guhf znxvat nabgure fgrc va gur erperngvba bs gur
- X fbhepr. Gur nkk() qrsvarf qb gur fnzr, ohg nqq gbxraf nsgre.
- X
- X Nf sbe gur ebg13 nytbevguz, vg eryvrf ba vaqrk() gb svaq vs gur
- X punenpgre vf va gur frg N-Mn-m. y[] vf na neenl gung trgf svyyrq
- X jvgu:
- X
- X "abcdefghijklmmmmnopqrstuvwxyzzzzABCDEFGHIJKLMMMMNOPQRSTUVWXYZZZZ"
- X
- X Vs vaqrk() fnlf gur pune vf va gur nycunorg, gura kbe gur bssfrg
- X jvgu 16 gb genafyngr, naq bhgchg, bgurejvfr cnff vg hapunatrq.
- //E*O*F dg.hint//
-
- echo x - jaw.hint
- sed -e 's/^X//' > "jaw.hint" << '//E*O*F jaw.hint//'
- XBest Entropy-reducer: <see below> Woods, Fox & Eggert
- X
- X James A. Woods jaw@riacs.edu
- X Research Institute for Advanced Computer Science
- X MS 230-5
- X NASA Ames Research Center
- X Moffett Field, CA 94131
- X USA
- X
- X Karl F. Fox karl@MorningStar.com
- X Morning Star Technologies, Inc.
- X 1760 Zollinger Road
- X Columbus, OH 43221
- X USA
- X
- X Paul Eggert eggert@twinsun.com
- X Twin Sun Inc.
- X 360 N. Sepulveda Blvd. #2055
- X El Segundo, CA 90245
- X USA
- X
- X
- XJudges' comments:
- X
- X The program, in its base form, implements two useful utilities:
- X
- X atob - ascii to binary conversion
- X zcat - decompression filter
- X
- X To test the official C entry, one might try:
- X
- X echo "Quartz glyph jocks vend, fix, BMW." | compress | btoa | jaw
- X
- X which should apply the identity transformation to a minimal
- X holoalphabetic sentence.
- X
- X Included with this entry is a shell script (with comments edited down
- X to reduce it to 1530 bytes) which implements the complete
- X shark utility. The script, shark.sh, contains a 'jaw.c' embedded
- X within it!
- X
- X The sender must have 'compress' and 'btoa'. To send, try:
- X
- X sh shark.sh jaw.* > receive
- X
- X The resulting file, 'receive', unpacks the input files
- X even if the receiver lacks 'uncompress' and 'atob':
- X
- X mkdir test
- X cd test
- X sh ../receive
- X cmp ../jaw.c jaw.c
- X cmp ../jaw.hint jaw.hint
- X
- XSelected notes from the authors:
- X
- X ABSTRACT
- X
- X Minimal, Universal File Bundling
- X (or, Functional Obfuscation in a Self-Decoding Unix Shell Archive)
- X
- X James A. Woods
- X Universities Space Research Association
- X NASA Ames Research Center
- X
- X
- X "Use an algorithm, go to jail."
- X [anon., circa 1988, pre-Morris worm era]
- X
- X
- X Myriad formats have been proposed for network-mailable
- X data. A major difficulty undermining the popularity of most
- X file/message bundlers is that the sender assumes prior
- X installation of the computational dual of such bundling
- X software by the receiver. Command shell archives alleviate
- X this problem somewhat, but still require standardization for
- X the function of data compression and mail-transparency
- X encoding. On Unix, these coding format quandaries are over-
- X come by planting a novel Trojan Horse in the archive header
- X to perform negotiationless decoding.
- X
- X Specifically, we outline the development of an extraor-
- X dinarily compact portable (un)bundler to (dis)assemble
- X data-compressed, binary-to-ASCII-converted, length-split,
- X and checksummed directory structures using standard Unix
- X tools. Miniature versions of counterparts to a Lempel-Ziv
- X coder ('compress' or 'squeeze') and an efficient bit packet-
- X izer ('btoa') are compiled on-the-fly at mail destination
- X sites where they may not already exist. These are written
- X in purposefully obfuscated-C to accompany similarly-shrunk
- X shell command glue. This resulting shell archiver is dubbed
- X 'shark'.
- X
- X 'Shark' procedure overhead consumes as few as three
- X dozen shell lines (or ~1100 bytes), commensurate with the
- X size of many Internet mail headers; it amortizes favorably
- X with message size. 'Shark' is portable across Unix vari-
- X ants, while the underlying technique is inherently general-
- X izable to other encoding schemes.
- X
- X In the function-theoretic sense of minimal
- X Chaitin/Kolmogorov complexity, and within a modified Shannon
- X model of communication, the 'shark' effort aims to construct
- X a "shortest program" for source decoding in the Turing-
- X universal Unix environment.
- X
- X ----------------------------------------------
- X
- X Oh, the shark has pretty teeth, dear--
- X And he shows them pearly white
- X Just a jackknife has Macheath, dear--
- X And he keeps it out of sight.
- X
- X [Bertolt Brecht, Threepenny Opera]
- X
- X ----------------------------------------------
- X
- X We have ported this program to a wide variety of systems. Among
- X these are:
- X
- X SunOS 4.1 / Sun Sparcstation 1 (using both 'cc' and 'gcc 1.37.1')
- X SunOS 4.0.3 / Sun 3
- X BSD 4.3 / VAX 8650
- X SEIUX / Sumitomo Electric Ustation/S
- X Sony NEWS-OS 3.3 / Sony NEWS (fairly vanilla 4.3BSD)
- X System V.? / Hitachi 2050
- X System V.? / NEC EWS 4800
- X UNIOS-B / Omron Luna
- X Dynix / Sequent Balance ('cc' for Natl. Semi. base + 'gcc 1.36')
- X Unicos / Cray 2
- X
- X We (the authors) feel this program is obfuscated for the
- X following reasons:
- X
- X (0) This is one of the few programs you'll see WHOSE VERY UTILITY
- X DEPENDS ON ITS OBFUSCATION!
- X
- X (1) The contest entry may be used to send its wonderful self to
- X anyone in the Unix world! Virus writers need not apply...
- X
- X (2) The basic idea is twisted enough to be patentable, but is,
- X out of the kindness of our hearts (as well as to maintain
- X eligibility for the large IOCCC prize fund), dedicated to
- X the public domain. Claude Shannon, meet Alan Turing.
- X
- X (3) Meta-obfuscation is via obfuscated description (see ABSTRACT).
- X
- X (4) "Literary" allusion. Production code contains a reference to
- X self-reference, preserved at amazing cost for sheer perversity.
- X
- X (5) Many, many micro obfuscations below, honed over three years
- X time, in shell as well as C. Ask about the 'tar' pit escape,
- X the argv[0] flip, Paul's &4294967295 portability hack, the
- X "void where prohibited by flaw" fix, the scanf() spacesaver,
- X shift shenanigans, signal madness, exit()ing stage left, and
- X source-to-source transformations galore.
- X
- X For extra credit:
- X
- X Construct 'sharkmail', to auto-split sharkives into mailable
- X segments and mail them. Here's a simple one, which could be
- X extended to enable auto-reassembly with one shell cmd at the
- X far end.
- X
- X ------------------------ cut here for sharkmail -----------------------
- X #!/bin/sh
- X m=$1; shift
- X shark $* | split -800 - /tmp/shark$$
- X n=`ls /tmp/shark$$* | wc -l | sed 's/ *//'`
- X p=0
- X for f in `ls /tmp/shark$$*`
- X do
- X p=`expr $p + 1`
- X mail -s "bundle ($p of $n) from '`whoami`'" $m < $f
- X done
- X rm /tmp/shark$$*
- X ------------------------ end of sharkmail -----------------------------
- X
- X
- XShark history:
- X
- X May 1987: Karl Fox introduces 1023-byte zcat.c to USENET.
- X It's too late for the 4th IOCCC.
- X
- X May 21, 1987: James A. Woods extends idea to construct self
- X decompressing shar Trojan horse, utilizing 'cc', 'shar',
- X 'zcat', & 'atob'; size: 2303 bytes.
- X
- X May 23, 1987: 'jaw' trims 250 bytes without much thought.
- X
- X June 2, 1987: 52 lines of shell, 1991 bytes, now made with 'tar',
- X short-circuit C-compile at far end, dual-use main.c,
- X portability mods. (jaw)
- X
- X Mar-May 1988: abortive run at 5th IOCCC.
- X jaw.c - 1529 bytes. compile line: 152 bytes.
- X generated funny code with execvp() to invoke shell.
- X
- X Aug 29, 1988: production version, now at 1830 bytes.
- X
- X Jan 1990: Paul Eggert does tour-de-force shark re-engineering.
- X
- X May 24, 1990: collaboration yields 999-byte jaw.c core (see above)
- X and 1530-byte production shell code (w/comments).
- X Eggert comes through with lion's share of improvements.
- X 7th IOCCC code now faster than the atob/zcat it replaces.
- X
- X May 1990: 'jaw' develops experimental replacement using
- X Dan Bernstein's high-compression 'squeeze'.
- X
- X
- XTo which we add:
- X
- X June 1990: 'shark' wins the IOCCC, finally! :-)
- //E*O*F jaw.hint//
-
- echo x - pjr.hint
- sed -e 's/^X//' > "pjr.hint" << '//E*O*F pjr.hint//'
- X
- XMost Unusual Data Structure <pjr@pyra.co.uk> Peter J Ruczynski
- X
- X Peter J Ruczynski.
- X Pyramid Technology Ltd.
- X Pyramid House,
- X Solatron Road
- X Farnborough.
- X Hants GU14 7PL
- X England, U.K.
- X
- X
- XJudges' comments:
- X
- X This program prints out a string. Can you figure out how
- X it is done?
- X
- X By use of pointers to functions returning a struct of pointers
- X to functions!
- X
- X Note that some compilers will be unable to compile the
- X expression 'X=g()...' in main due to lack of temporary
- X value space. One might want to try replacing main with:
- X
- X main(){X=s().v().o().o().l().S().d().l().i().o().w().N();}
- X
- X if this is a problem.
- X
- X
- XSpoiler: (rot13 to read)
- X
- X Guvf cebtenz cevagf bhg gur fgevat:
- X
- X gur dhvpx oebja sbk whzcrq bire gur ynml qbt
- X
- X ol hfr bs cbvagref gb shapgvbaf ergheavat n fgehpg bs cbvagref
- X gb shapgvbaf!
- X
- X
- XSelected notes from the author: (rot13 to read)
- X
- X Vg vf fvzcyr gb znxr gur cebtenz cevag bgure fgevatf. Rnpu
- X nycunorgvpny punenpgre sebz n gb m vf cevagrq bhg nf vgf
- X bccbfvgr:
- X
- X n->m o->l p->k rgp
- X
- X Gb rapbqr n arj fgevat vachg gur fgevat nf vg vf zrnag gb pbzr bhg:
- X
- X K=f().i().b().b().y().F().q().y().v().b().j().A();
- X
- X Abgr: F() ercerfragf n fcnpr naq A() n arjyvar. Guvf jvyy abj
- X cebqhpr...
- X
- X uryyb jbeyq
- X
- X By the way, there is actually a piece of code which is not used
- X in the original program! I leave it as an intellectual exercise
- X to the reader to find out what it is.
- X
- //E*O*F pjr.hint//
-
- echo x - scjones.hint
- sed -e 's/^X//' > "scjones.hint" << '//E*O*F scjones.hint//'
- XANSI Committee's Worst Abuse of C: <scjones@sdrc.uu.net> Larry Jones
- X
- X Larry Jones
- X SDRC
- X 2000 Eastman Dr
- X Milford, OH 45150
- X USA
- X
- X
- XJudges' comments:
- X
- X The addition of trigraphs has made it easier to make programs
- X hard to read. It was a dark and stormy night for C when the
- X ANSI C committee added trigraphs to the standard. Too bad
- X that they didn't just simply require a more reasonable ISO
- X character set.
- X
- X The common.mk (non-ANSI) makefile uses sed to form scjones.alt.c.
- X The scjones.alt.c is similar to the original scjones.c source,
- X but with all the trigraphs converted. You might want to try:
- X
- X make -f common.mk scjones.alt.c
- X
- X even if you only have an ANSI compiler, just to see how
- X the trigrapsh are converted.
- X
- XWARNING: In the future, we will be passing ANSI programs through a
- X trigraph filter before reading. Trigraph-ifacation will
- X not be a major consideration in future contests. People
- X should exploit more interesting features of ANSI C.
- X
- X
- XSelected notes from the author:
- X
- X Since this year's contest is dedicated to ANSI C, here is a
- X strictly conforming entry. In accordance with the ANSI
- X definition of a strictly conforming program it does not produce
- X output dependent on any unspecified, undefined, or implementation
- X defined behavior, and it does not exceed any of the minimum
- X implementation limits. It adheres to all of the syntactic and
- X semantic constraints of the standard, #includes the relevant
- X headers for the functions it uses, and uses the EXIT_SUCCESS and
- X EXIT_FAILURE macros to return a correct success/fail status to
- X the invoking program. It also uses trigraphs for characters
- X which are not in the Invariant Code Set of ISO 646:1983, so it
- X will be portable to machines with deficient (from C's standpoint)
- X character sets. In short, it should be very widely portable. As
- X an extra added attraction, all of the lines are under 72
- X characters long, which would allow for sequence numbers to be
- X punched in columns 73-80 :-).
- X
- X [[ The Author sent us this note after he was informed that he won ]]
- X
- X Although I am quite grateful for the "ANSI Committee's Worst Abuse
- X of C" title (were you aware that I am a member of the committee or
- X is the double meaning unintentional?), I was really hoping for
- X something more along the lines of "Closest Resemblance to Line Noise." :-)
- X
- X [[ ... it was unintentional ]]
- //E*O*F scjones.hint//
-
- echo x - stig.hint
- sed -e 's/^X//' > "stig.hint" << '//E*O*F stig.hint//'
- XStrangest Abuse of the Rules: <stig@solan.unit.no> Stig Hemmer
- X
- X Stig Hemmer
- X Norwegian Institute of Technology
- X N-7034 Trondheim-NTH
- X Norway
- X
- XJudges' comments:
- X
- X We changed the alias that the author's suggested alias from a
- X C-shell alias to a Korn shell alias because many C-shells
- X did not allow Stig Hemmer's form of aliasing. (The error
- X may have also been due to some uucp site corrupting his
- X entry) Below is the author's 'how to compile' sections as
- X mailed to us:
- X
- X ---how to ANSI compile---
- X Xecho alias c cc -E -o o.c shst.c -"\''Dc=main(){printf("\"N%sested E
- X Ccomments allowed.\\n\",'/*/*/0*/**/'1?\"\":\"o n\"");}'\'';cc -o c o.c'
- X Xsource shst.c"|csh
- X ---how to common compile---
- X Xecho alias c cc -E -o o.c shst.c -"\''Dc=main(){printf("\"N%sested E
- X Ccomments allowed.\\n\",'/*/*/0*/**/'1?\"\":\"o n\"");}'\'';cc -o c o.c'
- X Xsource shst.c"|csh
- X
- X Note that shst.c is renamed to stig.c in the distribution.
- X
- X Producing an equivalent C-shell alias or /bin/sh function
- X is left as an exercise to the reader.
- X
- XWARNING: This program's 'how to compile' is too specific to a particular
- X shell. The obfuscation of this program to more related to
- X shell obfuscation than C obfuscation. This type of entry will
- X not be permitted in future contests.
- X
- XSelected notes from the author:
- X
- X If you like shell programming you may also admire my
- X creative quoting. (I use echo to create an alias
- X which when run calls cc with the -D option to create a
- X C macro with double quotes in it. ARRRRRGGGHHH!)
- X
- X The program is totally portable, but the compile
- X commands are very shell specific so don't be TOO mad
- X at me if they don't work for you.
- X
- X If you want to put these commands in a Makefile you
- X must add 4 - four - backslashes at the end on first
- X line. (At least that's what works here.)
- X
- X If everything works correctly it create an executable
- X named c which checks whether your compiler supports
- X nested comments. I've stolen the "/*/*/0*/**/1" from
- X somewhere so don't give me any points for it. Of
- X course neither ANSI nor K&R support nested comments
- X when properly implemented, but what the heck.
- //E*O*F stig.hint//
-
- echo x - tbr.hint
- sed -e 's/^X//' > "tbr.hint" << '//E*O*F tbr.hint//'
- XBest Utility: <tbr@acm.princeton.edu, smd@att.research.com> Rakitzis & Dorward
- X
- X Byron Rakitzis Sean Dorward
- X Princeton University Princeton University
- X 5707 Old Lodge Dr. 10274 Burleigh Cottage Lane
- X Houston, TX 77066 Ellicott City, MD 21043
- X USA USA
- X
- XJudges' comments:
- X
- X This program implements a subject a well known Un*x utility whose
- X original source was considered to be extremely obfuscated by many
- X people, excluding its author. In fact, this utility one a major
- X inspiration for the formation of this contest.
- X
- X The author supplied us with a slightly smaller unformatted version
- X of the program which we include below:
- X
- X #define D ,close(
- X char*c,q[512],m[256],*v[99],**u,*i[3];int f[2],p;main(){for(m[m[60]=m[62]=
- X 32]=m[*m=124[m]=9]=6;e(-8),gets(1+(c=q))||exit(0);r(0,0))for(;*++c;);}
- X r(t,o){*i=i[2]=0;for(u=v+98;m[*--c]^9;m[*c]&32?i[*c&2]=
- X *u,u-v^98&&++u:3)if(!m[*c]){for(*++c=0;!m[*--c];);*--u=
- X ++c;}u-v^98?strcmp(*u,"cd")?*c?pipe(f),o=f[1]:1,(p=fork())?e(p),o?
- X r(o,0)D o)D*f):4,wait(0):(o?dup2(*f,0)D*f)D o):*i?1 D
- X 0),e(open(*i,0)):5,t?dup2(t,1)D t):i[2]?9 D
- X 1),e(creat(i[2],438)):2,e(execvp(*u,u))):e(chdir(u[1])*2):6;}
- X e(x){x<0?write(2,"?\n$ "-x/4,2),x+1||exit(1):5;}
- X
- XSelected notes from the author: (rot13 to read)
- X
- X Guvf cebtenz vf n ehqvzragnel furyy. Vg qbrf v/b erqverpgvba, cvcrf
- X naq pq. Vg syntf reebef ba snvyrq puqve'f, bcra'f, perng'f
- X rkrpic'f, sbex'f naq n srj flagnk reebef.
- X
- X Guvf cebtenz vf boshfpngrq va n srj abgnoyr jnlf: ncneg sebz gur
- X ynlbhg (na hasbeznggrq (ohg pehapurq) irefvba vf vapyhqrq sbe
- X crbcyr jub jnag gb chg guvf guebhtu po) vg znxrf pyrire hfr bs n
- X jevgr fgngrzrag, fb gung gur fnzr fgngrzrag pna or hfrq gb cevag
- X reebef naq gur cebzcg. Ol pnyyvat gur reebe shapgvba jvgu gur inyhr
- X -8, gur cbvagre bssfrg va gur rkcerffvba "?\a$ "-k/4 tbrf sebz 0 gb
- X 2. Cerfgb! N cebzcg. Sbe reebef jvgu ahzoref fznyyre guna -4
- X (v.r., HAVK flfgrz pnyyf) n dhrfgvba znex vf cevagrq.
- X
- X Gur reebe inyhr bs puqve vf qbhoyrq fb gung jr qba'g rkvg sebz gur
- X cnerag furyy ba n puqve reebe (fvapr r() rkvgf ba -1 reebef bayl).
- X Nyy bgure flfgrz pnyy snvyherf rkvg fvapr gurl ner sebz fhofuryyf.
- X
- X Erphefvba vf farnxvyl rzcyblrq gb nibvq n frpbaq pnyy gb sbex(),
- X naq gur yvar vf cnefrq va n snveyl ovmneer snfuvba: onpxjneqf. Gur
- X urneg bs gur cebtenz, gung vf, gur cneg juvpu cresbezf nyy sbexf,
- X rkrpf, bcraf, rgp. vf BAR P FGNGRZRAG.
- X
- X Gur zrgn-inyhrf neenl vf vavgvnyvmrq va n ovmneer snfuvba, naq gur
- X fhofrdhrag purpxf sbe gur '<' naq '>' ner cresbezrq va n fvatyr
- X fgngrzrag hfvat n znfx, fvapr lbh xabj gung '>'&2 vf 0, jurernf
- X '<'&2 vf 2. Bgure fhpu zvpeb-boshfpngvbaf nobhaq.
- X
- X Svanyyl, vg vf abgnoyr gung gur pbqr jnf unpxrq sbe zvavznyvgl. Vs
- X lbh ybbx ng gur pbzcerffrq irefvba, lbh jvyy or uneq-cerffrq gb
- X ryvzvangr zber guna n srj punenpgref (jr pna'g frr ubj gb znxr vg
- X nal fznyyre!). 550 punenpgref vf cerggl yrna sbe n furyy gung qbrf
- X guvf zhpu.
- X
- X OHTF
- X
- X Gur flagnk bs gur furyy unf abg orra shyyl rkcyberq, ohg vs lbh gel
- X gb erqverpg va gur fnzr qverpgvba zber guna bapr, bayl bar
- X erqverpgvba vf cresbezrq. Guvf vf n "srngher" bs gur jnl gur yvar
- X vf cnefrq; n cbvagre gb gur fgnpx bs nethzragf vf nffvtarq naq na
- X nethzrag vf fgbyra rirel gvzr n ">" be "<" vf rapbhagrerq. Gur
- X furyy syntf na reebe vs ab nethzragf ner ba gur fgnpx. Guhf, sbe
- X rknzcyr:
- X png > sbb > one
- X pngf gb sbb, fvapr vg jnf chfurq ynfg, ohg
- X png > > sbb one
- X pngf gb one, fvapr one jnf chfurq haqre sbb. (erzrzore jr'er
- X cnefvat evtug-yrsg)
- X
- X Qrcraqvat ba lbhe synibe bs HA*K, pq jvgubhg na nethzrag jvyy
- X rvgure cebqhpr na reebe be whfg qb abguvat.
- X
- X Gurer vf whfg bar reebe zrffntr, gur dhrfgvba znex, ohg url, gung'f
- X nyy rq qbrf gbb.
- //E*O*F tbr.hint//
-
- echo x - theorem.hint
- sed -e 's/^X//' > "theorem.hint" << '//E*O*F theorem.hint//'
- XBest of Show: <theorem@blake.u.washington.edu> Adrian Mariano
- X
- X Adrian Mariano
- X University of Washington
- X 2729 72nd Ave SE
- X Mercer Island, WA 98040
- X USA
- X
- X
- XJudges' comments:
- X
- X The program's source implements four functions, all from the
- X same source file!
- X
- X Usage:
- X
- X theorem expression x1 x2 h y1
- X
- X where:
- X expression - function f(x,y) (see below)
- X x1 - start of interval
- X x2 - end of interval
- X h - step size
- X y1 - initial value (y(x1) == y1)
- X
- X When you compile theorem.c as is and run with 5 args, it numerically
- X solves the equation y'=f(x,y), with a step size of h, over the interval
- X x=[x1,x2], with the initial condition of y(x1)=y1.
- X
- X The 'expression' f(x,y), is any function of 'x' and 'y' with the
- X operators:
- X
- X + - * / ^
- X
- X The symbol '^' is the power operator. Note that it only supports
- X integer powers. Also note that all expressions are evaluated strictly
- X left to right. (i.e., parenthesis aren't supported).
- X
- X Try running the program with the following args:
- X
- X theorem y 0 1 0.1 1
- X theorem 1/x 1 2 0.1 0
- X theorem 'x^2/y+x' 0 1 0.1 6
- X
- X But wait, there is more! You also get, free of charge, a
- X reversing filter! Try:
- X
- X theorem -r 0 0 0 0 < theorem.c > sorter.c
- X
- X Still not impressed? The author throws in for free, a
- X sort program! Try:
- X
- X cc sorter.c -o sorter
- X ls | sorter
- X
- X This program is safe for home use as well. The author has
- X included a safety feature in case you misplace the original
- X program source:
- X
- X sorter -r 0 0 0 0 < sorter.c > theorem_bkp.c
- X
- X And finally, as a special offer to users of this entry,
- X the author provides a Fibonacci sequence generator! Try:
- X
- X sorter 0 0 0 0 < theorem.c > fibonacci.c
- X cc fibonacci.c -o fibonacci
- X fibonacci 1 1
- X fibonacci 2 1
- X
- X Program available 9 track and cartridge cassette. Gensu knife
- X not included! :-)
- X
- X When this program was first shown at the 1990 Summer Usenix
- X conference, it received a standing ovation; a first for
- X a contest entry.
- X
- X It should be noted that the 4 trailing args '0 0 0 0', are
- X required on systems that dump core when NULL is dereferenced.
- X
- X
- XSelected notes from the author:
- X
- X Differential equations are solved via the Runge-Kutta method,
- X which guarantees local error proportional to h^5, and total
- X error across a finite interval is at most a constant times h^4.
- X
- X Sorting is accomplished with a standard shell sort.
- X
- X Note that the sorting and reversing is limited to files with
- X fewer than 500 lines, each less than 99 characters long.
- //E*O*F theorem.hint//
-
- echo x - westley.hint
- sed -e 's/^X//' > "westley.hint" << '//E*O*F westley.hint//'
- XBest Layout: <...uunet!rosevax!jhereg!quest!digibd!merlyn> Merlyn LeRoy
- X
- X Brian Westley (Merlyn LeRoy on usenet)
- X DigiBoard, Inc.
- X 1026 Blair Ave.
- X St. Paul, MN 55104
- X USA
- X
- XJudges' comments:
- X
- X usage: westley <number>
- X
- X If you would rather "Daisy" someone other than Westley, rename
- X the program as needed. :-)
- X
- X Read each block of code as if it were a piece of correspondence.
- X For example, the first block of code would read:
- X
- X charlie,
- X doubletime me, OXFACE!
- X not interested, get out
- X mainly die, charly, *die*
- X signed charlotte
- X
- X The original source had control-L's after each code block. To
- X make it easier on news readers, we converted each control-L to
- X a blank line.
- X
- X Some ANSI compilers will not accept '1s' as a short integer - for
- X these compilers replace the '1s' with '1'.
- X
- X
- XSelected notes from the author:
- X
- X This is a "Picking the Daisy" simulation. Now, instead of mangling a
- X daisy, simply run this program with the number of petals desired as
- X the argument.
- X
- X This is a good counter-example to peoples' complaints that C doesn't
- X have an "English-like" syntax.
- X
- X Lint complains about everything - null effect, xxx may be used before
- X set, statement not reached, return(e) and return. Lint dumps core
- X on some systems. My personal favorite lint complaint is
- X
- X "warning: eroticism unused in function main".
- X
- X Also obviously, (char)lotte and (char*)lie are incompatible types...
- //E*O*F westley.hint//
-
- echo x - LANDER.BAS
- sed -e 's/^X//' > "LANDER.BAS" << '//E*O*F LANDER.BAS//'
- X10 REM Lunar Lander
- X20 REM By Diomidis Spinellis
- X30 PRINT "You aboard the Lunar Lander about to leave the spacecraft."
- X60 GOSUB 4000
- X70 GOSUB 1000
- X80 GOSUB 2000
- X90 GOSUB 3000
- X100 H = H - V
- X110 V = ((V + G) * 10 - U * 2) / 10
- X120 F = F - U
- X130 IF H > 0 THEN 80
- X135 H = 0
- X140 GOSUB 2000
- X150 IF V > 5 THEN 200
- X160 PRINT "Congratulations! This was a very good landing."
- X170 GOSUB 5000
- X180 GOTO 10
- X200 PRINT "You have crashed."
- X210 GOTO 170
- X1000 REM Initialise
- X1010 V = 70
- X1020 F = 500
- X1030 H = 1000
- X1040 G = 2
- X1050 RETURN
- X2000 REM Print values
- X2010 PRINT " Meter readings"
- X2015 PRINT " --------------"
- X2020 PRINT "Fuel (gal):"
- X2030 PRINT F
- X2040 GOSUB 2100 + 100 * (H <> 0)
- X2050 PRINT V
- X2060 PRINT "Height (m):"
- X2070 PRINT H
- X2080 RETURN
- X2100 PRINT "Landing velocity (m/sec):"
- X2110 RETURN
- X2200 PRINT "Velocity (m/sec):"
- X2210 RETURN
- X3000 REM User input
- X3005 IF F = 0 THEN 3070
- X3010 PRINT "How much fuel will you use?"
- X3020 INPUT U
- X3025 IF U < 0 THEN 3090
- X3030 IF U <= F THEN 3060
- X3040 PRINT "Sorry, you have not got that much fuel!"
- X3050 GOTO 3010
- X3060 RETURN
- X3070 U = 0
- X3080 RETURN
- X3090 PRINT "No cheating please! Fuel must be >= 0."
- X3100 GOTO 3010
- X4000 REM Detachment
- X4005 PRINT "Ready for detachment"
- X4007 PRINT "-- COUNTDOWN --"
- X4010 FOR I = 1 TO 11
- X4020 PRINT 11 - I
- X4025 GOSUB 4500
- X4030 NEXT I
- X4035 PRINT "You have left the spacecraft."
- X4037 PRINT "Try to land with velocity less than 5 m/sec."
- X4040 RETURN
- X4500 REM Delay
- X4510 FOR J = 1 TO 500
- X4520 NEXT J
- X4530 RETURN
- X5000 PRINT "Do you want to play again? (0 = no, 1 = yes)"
- X5010 INPUT Y
- X5020 IF Y = 0 THEN 5040
- X5030 RETURN
- X5040 PRINT "Have a nice day."
- //E*O*F LANDER.BAS//
-
- echo x - stig.ksh
- sed -e 's/^X//' > "stig.ksh" << '//E*O*F stig.ksh//'
- Xalias c="cc -E stig.c -Dc='main(){printf(\"N%sested comments allowed.\\n"'",/*/
- X*/0*/**/1?"":"o n"'");}'|grep -v '^#'>o.c;cc -o o o.c;o"
- //E*O*F stig.ksh//
-
- echo x - shark.sh
- sed -e 's/^X//' > "shark.sh" << '//E*O*F shark.sh//'
- Xfor i in "${@?${usage?$0 file...}}";do<"$i"||exit;done
- X(cat&&tar cbf 1 - "$@"|compress|btoa&&echo w)<<\Z
- X#!/bin/sh
- X#
- X# GENTLE READER -- write this message to file [no headers!]; run "sh file".
- X#
- X# [un]shark: By James A. Woods.
- X# Seed planted by Karl Fox; code intensified by Paul Eggert.
- X#
- X# "Cleverly he dialed from within." -- D. Van Vliet, "Trout Mask Replica"
- X#
- XPATH=$PATH:. a=atob m=unshark z=zcat
- Xr="rm -f $a $m* $z" v="cc -o $z $m.c"
- Xtrap "$r;exit 1" 1 2 13 15
- Xecho decoding...
- X(:|compress|btoa|$a|$z)2>$m>&2||(sed '1,9s/./#define & /
- Xs/@/[w]/g
- Xs/C/char /g
- Xs/I/;if(/g
- Xs/W/;while(/g
- Xs/Y/%lx /g
- Xs/}/;}/g'>$m.c<<_&&
- XFX,perror("$m bite: resend"),1;
- XGgetC()
- XH(w=g())
- XK[69001]
- XPputC
- XQ256
- XU*p
- XXreturn 0
- XZw=QWw--)t@=0
- X#include<stdio.h>
- Xlong M,N,c,f,m,o,r,s,w;y(l){o^=l;m+=l+1;f=f*2+l+(f>>31&1)}int
- XO,S,e,i,k,n,q,t K;b(g){k=4Wg<k)y(P((C)(w>>--k*8)&255));w=0}CD K,h
- XK;main(g,V)C**V;{I**V-97)X,a()WG-10)W(g=G)+1&&g-'x')if(g-10)
- X{I4<k)b(0)Ig>32&g<'v')w=w*85+g-33,++k;else{Ig-'z'|k)F
- Xw=0;k=5}}WG-78)Iscanf("%ldYEYSYRY",&M,&N,&c,&s,&r)-5)F
- XIM){b(g=3-(M-1&3))Wg--)y(0)}I(M-N|c-o|s-m|r-f)&4294967295)F X}long
- Xg(){CUIm<f&n<k&&(m=(1l<<++n)-1)||O>=S){O=0;S=fread(D,1,n,stdin)*8IS<8)X-1;
- XS-=n-1}p=D+O/8;q=O&7;O+=n;X,(1<<8-q)-1&U>>q|m&((15<n+q)U[2]*Q|p[1]&255)<<8-q}
- Xa(){CU=D+Q;G;G;k=G;e=k>>7&1;k&=31Ik>16)F
- XZ,h@=w;n=8;f=Q+e;i=o=HIo<0)X,1;P(i)WH+1){Iw==Q&e){Z;m=n=8;f=QIH<0)X}
- Xc=wIw>=f)U++=i,w=oWw>=Q)U++=h@,w=t@;P(i=h@)Wp>D+Q)P(*--p)
- XI(w=f)<1l<<k)t@=o,h[f++]=i;o=c}X}
- X_
- X($v||$v -Mh)&&ln $z $a)&&$a<<\w>$m-&&$z<$m->$m&&tar xvf $m&&$r
- XZ
- //E*O*F shark.sh//
-
- echo Possible errors detected by \'wc\' [hopefully none]:
- temp=/tmp/shar$$
- trap "rm -f $temp; exit" 0 1 2 3 15
- cat > $temp <<\!!!
- 27 220 1265 README
- 218 1441 8876 rules
- 60 231 1318 Makefile
- 86 259 1710 ansi.mk
- 104 340 2326 common.mk
- 8 9 233 baruch.c
- 33 62 1515 cmills.c
- 24 70 1536 dds.c
- 74 223 1531 dg.c
- 22 65 999 jaw.c
- 14 37 879 pjr.c
- 46 66 1474 scjones.c
- 1 1 2 stig.c
- 23 80 886 tbr.c
- 93 133 1511 theorem.c
- 107 208 1529 westley.c
- 68 297 1908 baruch.hint
- 39 161 1054 cmills.hint
- 94 360 2315 dds.hint
- 51 246 1726 dg.hint
- 214 1011 7401 jaw.hint
- 60 220 1479 pjr.hint
- 59 382 2466 scjones.hint
- 56 330 2213 stig.hint
- 84 553 3890 tbr.hint
- 90 414 2585 theorem.hint
- 48 212 1489 westley.hint
- 71 346 1624 LANDER.BAS
- 2 14 137 stig.ksh
- 47 131 1522 shark.sh
- 1923 8122 59399 total
- !!!
- wc README rules Makefile ansi.mk common.mk baruch.c cmills.c dds.c dg.c jaw.c \
- pjr.c scjones.c stig.c tbr.c theorem.c westley.c baruch.hint cmills.hint \
- dds.hint dg.hint jaw.hint pjr.hint scjones.hint stig.hint tbr.hint \
- theorem.hint westley.hint LANDER.BAS stig.ksh shark.sh | \
- sed 's=[^ ]*/==' | diff -b $temp -
- echo unpack long lines in baruch.c
- ed baruch.c << '//long baruch.c//'
- 4,6j
- w
- q
- //long baruch.c//
- echo unpack long lines in cmills.c
- ed cmills.c << '//long cmills.c//'
- 9,12j
- w
- q
- //long cmills.c//
- echo unpack long lines in dg.c
- ed dg.c << '//long dg.c//'
- 73,74j
- 71,72j
- 69,70j
- 66,68j
- w
- q
- //long dg.c//
- echo unpack long lines in stig.ksh
- ed stig.ksh << '//long stig.ksh//'
- 1,2j
- w
- q
- //long stig.ksh//
- exit 0
-