#include<time.h>
#include<stdio.h>
#include<conio.h>
int main()
{
time_t t1,t2;
textmode(C40);
char far *p=(char far *) 0xB8000000L;
int A,c,c1,c2,c3,c4;
int a[83],b[83],x[82];
int n[244],n1[82],n2[82],n3[82];
char E=0,D[]=" 123456789";
b[0]=b[82]=c=0;
printf("\n\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(" ³ ³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(" ³ ³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\n");
for(c1=-1;++c1<3;) for(c2=-1;++c2<3;)
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]=4*(c%9)+160*(c/9)+262;
n[++c]=n[c+81]=n[c+162]=0;
a[c]=*(p+x[c])-48;
if(a[c]<0) a[c]=0;
else *(p+x[c]+1)=0x02;
}
c=1;
while(E-13) {*(p+x[c]+1)=0x20;
*(p+x[c])=D[a[c]];
if(E>47 && E<58) E=77;
else E=0;
while(E<1) E=getch();
*(p+x[c]+1)=0x02;
if(E==27) return 0;
c+=(E==77)*(c<81);
c-=(E==75)*(c>1);
c+=9*(E==80)*(c<73);
c-=9*(E==72)*(c>9);
if(E==32) E=48;
if(E>47 && E<59) a[c]=E-48;
}
for(c=0;++c<82;){A=a[c];
b[c]=0;
*(p+x[c]+1)=0x03;
if(A)
if(n[n1[c]+A]+n[n2[c]+A]+n[n3[c]+A]) a[c]=0;
else {n[n1[c]+A]=n[n2[c]+A]=n[n3[c]+A]=++b[c];
*(p+x[c]+1)=0x02;
}
*(p+x[c])=D[a[c]];
}
c=1;
t1=time(NULL);
while(c){while(b[c]) c++;
if(c>81){t2=time(NULL);
printf("\t %.f\" Pulse ESPACIO\r",difftime(t2+1,t1));
while((E=getch())-32) if(E==27) return 0;
while(b[--c]);
}
else {A=a[c];
if(A) n[n1[c]+A]=n[n2[c]+A]=--n[n3[c]+A];
while(++A<10) {if(n[n1[c]+A]) continue;
if(n[n2[c]+A]) continue;
if(n[n3[c]+A]) continue;
n[n1[c]+A]=n[n2[c]+A]=++n[n3[c]+A];
*(p+x[c])=D[A];
a[c++]=A;
break;
}
if(A>9) {a[c]=0;
*(p+x[c])=32;
while(b[--c]);
}
}
}
getch();
return 0;
}
Esta probado en Turbo C++, corriendo en DosBox.