Discussion about math, puzzles, games and fun. Useful symbols: ÷ × ½ √ ∞ ≠ ≤ ≥ ≈ ⇒ ± ∈ Δ θ ∴ ∑ ∫ π -¹ ² ³ °

You are not logged in.

- Topics: Active | Unanswered

**anonimnystefy****Real Member**- From: The Foundation
- Registered: 2011-05-23
- Posts: 15,544

hi guys

i am trying to make a program to solve a Sudoku.i hope you know what that is.

now i have finished the code but there seems to be a logical error because i entered a valid one and it outputted the message 'The Sudoku cannot be solved!!!'

here's the code:

```
program Sudoku_solver;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$IFDEF WINDOWS}{$R Sudoku.rc}{$ENDIF}
const
max=9;
type
niz=array[1..max] of integer;
matrica=array[1..max] of niz;
var
a:matrica;
i,j:integer;
ok:boolean;
function row(a:matrica;i1,j1:integer):boolean;
var
j:integer;
b:boolean;
begin
b:=true;
for j:=1 to 9 do
if j<>j1 then
if a[i1][j]=a[i1][j1] then
b:=false;
red:=b;
end;
function column(a:matrica;i1,j1:integer):boolean;
var
i:integer;
b:boolean;
begin
b:=true;
for i:=1 to 9 do
if i<>i1 then
if a[i][j1]=a[i1][j1] then
b:=false;
vrsta:=b;
end;
function square(a:matrica;i1,j1:integer):boolean;
var
i,j,k,l:integer;
b:boolean;
begin
b:=true;
case i1 of
1,2,3: begin
k:=0;
i:=3
end;
4,5,6: begin
k:=3;
i:=6;
end;
7,8,9: begin
k:=6;
i:=9;
end;
end;
case j1 of
1,2,3: begin
l:=0;
j:=3
end;
4,5,6: begin
l:=3;
j:=6;
end;
7,8,9: begin
l:=6;
j:=9;
end;
end;
while (k<=i) do
begin
k:=k+1;
while (l<=j) do
begin
l:=l+1;
if (k<>i1) and (l<>j1) then
if a[k][l]=a[i1][j1] then
b:=false;
end;
end;
kvadrat:=b;
end;
function pos(a:matrica;i,j:integer):boolean;
begin
poz:=row(a,i,j) and column(a,i,j) and square(a,i,j);
end;
procedure sudoku(var a:matrica;n,i1,j1:integer;ok:boolean);
var
i,j,k:integer;
b:boolean;
begin
i:=i1;
j:=j1;
a[i][j]:=n;
ok:=false;
b:=true;
if poz(a,i,j) then
begin
ok:=true;
i:=0;
j:=0;
while (b=true) and (i<=max) do
begin
i:=i+1;
while (b=true) and (j<=max) do
begin
j:=j+1;
if a[i][j]=0 then
b:=false;
end;
end;
if b=false then
begin
k:=0;
ok:=false;
while (k<=9) and not ok do
begin
k:=k+1;
sudoku(a,k,i,j,ok);
end;
end;
end;
end;
begin
writeln('Enter the Sudoku: ');
for i:=1 to 9 do
begin
for j:=1 to 9 do
read(a[i][j]);
readln;
end;
k:=0;
ok:=false;
while (k<=9) and not ok do
begin
k:=k+1;
sudoku(a,k,i,j,ok);
end;
if ok then
begin
writeln('The solution is: ')
for i:=1 to 9 do
begin
for j:=1 to 9 do
write(a[i][j]);
writeln;
end;
end
else writeln('Sudoku cannot be solved!!!');
readln;
end.
```

note that functions row,column and square check if there are same numbers as the number we are looking at in the same row,column and square.

my second question is: is there another (better) way to make the Sudoku solver,because this one is fairly long and complex !?

*Last edited by anonimnystefy (2011-09-30 09:14:47)*

Here lies the reader who will never open this book. He is forever dead.

Taking a new step, uttering a new word, is what people fear most. ― Fyodor Dostoyevsky, Crime and Punishment

