Colección de citas famosas - Frases motivadoras - ¿Cómo se programa la calculadora de Sudoku?

¿Cómo se programa la calculadora de Sudoku?

Rellena los espacios en blanco con espacios (subraya cada vez)

Se puede ingresar por archivo (abre el archivo con un programa compilado) o por teclado.

Compile con Turbo Pascal con parche CRT o utilice Free Pascal (no se garantiza que funcione correctamente)

El tiempo de espera de la muestra no se agota, pero puede que se agote el tiempo de espera para datos especiales (Aún no tengo los datos, es demasiado simple para escribirlo usted mismo, pero los datos especiales básicamente no excederán 0,01 s)

El programa es el siguiente:

programa sdjsq; {solucionador de sudokus}

{-------------Llamar a la biblioteca-------------------- -------------- ------------------USOS}

usa CRT, Dos {usa CRT Dos; biblioteca}

{----- --------Definición de tipo de datos--------------------------------- --------------- ---TYPE}

tipo

sz=0..9; {número, el sublímite del tipo de byte; ocupa un byte}

sy=1.9; {igual que sz}

sd=array

para i:=1 a 9 hazlo si. ilt;gt;x entonces s:=s-[a[i , y]];

para i:=1 a 9 hazlo si ilt;gt;y entonces s:=s-[a[ x,i]];

for i:=1 a 3 hacer para j:=1 a 3 hacer

if ((x-1)div 3*3 ilt; gt ; x) y ((y-1)div 3*3 jlt ;gt;y)

entonces s:=s-[a[(x-1)div 3*3 i, (y- 1)div 3*3 j]];

s:=s-[0]

fin

{======= =======Imprimir datos======= ==================================== ==PRINT}

procedimiento print( xn, yn, color: byte);

comenzar

gotoxy(2*xn, 2*yn); /p>

textcolor(color);

textbackground(5 ord(not ((x=xn)y(y=yn)))*(-4-ord(((xn-1) ) div 3 (yn-1) div 3) mod 2= 0)));

