This is a past question from a programming competition.

On a chess board (8 squares by 8 squares), there's is a knight sitting

on b1 (2 from the left of the bottom row). To cut the crap, find out

how a knight moves yourself, if you don't already know.

The knight is given 3 moves and programmers have to produce the output

of all possible positions the knight can be at in 3 moves (where none

of these final positions could also be achieved in 2 moves eg moving 2

up 1 left and finally 1 right 2 down) in the form:

O O O O O O O O

O O O O O O O O

O O O O O O O O

O O O O O O O O

O O O O O O O O

O O O O O O O O

O O O O O O O O

O O O O O O O O

^

We use a hat to symbolise where the knight is and in my figure above,

that's where the knight ALWAYS starts.

Now I know that there are a maximum of 8 ways a knight can move.

If I call topleft() where the knight moves 2 up 1 left, upleft() where

the knight moves 1 up 2 left, downleft() where the knight moves 1 down

2 left and btmleft 2 down 1 left (intuitively figuring out the

corresponding four) there are 8 functions representing a knight's

possible movements.

Now I'm not gonna use letters and numbers for the coords of the

chessboard but rather x and y where the 1, 1 is the bottom left corner

of a chessboard. So I define a struct called co

struct co {

int x, y;

};

Each of the 'movement' functions returns a struct co eg:

struct co topleft(int x, int y)

{

struct co temp;

if ( (x-1) >= 1 && (y+2) <=

{

temp.x = x;

temp.y = y;

return temp;

} else {

temp.x = 0;

temp.y = 0;

return temp;

}

}

In the main function I plan to create a temporary struct co and a

struct co array called pos with 40 elements which is probably a little

much.

So:

struct co temp;

struct co pos[40];

temp.x = 2;

temp.y = 1; /* where every knight starts */

temp = topleft(temp.x, temp.y);

if ( (temp.x != 0) && (temp.y != 0) ) {

temp = topleft(temp.x, temp.y);

if ( (temp.x != 0) && (temp.y != 0) )

temp = topleft(temp.x, temp.y);

if ( (temp.x != 0) && (temp.y != 0) )

pos[0] = temp;

}

temp.x = 2;

temp.y = 1;

/* etc. */

So it goes on an on: topleft, topleft, topleft

topleft, topleft, topright

topleft, topleft, upleft

But I could be writing over 1000 lines of code just for this program!

The competition only allowed and only allows 2 hours to do what you

can and submit your source code and executable via email to wherever

they collect it!

How do I better do this program? Have I got the gist of it? Any of it?

Bert