Deducir 4.0

Descripción del contenido de la página

Herramienta de inteligencia artificial para ZX Spectrum.

Etiquetas:

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

Deducir

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

Descargas

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

Páginas relacionadas

Núcleo de Deducir 4.x
Núcleo, escrito en Z80, de la versiones 4.x del programa Deducir, para ZX Spectrum.