The eight queens problem
My program 8QUEENS.PRG included with SIM41.ZIP allows to find
all positions for eight queens over a chessboard where nothing queen
can capture another.
Example:
In order to describe each position I used a eight digits number where the
first digit is the position of the first queen within the first chessboard
column, the second digit is the position of the second queen within the
second column, and so on until the eight column.
The preceding position, for example, is 15863724.
The one in the first digit means that the queen of the first column is positioned
over the first row , the five in the second digit means that the queen of the
second column is positioned over the fifth row counting from up to down. The eight
in the third digit means that the third queen is positioned over the eight row,
and so on until the eight digit.
The program can begins the search from a partial initial position. For Example: 135
If you don't give this data , the program begins puting the first queen over the first upper
row of the first column. The other queens are out of the board at the beginning
and enter to the board from left to right, each queen searching in her assigned
column a row where can not capture to the preceding queens.
If is not possible to put a queen over a row in her assigned column, the queen does not
enter to the board and the program moves the queen in the preceding left column
to the following row down where the preceding queen will can not capture the other
queens at her left and again the program try to put a queen in the current column.
If it's successfull the program try to put a new queen in the following right
column. If the program reachs the eight column and achieves to put a queen in
that column , the position is shown on the calculator display.
Example: Search positions from partial initial position = 158
1) Execute sim41.exe
Calculator Keyboard PC Keyboard Display
------------------- ----------- -------
[XEQ]8QUEENS [K]8QUEENS[PC_ENTER_KEY] XEQ 8QUEENS
PUBLISH?
YES[R/S] YES[!] (Run in Alpha mode is !)
INITIAL POSITION?
158[R/S] 158[R] (Run in normal mode is R)
.....Wait a few seconds while the calculator searchs for the position.....
CODES:11432133
(My own codes for catalog the position's point of view.
I will explain it later)
[R/S] [R]
POSITION1=15863724
[R/S] [R]
ROTATION?
NO[R/S] NO[!]
(The position can be viewed from several view points if you answer YES.
I will explain it later)
...... Wait a few seconds while the calculator searchs for a new position ...
CODES:11432133
(The same point of view for a different position)
[R/S] [R]
POSITION2=16837425
[R/S] [R]
ROTATION?
NO[R/S] NO[!]
...... Wait a few seconds while the calculator searchs for a new position ...
CODES:11432133
[R/S] [R]
POSITION3=17468253
[R/S] [R]
ROTATION?
NO[R/S] NO[!]
...... Wait a few seconds while the calculator searchs for a new position ...
and so on.
Each position can be seen from four viewpoints: From the chessboard left side,
right side, from up side or from down side. I assume that the default side
for view and annotate the position is from downside.
For example, the position 15863724 can be viewed and annotated in the
following manner:
In the chessboard there are several simmetry axis:

You can use translations around the horizontal and vertical simmetry axis for
generate new positions from someone position. Also you can apply double translations:
first around the vertical axis and later around the horizontal axis.
The double translation first around the vertical axis and later around the horizontal
axis is equivalent to the double translation first around the horizontal axis
and later around the vertical axis.
Then, each chessboard position generates four positions depending the viewpoint,
other four positions if we make a translation around the horizontal axis, other
four positions if we make a translation around the vertical axis and other four
positions if we use a double translation.
Example: The initial position 15863724 generates the following positions:


Without rotations: 15863724, 36428571, 57263148, 82417536
With a rotation around the horizontal axis: 84136275, 17582463, 42736851, 63571428
With a rotation around the vertical axis: 42736851, 63571428, 84136275, 17582463
With double rotation around both axis: 57263148, 82417536, 15863724, 36428571
Note: I am assigning equal meaning to the words translation and rotation.
Theoretically each position generates sixteen positions but if you look at the
positions generated, each position is repeated two times. Then , each position
only produces eight positions: The original position and other seven
new positions.
One exception: There is one position with complete simmetry with reference to the
central point of the chessboard. This position only generates three new positions.
Try to find it using the program.
It's possible to find 92 different positions in a 8x8 chessboard
There
are 11 independent positions that generate seven new positions and one independent position
that generates only three new positions. (11*8+1*4 = 92 )
If you answer YES to the question ROTATION? in the program, the seven new positions associated with the current position are shown.
I assigned the code 11 to the original position viewed from downside, code 12 to the original position viewed from right side, code 13 to the original position viewed from up side and code 14 to the original position viewed from leftside.
The code 21 is the original position rotated around the horizontal axis and viewed from downside, 22 is the same position viewed from right side, 23 is the position viewed from upside and 24 means viewed from left side.
Code 31 means the original position rotated around the vertical axis and viewed from downside, codes 32, 33 and 34 mean this position viewed from leftside, upside and rightside respectively.
Codes 41, 42 , 43 and 44 mean the original position rotated around both axis and viewed from downside, leftside, upside and rightside respectively.
If you wish to find all positions it's enough that the queen in the first column will be put in the range from file 1 to file 4 because the positions obtained with the first queen in files 5 to 8 can be reached with a rotation around the horizontal axis.
The 8QUEENS program obtained 46 positions with the first queen varying from file 1 to file 4.
I named the "Associated position" to the position generated by rotating the original obtained position around the horizontal axis. The 8QUEENS program shows codes as four pairs of two digits numbers. The first two pairs correspond to two viewpoints in the original position and the last two pairs correspond to two viewpoints in the associated position.
Example: For the position: 15863724, CODES=11432133 mean that the original position can be viewed from viewpoint 11 and viewpoint 43 and the associated position 84136275 generates 15863724 from viewpoint 21 and viewpoint 33.