10 REM *** ANAGRAM *** 11 REM By Tony Stevens. 12 POKE 3,197 20 REM:A PROGRAMME TO GENERATE ALL ANAGRAMS OF A GIVEN WORD 30 PRINT CHR$(26) 40 INPUT"DO YOU REQUIRE A HARD COPY? ",Q$:IF Q$="YES" THEN N=1 ELSE N=0 50 WIDTH LPRINT 90 60 PRINT CHR$(26) 70 INPUT " PLEASE TYPE IN WORD";A$:PRINT CHR$(26) 80 PRINT:PRINT 90 L=LEN(A$) 100 IF L>8 THEN PRINT "THE MAXIMUM WORD LENGTH IS EIGHT LETTERS ": GOTO 70 110 IF L=1 THEN PRINT "ONE OF US IS AN IDIOT......GUESS WHICH":GOTO 70 120 FOR N1 = 1 TO L 130 B$(N1)= MID$(A$,N1,1) 140 NEXT 150 N2 =1 160 FOR N3 = L TO 1 STEP -1 170 N2 = N2 * N3 180 NEXT 190 GOSUB 580 200 P1=1:P2=1:P3=1:P4=1:P5=1:P6=1:P7=1:P8=1 210 FOR N5 = 0 TO N2-1 220 IF N5L THEN P1=P1-L 250 IF L=1 THEN GOTO 520 260 IF N5*L*(L-1)/N2= INT (N5*L*(L-1)/N2) THEN P2=P2+1: 270 IF P2>L THEN P2=P2-L 280 IF P2=P1 THEN GOTO 260 290 IF L=2 THEN GOTO 520 300 IF N5*L*(L-1)*(L-2)/N2=INT (N5*L*(L-1)*(L-2)/N2) THEN P3=P3+1 310 IF P3>L THEN P3=P3-L 320 IF P3=P1 OR P3=P2 THEN GOTO 300 330 IF L=3 THEN GOTO 520 340 IF N5*L*(L-1)*(L-2)*(L-3)/N2=INT (N5*L*(L-1)*(L-2)*(L-3)/N2) THEN P4=P4+1 350 IF P4>L THEN P4=P4-L 360 IF P4=P1 OR P4=P2 OR P4=P3 THEN GOTO 340 370 IF L=4 THEN GOTO 520 380 IF N5*L*(L-1)*(L-2)*(L-3)*(L-4)/N2=INT (N5*L*(L-1)*(L-2)*(L-3)*(L-4)/N2) THEN P5=P5+1 390 IF P5>L THEN P5=P5-L 400 IF P5=P1 OR P5=P2 OR P5=P3 OR P5=P4 THEN GOTO 380 410 IF L=5 THEN GOTO 520 420 IF N5*L*(L-1)*(L-2)*(L-3)*(L-4)*(L-5)/N2=INT(N5*L*(L-1)*(L-2)*(L-3)*(L-4)*(L-5)/N2) THEN P6=P6+1 430 IF P6>L THEN P6=P6-L 440 IF P6=P1 OR P6=P2 OR P6=P3 OR P6=P4 OR P6=P5 THEN GOTO 420 450 IF L=6 THEN GOTO 520 460 IF N5*L*(L-1)*(L-2)*(L-3)*(L-4)*(L-5)*(L-6)/N2=INT(N5*L*(L-1)*(L-2)*(L-3)*(L-4)*(L-5)*(L-6)/N2) THEN P7=P7+1 470 IF P7>L THEN P7=P7-L 480 IF P7=P1 OR P7=P2 OR P7=P3 OR P7=P4 OR P7=P5 OR P7=P6 THEN GOTO 460 490 IF L=7 THEN GOTO 520 500 IF P8=P1 OR P8=P2 OR P8=P3 OR P8=P4 OR P8=P5 OR P8=P6 OR P8=P7 THEN P8=P8+1:GOTO 500 510 IF P8>L THEN P8=P8-L:GOTO 500 520 C$ =B$(P1)+B$(P2)+B$(P3)+B$(P4)+B$(P5)+B$(P6)+B$(P7)+B$(P8) 530 D$ = LEFT$(C$,L) 540 IF N=1 THEN LPRINT D$, 550 PRINT D$, 560 NEXT N5 570 PRINT:PRINT:PRINT:PRINT:GOTO 610 580 PRINT:PRINT:PRINT"THERE ARE ";N2;" ANAGRAMS FOR THE WORD ";A$:PRINT:PRINT 590 IF N=1 THEN LPRINT:LPRINT:LPRINT CHR$(27)+"G"+CHR$(27)+"S"+"THERE ARE"; N2;"ANAGRAMS FOR `";A$;"'":LPRINT:LPRINT 591 LPRINT CHR$(27)+"H" 600 RETURN 610 IF N=1 THEN CLEAR :GOTO 20 620 CLEAR 630 GOTO 70