Sudoku C64
Basic
Actualizado el 27 de Diciembre del 2019 por Adelino (27 códigos) (Publicado el 23 de Octubre del 2019)
10.201 visualizaciones desde el 23 de Octubre del 2019
Programa para Commodore 64.


10 POKE 53280,0: POKE 53281,0
20 PRINT CHR$(151) CHR$(147)
30 DEF FN X(Y)=PEEK(Q2+Y)+256*PEEK(Q1+Y)
40 X1=49152: X2=49408: X3=49664
50 Y1=49920: Y2=50176: Y3=50432
60 B1=50688: B2=50944
70 Q1=51200: Q2=51456
80 Q=1133
100 FOR V=0 TO 2
110 FOR W=0 TO 2: READ A$: Q=Q+62
120 FOR N=0 TO 2
130 FOR M=0 TO 2: IF C%>9 GOTO 150
140 POKE B2+C%+48,C%
145 POKE B2+C%,48+C%
150 POKE Q+41,91
160 POKE Q-1,66: POKE Q+1,66
170 POKE Q-40,67: POKE Q+40,67
180 IF V+W=0 THEN POKE Q-39,114
190 IF V+W=4 THEN POKE Q+41,113
200 IF N+M=0 THEN POKE Q+39,107
210 IF N+M=4 THEN POKE Q+41,115
220 A%=ASC(MID$(A$,3*N+M+1))
230 IF A%<49 THEN A%=32
240 POKE Q,A%
250 POKE Q+54272,1
260 POKE Q1+C%,Q/256
270 POKE Q2+C%,Q-256*INT(Q/256)
280 Q=Q+2
290 POKE Y1+C%,27*V+9*W
300 POKE Y2+C%,27*N+9*M
310 POKE Y3+C%,27*V+9*N
320 C%=C%+1
330 POKE X1+C%,0
340 POKE X2+C%,0
350 POKE X3+C%,0
360 NEXT M,N,W,V
370 POKE B2+32,10
380 POKE 1154,112: POKE 1172,110
390 POKE Q+21,109: POKE Q+39,125
400 REM ***** TECLADO *****
410 A%=0:C%=0
420 IF A%=29 AND C%<80 THEN C%=C%+1
430 IF A%=157 AND C%>0 THEN C%=C%-1
440 IF A%=17 AND C%<72 THEN C%=C%+9
450 IF A%=145 AND C%>8 THEN C%=C%-9
460 Q=FN X(C%)
470 IF A%>57 OR A%<48 AND A%<>32 GOTO 520
480 IF A%=48 THEN A%=32
490 POKE Q,A%
500 A%=29
510 GOTO 420
520 POKE Q,PEEK(Q)+128
530 GET A$: IF A$="" GOTO 530
540 POKE Q,PEEK(Q)-128
550 A%=ASC(A$)
560 IF A%<>13 GOTO 420
600 REM ***** VALIDAR *****
610 FOR V=0 TO 80: C%=V
620 Q=FN X(C%)
630 A%=PEEK(Q)-48
640 IF A%<0 GOTO 740
650 IF PEEK(X1+PEEK(Y1+C%)+A%) THEN A%=0
660 IF PEEK(X2+PEEK(Y2+C%)+A%) THEN A%=0
670 IF PEEK(X3+PEEK(Y3+C%)+A%) THEN A%=0
680 IF A%=0 THEN POKE Q,32: GOTO 740
690 POKE X1+PEEK(Y1+C%)+A%,1
700 POKE X2+PEEK(Y2+C%)+A%,1
710 POKE X3+PEEK(Y3+C%)+A%,1
720 POKE Q+54272,14
730 B(C%/27)=B(C%/27)+1
740 NEXT
750 REM ***** ORDENAR *****
760 FOR V=0 TO 2: N=0
770 FOR W=0 TO 2
780 IF B(W)>B(N) THEN N=W
790 NEXT
800 B(N)=-1
810 FOR W=27*N TO 27*N+26: C%=W
820 IF PEEK(FN X(C%))>48 GOTO 850
830 POKE B1+B%,C%
840 B%=B%+1
850 NEXT W,V
860 POKE 254,SGN(B%)
870 POKE B1+B%,255
880 GOTO 1020
1000 REM ***** RUTINA *****
1010 POKE Q,32
1020 IF PEEK(254)=0 THEN END
1030 POKE 254,PEEK(254)-1
1040 C%=PEEK(B1+PEEK(254))
1050 Q=FN X(C%)
1060 A%=PEEK(B2+PEEK(Q))
1070 POKE 251,PEEK(Y1+C%)+A%
1080 POKE 252,PEEK(Y2+C%)+A%
1090 POKE 253,PEEK(Y3+C%)+A%
1100 IF A%=10 GOTO 1170
1140 POKE X1+PEEK(251),0
1150 POKE X2+PEEK(252),0
1160 POKE X3+PEEK(253),0
1170 A%=A%-1
1180 IF A%=0 GOTO 1010
1190 POKE 251,PEEK(251)-1
1200 POKE 252,PEEK(252)-1
1210 POKE 253,PEEK(253)-1
1220 IF PEEK(X1+PEEK(251)) GOTO 1170
1230 IF PEEK(X2+PEEK(252)) GOTO 1170
1240 IF PEEK(X3+PEEK(253)) GOTO 1170
1250 POKE X1+PEEK(251),1
1260 POKE X2+PEEK(252),1
1270 POKE X3+PEEK(253),1
1280 POKE Q,PEEK(B2+A%)
1290 POKE 254,PEEK(254)+1
1295 C%=PEEK(B1+PEEK(254))
1300 IF C%<255 GOTO 1050
1310 GET A$: IF A$<>" " GOTO 1310
1320 GOTO 1030
1500 REM ***** DATOS *****
1510 DATA ....76...
1520 DATA 1...3874.
1530 DATA .7.......
1540 DATA ..4.6.5.1
1550 DATA .67...28.
1560 DATA 3.1.4.6..
1570 DATA .......1.
1580 DATA .2561...9
1590 DATA ...98....
No hay comentarios