#include<dos.h>
#include<time.h>
#include<stdio.h>
#include<conio.h>
char b[][9]={
"5.2......",
"....6.9..",
".........",
".41..7...",
"...5...6.",
"..5..2...",
".97.85...",
".......35",
".54....96"};
char far*q=(char far*)0xA0000000-3516;
char far*Q,E,A[]=" 123456789";
int G[3],B[81],C[81],X[81],Y[81];
int D[81],H[81],J[81],N[271];
int a,v,w,x,y,c=80;
void cifra(char F){
gotoxy(X[c],Y[c]);
printf("%c",F);
}
void cursor(F){
if(a) N[a+D[c]]=N[a+H[c]]=N[a+J[c]]=!F;
Q=q+2560*Y[c]+8*X[c];
for(v=15;v--;Q+=305)
for(w=15;w--;*Q++=*Q==F?!F:*Q);
}
int main(){
_AX=0x13;
geninterrupt(0x10);
time_t T;
do{
D[c]=(c/27*9+c%27/9*3)*10;
H[c]=(c%9/3*9+c%3*3+1)*10;
J[c]=(c/27*9+c%9/3*3+2)*10;
X[c]=c%9*2+12;
Y[c]=c/9*2+4;
Q=q+2560*Y[c]+8*X[c]-321;
for(w=16,a=3;a--;w*=3,Q-=321)
if(!c||a>1||c%27/9+c%3<a)
for(v=w+3-a+!a,w+=3*!a;v--;)
*(Q+v)=*(Q+v+320*w)=*(Q+320*v)=*(Q+320*v+w)=7;
if(B[c]=b[c/9][c%9]-46) cifra(A[B[c]-=2]);
}while(c--);
Inicio:
G[0]=G[1]=G[2]=E=a=c=y=0;
do{
if(E==80&&c<72) c+=9;
if(E==72&&c>8) c-=9;
if(E==77&&c<80) c++;
if(E==75&&c) c--;
cursor(0);
if(E==32||E>47&&E<58)
cifra(A[B[c]=E%16]),
E=77;
else do E=getch();
while(!E);
cursor(1);
}while(E!=13);
for(x=c=81;c--;)
if(a=B[c])
y+=v=N[a+D[c]]+N[a+H[c]]+N[a+J[c]]<1,
cifra(A[B[c]=a*=v]),
G[c/27]+=v,
cursor(!v);
while(x>y){
for(a=v=2;v--;a=G[a]>G[v]?v:a);
for(G[a]=w=27;w--;)
if(!B[c=27*a+w]) C[--x]=c;
}
T=time(NULL)-1;
while(y>=x)
switch(y){
case 81: printf("%c[23;11f%d",27,time(NULL)-T);
printf("%c Pulse una tecla\r",34);
while(kbhit()) getch();
if(getch()==27) return 0;
printf("%c[2K",27);
if(--y<x) break;
default: if(a=B[c=C[y]])
N[a+D[c]]=N[a+H[c]]=N[a+J[c]]=0;
while(N[++a+D[c]]||N[a+H[c]]||N[a+J[c]]);
cifra(A[B[c]=a%=10]);
y+=a?N[a+D[c]]=N[a+H[c]]=N[a+J[c]]=1:-1;
}
for(c=81;c--;) if(a=B[c]) cursor(1);
goto Inicio;
}
Comentarios sobre la versión: 3.4 (0)
No hay comentarios