10  REM *** BATNUM
12  REM *** FIRST VERSION BY JOHN KEMENY, DARTMOUTH COLLEGE
14  REM *** MODIFIED BY PEOPLE'S COMPUTER COMPANY, MENLO PARK, CA
90  DIM A$[72]
100  REM *** INSTRUCTIONS?
110  PRINT "DO YOU NEED INSTRUCTIONS (YES OR NO)";
120  INPUT A$
130  IF A$[1,1]="Y" THEN 1000
200  REM *** SET UP PILE, MIN & MAX, WIN OR LOSE TAKING LAST
210  PRINT 
220  PRINT "HOW MANY OBJECTS IN THE PILE";
230  INPUT P
240  P=INT(P)
250  IF P <= 0 THEN 1999
260  PRINT "WHAT IS THE MINIMUM YOU CAN TAKE";
270  INPUT A
280  A=INT(A)
290  IF A>0 THEN 320
300  PRINT "YOU HAVE TO TAKE AT LEAST 1 EACH TIME"
310  GOTO 260
320  PRINT "WHAT IS THE MAXIMUM YOU CAN TAKE";
330  INPUT B
340  B=INT(B)
350  IF B >= A THEN 380
360  PRINT "THE MINIMUM CAN'T BE LARGER THAN THE MAXIMUM"
370  GOTO 260
380  PRINT 
390  PRINT "DO YOU WIN OR LOSE BY TAKING THE LAST OBJECT (WIN OR LOSE)";
400  INPUT A$
410  REM *** TAKING-THE-LAST-OBJECT OPTION
420  REM *** WIN: L=0    LOSE: L=A
430  L=0
440  IF A$[1,1]="W" THEN 500
450  L=A
460  IF A$[1,1]="L" THEN 500
470  GOTO 390
500  REM *** SET UP STRATEGY
510  REM *** A IS THE MINIMUM, B IS THE MAXIMUM, L IS THE 'LAST' OPTION
520  REM *** COMPUTER TRIES TO LEAVE  (A+B)K + L  AFTER MOVING
530  T=A+B
550  REM *** WHO GOES FIRST?
560  PRINT "DO YOU WANT TO GO FIRST (YES OR NO)";
570  INPUT A$
580  IF A$[1,1]="Y" THEN 800
600  REM *** THE COMPUTER MOVES
602  REM *** CHECK IF END OF GAME
604  IF P>B THEN 610
606  IF (P <= A) OR (L=0) THEN 720
610  R=P-T*INT(P/T)
615  REM *** TAKE CARE OF THE CASE  0 < R < A
620  IF (R >= A) OR (R=0) THEN 630
625  R=A
630  REM *** IF R=L THEN THERE IS NO 'GOOD' MOVE
635  IF R=L THEN 680
640  C=R-L
650  IF C>0 THEN 700
660  C=C+B
670  GOTO 700
680  REM *** MAKE A RANDOM MOVE
690  C=INT((B-A+1)*RND(0))+A
700  PRINT "I TAKE";C
705  P=P-C
710  GOTO 800
720  REM *** THE GAME IS OVER
730  IF L=0 THEN 760
740  PRINT "I TAKE";P;"AND LOSE (LUCKY)"
750  GOTO 1900
760  PRINT "I TAKE";P;"AND WIN!"
770  GOTO 1900
800  REM *** THE HUMAN MOVES
810  PRINT 
820  PRINT "THERE ARE";P;"OBJECTS IN THE PILE."
830  PRINT "HOW MANY DO YOU TAKE";
840  INPUT H
850  H=INT(H)
860  IF (H >= A) AND (H <= B) THEN 910
870  REM *** CHECK IF END OF GAME
880  IF (H=P) AND (P<A) THEN 930
890  PRINT "YOU MAY TAKE FROM";A;"TO";B
900  GOTO 830
910  P=P-H
920  IF P>0 THEN 600
930  REM *** THE GAME IS OVER
940  IF L=0 THEN 970
950  PRINT "OH WELL, YOU LOSE"
960  GOTO 1900
970  PRINT "CONGRATULATIONS, YOU WIN!"
980  GOTO 1900
1000  PRINT 
1010  PRINT "WE BEGIN WITH A PILE OF OBJECTS (YOU DECIDE HOW MANY)."
1020  PRINT 
1030  PRINT "WE TAKE TURNS REMOVING OBJECTS FROM THE PILE."
1040  PRINT "YOU DECIDE WHAT THE MINIMUM (LEAST) AND THE MAXIMUM (MOST)"
1050  PRINT "ARE THAT WE CAN TAKE ON EACH TURN.  FOR EXAMPLE, IF 2 IS"
1060  PRINT "THE MINIMUM AND 5 IS THE MAXIMUM, THEN ON EACH TURN"
1070  PRINT "WE MUST TAKE 2 , 3 , 4 , OR 5 OBJECTS."
1080  PRINT 
1090  PRINT "TWO MORE THINGS TO DECIDE.  IS TAKING THE LAST OBJECT"
1100  PRINT "WINNING OR LOSING?  AND, DO YOU WANT TO GO FIRST?"
1110  PRINT 
1120  GOTO 200
1900  REM *** PLAY AGAIN?
1910  PRINT 
1920  PRINT "DO YOU WANT TO PLAY AGAIN (YES OR NO)";
1930  INPUT A$
1940  IF A$[1,1]="Y" THEN 200
1999  END 
