mirror of
https://github.com/DutchMaker/Apple-1-Mini.git
synced 2024-12-03 06:52:11 +00:00
113 lines
2.7 KiB
Plaintext
113 lines
2.7 KiB
Plaintext
LOMEM=768
|
|
10 DIM A$(81),B$(81),C$(81),D$(9)
|
|
20 PRINT "LARRY NELSON'S SUDOKU FOR THE APPLE I"
|
|
30 PRINT: INPUT"WANT INSTRUCTIONS",D$:IF D$(1,1)="Y" THEN GOSUB 1000
|
|
40 PRINT"CREATING..";
|
|
50 GOSUB 4000
|
|
60 GOSUB 5000
|
|
70 GOSUB 3000
|
|
80 GOSUB 7000
|
|
90 GOSUB 6100
|
|
100 PRINT " 1=NEW PUZZLE": PRINT" 2=ANSWER TO PUZZLE": PRINT" 3=QUIT"
|
|
110 INPUT A
|
|
120 IF A=1 THEN 40
|
|
130 IF A=2 THEN GOSUB 6000
|
|
140 IF A=3 THEN END
|
|
150 GOTO 100
|
|
1000 PRINT"SUDOKU IS A NUMBER PUZZLE IN A 9X9 GRID."
|
|
1010 PRINT"THE GRID IS SPLIT INTO 9 3X3 MINI-GRIDS."
|
|
1020 PRINT"SINGLE DIGITS FILL THE GRID. THE DIGITS"
|
|
1040 PRINT"MAY BE IN ANY ORDER. THERE ARE JUST"
|
|
1050 PRINT"THREE RULES FOR SOLVING THE GRID--"
|
|
1060 PRINT"-EACH ROW MUST HAVE ALL THE DIGITS 1-9."
|
|
1070 PRINT"-EACH COLUMN HAS ALL THE DIGITS 1-9."
|
|
1080 PRINT"-EACH MINI-GRID MUST ALSO HAVE ALL THE"
|
|
1090 PRINT" DIGITS FROM 1-9."
|
|
1100 PRINT:INPUT" HIT ENTER TO CONTINUE",D$
|
|
1110 RETURN
|
|
3000 PRINT ".";
|
|
3010 A$=B$
|
|
3020 FOR I=1 TO 7 STEP 3
|
|
3030 X=RND(6)
|
|
3040 IF X=0 THEN 3160
|
|
3050 Y=0:Z=2
|
|
3060 IF X=1 THEN Y=1
|
|
3070 IF X=3 THEN Z=1
|
|
3080 GOSUB 3400
|
|
3090 IF X<4 THEN 3160
|
|
3100 IF X=5 THEN 3130
|
|
3110 Z=1:GOSUB 3400
|
|
3120 GOTO 3160
|
|
3130 Y=1:GOSUB 3400
|
|
3160 NEXT I
|
|
3170 B$=A$
|
|
3180 RETURN
|
|
3400 FOR J=0 TO 8
|
|
3410 C$=A$
|
|
3420 W=9*J+I+Y:V=9*J+I+Z
|
|
3430 A$(W)=C$(V,V)
|
|
3440 A$(W+1)=C$(W+1)
|
|
3450 A$(V)=C$(W,W)
|
|
3460 IF V<81 THEN A$(V+1)=C$(V+1)
|
|
3470 NEXT J
|
|
3480 RETURN
|
|
4000 PRINT ".";
|
|
4010 A$="123456789"
|
|
4020 FOR I=1 TO 30:D$=""
|
|
4030 X=RND(8)+1:Y=RND(8)+2
|
|
4035 IF X>=Y THEN 4030
|
|
4040 B$=A$(Y,Y):C$=A$(X,X)
|
|
4050 IF X>1 THEN D$=A$(1,X-1)
|
|
4060 D$(LEN(D$)+1)=B$
|
|
4070 D$(LEN(D$)+1)=A$(X+1,Y-1)
|
|
4080 D$(LEN(D$)+1)=C$
|
|
4090 IF Y<9 THEN D$(LEN(D$)+1)=A$(Y+1,9)
|
|
4100 A$=D$
|
|
4110 NEXT I
|
|
4120 RETURN
|
|
5000 PRINT".";
|
|
5010 A$(LEN(A$)+1)=A$:B$=""
|
|
5020 FOR I=0 TO 2
|
|
5030 FOR J=1 TO 7 STEP 3
|
|
5040 B$(LEN(B$)+1)=A$(I+J,I+J+8)
|
|
5050 NEXT J,I
|
|
5060 RETURN
|
|
6000 REM
|
|
6010 INPUT "ARE YOU SURE YOU WANT THE ANSWER (Y/N)",D$
|
|
6020 IF D$#"Y" THEN RETURN
|
|
6030 A$=B$
|
|
6100 PRINT : PRINT "====================================="
|
|
6110 FOR J=0 TO 8
|
|
6120 PRINT "#";
|
|
6130 FOR I=1 TO 9:K=9*J+I
|
|
6140 PRINT " ";A$(K,K);" ";
|
|
6150 IF I MOD 3=0 THEN PRINT "#";
|
|
6160 IF I MOD 3>0 THEN PRINT ":";
|
|
6170 NEXT I
|
|
6175 PRINT
|
|
6180 IF (J+1) MOD 3>0 THEN PRINT"-------------------------------------"
|
|
6190 IF (J+1) MOD 3=0 THEN PRINT"====================================="
|
|
6200 NEXT J
|
|
6210 PRINT
|
|
6220 INPUT "HIT ENTER TO CONTINUE",D$
|
|
6230 RETURN
|
|
7000 REM
|
|
7010 A$=B$
|
|
7020 PRINT "HOW DIFFICULT DO YOU WANT YOUR PUZZLE":PRINT " 1=EASY": PRINT " 2=MEDIUM": PRINT " 3=HARD"
|
|
7030 INPUT A
|
|
7040 IF A<1 OR A>3 THEN 7020
|
|
7050 W=2*A+20+RND(2)
|
|
7060 FOR I=1 TO W
|
|
7070 X= RND (81)+1
|
|
7080 IF A$(X,X)=" " THEN 7070
|
|
7090 GOSUB 7500
|
|
7100 X=82-X
|
|
7110 GOSUB 7500
|
|
7120 NEXT I
|
|
7130 RETURN
|
|
7500 C$=A$
|
|
7510 A$(X)=" "
|
|
7520 IF X<81 THEN A$(X+1)=C$(X+1)
|
|
7530 RETURN
|
|
RUN
|