#include<time.h>
#include<stdio.h>
#include<conio.h>
int main()
{
time_t t1,t2;
textmode(C40);
_setcursortype(_NOCURSOR);
char far*p=(char far*)0xB8000000L;
int a,c,c1,c2,c3,c4;
int b[82],e[82],x[82];
int n[244],n1[82],n2[82],n3[82];
char E,D[]=" 123456789 ";
int C[82],f[3],g[3];
printf("\tÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\n\t");
printf ("³ÚÄÂÄÂÄ¿ÚÄÂÄÂÄ¿ÚÄÂÄÂÄ¿³\n\t");
printf ("³³5³ ³2³³ ³ ³ ³³ ³ ³ ³³\n\t");
printf ("³ÃÄÅÄÅÄ´ÃÄÅÄÅÄ´ÃÄÅÄÅÄ´³\n\t");
printf ("³³ ³ ³ ³³ ³6³ ³³9³ ³ ³³\n\t");
printf ("³ÃÄÅÄÅÄ´ÃÄÅÄÅÄ´ÃÄÅÄÅÄ´³\n\t");
printf ("³³ ³ ³ ³³ ³ ³ ³³ ³ ³ ³³\n\t");
printf ("³ÀÄÁÄÁÄÙÀÄÁÄÁÄÙÀÄÁÄÁÄÙ³\n\t");
printf ("³ÚÄÂÄÂÄ¿ÚÄÂÄÂÄ¿ÚÄÂÄÂÄ¿³\n\t");
printf ("³³ ³4³1³³ ³ ³7³³ ³ ³ ³³\n\t");
printf ("³ÃÄÅÄÅÄ´ÃÄÅÄÅÄ´ÃÄÅÄÅÄ´³\n\t");
printf ("³³ ³ ³ ³³5³ ³ ³³ ³6³ ³³\n\t");
printf ("³ÃÄÅÄÅÄ´ÃÄÅÄÅÄ´ÃÄÅÄÅÄ´³\n\t");
printf ("³³ ³ ³5³³ ³ ³2³³ ³ ³ ³³\n\t");
printf ("³ÀÄÁÄÁÄÙÀÄÁÄÁÄÙÀÄÁÄÁÄÙ³\n\t");
printf ("³ÚÄÂÄÂÄ¿ÚÄÂÄÂÄ¿ÚÄÂÄÂÄ¿³\n\t");
printf ("³³ ³9³7³³ ³8³5³³ ³ ³ ³³\n\t");
printf ("³ÃÄÅÄÅÄ´ÃÄÅÄÅÄ´ÃÄÅÄÅÄ´³\n\t");
printf ("³³ ³ ³ ³³ ³ ³ ³³ ³3³5³³\n\t");
printf ("³ÃÄÅÄÅÄ´ÃÄÅÄÅÄ´ÃÄÅÄÅÄ´³\n\t");
printf ("³³ ³5³4³³ ³ ³ ³³ ³9³6³³\n\t");
printf ("³ÀÄÁÄÁÄÙÀÄÁÄÁÄÙÀÄÁÄÁÄÙ³\n\t");
printf ("ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\n");
Inicio:
for(c=c1=0;c1<3;c1++)
for(g[f[c1]=c1]=c2=0;c2<3;c2++)
for(c3=-1;++c3<3;)
for(c4=-1;++c4<3;){n1[c+1]=27*c1 +9*c2;
n2[c+1]=27*c3 +9*c4 +81;
n3[c+1]=27*c1 +9*c3 +162;
x[c+1]=c%9*4+c/9*160+80*c1+2*c3+180;
n[c+1]=n[c+82]=n[c+163]=0;
b[++c]=0;
*(p+x[c]+1)=0x0B;
}
E=c=1;
while(E-13){*(p+x[c]+1)=0xB0;
if(E==32 || E>48 && E<58){*(p+x[c])=E;
E=77;
}
else E=0;
while(E<1) E=getch();
if(E==27) return 0;
*(p+x[c]+1)=0x0B;
c+=(E==77 && c<81);
c-=(E==75 && c>1);
c+=9*(E==80 && c<73);
c-=9*(E==72 && c>9);
if(E==48) E=32;
}
for(c=0;++c<82;){if((a=*(p+x[c])-48)>0)
if(n[n1[c]+a]+n[n2[c]+a]+n[n3[c]+a]<1)
b[c]=n[n1[c]+a]=n[n2[c]+a]=n[n3[c]+a]=1;
e[c]=a*b[c];
g[(c-1)/27]+=b[c];
if(b[c]<1){*(p+x[c]+1)=0x0F;
*(p+x[c])=32;
}
}
c=0;
while(++c<3)
if(g[f[c]]>g[f[c-1]]){c1=f[c-1];
f[c-1]=f[c];
f[c]=c1;
c=2-c;
}
for(c1=c3=0;c1<3;c1++)
for(c2=0;++c2<28;) if(b[c=27*f[c1]+c2]<1) C[++c3]=c;
c1=++c3>1;
t1=time(NULL);
while(c1){if(c1<c3){if(a=e[c=C[c1]]) n[n1[c]+a]=n[n2[c]+a]=n[n3[c]+a]=0;
while(++a<10){if(n[n1[c]+a]) continue;
if(n[n3[c]+a]) continue;
if(n[n2[c]+a]) continue;
n[n1[c]+a]=n[n2[c]+a]=n[n3[c]+a]=1;
e[c]=a;
c1++;
break;
}
*(p+x[c])=D[a];
if(a>9){e[c]=0;
c1--;
}
}
else{t2=time(NULL);
printf("\t %.f\" Pulse ESPACIO\r",difftime(t2+1,t1));
while((E=getch())-32) if(E==27) return 0;
printf("\t \r");
c1--;
}
}
goto Inicio;
}