In the former Soviet republics, people play on 8x8 and 10x10 and in the 70s and 80s some tournaments were organized by a master named Spantsireti for 10x8 boards. The program Aurora also supports this variant. Tjalling Goedemoed (Kosmos at this forum) organized some 11x10 and 12x10 tournaments a few years ago. He calls these variants Ktar-draughts, after some fictitious planet in outer space whose inhabitants are known to play this game.
![Wink :wink:](./images/smilies/icon_wink.gif)
I decided to see if my C++ template engine was up to the job for handling such boards. 10x8 and 11x10 posed no problems as the number of squares (including ghost squares) comfortably fit within 64 bits. The 12x10 board however, was a nuisance. I knew that I had to give up my conventional 2 column ghost layout that I use for the other boards, but even with 1 ghost column, the number of bits needed was either 65 or 66, depending on the color of the upper-left square. It turns out that a rotated bit layout (by 90 degrees in either direction) needs 1 ghost square less. The diagrams below tell the rest of the story: the perft(9) score is the first to deviate from the regular 10x10 perft numbers. This makes sense because at d=9 white can start moving pieces from his bottom row.
The programming trick I used was to factorize my Board class into a Ghost class and a Grid class, each representing a 12x10 board, but with an arbitrary angle of rotation between them (in steps of 90 degrees of course). With some simple geometry and arithmetic, it was rather straightforward to compute the various bitboards required for a correct and efficient move generator. As a pleasant by-product, the code refactoring also made my heavy C++ template machinery compile an order of magnitude faster
![Cool 8)](./images/smilies/icon_cool.gif)
Perhaps at a later stage I'll generate the 3vs1 databases for these boards.
Rein
Code: Select all
58 45 32 19 6
52 39 26 13 0
59 46 33 20 7
53 40 27 14 1
60 47 34 21 8
54 41 28 15 2
61 48 35 22 9
55 42 29 16 3
62 49 36 23 10
56 43 30 17 4
63 50 37 24 11
57 44 31 18 5
b b b b b
b b b b b
b b b b b
b b b b b
b b b b b
. . . . .
. . . . .
w w w w w
w w w w w
w w w w w
w w w w w
w w w w w
Searching to nominal depth=9
perft[ 1/ 0.0] = 9 leafs, 1 nodes, 0.00s, 0.00 Mnps
perft[ 2/ 0.9] = 81 leafs, 10 nodes, 0.00s, 0.01 Mnps
perft[ 3/ 1.9] = 658 leafs, 91 nodes, 0.00s, 0.09 Mnps
perft[ 4/ 2.9] = 4265 leafs, 749 nodes, 0.00s, 0.75 Mnps
perft[ 5/ 3.8] = 27117 leafs, 5014 nodes, 0.00s, 5.01 Mnps
perft[ 6/ 4.8] = 167140 leafs, 32131 nodes, 0.02s, 2.01 Mnps
perft[ 7/ 5.8] = 1049442 leafs, 199271 nodes, 0.06s, 3.11 Mnps
perft[ 8/ 6.8] = 6483961 leafs, 1248713 nodes, 0.38s, 3.32 Mnps
perft[ 9/ 7.8] = 41291394 leafs, 7732674 nodes, 2.28s, 3.39 Mnps
End of program.