Commodore Pet

The C&VG Solution (Basic) Listing

The code produced for C&VG magazine from the puzzles author, the output was on a black and white monitor and simple text formatting control codes were used to place text and simple images on the screen. The listing was expanded as it was compressed in the magazine - probably to reduce the page requirements for the article.

The Commodore PET was an early computer launched in 1977 - an 8 bit machine based on a MOS Technology 6502 chip. The machine was fitted with Basic in ROM so that users only had to load and save data by cassette tape. Memory options included 8Kb, 16Kb and 32Kb.

You will find in the code many characters that were built into the ROM set to control the position and movement of the cursor around the screen. Many computer, at the time had similar systems built in as pixel addressing was very limited and not used graphically.

Commodore PET Basic
                            
100 REM THEPUZZLE6 23SEPT1980
110 A$="M":B$="X":C$="X":D$="X":N=1:RD=0:RC=0:RB=0:RA=0:N4=0:N3=0:N2=0:N1=0
120 DIM A$(3), B$(3), D$(3)
130 I=0:SF=0:AR$="X"F=0:T=TI:S=0:FW$="
"
140 GOSUB 710
150 SF=SF+1: ON SF GOSUB 410,420,430,440,450,340: REM** SIX CARD LOCATIONS
160 FOR N1 = 0 TO 3: FOR N2 = 0 TO 3: FOR N3 = 0 TO 3: FOR N4 = 0 TO 3: REM*** 256 DATA PERMUTATIONS
170 A$ = A$(N1): B$ = B$(N2): C$ = C$(N3): D$ = D$(N4)
180 FOR A = 0 TO 3: FOR B = 0 TO 3: FOR C = 0 TO 3: FOR D = 0 TO 3: REM*** 256 ROTATIONS OF DATA
190 GET X$: IF X$ = "G" THEN GOSUB 490
200 IF MID$(A$,3,1) <> MID$(B$,8,1) THEN 290
210 IF MID$(A$,4,1) <> MID$(B$,7,1) THEN 290
220 IF MID$(B$,5,1) <> MID$(C$,2,1) THEN 290
230 IF MID$(B$,6,1) <> MID$(C$,1,1) THEN 290
240 IF MID$(C$,7,1) <> MID$(D$,4,1) THEN 290
250 IF MID$(C$,8,1) <> MID$(D$,3,1) THEN 290
260 IF MID$(D$,1,1) <> MID$(A$,6,1) THEN 290
270 IF MID$(D$,2,1) <> MID$(A$,5,1) THEN 290
280 GOSUB 460

290 N = N + 1
300 A$ = MID$(A$,3,6)+LEFT$(A$,2): NEXT RD: B$ = MID$(B$,3,6)+LEFT$(D$,2): NEXT RC
310 C$ = MID$(C$,3,6)+LEFT$(C$,2): NEXT RB: D$ = MID$(D$,3,6)+LEFT$(D$,2): NEXT RA
320 NEXT N4, N3, N2, N1
330 GOTO 150
340 GOSUB 470: PRINT "FINISHED IN "(TI-T)/360" MINUTES"
350 END

360 DATA 12315164, 54435262, 46743412, 14255463
370 DATA 23456545, 35414213, 35152452, 17214732
380 DATA 41172624, 23153665, 26365653, 62424647
390 DATA 56317164, 21134314, 25517471, 34325363

400 RESTORE: FOR I = 0 TO 3: READ A$(I),B$(I), C$(I), D$(I): NEXT I: AR$ = "ABCD" RETURN
410 RESTORE: FOR I = 0 TO 3: READ A$(I),B$(I), C$(I), D$(I): NEXT I: AR$ = "ABDC" RETURN
420 RESTORE: FOR I = 0 TO 3: READ A$(I),B$(I), C$(I), D$(I): NEXT I: AR$ = "ACBD" RETURN
430 RESTORE: FOR I = 0 TO 3: READ A$(I),B$(I), C$(I), D$(I): NEXT I: AR$ = "ADBC" RETURN
440 RESTORE: FOR I = 0 TO 3: READ A$(I),B$(I), C$(I), D$(I): NEXT I: AR$ = "ACDB" RETURN
450 RESTORE: FOR I = 0 TO 3: READ A$(I),B$(I), C$(I), D$(I): NEXT I: AR$ = "ADCB" RETURN

460 S = S + 1: PRINT ",
   SOLUTION!! PRESS 'C' TO CONT"