Offline

**bobbym****Administrator**- From: Bumpkinland
- Registered: 2009-04-12
- Posts: 87,249

Hi anonimnystefy;

That is not long at all for a sudoku solver. What is the sudoku problem that you are

testing this on?

**In mathematics, you don't understand things. You just get used to them.Of course that result can be rigorously obtained, but who cares?Combinatorics is Algebra and Algebra is Combinatorics.**

Offline

**anonimnystefy****Real Member**- From: The Foundation
- Registered: 2011-05-23
- Posts: 15,544

hi bobbym

it's:

0 4 7 0 0 0 3 0 0

8 0 6 0 7 4 0 0 0

0 0 0 2 0 3 8 4 0

0 7 0 0 0 0 4 0 3

9 0 0 4 0 8 0 0 2

4 0 3 0 0 0 0 9 0

0 2 8 6 0 1 0 0 0

0 0 0 8 2 0 7 0 9

0 0 9 0 0 0 2 1 8

the answer should be:

2 4 7 1 8 9 3 5 6

8 3 6 5 7 4 9 2 1

5 9 1 2 6 3 8 4 7

1 7 2 9 5 6 4 8 3

9 6 5 4 3 8 1 7 2

4 8 3 7 1 2 6 9 5

7 2 8 6 9 1 5 3 4

3 1 4 8 2 5 7 6 9

6 5 9 3 4 7 2 1 8

Here lies the reader who will never open this book. He is forever dead.

Taking a new step, uttering a new word, is what people fear most. ― Fyodor Dostoyevsky, Crime and Punishment

Offline

**anonimnystefy****Real Member**- From: The Foundation
- Registered: 2011-05-23
- Posts: 15,544

just for practice:

*Last edited by anonimnystefy (2011-09-29 08:13:23)*

Here lies the reader who will never open this book. He is forever dead.

Taking a new step, uttering a new word, is what people fear most. ― Fyodor Dostoyevsky, Crime and Punishment

Offline

**bobbym****Administrator**- From: Bumpkinland
- Registered: 2009-04-12
- Posts: 87,249

Funny thing is my program does noot get that one either.

**In mathematics, you don't understand things. You just get used to them.Of course that result can be rigorously obtained, but who cares?Combinatorics is Algebra and Algebra is Combinatorics.**

Offline

**anonimnystefy****Real Member**- From: The Foundation
- Registered: 2011-05-23
- Posts: 15,544

but why won't it work?

Here lies the reader who will never open this book. He is forever dead.

Offline

**bobbym****Administrator**- From: Bumpkinland
- Registered: 2009-04-12
- Posts: 87,249

Hi;

I do not know. I checked the rows and columns of the solution as well as

every 3 x 3 grid. It should have got that answer?!

**In mathematics, you don't understand things. You just get used to them.Of course that result can be rigorously obtained, but who cares?Combinatorics is Algebra and Algebra is Combinatorics.**

Offline

**anonimnystefy****Real Member**- From: The Foundation
- Registered: 2011-05-23
- Posts: 15,544

have you checked it compleely.it uses recursion.

Here lies the reader who will never open this book. He is forever dead.

Offline

**bobbym****Administrator**- From: Bumpkinland
- Registered: 2009-04-12
- Posts: 87,249

Hi anonimnystefy;

No, I haven't. I am looking at mine as to why it does not get that answer.

Of course that result can be rigorously obtained, but who cares?

Combinatorics is Algebra and Algebra is Combinatorics.

Offline

**anonimnystefy****Real Member**- From: The Foundation
- Registered: 2011-05-23
- Posts: 15,544

what does it get?

Here lies the reader who will never open this book. He is forever dead.

Offline

**bobbym****Administrator**- From: Bumpkinland
- Registered: 2009-04-12
- Posts: 87,249

Spits it out as if it does not have a solution! Where does that solution come from?

Of course that result can be rigorously obtained, but who cares?

Combinatorics is Algebra and Algebra is Combinatorics.

Offline

**anonimnystefy****Real Member**- From: The Foundation
- Registered: 2011-05-23
- Posts: 15,544

