-- Actualizado 17 Jul 2014, 06:58 --
Por cierto, no habia caído pero juntando líneas se pueden optimizar muchos bytes. El binario de ZX Spectrum ahora ocupa 398 bytes. No subo el zip porque podeís hacer un copy/paste desde aquí.
Código: Seleccionar todo
1 LET T=VAL "2":\
LET N=VAL "9":\
LET T$="\
OOO \
OOO \
OOO \
OOOOOOOOO\
OOOO.OOOO\
OOOOOOOOO\
OOO \
OOO \
OOO ":\
LET X=VAL "43"
3 PRINT AT NOT PI, NOT PI;"\{20}\{1} 123456789\{20}\{0}":\
FOR I=NOT PI TO N-SGN T:\
PRINT INVERSE SGN PI;\
CHR$ (I+CODE "1");\
INVERSE NOT PI;\
T$(I*N+SGN T TO I*N+N):\
NEXT I:\
IF NOT X THEN STOP
4 INPUT A$:\
IF LEN A$<>T+T THEN GOTO N
5 LET I=(VAL A$(SGN T)-SGN T)*N+VAL A$(T):\
LET J=(VAL A$(INT PI)-SGN T)*N+VAL A$(T+T):\
IF T$(I) <>"O"\
OR T$((I+J)/T)<>"O"\
OR T$(J) <>"."\
OR ( ABS(I-J)<>T \
AND ABS(I-J)<>N*T) THEN GOTO N
6 LET T$((I+J)/T)=".":\
LET T$(I)=".":\
LET T$(J)="O":\
LET X=X-SGN T
9 GOTO PI
-- Actualizado 17 Jul 2014, 10:03 --
Versión hiperoptimizada de 322 bytes
Código: Seleccionar todo
1 LET D=VAL "2":\
LET N=VAL "9":\
LET X=CODE "V":\
LET A$=" OOO ":\
LET T$="OOOOOOOOOOOOO":\
LET T$=A$+A$+A$+T$+"."+T$+A$+A$+A$
2 CLS: PRINT " 123456789":\
FOR I=SGN PI TO N:\
PRINT CHR$ (I+CODE "0");\
T$(I*N-N+SGN PI TO I*N):\
NEXT I:\
INPUT A$:\
IF SQR LEN A$=D THEN:\
LET I=N*VAL A$(SGN PI)-N+VAL A$(D):\
LET J=N*VAL A$(INT PI)-N+VAL A$(D+D):\
LET K= (I+J)/D:\
IF T$(I)+T$(K)+T$(J)="OO."\
AND ( ABS(I-J)=D \
OR ABS(I-K)=N) THEN LET T$(K)=".":\
LET T$(I)=".":\
LET T$(J)="O":\
LET X=X-D
0 GOTO D+NOT X
-- Actualizado 17 Jul 2014, 17:29 --
17 bytes menos, con un cambio muy tonto, en total se quedan en 305 bytes. No subo el archivo, tan sólo hay que pasarle el zmakebas poniendo un 3 en la línea que pone 0 y cambiar el número de línea en el binario. Tengo pendiente modificar zmakebas para que admita estas guarreridas. Ya lo tengo modificado para otras como mostrar un número en ascii distinto del binario, de tal forma que un número de 5 cifras ocupa 7 bytes (con VAL"num" ocupaba 8).
Código: Seleccionar todo
0 LET X=CODE "V":\
LET A$=" OOO ":\
LET N=LEN A$:\
LET D=INT LN N:\
LET T$="OOOOOOOOOOOOO":\
LET T$=A$+A$+A$+T$+"."+T$+A$+A$+A$
1 FOR I=SGN PI TO N:\
PRINT AT NOT PI, I; I;\
AT I, NOT PI; I; T$(I*N-N+SGN PI TO I*N):\
NEXT I:\
INPUT A$:\
IF SQR LEN A$=D THEN\
LET I=N*VAL A$(SGN PI)-N+VAL A$(D):\
LET J=N*VAL A$(INT PI)-N+VAL A$(D+D):\
LET K= (I+J)/D:\
IF T$(I)+T$(K)+T$(J)="OO." THEN\
IF ABS(I-J)=D\
OR ABS(I-K)=N THEN LET T$(K)=".":\
LET T$(I)=".":\
LET T$(J)="O":\
LET X=X-D
0 GOTO EXP NOT X
-- Actualizado 17 Jul 2014, 17:33 --
Hecho. http://sourceforge.net/p/emuscriptoria/ ... ZMakeBas.c