You are on page 1of 3

#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,far*q=(char far*)0xA0000000-3516;

char 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[D[c]+a]=N[H[c]+a]=N[J[c]+a]=!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==77&&c<80) c++;

if(E==75&&c) c--;

if(E==80&&c<72) c+=9;

if(E==72&&c>8) c-=9;

if(E==32) E=48;

Cursor(0);

if(E<48||E>57) while(!(E=getch()));

else Cifra(A[B[c]=E-48]),

E=77;

Cursor(1);

}while(E!=13);

for(x=c=81;c--;)

if(a=B[c]) y+=v=N[D[c]+a]+N[H[c]+a]+N[J[c]+a]?0:1,

G[c/27]+=v,

Cifra(A[B[c]=a*=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)

if(y>80){

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);

y--;
}

else{

if(a=B[c=C[y]]) N[D[c]+a]=N[H[c]+a]=N[J[c]+a]=0;

while(N[++a+D[c]]||N[H[c]+a]||N[J[c]+a]);

y+=(B[c]=a%10)?N[D[c]+a]=N[H[c]+a]=N[J[c]+a]=1:-1;

Cifra(A[a]);

for(c=81;c--;) if(a=B[c]) Cursor(1);

goto Inicio;

You might also like