si a[xn, yn]lt 0 entonces escribe(a[xn, yn]) else escribe; (#32);

gotoxy( 1, 1);

fin

{============== Leer datos usando el teclado========== =================ENTRADA POR TECLADO}

procedimiento inputbkb(var a:sd

etiqueta 1;

var

xi, yi: byte; >s: ss; i: byte;

comenzar

printk;

fillchar(a, tamaño de(a), x:=1; y:=1; imprimir(1, 1, 0);

tcolor(15); textbackground(0);

s:=[1..9];gotoxy(1,20); para i:=1 a 9 escriba(i:2); /p>

repetir

c:=readkey;

xi:=x;yi:=y

caso c de

;

(*#13{Entrar}, #27{Esc}*)

#27:detener

(*#72{Arriba}, #75{Izquierda} , #77{Derecha}, #80{Abajo}*)

#0: comenzar

c:=readkey

caso c de

#75: si xlt; gt; 1 entonces x: = x-1 else write('');

#72: si ylt; else write('');

#80: si ylt; 9 entonces y: =y 1 else write(''); ; 9 entonces x: =x 1 else write('');

#83: a[x, y]: =0

end; >end;

#48..#58: si (ord(c)-48 en s) o (c=#48)

entonces a[x, y]: =ord(c)-48 else write('');

end;

print(xi, yi, 12); p>

end p>

ky(a, x, y, s);

gotoxy(1, 20);

textcolor(15); 0); delline;

para i:=1 a 9, hazlo si i en s y luego escribe(i:2

hasta c=#13; p>x:=0 ; y:=0; print(xi, yi, 12);

fin

procedimiento

comenzar

p>

gotoxy (1, 20);

textfondo(0); textcolor(143);

escribir('¡Sin respuesta!'); >

readkey;

detener

fin

{=============Leer datos del archivo= ===== =========================ENTRADA POR ARCHIVO}

procedimiento inputbf(var a: sd; const ruta: cadena);

función Existe(Ruta: cadena): boolean

var

S: PathStr

begin

S:= FSearch(Ruta, GetEnv(''));

Exist:= S lt;gt ''; >

var

>x, y: byte;

c: char;

f: texto

comenzar

si no existe (ruta) luego comience

inputbkb(a);

fin si no comienza

assign(f, ruta); p>para y:=1 a 9 comienza

para x:=1 a 9 comienza

read(f,c

si no (c en [#48..#58, #32]) luego comienza

inputbkb(a); #32 entonces a[x, y]:=0 else a[x, y]:=ord(c)-48; print(x, y, 12);

readln(f);

fin

fin;

fin

{======= ======Completar datos fijos========================================= == ====TC}

procedimiento tc;

var

x, y, i, t, n, f: byte; >

s: ss;

función tct: byte;

var

i, j, k, l: byte

s1, s2, s3: ss;

n1, n2, n3: matriz [1..9] de byte;

comienzo

tct: =0 ;

para i:=1 a 9 comienzan

fillchar(n1, sizeof(n1), 0); fillchar( n2, sizeof(n2), 0);

for j:=1 a 9 comienza

ky(a, i, j, s); , j ]lt; gt; 0 luego comienza s:=[a[i,j]]; n1[a[i,j]]:=10; 9 hacer si k en s entonces si n1[k]=0 entonces n1[k]:=j else n1[k]:=10

ky(a,j,i,s);if a[ j, i]lt; gt; 0 luego comienza s: =[a[j, i]]; n2[a[j, i]]: =10; =1 a 9 hacer si k en s entonces si n2[k]=0 entonces n2[k]:=j else n2[k]:=10

ky(a,((i-1; ) mod 3)*3 ((j-1) mod 3 1), ((i-1) div 3)*3 ((j-1) div 3 1),

if); a[ ((i-1) mod 3)*3 ((j-1) mod 3 1), ((i-1) div 3)*3 ((j-1) div 3 1)]lt;gt; 0 entonces comienza

s:=[a[((i-1) mod 3)*3 ((j-1) mod 3 1), ((i-1) div 3)*3 ((j- 1) div 3 1)]];

n3[a[((i-1) mod 3)*3 ((j-1) mod 3 1), ((i-1) div 3 )*3 ((j-1) div 3 1)]]:=10

end;

para k:=1 a 9 haz si k en s entonces si n3 [k]=0 entonces n3[k]:=j else n3[k]:=10

fin

para k:=1 a 9 comenzar

j:=n1[k];

si j en [1..9] entonces comienza

a[i, j]:=k; , j, 6); tct:=1; salir;

fin;

fin

para k:=1 a 9 comenzar

j:=n2[k];

si j en [1..9] entonces comienza

a[j, i]:=k; , i, 6); tct:=1; salir;

finalizar

finalizar

para k:=1 a 9 comenzar

j:=n3[k];

si j en [1..9] entonces comienza

a[((i-1) mod 3)*3 ((j-1) mod 3 1), ((i-1) div 3)*3 ((j-1) div 3 1)]:=k

print(((i-; 1) mod 3)*3 ((j-1) mod 3 1), ((i-1) div 3)*3 ((j-1) div 3 1), 6); tct:=1;

final;

final;

final; verificación de procedimiento;

var

i, j, k: byte;

s, s1, s2, s3: ss; comenzar

para i:=1 a 9 comenzar

s1:=[] s2:=[]; j:=1 a 9 comienzan

si a[i,j]=0 entonces comienzan ky(a,i,j,s);s1:=s1 s; fin else s1:=s1 [ a[i, j]];

si a[j, i]=0 entonces comienza ky(a, j, i, s); a[j, i]];

si a[((i-1) mod 3)*3 ((j-1) mod 3 1), ((i-1) div 3)* 3 ((j-1) div 3 1)]=0 luego comienza

ky(a, ((i-1) mod 3)*3 ((j-1) mod 3 1), ( (i-1) div 3)*3 ((j-1) div 3 1), s3:=s3 s

end else s3);

:=s3 [a[((i-1) mod 3)*3 ((j-1) mod 3 1), ((i-1) div 3)*3 ((j-1) div 3 1)] ];

end;

para j:=1 a 9 comienza

si no (j en s1) entonces

si no (j en s2) entonces noans;

si no (j en s3) entonces noans

fin

end;

fin;

comenzar

repetir

f:=0

para x:=1 a 9 hacer

p>

p>

para y:=1 a 9 haz

si a[x, y]=0 entonces comienza

ky(a,x,y ,s);t :=0;

if s=[] entonces

noans

para i:=1 a 9 hazlo si i en s; luego comienza

t:=t 1; n:=i;

fin

si t=1 entonces comienza a[x, y]:= n; print(x, y, 14); f: = f 1; fin;

f: = f tct; hasta f=0;

fin

{=============Solución recursiva============= ===== =============================TRY}

respuesta de función: booleana

var

ans: booleano;

procedimiento try(num: byte);

var

i, j; , n, x, y: byte;

s:

comenzar

si se presiona la tecla, luego se lee la tecla de #27: detener #0: si readkey=#107 luego detener;

if numlt;=list.num luego comenzar

x:=list.dat[num].x;y:=list.dat [num].y ;

ky(a, x, y, s); si s=[] entonces sale

n:=random(8)

para j:=n a n 8 comience

i:=j mod 9 1

si i en s entonces comience

a[x, y ]:=i; imprimir(x, y, 10);

intenta(núm. 1);

a[x, y]:=0; (x, y, 0)

end

end

end else start

gotoxy(1,20); ); fondo de texto (0); delline; escribir ('¡Completo!'); respuesta: = tru

e; ans: = verdadero;

caso readkey de #27: detener; #0: si readkey=#107 entonces detener

textcolor(15); ); gotoxy(1, 20); delline; writeln('Intentando...');

fin

fin

comenzar

respuesta:=falso; ans:=falso;

intento(1)

fin

procedimiento crtinit; >var

OrigMode: Word;

begin

OrigMode:=LastMode; { Recordar modo de vídeo original }

TextMode(Lo( LastMode) Font8x8); { use 43 o 50 líneas en EGA/VGA }

end

procedimiento px; l: matriz [1..9] de registro

num: byte

dat: matriz [1..81] de punto

fin;

i, j, k: byte;

d: punto

comenzar

para i:=1 a 9 do l; [i].num:=0;

para i:=1 a 9 hazlo para j:=1 a 9 hazlo si a[i, j]=0 luego comienza

d.x:=i;d.y:=j;ky(a,i,j,d.s);d.n:=0;for k:=1 a 9 hacer si k en d.s entonces inc(d.n); >inc(l[d.n].num); l[d.n].dat[l[d.n].num]:=d

fin

lista.num:= 0;

for i:=1 a 9 hacer para j:=1 a l[i].num comenzar

inc(list.num); .num]:=l[i].dat[j];

fin;

fin

comenzar

aleatorizar;

crtinit;

textbackground(0); clrscr;

si ParamCount=0 entonces inputbkb(a) else inputbf(a, ParamStr(1));

textcolor(15); textbackground(0); gotoxy(1, 20); writeln('Pensando...');

textcolor(15); textbackground(0);gotoxy(1,20);delline;writeln('Comprobando...');px

textcolor(15);textbac

ground(0); gotoxy(1, 20); delline; writeln('Intentando...'); gotoxy(1, 1);

si no responde, entonces

textcolor(15); textbackground(0); gotoxy(1, 20); writeln('¡Eso es todo!');