1  REM  ****  HP BASIC PROGRAM LIBRARY  ********************************
2  REM
3  REM        QUADGT:  FOUR-DIGIT NUMBER GUESSING GAME
4  REM
5  REM        36768  REV A -- 10/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ***********************************
10  DIM A$[5],D$[10]
20  D$="0123456789"
30  DEF FNA()=INT(10*RND(1))
40  PRINT "DO YOU WANT TO SEE THE INSTRUCTIONS";
50  INPUT A$
60  IF A$[1,1]="Y" THEN 100
70  IF A$[1,1]="N" THEN 280
80  PRINT "I SAID, ";
90  GOTO 40
100  PRINT "THIS GAME IS PLAYED AS FOLLOWS:"
110  PRINT 
120  PRINT "I WILL CHOOSE A 4 DIGIT NUMBER.  NO TWO DIGITS WILL BE THE SAME."
130  PRINT "YOUR JOB WILL BE TO FIGURE OUT WHAT DIGITS I PICKED."
140  PRINT 
150  PRINT "MAKE YOUR GUESS BY ENTERING A 4 DIGIT NUMBER.  I WILL"
160  PRINT "RESPOND WITH A 2 DIGIT NUMBER.  MY RESPONSE INDICATES TWO"
170  PRINT "THINGS.  FIRST, I TELL YOU HOW MANY DIGITS YOU GUESSED ARE"
180  PRINT "IN THE NUMBER I CHOSE.  SECOND, I TELL YOU HOW MANY DIGITS"
190  PRINT "ARE PLACED IN THE CORRECT POSITION WITHIN THE CHOSEN"
200  PRINT "NUMBER."
210  PRINT 
220  PRINT "FOR EXAMPLE, IF YOU GUESS  1463  AND I RESPOND WITH"
230  PRINT "31  THEN YOU GOT 3 OF THE DIGITS WHICH APPEAR IN THE"
240  PRINT "ANSWER BUT ONLY ONE DIGIT IS IN THE CORRECT POSITION."
250  PRINT "THUS, THE NUMBER I CHOSE COULD POSSIBLY BE 0364."
260  PRINT 
270  PRINT "THE EXPERIENCED PLAYER WILL AVERAGE 5 OR 6 GUESSES PER GAME."
280  PRINT "ENTER YOUR FIRST 4 DIGIT GUESS."
290  A[1]=FNA(1)
300  FOR I=2 TO 4
310  A[I]=FNA(1)
320  FOR J=1 TO I-1
330  IF A[I]=A[J] THEN 310
340  NEXT J
350  NEXT I
360  L=0
370  ENTER 255,I,A$
380  IF I#-256 THEN 410
390  PRINT LIN(1),"THINK A LITTLE FASTER, PLEASE."
400  GOTO 370
410  IF LEN(A$)=4 THEN 440
420  PRINT LIN(1),"ENTER EXACTLY 4 DIGITS"
430  GOTO 370
440  FOR I=1 TO 4
450  FOR J=0 TO 9
460  IF A$[I,I]#D$[J+1,J+1] THEN 490
470  N[I]=J
480  GOTO 530
490  NEXT J
500  PRINT  USING 510;LIN(1),A$[I,I]
510  IMAGEA,X,"IS AN ILLEGAL CHARACTER.  TRY AGAIN"
520  GOTO 370
530  NEXT I
540  FOR I=1 TO 3
550  FOR J=I+1 TO 4
560  IF A$[I,I]#A$[J,J] THEN 600
570  PRINT  USING 580;LIN(1),A$[I,I]
580  IMAGEA,X,"APPEARS MORE THAN ONCE.  TRY AGAIN"
590  GOTO 370
600  NEXT J
610  NEXT I
620  M1=M2=0
630  FOR I=1 TO 4
640  FOR J=1 TO 4
650  IF N[I]#A[J] THEN 700
660  M1=M1+1
670  IF I#J THEN 710
680  M2=M2+1
690  GOTO 710
700  NEXT J
710  NEXT I
720  PRINT  USING "D,D";SPA(5),M1,M2
730  L=L+1
740  IF M2#4 THEN 800
750  PRINT  USING 760;L
760  IMAGE #, "YOU GOT IT IN ", 2D, " GUESSES.  PLAY ANOTHER GAME"
770  INPUT A$
780  IF A$[1,1]="Y" THEN 280
790  STOP 
800  IF L=19 THEN 1000
810  IF L#12 AND L#15 AND L#18 THEN 370
820  ENTER 3,I,A$
830  IF I#-256 THEN 410
840  PRINT 
850  IF L=15 THEN 910
860  IF L=18 THEN 950
870  PRINT '7"YOU"'7" ARE"'7" OBVIOUSLY "'7"A BEGINNER. HERE'S A HINT."
880  PRINT  USING 890;A[1]
890  IMAGE"THE FIRST DIGIT IS A ",D
900  GOTO 370
910  PRINT "I'M "'7"BEGINNING "'7"TO LOSE "'7"MY PATIENCE."
920  PRINT  USING 930;A[1],A[2]
930  IMAGE"THE FIRST TWO DIGITS ARE ",D,D/"IF YOU CAN'T GET IT NOW, GIVE IT UP."
940  GOTO 370
950  PRINT "HERE'S "'7"AN IDEA. "'7" I'LL PRINT "'7"IT OUT."
960  PRINT '7"SEE IF "'7"YOU CAN TYPE "'7"IT BACK IN:"'7"  ";
970  PRINT  USING 980;A[1],A[2],A[3],A[4]
980  IMAGE D,D,D,D
990  GOTO 370
1000  PRINT "I QUIT.  GO PLAY SOME OTHER GAME.  BETTER YET, LOG OFF."
1010  STOP 
1020  END 
