ALpMontana
КЯaL´da TaNıMaM КuяaL´da
orum üzerine 2 tane button koyun ve örnek kod aşağıda.
unit sudoku;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
dosya:textfile; // çıkışları kontrol etmek için dosyaya yazdırdım.
verilen:string; //verilen verileri tutmak için kullandım
implementation
{$R *.dfm}
// asıl işi yapan ana program
// bu procedure nin içinde diğer procedureler var.
procedure ana(verilen:string);
var
uclukyok,ikilikyok,birlikyok:boolean; // olasılıkları kontrol etmek için kullanıldılar
yaz:string; // gecici veri tutmak için kullanıldı.
sat,sut,grub:string[9]; // gelen kordinata ait satır sütün ve grub için kullanıldı
olasi: array[1..9,1..9] of string[9]; // her bir kareye gelebilecek olası rakamları tutmak için kullanıldı.
sayac,konum,i,j:shortint; //döngüler için bazı hesaplamalar için kullanıldılar
tamam:boolean; // bulmacanın çözülüp çözülmediğini kontrol için kullanıldı.
// burada gönderilen satır sütünün tahlili yapılır
// gelen kordinata göre hangi satır ve hangi sütün
// ve hangi gruba girdiği belirleniyor.
procedure tahlil(isat,isut:integer);
var
ii:integer;
begin
sat:=";sut:=";
{gelen satır numasına göre satırları ayırıyor}
for ii:=1 to 9 do begin
// konum hesaplama ayrıntı gelen kordinatların 81 karekterli verilen değişkeninde
// hangi konuma denk geldiğini buluyor
konum:=((isat-1)*9)+ii;
sat:=sat+copy(verilen[konum],1,1);
end;
(* gelen sütün numarasına göre sütün ayarlıyor *)
for ii:=1 to 9 do begin konum:=((ii-1)*9)+isut;
sut:=sut+copy(verilen[konum],1,1);
end;
// burada gelen satır sütün sayısına göre sayının hangi gruba girdiğini buluyor
// burada daha güzel bir algoritma yapamadım. hangi karelerin hangi gruba denk geldiğini
// elle yazarak çözüm geliştirdim.
if isat<=3 then begin if isut<4 then
grub:=verilen[1]+verilen[2]+verilen[3]+verilen[10]+verilen[11]+verilen[12]+verilen[19]+verilen[20]+verilen[21]
else if isut<7 then
grub:=verilen[4]+verilen[5]+verilen[6]+verilen[13]+verilen[14]+verilen[15]+verilen[22]+verilen[23]+verilen[24]
else grub:=verilen[7]+verilen[8]+verilen[9]+verilen[16]+verilen[17]+verilen[18]+verilen[25]+verilen[26]+verilen[27]
end else
if isat<=6 then begin if isut<4 then
grub:=verilen[28]+verilen[29]+verilen[30]+verilen[37]+verilen[38]+verilen[39]+verilen[46]+verilen[47]+verilen[48]
else if isut<7 then
grub:=verilen[31]+verilen[32]+verilen[33]+verilen[40]+verilen[41]+verilen[42]+verilen[49]+verilen[50]+verilen[51]
else grub:=verilen[34]+verilen[35]+verilen[36]+verilen[43]+verilen[44]+verilen[45]+verilen[52]+verilen[53]+verilen[54]
end else
if isat<=9 then begin if isut<4 then
grub:=verilen[55]+verilen[56]+verilen[57]+verilen[64]+verilen[65]+verilen[66]+verilen[73]+verilen[74]+verilen[75]
else if isut<7 then
grub:=verilen[58]+verilen[59]+verilen[60]+verilen[67]+verilen[68]+verilen[69]+verilen[76]+verilen[77]+verilen[78]
else grub:=verilen[61]+verilen[62]+verilen[63]+verilen[70]+verilen[71]+verilen[72]+verilen[79]+verilen[80]+verilen[81]
end; { en baştaki if in bitişi }
end;
// burada oluşan verilerin kontrol edilmesi için dosyaya yazdırma yöntemi uygun düşdüğü için
// bu procedure yi yazdım. çözümde bir etkisi yok sadece çıktıları görme açısından buraya eklendi
procedure dosyayaz(satir:string);
begin
append(dosya);
writeln(dosya,satir);
closefile(dosya);
end;
// burada her bir kareye gelebilecek olası rakamlar kümesi bulunuyor.
// yöntem olarakda o gelen karenin satırı sütünü ve grubu tahlil proceduresi ile
// bulunuyor. bu 3 değer yaz değişkenine atanıyor. sonra
// verilen bulmacanın o karesi boş ise oraya gelebilecek rakamları tek tek kontrol ediyor
// olasılık olarak ekleme yapıyor
procedure tara;
var
konum,t,i,k,j:integer;
begin
// olasılıklar boşaltılıyor
for i:=1 to 9 do for j:=1 to 9 do olasi[i,j]:=";
// her bir kare için olasılıklar bulunuyor
for i:=1 to 9 do begin
for j:=1 to 9 do begin
tahlil(i,j); //her bir kareyi tahlil etmeye gidiyor
yaz:=sat+sut+grub;
konum:=((i-1)*9)+j;
if verilen[konum]='0' then begin // karede sıfır varsa
for k:=1 to 9 do begin // 1 den 9 a kadar kontrol ediyor.
if (pos(inttostr(k),yaz)=0) then begin //eğer yoksa olasılığa ekliyor
olasi[i,j]:=olasi[i,j]+inttostr(k);
end; // if pos
end; //for k
end; //if verilen
end; // for j
end; // for i
end;
//bu fonksiyon ile verilen bilgiden istenilen rakam silinip yerine yeni rakam konuluyor
//daha çok sıfır olan yere yeni rakam bulunmuşsa sıfırı silip rakamı yazmak için kullanıldı
function yerinekoy(gelen:string;konum:integer;rakam:string):string;
begin
delete(gelen,konum,1); insert(rakam,gelen,konum);
result:=gelen;
end;
// bulmacanın bitip bitmediğini kontrol etmek için kullanıldı
procedure tamammi;
var
konum,i,j:integer;
gonder:string[81];
harf:char;
begin
birlikyok:=false; // kareler içerisinde 1 olasılık olan varmı kontrolü için
ikilikyok:=false; // kareler içerisinde 2 olasılık olan varmı kontrolü için
uclukyok:=false; // kareler içerisinde 3 olasılık olan varmı kontrolü için
// bu döngü ile olasılık kontrolü yapılıyor
for i:=1 to 9 do begin
for j:=1 to 9 do begin
if (length(olasi[i,j]))=1 then birlikyok:=true;
if (length(olasi[i,j]))=2 then ikilikyok:=true;
if (length(olasi[i,j]))=3 then uclukyok:=true;
end; //for j
end; // for i
if verilen[76]='5' then
yaz:=yaz;
// 1 tane olasılı olanları bulmacada yerine koymak için kullanıldı
// burada 1 olasılık olanları verilen satırda yerine koyuyor
if birlikyok then begin
for i:=1 to 9 do
for j:=1 to 9 do begin
if length(olasi[i,j])=1 then begin
konum:=((i-1)*9)+j;
verilen:=yerinekoy(verilen,konum,olasi[i,j]); // yerinekoy fonksiyonuna gönderildi
// alttaki satırın sadece işlemleri görmek için kullandım bir değeri yok.
yaz:=inttostr(sayac)+'.işlem '+inttostr(i)+'.'+inttostr(j)+' -->'+inttostr(length(olasi[i,j]))+'('+olasi[i,j]+')';
dosyayaz(yaz);
sayac:=sayac+1; //bulmacayı çözüm sayısını bulmak için kullandım.
// dosyayaz(verilen); üzerinde çalışılan veriler görmek istenirse dosyaya yazdırılabilir
tamam:=false;
end; // if olasi
end; // for j
end // if birlikyok true olduğu sürece
else begin
// eğer 1 olasılık hiç yoksa iki olasılıklara bakıyor.
if ikilikyok then begin
for i:=1 to 9 do
for j:=1 to 9 do begin
// 2 seçeneklilerden ilk seçenek koyulup proğram kendi kendini çalıştıracak //
if length(olasi[i,j])=2 then begin
konum:=((i-1)*9)+j; gonder:=olasi[i,j];
harf:=gonder[1];
gonder:=yerinekoy(verilen,konum,harf);
// iki seçenekli olanlardan ilk seçenek yerine koyulup ana programı yeniden çağırıyor
ana(gonder);
// 2 seçeneklilerden ikinci seçenek koyulup proğram kendi kendini çalıştıracak //
konum:=((i-1)*9)+j; gonder:=olasi[i,j];
harf:=gonder[2];
gonder:=yerinekoy(verilen,konum,harf);
ana(gonder);
birlikyok:=true;
tamam:=false;
end;
end; // for j
end; // if ikilikyok
end; //else begin
// burada olasılıklar arasında 1 ve 2 seçenekli yoksa program 3 seçenekliler için
// yeniden kendisini çağırıyor.
if (birlikyok=false)and (ikilikyok=false) and (uclukyok=true) then begin
for i:=1 to 9 do
for j:=1 to 9 do begin
// 3 seçeneklilerden ilk seçenek koyulup proğram kendi kendini çalıştıracak //
if length(olasi[i,j])=2 then begin
konum:=((i-1)*9)+j; gonder:=olasi[i,j];
harf:=gonder[1];
gonder:=yerinekoy(verilen,konum,harf);
ana(gonder);
// 3 seçeneklilerden ikinci seçenek koyulup proğram kendi kendini çalıştıracak //
konum:=((i-1)*9)+j; gonder:=olasi[i,j];
harf:=gonder[3];
gonder:=yerinekoy(verilen,konum,harf);
ana(gonder);
// 3 seçeneklilerden üçüncü seçenek koyulup proğram kendi kendini çalıştıracak //
konum:=((i-1)*9)+j; gonder:=olasi[i,j];
harf:=gonder[2];
gonder:=yerinekoy(verilen,konum,harf);
ana(gonder);
tamam:=false;
end; //if uzunluk
end; // for j
end; // if uclukyok
if (pos('0',verilen)=0) then begin // verilen içerisinde sıfır yoksa bulmaca çözülmüştür
tamam:=true;
showmessage('bulmaca çözüldü');
dosyayaz(' Bulmaca çözüldü');
dosyayaz('--------------Sonuç aşağıda------------------');
yaz:=";
for i:=1 to 9 do begin
yaz:=copy(verilen,((i-1)*9+1),9);
insert('|',yaz,7);
insert('|',yaz,4);
dosyayaz(yaz);
if (i mod 3)=0 then dosyayaz('-----------');
end;
halt;
end;
end;
//
begin
sayac:=1;
// bulmaca çözülmeye başlanıyor
repeat
tara; // tarama işlemi yapılıyor.
tamammi; // bulmacanın bitip bitmediği kontrol ediliyor
until tamam; // tamam true olana kadar dön
end;
//ana programın bitimi
procedure TForm1.FormCreate(Sender: TObject);
begin
{
aşağıdaki 4 bulmacayı çözemedi (bu bulmacalar gerçekten çok zor)
verilen:='001200540300000607040060003010006800000904000009700010700020080104000005085003700';
verilen:='000001007309002600050000023006030005000408000900010800580000060002700304100900000';
verilen:='000810467000070089008000200300600010004000500050009002005000800460030000879062000';
verilen:='000810467000070089008000200300600010004000500050009002005000800460030000879062000';
aşağıdaki 5 taneyi düzgün çözdü
verilen:='409000850060010002305208476090004007070102540080060020801000204050040000906021005';
verilen:='070900000003040007002071860006000004054080930300000700037620100900050600000007020';
verilen:='530070000600195000098000060800060003400803001700020006060000280000419005000080079';
verilen:='000001007309002600050000023006030005000408000900010800580000060002700304100900000';
verilen:='000000018700040000000000030420000700000001000000300000500070200601800000040000000';
}
// aşağıdaki verilen bulmacayı çözer. değişik bulmacaların
çözülmesi isteniyorsa verilen değişkenine yeni bulmacalar atanarak çözümleri yaptırılabilinir.
// bulmacalar yazılır kare içerisinde rakam yoksa 0 varsa içerisindeki rakam yazılacak
verilen:='409000850060010002305208476090004007070102540080060020801000204050040000906021005';
assignfile(dosya,'c:\cikti.txt'); rewrite(dosya);closefile(dosya);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ana(verilen);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
exit;
end;
end.
unit sudoku;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
dosya:textfile; // çıkışları kontrol etmek için dosyaya yazdırdım.
verilen:string; //verilen verileri tutmak için kullandım
implementation
{$R *.dfm}
// asıl işi yapan ana program
// bu procedure nin içinde diğer procedureler var.
procedure ana(verilen:string);
var
uclukyok,ikilikyok,birlikyok:boolean; // olasılıkları kontrol etmek için kullanıldılar
yaz:string; // gecici veri tutmak için kullanıldı.
sat,sut,grub:string[9]; // gelen kordinata ait satır sütün ve grub için kullanıldı
olasi: array[1..9,1..9] of string[9]; // her bir kareye gelebilecek olası rakamları tutmak için kullanıldı.
sayac,konum,i,j:shortint; //döngüler için bazı hesaplamalar için kullanıldılar
tamam:boolean; // bulmacanın çözülüp çözülmediğini kontrol için kullanıldı.
// burada gönderilen satır sütünün tahlili yapılır
// gelen kordinata göre hangi satır ve hangi sütün
// ve hangi gruba girdiği belirleniyor.
procedure tahlil(isat,isut:integer);
var
ii:integer;
begin
sat:=";sut:=";
{gelen satır numasına göre satırları ayırıyor}
for ii:=1 to 9 do begin
// konum hesaplama ayrıntı gelen kordinatların 81 karekterli verilen değişkeninde
// hangi konuma denk geldiğini buluyor
konum:=((isat-1)*9)+ii;
sat:=sat+copy(verilen[konum],1,1);
end;
(* gelen sütün numarasına göre sütün ayarlıyor *)
for ii:=1 to 9 do begin konum:=((ii-1)*9)+isut;
sut:=sut+copy(verilen[konum],1,1);
end;
// burada gelen satır sütün sayısına göre sayının hangi gruba girdiğini buluyor
// burada daha güzel bir algoritma yapamadım. hangi karelerin hangi gruba denk geldiğini
// elle yazarak çözüm geliştirdim.
if isat<=3 then begin if isut<4 then
grub:=verilen[1]+verilen[2]+verilen[3]+verilen[10]+verilen[11]+verilen[12]+verilen[19]+verilen[20]+verilen[21]
else if isut<7 then
grub:=verilen[4]+verilen[5]+verilen[6]+verilen[13]+verilen[14]+verilen[15]+verilen[22]+verilen[23]+verilen[24]
else grub:=verilen[7]+verilen[8]+verilen[9]+verilen[16]+verilen[17]+verilen[18]+verilen[25]+verilen[26]+verilen[27]
end else
if isat<=6 then begin if isut<4 then
grub:=verilen[28]+verilen[29]+verilen[30]+verilen[37]+verilen[38]+verilen[39]+verilen[46]+verilen[47]+verilen[48]
else if isut<7 then
grub:=verilen[31]+verilen[32]+verilen[33]+verilen[40]+verilen[41]+verilen[42]+verilen[49]+verilen[50]+verilen[51]
else grub:=verilen[34]+verilen[35]+verilen[36]+verilen[43]+verilen[44]+verilen[45]+verilen[52]+verilen[53]+verilen[54]
end else
if isat<=9 then begin if isut<4 then
grub:=verilen[55]+verilen[56]+verilen[57]+verilen[64]+verilen[65]+verilen[66]+verilen[73]+verilen[74]+verilen[75]
else if isut<7 then
grub:=verilen[58]+verilen[59]+verilen[60]+verilen[67]+verilen[68]+verilen[69]+verilen[76]+verilen[77]+verilen[78]
else grub:=verilen[61]+verilen[62]+verilen[63]+verilen[70]+verilen[71]+verilen[72]+verilen[79]+verilen[80]+verilen[81]
end; { en baştaki if in bitişi }
end;
// burada oluşan verilerin kontrol edilmesi için dosyaya yazdırma yöntemi uygun düşdüğü için
// bu procedure yi yazdım. çözümde bir etkisi yok sadece çıktıları görme açısından buraya eklendi
procedure dosyayaz(satir:string);
begin
append(dosya);
writeln(dosya,satir);
closefile(dosya);
end;
// burada her bir kareye gelebilecek olası rakamlar kümesi bulunuyor.
// yöntem olarakda o gelen karenin satırı sütünü ve grubu tahlil proceduresi ile
// bulunuyor. bu 3 değer yaz değişkenine atanıyor. sonra
// verilen bulmacanın o karesi boş ise oraya gelebilecek rakamları tek tek kontrol ediyor
// olasılık olarak ekleme yapıyor
procedure tara;
var
konum,t,i,k,j:integer;
begin
// olasılıklar boşaltılıyor
for i:=1 to 9 do for j:=1 to 9 do olasi[i,j]:=";
// her bir kare için olasılıklar bulunuyor
for i:=1 to 9 do begin
for j:=1 to 9 do begin
tahlil(i,j); //her bir kareyi tahlil etmeye gidiyor
yaz:=sat+sut+grub;
konum:=((i-1)*9)+j;
if verilen[konum]='0' then begin // karede sıfır varsa
for k:=1 to 9 do begin // 1 den 9 a kadar kontrol ediyor.
if (pos(inttostr(k),yaz)=0) then begin //eğer yoksa olasılığa ekliyor
olasi[i,j]:=olasi[i,j]+inttostr(k);
end; // if pos
end; //for k
end; //if verilen
end; // for j
end; // for i
end;
//bu fonksiyon ile verilen bilgiden istenilen rakam silinip yerine yeni rakam konuluyor
//daha çok sıfır olan yere yeni rakam bulunmuşsa sıfırı silip rakamı yazmak için kullanıldı
function yerinekoy(gelen:string;konum:integer;rakam:string):string;
begin
delete(gelen,konum,1); insert(rakam,gelen,konum);
result:=gelen;
end;
// bulmacanın bitip bitmediğini kontrol etmek için kullanıldı
procedure tamammi;
var
konum,i,j:integer;
gonder:string[81];
harf:char;
begin
birlikyok:=false; // kareler içerisinde 1 olasılık olan varmı kontrolü için
ikilikyok:=false; // kareler içerisinde 2 olasılık olan varmı kontrolü için
uclukyok:=false; // kareler içerisinde 3 olasılık olan varmı kontrolü için
// bu döngü ile olasılık kontrolü yapılıyor
for i:=1 to 9 do begin
for j:=1 to 9 do begin
if (length(olasi[i,j]))=1 then birlikyok:=true;
if (length(olasi[i,j]))=2 then ikilikyok:=true;
if (length(olasi[i,j]))=3 then uclukyok:=true;
end; //for j
end; // for i
if verilen[76]='5' then
yaz:=yaz;
// 1 tane olasılı olanları bulmacada yerine koymak için kullanıldı
// burada 1 olasılık olanları verilen satırda yerine koyuyor
if birlikyok then begin
for i:=1 to 9 do
for j:=1 to 9 do begin
if length(olasi[i,j])=1 then begin
konum:=((i-1)*9)+j;
verilen:=yerinekoy(verilen,konum,olasi[i,j]); // yerinekoy fonksiyonuna gönderildi
// alttaki satırın sadece işlemleri görmek için kullandım bir değeri yok.
yaz:=inttostr(sayac)+'.işlem '+inttostr(i)+'.'+inttostr(j)+' -->'+inttostr(length(olasi[i,j]))+'('+olasi[i,j]+')';
dosyayaz(yaz);
sayac:=sayac+1; //bulmacayı çözüm sayısını bulmak için kullandım.
// dosyayaz(verilen); üzerinde çalışılan veriler görmek istenirse dosyaya yazdırılabilir
tamam:=false;
end; // if olasi
end; // for j
end // if birlikyok true olduğu sürece
else begin
// eğer 1 olasılık hiç yoksa iki olasılıklara bakıyor.
if ikilikyok then begin
for i:=1 to 9 do
for j:=1 to 9 do begin
// 2 seçeneklilerden ilk seçenek koyulup proğram kendi kendini çalıştıracak //
if length(olasi[i,j])=2 then begin
konum:=((i-1)*9)+j; gonder:=olasi[i,j];
harf:=gonder[1];
gonder:=yerinekoy(verilen,konum,harf);
// iki seçenekli olanlardan ilk seçenek yerine koyulup ana programı yeniden çağırıyor
ana(gonder);
// 2 seçeneklilerden ikinci seçenek koyulup proğram kendi kendini çalıştıracak //
konum:=((i-1)*9)+j; gonder:=olasi[i,j];
harf:=gonder[2];
gonder:=yerinekoy(verilen,konum,harf);
ana(gonder);
birlikyok:=true;
tamam:=false;
end;
end; // for j
end; // if ikilikyok
end; //else begin
// burada olasılıklar arasında 1 ve 2 seçenekli yoksa program 3 seçenekliler için
// yeniden kendisini çağırıyor.
if (birlikyok=false)and (ikilikyok=false) and (uclukyok=true) then begin
for i:=1 to 9 do
for j:=1 to 9 do begin
// 3 seçeneklilerden ilk seçenek koyulup proğram kendi kendini çalıştıracak //
if length(olasi[i,j])=2 then begin
konum:=((i-1)*9)+j; gonder:=olasi[i,j];
harf:=gonder[1];
gonder:=yerinekoy(verilen,konum,harf);
ana(gonder);
// 3 seçeneklilerden ikinci seçenek koyulup proğram kendi kendini çalıştıracak //
konum:=((i-1)*9)+j; gonder:=olasi[i,j];
harf:=gonder[3];
gonder:=yerinekoy(verilen,konum,harf);
ana(gonder);
// 3 seçeneklilerden üçüncü seçenek koyulup proğram kendi kendini çalıştıracak //
konum:=((i-1)*9)+j; gonder:=olasi[i,j];
harf:=gonder[2];
gonder:=yerinekoy(verilen,konum,harf);
ana(gonder);
tamam:=false;
end; //if uzunluk
end; // for j
end; // if uclukyok
if (pos('0',verilen)=0) then begin // verilen içerisinde sıfır yoksa bulmaca çözülmüştür
tamam:=true;
showmessage('bulmaca çözüldü');
dosyayaz(' Bulmaca çözüldü');
dosyayaz('--------------Sonuç aşağıda------------------');
yaz:=";
for i:=1 to 9 do begin
yaz:=copy(verilen,((i-1)*9+1),9);
insert('|',yaz,7);
insert('|',yaz,4);
dosyayaz(yaz);
if (i mod 3)=0 then dosyayaz('-----------');
end;
halt;
end;
end;
//
begin
sayac:=1;
// bulmaca çözülmeye başlanıyor
repeat
tara; // tarama işlemi yapılıyor.
tamammi; // bulmacanın bitip bitmediği kontrol ediliyor
until tamam; // tamam true olana kadar dön
end;
//ana programın bitimi
procedure TForm1.FormCreate(Sender: TObject);
begin
{
aşağıdaki 4 bulmacayı çözemedi (bu bulmacalar gerçekten çok zor)
verilen:='001200540300000607040060003010006800000904000009700010700020080104000005085003700';
verilen:='000001007309002600050000023006030005000408000900010800580000060002700304100900000';
verilen:='000810467000070089008000200300600010004000500050009002005000800460030000879062000';
verilen:='000810467000070089008000200300600010004000500050009002005000800460030000879062000';
aşağıdaki 5 taneyi düzgün çözdü
verilen:='409000850060010002305208476090004007070102540080060020801000204050040000906021005';
verilen:='070900000003040007002071860006000004054080930300000700037620100900050600000007020';
verilen:='530070000600195000098000060800060003400803001700020006060000280000419005000080079';
verilen:='000001007309002600050000023006030005000408000900010800580000060002700304100900000';
verilen:='000000018700040000000000030420000700000001000000300000500070200601800000040000000';
}
// aşağıdaki verilen bulmacayı çözer. değişik bulmacaların
çözülmesi isteniyorsa verilen değişkenine yeni bulmacalar atanarak çözümleri yaptırılabilinir.
// bulmacalar yazılır kare içerisinde rakam yoksa 0 varsa içerisindeki rakam yazılacak
verilen:='409000850060010002305208476090004007070102540080060020801000204050040000906021005';
assignfile(dosya,'c:\cikti.txt'); rewrite(dosya);closefile(dosya);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ana(verilen);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
exit;
end;
end.