Deducir 4.1

Descripción del contenido de la página

Herramienta de inteligencia artificial para ZX Spectrum (versión 4.1).

Etiquetas:

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

Deducir

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

Descargas

Todas las versiones de Deducir se pueden descargar en la sección de descargas del programa.