rsalz@uunet.uu.net (Rich Salz) (02/08/89)
Submitted-by: jim nelson <nelson@uncecs.edu> Posting-number: Volume 17, Issue 85 Archive-name: contest-prog/part02 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 2 (of 3)." # Contents: Makefile chexec8.c compare.c passwd prob1.c prob13.c # prob13.txt prob14.c prob14.txt prob15.txt prob16.c prob16.txt # prob17.c prob17.txt prob2.txt prob4.txt prob5.txt prob6.txt sb.c # start PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'Makefile' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Makefile'\" else echo shar: Extracting \"'Makefile'\" \(2655 characters\) sed "s/^X//" >'Makefile' <<'END_OF_FILE' XCC=cc XCFLAGS= -s -O X.IGNORE: X#a public directory such as /usr/local XLOCAL=/usr/contest X#the judges directory XJUDGES=/usr2/judges X#the judges group XGROUP=453 X#where the scoreboard is X#this really should be a dependecy on a .h file for just score.c X#but it's really easier just now to : XSCOREBOARD=\"$(JUDGES)/scoreboard\" X X#parallel make flag for sequent only: X#P=& X#(only, I guess, sequent people appreciate the & flag) X#maybe others have a similar thingie ... but I cannot know. X X#below here shouldn't need modifying (?) X XTBEG=prob1.txt prob2.txt prob3.txt prob4.txt prob5.txt prob6.txt X#TINT=prob7.txt prob8.txt prob9.txt prob10.txt prob11.txt prob12.txt XTADV=prob13.txt prob14.txt prob15.txt prob16.txt prob17.txt prob18.txt XTSRC= $(TBEG) $(TINT) $(TADV) X XCBEG=prob1.c prob2.c prob3.c prob4.c prob5.c prob6.c X#CINT=prob7.c prob8.c prob9.c prob10.c prob11.c prob12.c XCADV=prob13.c prob14.c prob15.c prob16.c prob17.c prob18.c XCSRC= $(CBEG) $(CINT) $(CADV) X XABEG=prob1.ans prob2.ans prob3.ans prob4.ans prob5.ans prob6.ans X#AINT=prob7.ans prob8.ans prob9.ans prob10.ans prob11.ans prob12.ans XAADV=prob13.ans prob14.ans prob15.ans prob16.ans prob17.ans prob18.ans XANS= $(ABEG) $(AINT) $(AADV) X XIBEG=prob1.in prob2.in prob3.in prob4.in prob5.in prob6.in X#IINT=prob7.in prob8.in prob9.in prob10.in prob11.in prob12.in XIADV=prob13.in prob14.in prob15.in prob16.in prob17.in prob18.in XIN=$(IBEG) $(IINT) $(IADV) X XALLC=$(CSRC) compare.c score.c seconds.c chexec8.c syserr.c digits.c \ Xshorten.c sb.c XOTHER=n passwd start f sf README Makefile gr testem judge visc \ Xshutofflogins scoreascorrect scoreasincorre scoreboard X Xall: $(P) chexec8 seconds compare score judge gr shorten digits \ Xtestem X chmod +x gr judge testem X testem X Xinstall: X mkdir keep X mkdir subdir X mkdir $(LOCAL) X chmod 777 $(LOCAL) X cp seconds $(LOCAL) X chmod +rx $(LOCAL)/seconds X sed s/GROUP/$(GROUP)/ judge > $(LOCAL)/judge X chmod +rx $(LOCAL)/judge X cp score $(LOCAL) X chmod 755 $(LOCAL)/score X chmod u+s $(LOCAL)/score X Xshar: $(TSRC) $(ALLC) $(ANS) $(IN) $(OTHER) X makekit -m -s30k rules contestrules \ X $(TSRC) $(ALLC) $(ANS) $(IN) $(OTHER) X Xpasswd: shutofflogins X shutofflogins X Xchexec8: $(P) chexec8.o syserr.o X cc -o chexec8 chexec8.o syserr.o X Xseconds: seconds.o X cc -o seconds seconds.o X Xshorten: shorten.o X cc -o shorten shorten.o X Xcompare: compare.o X cc -o compare compare.o X Xdigits: digits.o X cc -o digits digits.o X Xscore: score.o Makefile X cc -o score -s score.o X Xscore.o: score.c Makefile X cc -c -DSCOREBOARD=$(SCOREBOARD) score.c X Xscoretime: X cp /dev/null scoretime X Xsend: X uuto Part* 3b2b\!judges X Xclean: X rm *.e *.o Part* chexec8 seconds compare score digits shorten X END_OF_FILE if test 2655 -ne `wc -c <'Makefile'`; then echo shar: \"'Makefile'\" unpacked with wrong size! fi # end of 'Makefile' fi if test -f 'chexec8.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'chexec8.c'\" else echo shar: Extracting \"'chexec8.c'\" \(882 characters\) sed "s/^X//" >'chexec8.c' <<'END_OF_FILE' X#include <stdio.h> X/*#include <fcntl.h>*/ X#include <signal.h> X/*#include <sys/wait.h>*/ Xint k; Xmain(argc,argv) Xchar **argv; X{ X int childstatus(),oops(); X setuid(getuid()); X k=fork(); X if(k){ X signal(SIGALRM,oops); X#ifndef SIGCHLD X#define SIGCHLD SIGCLD X#endif X/*CHLD=20 for dynix, CLD=18 for SysV2*/ X/* anyway what we want is to catch "death of child" signal*/ X signal(SIGCHLD,childstatus); X alarm(10); X wait(0);} X else X execl(argv[1],"dumbo",0); X} Xchildstatus(sig,code,x) X{ X int i,j,m; X X fprintf(stderr,"sig=%d,code=%d, k=%d\n",sig,code,k); X X for(i=0;i<200;i++){ X j=k+i; X j= j % 32768; X if(j>1){ X m=kill(j,9); X if(m>=0)fprintf(stderr,"killed %d ",j); X } X } X X exit(0); X} Xoops(sig,code,x) X{ X fprintf(stderr,"sig=%d,code=%d\n",sig,code); X fprintf(stderr,"there may be a daemon attack underway\n"); X fprintf(stderr,"kill %d\n",k); X childstatus(sig,code,x); X exit(1); X} X END_OF_FILE if test 882 -ne `wc -c <'chexec8.c'`; then echo shar: \"'chexec8.c'\" unpacked with wrong size! fi # end of 'chexec8.c' fi if test -f 'compare.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'compare.c'\" else echo shar: Extracting \"'compare.c'\" \(1085 characters\) sed "s/^X//" >'compare.c' <<'END_OF_FILE' X#include <stdio.h> X#define tab '\t' X#define null '\0' X#define newline '\n' Xmain(argc,argv) Xchar **argv; X{ X FILE *fpa, *fpb; X char linea[200], lineb[200]; X char tempa[200], tempb[200]; X X char *p, *q; X int eofa=0,eofb=0; X int compare; X if(argc!=3)exit(1); X X fpa=fopen(argv[1],"r"); X if(fpa==(FILE *)0)exit(2); X X fpb=fopen(argv[2],"r"); X if(fpb==(FILE *)0)exit(3); X eofa=eofb=0; X compare=0; Xread: X if(!eofa)if(fgets(linea,199,fpa)!=linea)eofa=1; X if(!eofb)if(fgets(lineb,199,fpb)!=lineb)eofb=1; X if(eofa && eofb)exit(compare); X X if(eofa&& !eofb)exit(4); X if(eofb&& !eofa)exit(5); X if(eofa || eofb)exit(6); X Xfor(p=linea;*p;p++){if(*p==tab) *p=' ';if(*p==newline) *p=0;} Xfor(p=lineb;*p;p++){if(*p==tab) *p=' ';if(*p==newline) *p=0;} X p=linea; X q=lineb; Xtightloop: X while(*p==' ' || *p==tab || *p==newline)p++; X while(*q==' ' || *q==tab || *q==newline)q++; X if(*p!= *q){ X printf("them: %s\n",linea); X printf(" us: %s\n",lineb); X compare=1; X puts("------------------------------------"); X goto read; X } X else{ X p++; X q++; X if(*p==null)if(*q==null)goto read; X goto tightloop; X } X X} END_OF_FILE if test 1085 -ne `wc -c <'compare.c'`; then echo shar: \"'compare.c'\" unpacked with wrong size! fi # end of 'compare.c' fi if test -f 'passwd' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'passwd'\" else echo shar: Extracting \"'passwd'\" \(1863 characters\) sed "s/^X//" >'passwd' <<'END_OF_FILE' Xroot:Jfy5vADKI.PUo:0:0:Admin:/:/bin/csh Xdaemon:*:1:10:Admin:/: Xusrlimit:HVhogDpnYyySg:2:2:This is a 32 user system, DO NOT REMOVE THIS LINE:/:/dev/null Xuucp:LHFftElncpbcU:66:10:uucp owner:/usr/lib/uucp:/bin/csh X3b2b::67:10:UNIX-to-UNIX Copy:/usr/spool/uucppublic:/usr/lib/uucp/uucico X3b2a::68:10:UNIX-to-UNIX Copy:/usr/spool/uucppublic:/usr/lib/uucp/uucico Xlmc::69:10:UNIX-to-UNIX Copy:/usr/spool/uucppublic:/usr/lib/uucp/uucico Xsigma::71:10:UNIX-to-UNIX Copy:/usr/spool/uucppublic:/usr/lib/uucp/uucico Xcltsqnt::72:10:sequent:/usr/spool/uucppublic:/usr/lib/uucp/uucico Xnelson:TQQhhbK575Jtc:100:0:j h nelson,MO-263,3300,3926032/3955570/147.53,:/usr1/nelson:/bin/csh Xherbst:hwshDCyvtoI.s:104:100:R.T. Herbst,MO 256,3248,2563304,universe(ucb):/usr1/herbst: Xguest::105:100:a guest:/usr1/guest:/usr/uncw/score Xscore::105:100:a guest:/usr1/guest:/usr/uncw/score Xwhipkey:HinSCYmbORBjk:116:100:k whipkey:/usr1/whipkey: Xsmithh:7g3ZmER5p4epA:123:100:H.F. Smith,CH 200-E,3953819,,:/usr1/smithh: Xnorris:8F42zTTbXo3Ak:125:100:f r norris,264,3953301,,:/usr1/norris:/bin/csh Xjudges:8HrGYoJq3fxdQ:453:453:the judges,,,,:/usr2/judges:/bin/csh Xteam1:mrCEcc.F8UocI:478:478:team1:/usr1/team1:/bin/csh Xteam2:6DsWELtbNWOLg:479:479:team2:/usr1/team2:/bin/csh Xteam3:BRc8uYjDHRO6.:480:480:team3:/usr2/team3:/bin/csh Xteam4:Icegxkv..vEcQ:481:481:team4:/usr2/team4:/bin/csh Xteam5:BjLwNCM7HePeU:482:482:team5:/usr2/team5:/bin/csh Xteam6:Oo3fEvH61VKeo:483:483:team6:/usr2/team6: Xteam7:k0isgx3nuFK1Q:484:484:team7:/usr3/team7: Xteam8:h35xJdDATkW5Y:485:485:team8:/usr3/team8: Xteam9:foTUAMb51CRDM:486:486:team9:/usr1/team9: Xteam10:b/vzhtWaiNAJA:487:487:team10:/usr1/team10: Xteam11:6LmSPFh9PpBDw:488:488:team11:/usr3/team11: Xteam12:omg0gx1Lw2lr2:489:489:team12:/usr3/team12:/bin/csh Xteam13:FlwviGdBAAXFE:490:490:team13:/usr3/team13:/bin/csh Xteam14:kYWLsTLpfiLFg:491:491:team14:/usr3/team14:/bin/csh END_OF_FILE if test 1863 -ne `wc -c <'passwd'`; then echo shar: \"'passwd'\" unpacked with wrong size! fi # end of 'passwd' fi if test -f 'prob1.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'prob1.c'\" else echo shar: Extracting \"'prob1.c'\" \(829 characters\) sed "s/^X//" >'prob1.c' <<'END_OF_FILE' Xmain() X{ X int *left, *right, *doub; X int l,m, i=0,j,k; X int nd=0; X char *malloc(); Xleft=(int *)malloc(500*sizeof(int)); Xright=(int *)malloc(500*sizeof(int)); Xdoub=(int *)malloc(500*sizeof(int)); X X for(i=0;i<500;i++)doub[i]=0; X i=0; X while( scanf("%d%d",&j,&k)==2) X if(j>=0 && k>=0){left[i]=j; right[i]=k; i++;} X else break; X i--; X for (j=0;j<=i;j++) X { X k=left[j]; X for(m=0;m<=i;m++)if(k==right[m]){doub[nd++]=k;break;} X } X if(nd){ X/* for(i=0;i<nd;i++)if(doub[i])printf("%d\n",doub[i]);*/ X X if(nd>=2){ X for(i=0;i<nd-1;i++) X for(j=i+1;j<nd;j++) X if(doub[i]>doub[j]){k=doub[i];doub[i]=doub[j];doub[j]=k;} X else {} X }else printf("%d\n",doub[0]); X X }else{} X doub[nd]= -1; X/* for(i=0;i<nd;i++)if(doub[i]) Xprintf("%d\n",doub[i]); X*/ X Xk= -1; X X for(i=0;i<nd;i++)if(doub[i]!=doub[i+1]) Xprintf("%d\n",doub[i]); X X return 0; X} END_OF_FILE if test 829 -ne `wc -c <'prob1.c'`; then echo shar: \"'prob1.c'\" unpacked with wrong size! fi # end of 'prob1.c' fi if test -f 'prob13.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'prob13.c'\" else echo shar: Extracting \"'prob13.c'\" \(2166 characters\) sed "s/^X//" >'prob13.c' <<'END_OF_FILE' Xmain(){ X int oldop,mask,flag; X#define newline '\n' X#define null '\0' X /* XFrom norris Fri Nov 11 11:06:03 1988 XBinary-binary X X Mathematicians refer to addition and subtraction as binary Xoperations. Since computer scientists like to take things much Xfarther than they were intended, you are going to write a Xbinary binary calculator. X This calculator program will accept infix expressions involving Xonly + and - and unsigned binary integers. No parentheses or Xother operations will be present. You must compute the value Xof the expression and display the result in binary. Negative Xresults should be printed with a leading minus sign. X Data considerations: X Input will consist of an unspecified number of expressions, X one per line; end-of-file will indicate the end of data. Each X expression will contain no leading or embedded blanks. No X expression will contain more than 80 characters. The X expression values are to be computed left-to-right. No X number or intermediate value will require more than 15 bits X of precision. Output should start in column 1 of the X output file, one result per line, with no leading zeroes. X XExample: X the input expression: 110+11-1+100 X results in the output X1100 X X the input expression: 1100-11000+111-10 X results in the output X-111 X*/ X char line[90]; X int sum,n; X char *p; X char *gets(); X while( gets(line)==line ){ X p=line; X n=0; X for(p=line,n=0,sum=0,oldop='+';;p++) { X switch(*p){ X case '-': X case '+': X if(oldop=='+')sum += n; X else sum -=n; X n=0; X oldop= *p; X break; X case '0': X n= n* 2; X break; X case '1': X n= n*2+1; X break; X case newline: X case 0: X if(oldop=='+')sum += n; X else sum -=n; X goto out; X/* n=0; */ X/* oldop= *p;*/ X break; X default: X ; X } X } Xout: /*printf("%d\n",sum);*/ X ; X if(sum==0){ X putchar('0'); X putchar(newline); X continue; X } X if(sum<0){ X putchar('-'); X sum = - sum; X } X for(mask=0100000, flag=0; mask; mask >>=1){ X X if(sum & mask ){ X putchar('1'); X flag=1; X } else if(flag)putchar('0'); X } X putchar(newline); X X }/*endwhile gets*/ X}/*end main*/ END_OF_FILE if test 2166 -ne `wc -c <'prob13.c'`; then echo shar: \"'prob13.c'\" unpacked with wrong size! fi # end of 'prob13.c' fi if test -f 'prob13.txt' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'prob13.txt'\" else echo shar: Extracting \"'prob13.txt'\" \(1400 characters\) sed "s/^X//" >'prob13.txt' <<'END_OF_FILE' XProblem 13: Binary-binary. X X Mathematicians refer to addition and subtraction as binary Xoperations. Since computer scientists like to take things much Xfarther than they were intended, you are going to write a Xbinary binary calculator. X This calculator program will accept infix expressions involving Xonly + and - and unsigned binary integers. No parentheses or Xother operations will be present. You must compute the value Xof the expression and display the result in binary. Negative Xresults should be printed with a leading minus sign. X Data considerations: X Input will consist of an unspecified number of expressions, X one per line; end-of-file will indicate the end of data. Each X expression may contain leading or embedded blanks; however, no X number will contain embedded blanks. X A totally blank line should evoke an output of '0'. X No expression will contain more than 80 characters. The X expression values are to be computed left-to-right. No X number or intermediate value will require more than 15 bits X of precision. Output should start in column 1 of the X output file, one result per line, with no leading zeroes. X XExample: X the input expression: 110+11- 1 +100 X results in the output X1100 X X the input expression: 1100 - 11000+111-10 X results in the output X-111 X X the input expression: <a blank line> X results in the output X0 END_OF_FILE if test 1400 -ne `wc -c <'prob13.txt'`; then echo shar: \"'prob13.txt'\" unpacked with wrong size! fi # end of 'prob13.txt' fi if test -f 'prob14.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'prob14.c'\" else echo shar: Extracting \"'prob14.c'\" \(1054 characters\) sed "s/^X//" >'prob14.c' <<'END_OF_FILE' Xmain(){ X int a[4]; X int numfnd = -1; X int this, found[10000]; X int t; X int p,q,r,s,i,j,k,l,n; X for(i=0;i<10;i++) X for(j=0;j<10;j++)if(i==j)continue; X else X for(k=0;k<10;k++) X for(l=0;l<10;l++)if(k==l)continue; X else X { X p=i*10+j; X q=k*10+l; X X r=j*10+i; X s=l*10+k; X if(p==r || p==s ||q==r||q==s)continue; X else X if((n=p*q) == r*s){ X int i,j; X /*bingo*/ X a[0]=p; X a[1]=q; X a[2]=r; X a[3]=s; Xxxx: X for(i=0;i<4;i++)for(j=i;j<4;j++)if(a[i]>a[j]){ X t=a[i]; X a[i]=a[j]; X a[j]=t; X goto xxx; X } X /*printf("%d %d %d %d %d " ,p,q,r,s,n);*/ X this=a[0]*1000000+a[1]*10000+a[2]*100+a[3]; X if(numfnd== -1){ X found[++numfnd]=this; X printf("%d %d\n",a[0],n); X continue; X } X else{ X t=0; X for(i=0;i<=numfnd;i++)if(found[i]==this)t=1; X } X if(!t) X { X found[++numfnd]=this; X printf("%d %d\n",a[0],n); X } X else /*putchar('\n')*/ ; X } X } X X X} END_OF_FILE if test 1054 -ne `wc -c <'prob14.c'`; then echo shar: \"'prob14.c'\" unpacked with wrong size! fi # end of 'prob14.c' fi if test -f 'prob14.txt' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'prob14.txt'\" else echo shar: Extracting \"'prob14.txt'\" \(1119 characters\) sed "s/^X//" >'prob14.txt' <<'END_OF_FILE' XProblem 14: Reverse products. X X XThe product 64 * 69 = 4416, and so also is the product 46 * 96 with the Xdigits reversed in both numbers. Write a program that prints all such Xpairs of two-digit numbers with this property. For purposes of this Xproblem, numbers less than 10 are to be considered two-digit numbers. XHowever, exclude the following: numbers having the same two digits X(e.g., 77), pairs where one of the original numbers is just the Xreverse of the other (e.g., 46 and 64), and any DUPLICATE sets of Xnumbers (i.e., the foursome 46, 64, 69, 96 should be found just once). XThe output for this problem should consist of lines, Xeach with two values: p = the smallest element of a foursome, and Xq = the corresponding product value. Thus, the line for this example Xcase would contain: 46 4416. Moreover, the lines should be Xordered by values of p, and then by values of q in case of Xrepetitions of p values. X XThere is no input file for this problem. X XSample output: X1 20 <this is tricky: comes from 01*20 == 10*02 > X1 30 X ... X ... X34 2924 X ... X XHint: there are fifty output lines in a correct answer. END_OF_FILE if test 1119 -ne `wc -c <'prob14.txt'`; then echo shar: \"'prob14.txt'\" unpacked with wrong size! fi # end of 'prob14.txt' fi if test -f 'prob15.txt' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'prob15.txt'\" else echo shar: Extracting \"'prob15.txt'\" \(1064 characters\) sed "s/^X//" >'prob15.txt' <<'END_OF_FILE' XProblem 15: Circular execution. X X XYou and your friends are suddenly rounded up into a circle. You are told Xthat, starting from the head of the circle, THEY will count to M, execute Xthat Mth person, close the circle, and repeat this process until just one Xperson is left to escape. Given that there are N persons and that the Xrule is to execute every Mth person, you need to decide which position Xto take in the circle if you are to remain alive. X XWrite a program that reads and computes, for four pairs of (M,N) values. XFor each pair, as your program executes (literally!), have it print out the Xidentity of each person as he is eliminated. For example, with M = 7 and XN = 11, the output would be: 7 3 11 9 8 10 2 6 1 4 5 X(showing 5 (the last guy in the list) surviving). X XThere will be exactly four M,N pairs in the input datafile, two per line. XM and N will each be less than or equal to 20. XSuch as: X7 11 X9 13 X13 15 X7 14 X XNote that there is NO requirement that M be less than N. X XBe careful that your output consists of exactly four lines. END_OF_FILE if test 1064 -ne `wc -c <'prob15.txt'`; then echo shar: \"'prob15.txt'\" unpacked with wrong size! fi # end of 'prob15.txt' fi if test -f 'prob16.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'prob16.c'\" else echo shar: Extracting \"'prob16.c'\" \(1273 characters\) sed "s/^X//" >'prob16.c' <<'END_OF_FILE' Xmain(){ X int ii,jj,kk,a,b,M,N,i,j,k; X int abin,bbin,nbin[200],bin[200][30]; X X scanf("%d%d",&M,&N); X for(i=1;i<=N;i++){ X bin[i][1]=i; X nbin[i]=1; X } X for(kk=1;kk<=M;kk++){ X if(scanf("%d%d",&a,&b)!=2)exit(1); X ii=jj=0; X for(i=1;i<=N;i++){ X if(nbin[i]<1)continue; X for(j=1;j<=nbin[i];j++) X if(bin[i][j]==a){ X ii=i; X jj=j; X } X } X if(ii==0||jj==0){ X printf("oops a=%d b=%d ii=%d jj=%d i=%d j=%d nbin[ii]=%d\n" X ,a,b,ii,jj,i,j,nbin[ii]); X exit(2); X } X /*bin[ii][jj]=0;*/ X abin=ii; X ii=jj=0; X for(i=1;i<=N;i++){ X if(nbin[i]<1)continue; X for(j=1;j<=nbin[i];j++) X if(bin[i][j]==b){ X ii=i; X jj=j; X break; X } X } X if(ii==0||jj==0){ X printf("oops ii=%d jj=%d i=%d j=%d nbin[ii]=%d\n" X ,ii,jj,i,j,nbin[ii]); X exit(3); X } X bbin=ii; X for(j=1;j<=nbin[abin];j++)bin[bbin][++nbin[bbin]]=bin[abin][j]; X nbin[abin]=0; X } X for(i=1;i<=N;i++) X { X k=nbin[i]; X if(k<1)continue; X if(k>=2){ X int l,m; X for(l=1;l<k;l++)for(m=l+1;m<=k;m++)if(bin[i][l]>bin[i][m]){ X int t; X t=bin[i][l]; X bin[i][l]=bin[i][m]; X bin[i][m]=t; X } X } X } X for(i=1;i<=N;i++) X for(kk=1;kk<=N;kk++) X if(nbin[kk]<1)continue; else{ X if(bin[kk][1]==i){ X for(j=1;j<=nbin[kk];j++) printf(" %d ",bin[kk][j]); X puts(""); X X } X } X X} END_OF_FILE if test 1273 -ne `wc -c <'prob16.c'`; then echo shar: \"'prob16.c'\" unpacked with wrong size! fi # end of 'prob16.c' fi if test -f 'prob16.txt' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'prob16.txt'\" else echo shar: Extracting \"'prob16.txt'\" \(1059 characters\) sed "s/^X//" >'prob16.txt' <<'END_OF_FILE' XProblem 16: Equivalence classes. X X XSuppose that we have a set of N objects {a[i]}. We are also given M statements Xof the form a[i] == a[j] . Let us assume that the objects have been mapped into Xthe integers 1 .. N by some manner. For example, with N = 19 and M = 16, we Xmight have the following objects and relationships: X 18 = 12 16 = 14 8 = 18 16 = 6 X 6 = 10 9 = 1 17 = 4 16 = 17 X 8 = 2 3 = 13 9 = 11 3 = 8 X 11 = 5 7 = 19 3 = 9 19 = 15 XWrite a program that reads M and N, followed by the M pairings i = j, Xwith i and j both in the range 1 .. N. Your program should compute which Xobjects fall into which classes of equivalent objects, and should then Xprint out these classes, as follows: objects sorted within each class, Xand classes printed in order of their first members. Thus, for the example Xabove, the output would be: X 1 2 3 5 8 9 11 12 13 18 X 4 6 10 14 16 17 X 7 15 19 X END_OF_FILE if test 1059 -ne `wc -c <'prob16.txt'`; then echo shar: \"'prob16.txt'\" unpacked with wrong size! fi # end of 'prob16.txt' fi if test -f 'prob17.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'prob17.c'\" else echo shar: Extracting \"'prob17.c'\" \(787 characters\) sed "s/^X//" >'prob17.c' <<'END_OF_FILE' X#include <stdio.h> Xmain(){ X int z,s,x[4],y[4],tx,ty,xi,yi,abig,area(); X char *p; X int t=0,i,k; X while( scanf("%d%d",&x[1],&y[1]) == 2){ X scanf("%d%d",&x[2],&y[2]); X scanf("%d%d",&x[3],&y[3]); X t++; X for(k=1;k<=7;k++){ X scanf("%d%d",&tx,&ty); X abig=area(x,y); X s=(int)0; X for(i=1;i<=3;i++){ X xi=x[i]; X x[i]=tx; X yi=y[i]; X y[i]=ty; X s +=area(x,y); X x[i]=xi; X y[i]=yi; X X } X z=s-abig; X if(z<0)z= -z; X if(z==0){ X/* fprintf(stderr,"yes\n");*/ X p="inside";} X else { X/* fprintf(stderr,"no\n");*/ X p="outside";} X printf("%d %d is %s triangle %d\n",(int)(tx),(int)(ty),p,t); X/* fprintf(stderr,"\n");*/ X } X } X} Xint area(x,y) Xint x[],y[]; X{ X int z; X z= (x[1]*y[2]-x[1]*y[3]+x[2]*y[3]-x[2]*y[1]+x[3]*y[1]-x[3]*y[2]); X/* z= z ;*/ X if(z<0)z = -z; X/* fprintf(stderr,"area=%d ",z);*/ X return z; X} END_OF_FILE if test 787 -ne `wc -c <'prob17.c'`; then echo shar: \"'prob17.c'\" unpacked with wrong size! fi # end of 'prob17.c' fi if test -f 'prob17.txt' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'prob17.txt'\" else echo shar: Extracting \"'prob17.txt'\" \(936 characters\) sed "s/^X//" >'prob17.txt' <<'END_OF_FILE' XProblem 17: Point inside triangle. X XWhen is a point (s,t) inside a triangle with vertices (x1, y1), X(x2, y2), (x3, y3)?? For this problem, the input will contain 20 Xlines containing coordinate pairs: X three lines with coordinates of three vertices of first triangle X seven lines, each with coordinates of a point to be tested therein X three lines with coordinates of three vertices of second triangle X seven lines, each with coordinates of a point to be tested therein X XFor example, if the first five lines of input were X 3 2 X 6 10 X 15 7 X 5 7 X 14 6 Xthe corresponding output would be X 5 7 is inside triangle 1 X 14 6 is outside triangle 1 X XSpacing of the output is not important, but you must have the words X"is", "inside" or "outside", and "triangle" in your output, just as Xin the example. X XThe vertices of the triangle, and the test point, are guaranteed to Xbe integers. X END_OF_FILE if test 936 -ne `wc -c <'prob17.txt'`; then echo shar: \"'prob17.txt'\" unpacked with wrong size! fi # end of 'prob17.txt' fi if test -f 'prob2.txt' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'prob2.txt'\" else echo shar: Extracting \"'prob2.txt'\" \(1204 characters\) sed "s/^X//" >'prob2.txt' <<'END_OF_FILE' XProblem 2: Character count. X XFor all the lines in a file, count the occurrences of the Xvarious characters in that file. X XThe input file will be a text file of unknown length, but Xwith each line guaranteed to be less than 80 characters long. X XThe input file may contain tabs (ascii octal 011), blanks, Xand all the printable characters, as well as newlines. X XDo not attempt to count newlines; only tabs, blanks, and printable Xcharacters. X XYour output should consist of two integers per line. The leftmost Xshould be the ascii character printed in decimal form, the rightmost Xshould be the count of the character. X XBUT: do not output zero-counts. That is: do not print any line Xfor which the count is zero. X XExample: Xtime for all X good men to Xcome to the aid of X X(note that the word "good" is preceded by a tab-character). X XShould produce: X 9 1 <this is the tab> X 32 8 <this is "blank"> X 97 2 <this is "a"> X 99 1 <etc., and of course, you don't X 100 2 print these comments> X 101 4 X 102 2 X 103 1 X 104 1 X 105 2 X 108 2 X 109 3 X 110 1 X 111 7 X 114 1 X 116 4 END_OF_FILE if test 1204 -ne `wc -c <'prob2.txt'`; then echo shar: \"'prob2.txt'\" unpacked with wrong size! fi # end of 'prob2.txt' fi if test -f 'prob4.txt' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'prob4.txt'\" else echo shar: Extracting \"'prob4.txt'\" \(864 characters\) sed "s/^X//" >'prob4.txt' <<'END_OF_FILE' XProblem 4: Print odds and evens side-by-side. X XThe input file will consist of some positive integers. The number Xof integers will be less than thirty. Each integer will be Xgreater than or equal to one. The last line of the input file Xwill contain a negative number, for use as a sentinel. There will Xbe one integer per line, left justified, beginning in column 1. X XThe output is to consist of lines of the form: Xodd number even number X Xwhere the numbers are those from the input file, in the order in Xwhich they occurred. X XIf there are fewer odd numbers than even numbers, pad with -1 . XIf there are fewer even numbers than odd numbers, pad with -1 . X XDo not output a line consisting of -1 -1 . X XExample input file: X9 X8 X12 X13 X2 X4 X-1 X XThe output should be: X9 8 X13 12 X-1 2 X-1 4 X XAnother example file: X9 X11 X13 X2 X4 X7 X-1 X XThe output should be X9 2 X11 4 X13 -1 X7 -1 END_OF_FILE if test 864 -ne `wc -c <'prob4.txt'`; then echo shar: \"'prob4.txt'\" unpacked with wrong size! fi # end of 'prob4.txt' fi if test -f 'prob5.txt' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'prob5.txt'\" else echo shar: Extracting \"'prob5.txt'\" \(1051 characters\) sed "s/^X//" >'prob5.txt' <<'END_OF_FILE' XProblem 5: count the number of words in a text file. X XThe input file will consist of some number of lines. XThere will be only lowercase letters and blanks (and of course, Xnewlines) in the input file. (I.e., no tabs). XEach line will have zero or more non-blank strings separated Xby one or more blanks. Leading blanks are permitted in the input file. XA "word" is defined as a "string which does not contain a blank". XYour program should produce exactly as many lines as there are Xlines in the input file. Your output should be the integer number Xrepresenting the number of "words" on the corresponding input line. X XExample: if the input file consists of exactly six lines: Xnow is the time Xfor all X thirty days hath X september X X testing testing cqcqcq de k4xe X XThen your output would be X4 X2 X3 X1 X0 X5 X <this line is not part of your output> XPay particular attention to the fact that a blank line should Xproduce a zero-count in your output file. To emphasize: XYou should produce some output for each line of input, even if Xit is totally blank. END_OF_FILE if test 1051 -ne `wc -c <'prob5.txt'`; then echo shar: \"'prob5.txt'\" unpacked with wrong size! fi # end of 'prob5.txt' fi if test -f 'prob6.txt' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'prob6.txt'\" else echo shar: Extracting \"'prob6.txt'\" \(988 characters\) sed "s/^X//" >'prob6.txt' <<'END_OF_FILE' XProblem 6: Count the relationships. X XThe input file will contain an unknown number of lines each Xhaving four positive integers. The last line will be X -1 -1 -1 -1 X XDo not output anything for the last line; it's there for use Xas a sentinel. X XThe numbers on each line are guaranteed to be distinct; that is, Xno number will appear more than once in the quartet of numbers. X XFor each line, count the number of times a smaller number appears Xto the left of a larger number, and also count the number of times Xa larger number appears to the left of a smaller number; Xfor example, if the four numbers are X 7 9 27 23 Xthe "lessthan" count is 5, because 7<9, 7<27, 7<23, 9<27, 9<23, Xbut 27>23; the "greaterthan" count is 1, because 27>23. X XYour output should be: the original four numbers followed by Xthe lessthan-count and the greaterthan-count all on one line. X XEach input line should generate one output line. X XFor example, your output line for the above input line would be: X 7 9 27 23 5 1 X END_OF_FILE if test 988 -ne `wc -c <'prob6.txt'`; then echo shar: \"'prob6.txt'\" unpacked with wrong size! fi # end of 'prob6.txt' fi if test -f 'sb.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'sb.c'\" else echo shar: Extracting \"'sb.c'\" \(1719 characters\) sed "s/^X//" >'sb.c' <<'END_OF_FILE' X#include <stdio.h> X#define newline '\n' X#define blank ' ' X#define tab '\t' X#define indent {myputs(line);ilev++;goto lbl;} X#define undent {ilev--;myputs(line);goto lbl;} Xint ilev = 0; Xmain(argc,argv) char **argv; X{ X char line[512], *a; X int i; X X while(gets(line)==line){ X a=line; X while(*a){if(*a==newline)*a=0; a++;} X if(endsin(line,"then")==0){ X indent } X if(endsin(line,"else")==0){ X X ilev--; myputs(line); ilev++;goto lbl; X } X if(endsin(line,"fi")==0){ X undent } X if(endsin(line,"done")==0){ X undent } X if(endsin(line,"do")==0){ X indent } X if(begins(line,"case")==0){ X indent } X if(endsin(line,"esac")==0){ X undent } X myputs(line); Xlbl: ; X } X} Xmyputs(p)char *p; X{ X int i; X while(*p==blank ||*p==tab)p++; X if(ilev>0)for(i=1;i<=ilev;i++)printf(" "); X/* printf("%d",ilev);*/ X puts(p); X} X Xendsin(a,b) Xchar *a, *b; X{ X char *aa; X int i; X aa=a; X while(*aa==blank || *aa==tab)aa++; X if(strlen(a)<strlen(b))return -1; X a = a +strlen(a)-strlen(b); X i= kindex(a,b); X if(strlen(aa)==strlen(b))return i; X a--; X if(*a==tab||*a==';'||*a==blank)return i; else return -1; X/* printf("in endsin, a=%s b=%s returning %d\n",a,b,i);*/ X/* fflush(stdout);*/ X/* return i;*/ X X} X X X X X Xbegins(a,b) Xchar *a, *b; X{ X int i; X while(*a==blank || *a==tab)a++; X return kindex(a,b); X X} X X X X Xkindex(s,t) Xchar s[],t[]; X{ X int c,i,j,k; X c=s[0]; X if(c==0){return -1; X/* i=puts("in kindex ... dummy, s[0] is zero");j=i;*/ X/* puts(t);*/ X/* if(i==j)exit(1);*/ X } X c=t[0]; X if(c==0){return -1; X/* i=puts("in kindex ... dummy, t[0] is zero");j=i;*/ X/* puts(s);*/ X/* if(j==i)exit(1);*/ X } X for(i=0;s[i] !='\0'; i++){ X for(j=i,k=0;t[k] !='\0' && s[j]==t[k];j++,k++) X ; X if(t[k]=='\0')return (i); X } X return(-1); X} END_OF_FILE if test 1719 -ne `wc -c <'sb.c'`; then echo shar: \"'sb.c'\" unpacked with wrong size! fi # end of 'sb.c' fi if test -f 'start' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'start'\" else echo shar: Extracting \"'start'\" \(1067 characters\) sed "s/^X//" >'start' <<'END_OF_FILE' X X#! /bin/sh X X#judges mailbox XMAIL=$MAIL X X#a public dir where score lives X#(the scoreboard should be local an only readable by judges, X# cause "score should be setuid judges) XLOCAL=/usr/contest X X#four hours: XLENGTH=14400 X Xcd $HOME Xrm -f /tmp/prob*.txt X X Xrm -f t[0-9]*[0-9]* Xrm -f keep/* Xrm -f subdir/* X X#version:21 Xecho "21">xxxx X/bin/cp /dev/null listofteams X Xwhile : Xdo Xread teamno Xcase $teamno in X "") echo null team number;exit;; X -1)break; Xesac Xecho team$teamno>>listofteams Xread cat Xread name X X X echo $teamno $cat $name >>xxxx X echo $teamno $cat $name X X Xdone Xecho "-1 -1 xx">>xxxx X#change the following line to y for a live start Xzork=y Xcase $zork in X y) X for i in 1 2 3 4 5 6 13 14 15 16 17 18 X do X /bin/cp prob$i.txt /tmp X done ;; Xesac Xchmod og+r /tmp/*.txt X X/bin/cp scoreboard scoreboard.old Xseconds=`${LOCAL}/seconds` Xecho $seconds >> xxxx Xecho $seconds > starttime Xecho endtime = $endtime Xendtime=`expr $seconds '+' ${LENGTH}` Xecho endtime = $endtime Xecho $endtime > endtime X/bin/cp xxxx scoreboard Xchmod og-rwx scoreboard X X X${LOCAL}/score Xn mal Xn ${MAIL} END_OF_FILE if test 1067 -ne `wc -c <'start'`; then echo shar: \"'start'\" unpacked with wrong size! fi chmod +x 'start' # end of 'start' fi echo shar: End of archive 2 \(of 3\). cp /dev/null ark2isdone MISSING="" for I in 1 2 3 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 3 archives. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 -- Please send comp.sources.unix-related mail to rsalz@uunet.uu.net.