Deducir 4.0
Descripción del contenido de la página
Herramienta de inteligencia artificial para ZX Spectrum (versión 4.0).
Esta versión 4.0 de Deducir tiene la ventaja de ser muchísimo más rápida que la versión anterior escrita en BASIC, gracias a su núcleo reescrito en Z80. Leánse las instrucciones en la página principal.
Pantallazo
Código fuente
10 REM Deducir 4.0
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 POKE 23658,8: POKE 23692,255: LET O$="": LET LO=0: PRINT " > ";
210 LET LO= LEN O$: LET C= CODE INKEY$
220 IF C=13 THEN PRINT : BEEP .1,30: RETURN
230 IF C=12 AND LO THEN PRINT CHR$ 8;" "; CHR$ 8;: LET O$=O$( TO LO-1): GO TO 270
240 IF C<32 OR C>122 THEN GO TO 210
250 IF C=32 THEN IF LO THEN IF O$(LO)=" " THEN GO TO 210
260 LET O$=O$+ CHR$ C: PRINT CHR$ C;
270 BEEP .04,5: GO TO 210
280:
290 GO SUB 70: LET RESP= USR DEDUCE
300 IF RESP=FALSO THEN PRINT "NO HAY FORMA DE DEMOSTRARLO.": GO TO 730
310 PRINT "PUESTO QUE"
320 FOR S=1 TO PEEK NOBJET: LET D= PEEK ( FN O(S)+3): IF NOT D THEN GO TO 350
330 IF D=EVIDEN THEN LET OB=S: GO SUB 140: GO TO 350
340 LET DA=D: GO SUB 140:
350 NEXT S: LET OB=1: PRINT "ENTONCES ": GO SUB 140: GO TO 730
360:
370 IF PEEK NDATOS=TD THEN BEEP 2,-30: GO TO 730
380 GO SUB 70: LET RESP= USR DEDUCE
390 IF RESP=CIERTO THEN PRINT "YA LO SE"+(", PUEDO DEDUCIRLO" AND PEEK NOBJET>1)+".": GO TO 730
400 IF RESP=EVIDEN THEN PRINT "NO HACE FALTA QUE ME LO DIGAS.": GO TO 730
410 IF PEEK NDATOS=TD THEN BEEP 2,-30: GO TO 730
420 POKE NDATOS, PEEK NDATOS+1: LET D= FN D( PEEK NDATOS)
430 POKE D, PEEK BUFF2: POKE D+1, PEEK (BUFF2+1): POKE D+2, PEEK (BUFF2+2): GO TO 720
440:
450 GO SUB 70: IF PEEK (BUFFER+1)<>2 THEN GO TO 520
460:
470 LET I$(1)=O$: LET O$=I$(1): FOR N=1 TO CO: IF C$(N)<>O$ THEN NEXT N
480 IF N<3 THEN PRINT "NO PUEDO HACER ESO.": GO TO 730
490 FOR X=N TO CO-1: LET C$(X)=C$(X+1): NEXT X: LET CO=CO-1
500 POKE BUFFER,N: RANDOMIZE USR OLVCON: GO TO 720
510:
520 LET RESP= USR DEDUCE
530 IF RESP=CIERTO AND PEEK NOBJET=1 THEN RANDOMIZE USR OLVDAT: GO TO 720
540 IF RESP=EVIDEN THEN PRINT "NO CREO QUE PUEDA HACERLO.": GO TO 730
550 IF RESP=FALSO THEN PRINT "NO CONOZCO ESE DATO.": GO TO 730
560 PRINT "ESE DATO SE DEDUCE DE LOS OTROS,POR LO QUE NO PUEDO OLVIDARLO.": GO TO 730
570:
580 IF NOT PEEK NDATOS THEN PRINT "NO CONOZCO NINGUN DATO": GO TO 730
590 FOR N=1 TO PEEK NDATOS: LET DA=N: GO SUB 140: NEXT N: GO TO 720
600:
610 CLEAR 46999: LOAD "DED40.BIN" CODE 47000,760
620 LET FALSO=0: LET CIERTO=1: LET EVIDEN=255: LET SER=1: LET TD=100
630 LET DEDUCE=47000: LET OLVDAT=47612: LET OLVCON=47675
640 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
650 LET LC=12: LET TC=100
660 DIM C$(TC,LC): DIM I$(3,LC)
670 LET CO=2: LET C$(SER)="SER": LET C$(2)=""
680 POKE NDATOS,0: LET DA=0: LET OB=0
690:
700 CLS : INK 7: PAPER 1: BORDER 1: CLS : PRINT "Deducir 4.0"'"Copyright © 1987,2015"'"Marcos Cruz (programandala.net)"'"Licencia/Permesilo/License:"'"http://programandala.net/lp"'': GO TO 730
710:
720 PRINT "OK"
730 GO SUB 200: IF NOT LO THEN GO TO 720
740 IF O$(LO)="?" THEN LET O$=O$( TO LO-1): GO TO 290
750 IF O$(LO)="." THEN LET O$=O$( TO LO-1): GO TO 370
760 IF O$="RESET" THEN RUN 620
770 IF LO>7 THEN IF O$( TO 7)="OLVIDA " THEN LET O$=O$(8 TO ): GO TO 450
780 IF O$="PANTALLA" THEN CLOSE # 2: GO TO 720
790 IF O$="IMPRESORA" THEN OPEN # 2,"P": GO TO 700
800 IF O$="DATOS" THEN GO TO 580
810 IF O$="CONCEPTOS" THEN FOR C=1 TO CO STEP 2: PRINT C$(C),C$(C+1) AND (C<CO): NEXT C: GO TO 720
820 PRINT "PERDON?": GO TO 730
830:
840 CLEAR : SAVE "DED40.BAS" LINE 610: RUN 610