Az alábbi letöltési lehetőségek közül választhatsz: (
segítség)
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 7 KB
uses crt;
const FAJLNEV = 'sudoku9.be';
type mezo = record
szam:byte;
leh:array[1..9] of boolean;
end;
Ttabla = array[1..9, 1..9] of mezo;
var tabla:Ttabla;
function MelyikNegyzet(a:byte):byte;
var negyzeta: byte;
begin
if a mod 3 = 0 then negyzeta := a div 3 else
negyzeta := a div 3+1;
MelyikNegyzet := negyzeta;
end;
procedure Beolvas;
var f:text;
i,p, k:byte;
s:string;
begin
Assign(f, FAJLNEV);
Reset(f);
for i:=1 to 9 do begin
readln(f, tabla[1, i].szam, tabla[2, i].szam, tabla[3, i].szam, tabla[4, i].szam,
tabla[5, i].szam, tabla[6, i].szam, tabla[7, i].szam, tabla[8, i].szam,
tabla[9, i].szam);
for p:=1 to 9 do begin
for k:=1 to 9 do begin
tabla[i, p].leh[k] := true;
end;
end;
end;
Close(f);
end;
procedure MezoVizsgalat(x,y:byte);
var a, b, negyzetx, negyzety: byte;
begin
if tabla[x, y].szam <> 0 then begin
for a:=1 to 9 do begin
tabla[x, y].leh[ a ] := false;
end;
exit;
end;
for a:=1 to 9 do begin
if( tabla[a, y].szam <> 0 ) then begin
tabla[x, y].leh[ tabla[a,y].szam ] := false;
end;
end;
for a:=1 to 9 do begin
if( tabla[x, a].szam <> 0 ) then begin
tabla[x, y].leh[ tabla[x,a].szam ] := false;
end;
end;
negyzetx := MelyikNegyzet(x);
negyzety := MelyikNegyzet(y);
for a:=(negyzetx*3-2) to (negyzetx*3) do begin
for b:=(negyzety*3-2) to (negyzety*3) do begin
if( tabla[a, b].szam <> 0 ) then begin
tabla[x, y].leh[ tabla[a, b].szam ] := false;
end;
end;
end;
end;
procedure Beallit;
var x,y:byte;
begin
for x:=1 to 9 do begin
for y:=1 to 9 do begin
MezoVizsgalat(x, y);
end;
end;
end;
procedure MezoCheck_1(x, y: byte);
var i,a:byte;
begin
a:=0;
for i:=1 to 9 do begin
if( tabla[x, y].leh[i] ) then inc(a);
end;
if a=1 then begin
for i:=1 to 9 do begin
if( tabla[x, y].leh[i] ) then break;
end;
tabla[x, y].szam := i;
Beallit;
end;
end;
procedure Feltolt_1;
var x,y:byte;
begin
for x:=1 to 9 do begin
for y:=1 to 9 do begin
MezoCheck_1(x, y);
end;
end;
end;
procedure MezoCheck_2(x,y:byte);
var a,i,z, b:byte;
leh : array[1..9] of boolean;
darab, save:byte;
negyzetx, negyzety: byte;
begin
for i:=1 to 9 do
leh[i] := tabla[x, y].leh[i];
for i:=1 to 9 do begin
if( leh[i] ) then begin
for a:=1 to 9 do begin
if( ( tabla[a, y].szam = 0 ) and (x<>a) ) then begin
if( tabla[a, y].leh[i] = leh[i] ) then begin leh[i] := false; break; end;
end;
end;
end;
end;
darab := 0;
for i:= 1 to 9 do begin
if( leh[i] ) then begin inc(darab); save:= i; end;
end;
if( darab = 1 ) then begin
tabla[x, y].szam := save;
Beallit;
end else begin
for i:=1 to 9 do
leh[i] := tabla[x, y].leh[i];
for i:=1 to 9 do begin
if( leh[i] ) then begin
for a:=1 to 9 do begin
if( ( tabla[x, a].szam = 0 ) and (y<>a) ) then begin
if( tabla[x, a].leh[i] = leh[i] ) then begin leh[i] := false; break; end;
end;
end;
end;
end;
darab:=0;
for i:= 1 to 9 do begin
if( leh[i] ) then begin inc(darab); save:= i; end;
end;
if( darab = 1 ) then begin
tabla[x, y].szam := save;
Beallit;
end else begin
for i:=1 to 9 do
leh[i] := tabla[x, y].leh[i];
negyzetx := MelyikNegyzet(x);
negyzety := MelyikNegyzet(y);
for i:=1 to 9 do begin
if( leh[i] ) then begin
for a:=(negyzetx*3-2) to (negyzetx*3) do begin
for b:=(negyzety*3-2) to (negyzety*3) do begin
if( tabla[a, b].szam = 0 ) and ( (x<>a) or (y<>b) ) then begin
if( tabla[a, b].leh[i] = leh[i] ) then begin leh[i] := false; break; end;
end;
end;
end;
end;
end;
darab:=0;
for i:= 1 to 9 do begin
if( leh[i] ) then begin inc(darab); save:= i; end;
end;
if( darab = 1 ) then begin
tabla[x, y].szam := save;
Beallit;
end;
end;
end;
end;
procedure Feltolt_2;
var x,y:byte;
begin
for x:=1 to 9 do begin
for y:=1 to 9 do begin
if( tabla[x, y].szam = 0 ) then begin
MezoCheck_2(x, y);
end;
end;
end;
end;
function VanMegUres:boolean;
var x,y: byte;
begin
VanMegUres:=false;
for x:=1 to 9 do begin
for y:=1 to 9 do begin
if( tabla[x, y].szam = 0 ) then begin
VanMegUres:=true;
exit;
end;
end;
end;
end;
procedure MakeOutput;
var x, y:byte;
f:text;
begin
Assign(f, 'egyedi.ki');
Rewrite(f);
for y:=1 to 9 do begin
for x:=1 to 9 do begin
write(f, tabla[x, y].szam,' ');
end;
writeln(f);
end;
Close(f);
end;
var x,y:byte;
begin
clrscr;
Beolvas;
Beallit;
while VanMegUres do begin
Feltolt_1;
Feltolt_2;
end;
MakeOutput;
end.