#include<dos.h>
#include<time.h>
#include<stdio.h>
#include<conio.h>
int main()
{
_AX=0x13;
geninterrupt(0x10);
time_t t1,t2;
char far*p=(char far*)0xA0000000L;
char E=0,D[]=" 123456789 ";
int a,c,c1,c2,c3,c4,X,Y,A;
int b[81],x[81],y[81];
int N1[9][10],N2[9][10],N3[9][10];
int n1[81],n2[81],n3[81];
int C[82],f[3],g[3],h[]={16,48,147};
int e[]={5,0,2,0,0,0,0,0,0,
0,0,0,0,6,0,9,0,0,
0,0,0,0,0,0,0,0,0,
0,4,1,0,0,7,0,0,0,
0,0,0,5,0,0,0,6,0,
0,0,5,0,0,2,0,0,0,
0,9,7,0,8,5,0,0,0,
0,0,0,0,0,0,0,3,5,
0,5,4,0,0,0,0,9,6};
Inicio:
for(c=c1=0;c1<3;c1++)
for(g[f[c1]=c1]=c2=0;c2<3;c2++)
for(c3=0;c3<3;c3++)
for(c4=0;c4<3;c4++){N1[c/9][c%9+1]=N2[c/9][c%9+1]=N3[c/9][c%9+1]=0;
x[c]=12+c%9*2;
y[c]=4+c/9*2;
printf("%c[%u;%uf%c",27,y[c],x[c],D[e[c]]);
n1[c]=3*c1+c2;
n2[c]=3*c3+c4;
n3[c]=3*c1+c3;
X=8*x[c]+2560*y[c]-3852;
a=b[c++]=0;
if(!E)
do for(X-=321,Y=-1;Y++<h[a]+(a==1);){*(p+X+Y)=7;
*(p+X+320*Y)=7;
*(p+X+Y+320*h[a])=7;
*(p+X+320*Y+h[a])=7;
}
while(++a==1&&c2+c4<1||a==2&&c1+c2+c3+c4<1);
else for(X-=321,Y=16;--Y;) for(X+=320,A=16;--A;)
if(*(p+X+A)<2) *(p+X+A)=0;
}
while(kbhit()) getch();
E=c=0;
while(E!=13){X=8*x[c]+2560*y[c]-4173;
for(Y=17;--Y;) for(X+=320,A=16;--A;)
if(!*(p+X+A)) *(p+X+A)=1;
if(E>47&&E<58){printf("%c[%u;%uf%c",27,y[c],x[c],D[e[c]=E-48]);
E=77;
}
else E=getch();
if(E==27) return 0;
for(Y=16;--Y;) for(X-=320,A=16;--A;)
if(*(p+X+A)<2) *(p+X+A)=0;
c+=E==77&&c<80;
c-=E==75&&c>0;
c+=9*(E==80&&c<72);
c-=9*(E==72&&c>8);
if(E==32) E=48;
}
for(c=81;c--;)
if(a=e[c])
if(N1[n1[c]][a]+N2[n2[c]][a]+N3[n3[c]][a])
printf("%c[%u;%uf%c",27,y[c],x[c],D[e[c]=0]);
else{b[c]=N1[n1[c]][a]=N2[n2[c]][a]=N3[n3[c]][a]=1;
g[c/27]++;
X=8*x[c]+2560*y[c]-4173;
for(Y=16;--Y;) for(X+=320,A=16;--A;)
if(!*(p+X+A)) *(p+X+A)=1;
}
while(++c<2)
if(g[f[c+1]]>g[f[c]]){f[c]^=f[c+1]^=f[c]^=f[c+1];
c=-c;
}
for(c4=c2=0;c2<3;c2++)
for(c3=0;c3<27;c3++)
if(!b[c=27*f[c2]+c3]) C[++c4]=c;
c1=++c4>1;
t1=time(NULL);
while(c1)
if(c1<c4){if(a=e[c=C[c1]])
N1[n1[c]][a]=N2[n2[c]][a]=N3[n3[c]][a]=0;
while(++a<10)
if(!N1[n1[c]][a])
if(!N3[n3[c]][a])
if(!N2[n2[c]][a]){N1[n1[c]][a]=N2[n2[c]][a]=N3[n3[c]][a]=1;
e[C[c1++]]=a;
break;
}
gotoxy(x[c],y[c]);
printf("%c",D[a]);
if(a>9) e[C[c1--]]=0;
}
else{t2=time(NULL);
printf("%c[23;11f%.f%c ",27,difftime(t2+1,t1),34);
printf("Pulse una tecla\r");
while(kbhit()) getch();
E=getch();
if(E==27) return 0;
printf("%c[2K",27);
c1--;
}
goto Inicio;
}
Uso correcto de la funcion getch().