Deducir 4.1
Descripción del contenido de la página
Herramienta de inteligencia artificial para ZX Spectrum (versión 4.1).
Esta versión 4.1 de Deducir es una mejora de la versión 4.0 que permite guardar la sesión. Las instrucciones generales son válidas, con el añadido del comando grabar
; aparte pueden consultarse algunos detalles internos sobre esta versión,
Pantallazo
Código fuente
10 REM DEDUCIR 4.1
20 REM Copyright © 1987,2015 Marcos Cruz (programandala.net)
30 REM Licencia/Permesilo/License: http://programandala.net/lp
40:
50 DEF FN D(A)=DATOS+3*(A-1): DEF FN O(A)=OBJETI+4*(A-1)
60:
70 LET X=1: FOR C=1 TO 3: FOR N=X TO LEN O$: IF O$(N)<>" " THEN NEXT N
80 LET I$(C)=O$(X TO N-1): LET X=N+1: NEXT C
90 FOR C=0 TO 2: POKE BUFFER+C,0: FOR N=1 TO CO: IF I$(C+1)=C$(N) THEN POKE BUFFER+C,N: GO TO 120
100 NEXT N: IF CO=TC THEN BEEP 2,-30: FOR N=C TO 2: POKE BUFFER+N,2: NEXT N: RETURN
110 LET CO=CO+1: LET C$(CO)=I$(C+1): POKE BUFFER+C,CO
120 NEXT C: RETURN
130:
140 FOR C=0 TO 2: IF DA THEN LET X= PEEK ( FN D(DA)+C)
150 IF OB THEN LET X= PEEK ( FN O(OB)+C)
160 LET I$(C+1)=C$(X): NEXT C: LET DA=0: LET OB=0
170 FOR C=1 TO 3: FOR L=LC TO 1 STEP -1: IF I$(C,L)=" " THEN NEXT L
180 PRINT I$(C, TO L);" ";: NEXT C: PRINT : RETURN
190:
200 GO SUB 70: LET RESP= USR DEDUCE
210 IF RESP=FALSO THEN PRINT "NO HAY FORMA DE DEMOSTRARLO.": GO TO 640
220 PRINT "PUESTO QUE"
230 FOR S=1 TO PEEK NOBJET: LET D= PEEK ( FN O(S)+3): IF NOT D THEN GO TO 260
240 IF D=EVIDEN THEN LET OB=S: GO SUB 140: GO TO 260
250 LET DA=D: GO SUB 140:
260 NEXT S: LET OB=1: PRINT "ENTONCES ": GO SUB 140: GO TO 640
270:
280 GO SUB 70: LET RESP= USR DEDUCE
290 IF RESP=CIERTO THEN PRINT "YA LO SE"+(", PUEDO DEDUCIRLO" AND PEEK NOBJET>1)+".": GO TO 640
300 IF RESP=EVIDEN THEN PRINT "NO HACE FALTA QUE ME LO DIGAS.": GO TO 640
310 IF PEEK NDATOS=TD THEN BEEP 2,-30: GO TO 640
320 POKE NDATOS, PEEK NDATOS+1: LET D= FN D( PEEK NDATOS)
330 POKE D, PEEK BUFF2: POKE D+1, PEEK (BUFF2+1): POKE D+2, PEEK (BUFF2+2): GO TO 630
340:
350 GO SUB 70: IF PEEK (BUFFER+1)<>2 THEN GO TO 410
360:
370 IF PEEK BUFFER<3 THEN PRINT "NO PUEDO HACER ESO.": GO TO 640
380 FOR X= PEEK BUFFER TO CO-1: LET C$(X)=C$(X+1): NEXT X: LET CO=CO-1
390 RANDOMIZE USR OLVCON: GO TO 630
400:
410 LET RESP= USR DEDUCE
420 IF RESP=CIERTO AND PEEK NOBJET=1 THEN RANDOMIZE USR OLVDAT: GO TO 630
430 IF RESP=EVIDEN THEN PRINT "NO CREO QUE PUEDA HACERLO.": GO TO 640
440 IF RESP=FALSO THEN PRINT "NO CONOZCO ESE DATO.": GO TO 640
450 PRINT "ESE DATO SE DEDUCE DE LOS OTROS,POR LO QUE NO PUEDO OLVIDARLO.": GO TO 640
460:
470 IF NOT PEEK NDATOS THEN PRINT "NO CONOZCO NINGUN DATO": GO TO 640
480 FOR N=1 TO PEEK NDATOS: LET DA=N: GO SUB 140: NEXT N: GO TO 630
490:
500 LOAD "DED41X.BIN" CODE 47000
510 GO TO 610
520 CLEAR 46999: LOAD "DED40.BIN" CODE 47000,760
530 LET FALSO=0: LET CIERTO=1: LET EVIDEN=255: LET SER=1: LET TD=100
540 LET DEDUCE=47000: LET OLVDAT=47612: LET OLVCON=47675
550 LET NDATOS=47755: LET NOBJET=NDATOS+2: LET DATOS=NOBJET+2: LET BUFFER=DATOS+TD*3+250*3: LET BUFF2=BUFFER+4: LET OBJETI=BUFF2+3
560 LET LC=12: LET TC=100
570 DIM C$(TC,LC): DIM I$(3,LC)
580 LET CO=2: LET C$(SER)="SER": LET C$(2)=""
590 POKE NDATOS,0: LET DA=0: LET OB=0: LET IMP=0
600:
610 CLS : INK 7: PAPER 1: BORDER 1: CLS : PRINT "Deducir 4.1"'"Copyright ©1987,2015 Marcos Cruz"'"(programandala.net)"'"Licencia/Permesilo/License:"'"http://programandala.net/lp"'': GO TO 640
620:
630 PRINT "OK"
640 CLOSE # 2: POKE 23658,8: POKE 23692,255: LET O$="": PRINT "> ";
650 LET LO= LEN O$: LET C= CODE INKEY$
660 IF C=13 THEN PRINT : BEEP .1,30: GO TO 730
670 IF C=12 AND LO THEN PRINT CHR$ 8;" "; CHR$ 8;: LET O$=O$( TO LO-1): GO TO 710
680 IF C<32 OR C>122 THEN GO TO 650
690 IF C=32 THEN IF LO THEN IF O$(LO)=" " THEN GO TO 650
700 LET O$=O$+ CHR$ C: PRINT CHR$ C;
710 BEEP .04,5: GO TO 650
720:
730 IF IMP THEN OPEN # 2,"P": PRINT "> ";O$
740 IF NOT LO THEN GO TO 630
750 IF O$(LO)="?" THEN LET O$=O$( TO LO-1): GO TO 200
760 IF O$(LO)="." THEN LET O$=O$( TO LO-1): GO TO 280
770 IF O$="RESET" THEN RUN 530
780 IF LO>7 THEN IF O$( TO 7)="OLVIDA " THEN LET O$=O$(8 TO ): GO TO 350
790 IF O$="PANTALLA" THEN CLOSE # 2: LET IMP=0: GO TO 630
800 IF O$="IMPRESORA" THEN OPEN # 2,"P": LET IMP=1: GO TO 610
810 IF O$="DATOS" THEN GO TO 470
820 IF O$="CONCEPTOS" THEN FOR C=1 TO CO STEP 2: PRINT C$(C),C$(C+1) AND (C<CO): NEXT C: GO TO 630
830 IF O$="GRABAR" THEN GO TO 870
840 IF O$(LO)<>";" THEN PRINT "PERDON?"
850 GO TO 640
860:
870 SAVE "DED41X.BAS" LINE 500
880 SAVE "DED41X.BIN" CODE DEDUCE,DATOS+ PEEK NDATOS*3-DEDUCE
890 GO TO 630
900:
910 CLEAR : SAVE "DED41.BAS" LINE 520
920 RUN 520