from me!

Here lies the reader who will never open this book. He is forever dead.

Offline

**bobbym****Administrator**- From: Bumpkinland
- Registered: 2009-04-12
- Posts: 87,249

That is what I was thinking. Did you try it on any others?

Of course that result can be rigorously obtained, but who cares?

Combinatorics is Algebra and Algebra is Combinatorics.

Offline

**anonimnystefy****Real Member**- From: The Foundation
- Registered: 2011-05-23
- Posts: 15,544

nope! :embarrassed!

Here lies the reader who will never open this book. He is forever dead.

Offline

**bobbym****Administrator**- From: Bumpkinland
- Registered: 2009-04-12
- Posts: 87,249

I can give you some examples if you do not have any.

Of course that result can be rigorously obtained, but who cares?

Combinatorics is Algebra and Algebra is Combinatorics.

Offline

**anonimnystefy****Real Member**- From: The Foundation
- Registered: 2011-05-23
- Posts: 15,544

i have bunch of them and i tried this one:

0 5 6 0 8 0 0 1 0

8 3 0 2 0 7 0 0 0

0 1 2 0 0 0 0 0 0

0 0 0 6 0 0 7 0 9

0 0 0 1 0 4 0 0 0

2 0 3 0 0 8 0 0 0

0 0 0 0 0 0 3 9 0

0 0 0 4 0 9 0 2 6

0 7 0 0 5 0 1 4 0

it won't work!

Here lies the reader who will never open this book. He is forever dead.

Offline

**anonimnystefy****Real Member**- From: The Foundation
- Registered: 2011-05-23
- Posts: 15,544

hi bobbym

i found an error on my side in the main code and i fixed it and i edited it but it still won't do it!

Here lies the reader who will never open this book. He is forever dead.

Offline

**bobbym****Administrator**- From: Bumpkinland
- Registered: 2009-04-12
- Posts: 87,249

Hi;

Something must be wrong with yours.

Of course that result can be rigorously obtained, but who cares?

Combinatorics is Algebra and Algebra is Combinatorics.

Offline

**anonimnystefy****Real Member**- From: The Foundation
- Registered: 2011-05-23
- Posts: 15,544

ya think?

Here lies the reader who will never open this book. He is forever dead.

Offline

**bobbym****Administrator**- From: Bumpkinland
- Registered: 2009-04-12
- Posts: 87,249

That is about all I can do. I do not speak Java. Even my C++ is too rusty. Use your debugger to go line by line watching the variables as you go.

Of course that result can be rigorously obtained, but who cares?

Combinatorics is Algebra and Algebra is Combinatorics.

Offline

**anonimnystefy****Real Member**- From: The Foundation
- Registered: 2011-05-23
- Posts: 15,544

where did you get Java?

i'm using Pascal.very basic.

i changed my code a bit and got a program that solves only the first row.it won't go to the next one!

Here lies the reader who will never open this book. He is forever dead.

Offline

**bobbym****Administrator**- From: Bumpkinland
- Registered: 2009-04-12
- Posts: 87,249

Hi anonimnystefy;

Forgive my sense of humor, I know, you told me you were using Lazarus.

In the other thread, just out of curiosity, I asked if lazarus has a debugger? Does it?

Of course that result can be rigorously obtained, but who cares?

Combinatorics is Algebra and Algebra is Combinatorics.

Offline

**anonimnystefy****Real Member**- From: The Foundation
- Registered: 2011-05-23
- Posts: 15,544

think so.

Here lies the reader who will never open this book. He is forever dead.

Offline

**bobbym****Administrator**- From: Bumpkinland
- Registered: 2009-04-12
- Posts: 87,249

Does it have a variable pane? Or a variable watch?

Of course that result can be rigorously obtained, but who cares?

Combinatorics is Algebra and Algebra is Combinatorics.

Offline

**anonimnystefy****Real Member**- From: The Foundation
- Registered: 2011-05-23
- Posts: 15,544

yes,yes it does.

Here lies the reader who will never open this book. He is forever dead.

Offline