470 IF P$ = "P" THEN OPEN 4,4: CMD 4: F = 1: GOTO 490
480 GET X$: IF X£ <> "C" THEN 480
490 PRINT ""
500 PRINT ""N1""LEFT$(A$,2)""LEFT$(B$,2)"";
N2:PRINT "";
510 PRINT ""RIGHT$(A$,1)""MID$(A$,3,1)"";
520 PRINT RIGHT$(B$,1)""MID$(B$,3,1): PRINT "";
530 PRINT ""MID$(A$,7,1)""MID$(A$,4,1)"";
540 PRINT MID$(B$,7,1)""MID$(B$,4,1):PRINT">";
550 PRINT ""MID$(A$,6,1)MID$(A$,5,1)""LEFT$(AR$,1)""MID$(AR$,2,1);
560 PRINT ""MID$(6,1)MID$(B$,5,1):PRINT "";
570 PRINT ""+LEFT$(D$,2)""RIGHT$(AR$,1)""MID$(AR$,3,1)"";
580 PRINT LEFT$(C$2):PRINT "HOM>";
590 PRINT ""+RIGHT$(D$,1)""MID$(D$,3,1)""RIGHT$(C$,1)"";
600 PRIINT MID$(C$,3,1):PRINT "";
610 PRINT ""MID$(D$,7,1)""MID$(D$,4,1)""MID$C$,7,1)"";
620 PRINT MID$C$,4,1):PRINT "";
630 PRINT ""N4""MID$(D$,6,1)MID$(D$,5,1)"";
640 PRINT MID$(C$,6,1)MID$(C$,5,1)""N3
650 PRINT ""FW$N
660 PRINT ""FW$;INT((TI-T)/60/N*1000)/1000
670 PRINT ""FW$;S
690 IF P$ = "P" AND F = 1 THEN PRINT #4:CLOSE4
700 PRINT F = 0: PRINT "      ":RETURN
710 PRINT "     ** COMPUTER AND VIDEO GAMES **"
730 PRINT "OBJECT - TO ARRANGE THE FOUR OCTAGONS  "
740 PRINT "SO PATTERNS MATCH WHERE EDGES MEET?"
750 PRINT "CAN YOU WRITE A SHORT AND SIMPLE PROGRAM";
760 PRINT "   TO FIND EVERY SOLUTION QUICKLY ?     "
770 PRINT "I TAKE A WHILE TO TEST 393216 POSITIONS.";
780 PRINT "SO WHY DON'T YOU SPEND THE NEXT FEW "
790 PRINT "HOURS PROGRAMMING WHILE I BOW MY CHIPS"
800 PRINT "SOLVING IT THE LONG WAY ?": PRINT
810 PRINT "   YOU CAN SLOW ME DOWN EVEN MORE BY    "
820 PRINT "  PRESSING 'G' FOR THE CURRENT STATUS.  ":PRINT
830 PRINT " A.B.C.D. INDICATE THE CARD POSITION  "
840 PRINT "THE OUTSIDE O0 TO 3 INDICATE THE EDGE SET"
850 PRINT "I START WHEN YOU DECIDE IF YOU WANT"
860 PRINT "INPUT SOLUTIONS TO THE SCREEN OR PRINTER S/P   S";P$
870 PRINT IF P$ <> "S" AND P$ <> "P" THEN 860
880 PRINT "";
890 PRINT "    ** COMPUTER AND VIDEO GAMES **         ";
900 PRINT ""P$"    _____    _____                     ";
910 PRINT "     /    \     /      \                  ";
920 PRINT "    /      \   /        \    A PUZZLE     ";
930 PRINT "   |        |  |        |                 ";
940 PRINT "   |        |  |        |      FROM       ";
950 PRINT "   |        |  |        |                 ";
960 PRINT "   |        |  |        |    PENTANGLE    ";
970 PRINT "    \      /    \      /                  ";
980 PRINT "     \____/      \____/                   ";
990 PRINT "                                          ";
1000 PRINT "     ____        ____     THE            ";
1010 PRINT "    /    \      /    \       PUZZLE       "; 
1020 PRINT "   /      \    /      \            PEOPLE ";
1030 PRINT "   |       |  |        |                  ";
1040 PRINT "   |       |  |        |                  ";
1050 PRINT "   |       |  |        |                  ";
1060 PRINT "   |       |  |        |                  ";
1070 PRINT "    \     /    \      /                   ";
1080 PRINT "    \____/      \____/                    ";
1090 PRINT "                                          ";
1100 PRINT "                                          ";
1110 PRINT "                                          ";
1120 PRINT "    ** PRESS 'G' FOR CURRENT TEST **      ";
1130 RETURN