1 CLS 10 PRINT "INSTRUCTIONS" 20 PRINT "WHEN YOU ARE ASKED FOR THE NUMBER OF MIXES, ENTER THE NUMBER OF" 30 PRINT "RANDOM FACE ROTATIONS YOU DESIRE" : PRINT 40 PRINT " WHEN YOU ARE ASKED FOR YOUR MOVE, ENTER THE DESIGNATION OF THE " 50 PRINT " FACE: F=FRONT, B=BACK, L=LEFT, R=RIGHT,T=TOP, B=BOTTOM 60 PRINT" AND THE AMOUNT OF ROTATION, += CLOCKWIZE 1, -=COUNTERCLOCKWIZE 1" 70 PRINT " 2= 180 DEGREES" 80 PRINT " SEE THE ARTICLE IN KILOBAUD JANUARY 1982 PAGE 28" 90 PRINT " THIS VERSION WAS EXTENSIVELY CONVERTED TO RUN ON THE ibm" 100 PRINT "I CAN'T FIGURE WHY THEY USED SUCH A LARGE ARRAY TO STORE THE CUBE" 101 PRINT " LINE 730 PRINTS THE RANDOM MIX MOVES SO THAT YOU CAN " 102 PRINT " CHEAT AND SOLVE THE CUBE. COMMENT THIS LINE OUT TO BE HONEST" 110 PRINT "PRESS ANY KEY TO CONTINUE" 120 B$=INKEY$:IF B$="" THEN GOTO 120 130 CLS 140 SCREEN 2 150 DRAW "BL120M-120,-20D60M+120,20U60M+120,-20D60M-120,20U20M-120,-20U20" 160 DRAW "M+120,20M+120,-20D20M-120,20D20M-40,-7U60M+120,-20M+40,+7M-120,-20" 170 DRAW "M-120,20D60M+40,+7U60M+120,-20M-40,-7M-40,+7M+120,+20D60M-40,+7U60" 180 DRAW "M-120,-20" 190 DRAW "BR360BD45" 200 DRAW "A2M-120,-20D60M+120,20U60M+120,-20D60M-120,20U20M-120,-20U20" 210 DRAW "M+120,20M+120,-20D20M-120,20D20M-40,-7U60M+120,-20M+40,+7M-120,-20" 220 DRAW "M-120,20D60M+40,+7U60M+120,-20M-40,-7M-40,+7M+120,+20D60M-40,+7U60" 230 DRAW "M-120,-20A0" 240 OP$="D6R5U6L5":YP$="F3E3G3D3":RP$="D6U6R5D3L5R3F4":WP$="D6E3F3U6" 250 BP$="D6R5U3L5R5U3L5":GP$="R5D1U1L5D6R5U2L1" 260 DIM OA%(5),YA%(5),RA%(5),WA%(5),BA%(5),GA%(5) 270 DRAW "BM1,1;XOP$;":GET(1,1)-(7,8),OA% :PUT(1,1),OA% 280 DRAW "BM1,1;XYP$;":GET(1,1)-(7,8),YA% :PUT(1,1),YA% 290 DRAW "BM1,1;XRP$;":GET(1,1)-(7,8),RA% :PUT(1,1),RA% 300 DRAW "BM1,1;XWP$;":GET(1,1)-(7,8),WA% :PUT(1,1),WA% 310 DRAW "BM1,1;XBP$;":GET(1,1)-(7,8),BA% :PUT(1,1),BA% 320 DRAW "BM1,1;XGP$;":GET(1,1)-(7,8),GA% :PUT(1,1),GA% 330 DATA 478,149,518,143,557,136,437,142,478,136,518,129,396,136,437,129,478 340 DATA 123 350 DATA 177,144,177,124,177,104,137,137,137,117,137,97,97,131,97,111,97,91 360 DATA 217,144,217,124,217,104,257,137,257,117,257,97,297,131,297,111,297,91 370 DATA 197,90,157,84,117,77,237,84,197,77,157,71,277,77,237,71,197,64 380 DATA 376,123,376,103,376,83,416,117,416,97,416,77,456,110,456,90,456,70 390 DATA 577,123,577,103,577,83,537,117,537,97,537,77,496,110,496,90,496,70 400 DIM R$(5,5,5),R1$(5,5,5),A$(5,5),B$(5,5),C$(5,5),D$(5,5) 410 LLL=0 420 FOR I=1 TO 5: FOR J=1 TO 5: FOR K=1 TO 5 430 R$(I,J,K)="" 440 NEXT K: NEXT J: NEXT I 450 FOR I=2 TO 4:FOR J=2 TO 4 460 R$(1,I,J)="R":R$(I,1,J)="W":R$(I,J,1)="G" 470 R$(5,I,J)="O":R$(I,5,J)="B":R$(I,J,5)="Y" 480 NEXT J: NEXT I 490 REM 500 REM MIX RUBIK'S CUB 510 REM 520 INPUT "INPUT NUMBER OF MIXES";N 530 Z$="" 540 FOR I=1 TO N 550 X%= INT(6*RND(1)):Y%= INT(3*RND(1)) 560 IF X%<>0 THEN 580 570 X$="R":GOTO 670 580 IF X%<>1 THEN 600 590 X$="F": GOTO 670 600 IF X%<>2 THEN 620 610 X$="L": GOTO 670 620 IF X%<>3 THEN 640 630 X$="U": GOTO 670 640 IF X%<>4 THEN 660 650 X$="B": GOTO 670 660 X$="D" 670 IF Y%<>0 THEN 690 680 Y$="+": GOTO 720 690 IF Y%<>1 THEN 710 700 Y$="-": GOTO 720 710 Y$="2" 720 Z$=Z$+X$+Y$ 730 PRINT Z$ 740 NEXT I 750 GOSUB 920 760 GOSUB 2470 770 REM 780 REM CHANGE RUBIK'S CUBE 790 REM 800 LOCATE 1,1 810 PRINT " " 820 PRINT " " 830 LLL=1 840 LOCATE 1,1 850 INPUT "INPUT MOVE";Z$ 860 GOSUB 920 870 GOSUB 2470 880 GOTO 800 890 REM 900 REM PERFORM MOVES 910 REM 920 'FOR I=1 TO 5: FOR J=1 TO 5: FOR K=1 TO 5 930 'R1$(I,J,K)=R$(I,J,K) 940 'NEXT K: NEXT J: NEXT I 950 IF Z$="" THEN RETURN 960 X$=MID$(Z$,1,1) 970 IF X$="S" THEN 2780 980 IF X$="M" THEN 1670 990 REM 1000 REM MOVE FACES 1010 REM 1020 Y$=MID$(Z$,2,1) 1030 IF X$<>"R" THEN 1130 1040 FOR I=1 TO 5:FOR J=1 TO 5 1050 A$(I,J)=R$(I,1,J):B$(I,J)=R$(I,2,J) 1060 NEXT J: NEXT I 1070 GOSUB 2140 1080 IF E=1 THEN 2090 1090 FOR I=1 TO 5: FOR J=1 TO 5 1100 R$(I,1,J)=A$(I,J):R$(I,2,J)=B$(I,J) 1110 NEXT J: NEXT I 1120 GOTO 1620 1130 IF X$<>"F" THEN 1230 1140 FOR I=1 TO 5: FOR J=1 TO 5 1150 A$(I,J)=R$(1,I,J):B$(I,J)=R$(2,I,J) 1160 NEXT J: NEXT I 1170 GOSUB 2220 1180 IF E=1 THEN 2090 1190 FOR I=1 TO 5: FOR J=1 TO 5 1200 R$(1,I,J)=A$(I,J): R$(2,I,J)=B$(I,J) 1210 NEXT J: NEXT I 1220 GOTO 1620 1230 IF X$<>"L" THEN 1330 1240 FOR I=1 TO 5:FOR J=1 TO 5 1250 A$(I,J)=R$(I,5,J):B$(I,J)=R$(I,4,J) 1260 NEXT J: NEXT I 1270 GOSUB 2220 1280 IF E=1 THEN 2090 1290 FOR I=1 TO 5: FOR J=1 TO 5 1300 R$(I,5,J)=A$(I,J): R$(I,4,J)=B$(I,J) 1310 NEXT J: NEXT I 1320 GOTO 1620 1330 IF X$<>"B" THEN 1430 1340 FOR I=1 TO 5: FOR J=1 TO 5 1350 A$(I,J)=R$(5,I,J): B$(I,J)=R$(4,I,J) 1360 NEXT J: NEXT I 1370 GOSUB 2140 1380 IF E=1 THEN 2090 1390 FOR I=1 TO 5: FOR J=1 TO 5 1400 R$(5,I,J)=A$(I,J): R$(4,I,J)=B$(I,J) 1410 NEXT J: NEXT I 1420 GOTO 1620 1430 IF X$<>"U" THEN 1530 1440 FOR I=1 TO 5: FOR J=1 TO 5 1450 A$(I,J)=R$(I,J,5): B$(I,J)=R$(I,J,4) 1460 NEXT J: NEXT I 1470 GOSUB 2140 1480 IF E=1 THEN 2090 1490 FOR I=1 TO 5: FOR J=1 TO 5 1500 R$(I,J,5)=A$(I,J): R$(I,J,4)=B$(I,J) 1510 NEXT J: NEXT I 1520 GOTO 1620 1530 IF X$<>"D" THEN 2090 1540 FOR I=1 TO 5: FOR J=1 TO 5 1550 A$(I,J)=R$(I,J,1):B$(I,J)=R$(I,J,2) 1560 NEXT J: NEXT I 1570 GOSUB 2220 1580 IF E=1 THEN 2090 1590 FOR I=1 TO 5: FOR J=1 TO 5 1600 R$(I,J,1)=A$(I,J):R$(I,J,2)=B$(I,J) 1610 NEXT J: NEXT I 1620 Z$=MID$(Z$,3) 1630 GOTO 950 1640 REM 1650 REM CHANGE VIEWING CORNERS 1660 REM 1670 X$=MID$(Z$,2,1):Y$=MID$(Z$,3,1) 1680 S$=MID$(Z$,4,1) 1690 IF S$<>"1" AND S$<>"2" AND S$<>"3" THEN 2090 1700 N=VAL(S$) 1710 IF X$<>"F" THEN 1960 1720 IF Y$<>"R" THEN 1840 1730 Z$=MID$(Z$,5) 1740 FOR K=1 TO N 1750 Z$="U-D+"+"Z$ 1760 FOR I=1 TO 5: FOR J=1 TO 5 1770 A$(I,J)=R$(I,J,3) 1780 NEXT J: NEXT I 1790 FOR I=1 TO 5: FOR J=1 TO 5 1800 R$(6-J,I,3)=A$(I,J) 1810 NEXT J: NEXT I 1820 NEXT K 1830 GOTO 950 1840 IF Y$<>"U" THEN 2090 1850 Z$=MID$(Z$,5) 1860 FOR K=1 TO N 1870 Z$="R+L-"+Z$ 1880 FOR I=1 TO 5: FOR J=1 TO 5 1890 A$(I,J)=R$(I,3,J) 1900 NEXT J: NEXT I 1910 FOR I=1 TO 5: FOR J=1 TO 5 1920 R$(J,3,6-I)=A$(I,J) 1930 NEXT J: NEXT I 1940 NEXT K 1950 GOTO 950 1960 IF X$<>"U" THEN 2090 1970 IF Y$<>"R" THEN 2090 1980 Z$=MID$(Z$,5) 1990 FOR K=1 TO N 2000 Z$="F+B-"+Z$ 2010 FOR I=1 TO 5: FOR J=1 TO 5 2020 A$(I,J)=R$(3,I,J) 2030 NEXT J: NEXT I 2040 FOR I=1 TO 5: FOR J=1 TO 5 2050 R$(3,6-J,I)=A$(I,J) 2060 NEXT J: NEXT I 2070 NEXT K 2080 GOTO 950 2090 PRINT "INVALID MOVE, TRY AGAIN. " 2100 'FOR I=1 TO 5: FOR J=1 TO 5: FOR K=1 TO 5 2110 'R$(I,J,K)=R1$(I,J,K) 2120 'NEXT K: NEXT J: NEXT I 2130 RETURN 2140 E=0 2150 IF Y$<>"+" THEN 2170 2160 GOSUB 2370: RETURN 2170 IF Y$<>"-" THEN 2190 2180 GOSUB 2300: RETURN 2190 IF Y$<>"2" THEN 2210 2200 GOSUB 2300: GOSUB 2300: RETURN 2210 E=1: RETURN 2220 E=0 2230 IF Y$<>"+" THEN 2250 2240 GOSUB 2300: RETURN 2250 IF Y$<>"-" THEN 2270 2260 GOSUB 2370: RETURN 2270 IF Y$<>"2" THEN 2290 2280 GOSUB 2300: GOSUB 2300: RETURN 2290 E=1: RETURN 2300 FOR I=1 TO 5: FOR J=1 TO 5 2310 C$(I,J)=A$(I,J): D$(I,J)=B$(I,J) 2320 NEXT J: NEXT I 2330 FOR I=1 TO 5: FOR J=1 TO 5 2340 A$(6-J,I)=C$(I,J):B$(6-J,I)=D$(I,J) 2350 NEXT J: NEXT I 2360 RETURN 2370 FOR I=1 TO 5: FOR J=1 TO 5 2380 C$(I,J)=A$(I,J): D$(I,J)=B$(I,J) 2390 NEXT J: NEXT I 2400 FOR I=1 TO 5: FOR J=1 TO 5 2410 A$(J,6-I)=C$(I,J): B$(J,6-I)=D$(I,J) 2420 NEXT J: NEXT I 2430 RETURN 2440 REM 2450 REM PRINT RUBIK'S CUBE 2460 REM 2470 RESTORE 330 2480 FOR K=1 TO 5 STEP 4 2490 FOR I=2 TO 4: FOR J=2 TO 4 2500 READ POSA%,POSB% 2510 IF R$(I,J,K)="R" THEN PUT (POSA%,POSB%),RA% ,PSET 2520 IF R$(I,J,K)="Y" THEN PUT (POSA%,POSB%),YA% ,PSET 2530 IF R$(I,J,K)="G" THEN PUT (POSA%,POSB%),GA% ,PSET 2540 IF R$(I,J,K)="B" THEN PUT (POSA%,POSB%),BA% ,PSET 2550 IF R$(I,J,K)="W" THEN PUT (POSA%,POSB%),WA% ,PSET 2560 IF R$(I,J,K)="O" THEN PUT (POSA%,POSB%),OA% ,PSET 2570 NEXT J: NEXT I 2580 FOR I=2 TO 4: FOR J=2 TO 4 2590 READ POSA%,POSB% 2600 IF R$(K,I,J)="R" THEN PUT (POSA%,POSB%),RA% ,PSET 2610 IF R$(K,I,J)="Y" THEN PUT (POSA%,POSB%),YA% ,PSET 2620 IF R$(K,I,J)="G" THEN PUT (POSA%,POSB%),GA% ,PSET 2630 IF R$(K,I,J)="B" THEN PUT (POSA%,POSB%),BA% ,PSET 2640 IF R$(K,I,J)="W" THEN PUT (POSA%,POSB%),WA% ,PSET 2650 IF R$(K,I,J)="O" THEN PUT (POSA%,POSB%),OA% ,PSET 2660 NEXT J: NEXT I 2670 FOR I=2 TO 4: FOR J=2 TO 4 2680 READ POSA%,POSB% 2690 IF R$(I,K,J)="R" THEN PUT (POSA%,POSB%),RA% ,PSET 2700 IF R$(I,K,J)="Y" THEN PUT (POSA%,POSB%),YA% ,PSET 2710 IF R$(I,K,J)="G" THEN PUT (POSA%,POSB%),GA% ,PSET 2720 IF R$(I,K,J)="B" THEN PUT (POSA%,POSB%),BA% ,PSET 2730 IF R$(I,K,J)="W" THEN PUT (POSA%,POSB%),WA% ,PSET 2740 IF R$(I,K,J)="O" THEN PUT (POSA%,POSB%),OA% ,PSET 2750 NEXT J: NEXT I 2760 NEXT K 2770 RETURN 2780 PRINT "THANK YOU FOR PLAYING. " 2790 END N PUT (POSA%,POSB%),OA% ,PSET 2750 NEXT J: NEXT I 2760 N