home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AMOS PD CD
/
amospdcd.iso
/
551-575
/
apd558
/
amoner1
/
knight.txt
< prev
next >
Wrap
Text File
|
1993-11-29
|
6KB
|
153 lines
The "Problem Puzzle" is sort of a competition between our users.
We will bring up a puzzle and ask you to create a program that solves
it. The best program will get published on one of the future Amoner
disks. This disk's puzzle is:
The knight's trip
The chess board didn't only bring with it a large amount of games
(Chess, Checkers) but also a huge amount of puzzles and problems.
Some of those puzzles are almost impossible to the regular human mind.
Few of them were fully solved only after the computer was created...
The problem we will bring up today does not belong to that group
of problems, as It was solved before the computer was created. Even
so, It's still considered a very elegant problem at the field of
binary trees. When sending us a solution, We will take special
notice of the program's speed when looking for the best program. Yet,
we expect a reasonably good looking display of the solution.
Ok, now for the problem itself:
One day, when the White King was talking a walk in his royal gardens,
he stumbled across the White knight who sat, with a sad look on his
face, on one of the benches.
- "Hello my loyal Knight" Said the King, "We do look unhappy
today, don't we?"
- "Oh your highness" the knight bowed, "I been having this little
problem, you see, and I was sitting here all day long trying to solve
it..."
- "What seems to be the problem?" asked the king.
- "Well, I made a bet with the black queen, and the one who loses will
be eaten by the other. I have to solve this little problem by tomorrow
or I'm a horse's meat!"
- "Maybe I can help" suggested the King, "After all, I am well known
for my great wisdom and knowledge!"
The knights eyes lighted with renewed hope. Maybe the king will know
the answer!
- "Well, I declared, that by starting from the lower left corner of the
board, I can travel to each of the board's square without stepping
on the same square twice!
The White king scratched his head and said:
- "What made you make a damn declaration like that???"
- "hmmmm" murmured the Knight, in embarrassment, "You see, she said she
can do it with her queen's movement. I couldn't stand that
show off so I told her I could do it with my knight's movement... Please,
can you help me????"
- "No, I can't" said the king pulling an Amiga from under his gown,
"But It can!"
Ok, now, after this "colorful" representation of the problem, let's
take a look at it in a more "dry" mood.
We have a knight standing in the lower left corner of the board
(Chess's algebraic notation, Square a1.) Using Knight's move, the
knight has to jump to each of the squares in the board, without
stepping on the same square twice. Another way to look at the problem
is: Can a Knight who stands in the lower left corner visit each one
of the board's squares in 63 moves.
Let's simplify the problem a little. How does a knight move?
A knight moves two squares in any given
direction and then one square along the
perpendicular direction. An example of
the possible moves for a knight who stands
in one of the middle squares in shown in
figure 1.
Naturally, a knight cannot leave
the board by moving outside of it.
For example, a knight who stands
in the corner of the board can
move only to two possible squares,
as every other move will lead it
out of the board. (figure 2)
If we put the knight on the axis, we can see that if can make
the following moves:
X Y
--- ---
1 -2
2 -1
2 1
1 2
-1 2
-2 1
-2 -1
-1 -2
For those of you who like math, it can be quite a simple and cute
math problem to find the equation of the knight moves...
Where is exactly the problem?
----------------------------
Well, You will soon discover that after few moves the knight will
reach a position where it didn't visit all the squares, and getting
to those "unvisited" squares is not possible without visiting a square
on which it already stepped before.
An example of this is shown in figure 4. The blue circles
represent squares which the knight already visited. Some of the
squares are not marked with blue circles. Those are the squares which
the knight still got to visit. But how??? All the squares that
the knight can move into now, were already visited!
Solving the Problem.
--------------------
First, let me reassure you that there is a solution to this problem.
I wrote a tiny program using an 8x8 array who calculated every
possible move of the knight. However, it took my program a few days(!)
to reach the solution. Your program must be faster than that.
A friend of mine suggested that a program using 12x12 array will be
faster(!?!?), and I tend to agree but, then again, I'm
starting to talk too much. After all, you have to solve the problem,
not me :)
Good luck.
G. Broner.
Editor.