Author: Dann Corbit
Date: 21:06:14 05/31/02
I have already asked on a few USENET forums, but maybe CCC has already solved it
optimally.
Bitboard time.... Now, we can have the bits be represented normally (rotated by
zero degrees), or rotated 90, 270, 45, or 315 degrees. Here are some C arrays
that hold such representations:
typedef enum {
a8, b8, c8, d8, e8, f8, g8, h8,
a7, b7, c7, d7, e7, f7, g7, h7,
a6, b6, c6, d6, e6, f6, g6, h6,
a5, b5, c5, d5, e5, f5, g5, h5,
a4, b4, c4, d4, e4, f4, g4, h4,
a3, b3, c3, d3, e3, f3, g3, h3,
a2, b2, c2, d2, e2, f2, g2, h2,
a1, b1, c1, d1, e1, f1, g1, h1
} board_bit;
board_bit rot0[64] = {
a8, b8, c8, d8, e8, f8, g8, h8,
a7, b7, c7, d7, e7, f7, g7, h7,
a6, b6, c6, d6, e6, f6, g6, h6,
a5, b5, c5, d5, e5, f5, g5, h5,
a4, b4, c4, d4, e4, f4, g4, h4,
a3, b3, c3, d3, e3, f3, g3, h3,
a2, b2, c2, d2, e2, f2, g2, h2,
a1, b1, c1, d1, e1, f1, g1, h1
};
board_bit rot90[64] = {
h8, h7, h6, h5, h4, h3, h2, h1,
g8, g7, g6, g5, g4, g3, g2, g1,
f8, f7, f6, f5, f4, f3, f2, f1,
e8, e7, e6, e5, e4, e3, e2, e1,
d8, d7, d6, d5, d4, d3, d2, d1,
c8, c7, c6, c5, c4, c3, c2, c1,
b8, b7, b6, b5, b4, b3, b2, b1,
a8, a7, a6, a5, a4, a3, a2, a1,
};
board_bit rot270[64] = {
a1, a2, a3, a4, a5, a6, a7, a8,
b1, b2, b3, b4, b5, b6, b7, b8,
c1, c2, c3, c4, c5, c6, c7, c8,
d1, d2, d3, d4, d5, d6, d7, d8,
e1, e2, e3, e4, e5, e6, e7, e8,
f1, f2, f3, f4, f5, f6, f7, f8,
g1, g2, g3, g4, g5, g6, g7, g8,
h1, h2, h3, h4, h5, h6, h7, h8
};
board_bit rot45[64] = {
a8,
a7, b8,
a6, b7, c8,
a5, b6, c7, d8,
a4, b5, c6, d7, e8,
a3, b4, c5, d6, e7, f8,
a2, b3, c4, d5, e6, f7, g8,
a1, b2, c3, d4, e5, f6, g7, h8,
b1, c2, d3, e4, f5, g6, h7,
c1, d2, e3, f4, g5, h6,
d1, e2, f3, g4, h5,
e1, f2, g3, h4,
f1, g2, h3,
g1, h2,
h1
};
board_bit rot315[64] = {
h8,
g8, h7,
f8, g7, h6,
e8, f7, g6, h5,
d8, e7, f6, g5, h4,
c8, d7, e6, f5, g4, h3,
b8, c7, d6, e5, f4, g3, h2,
a8, b7, c6, d5, e4, f3, g2, h1,
a7, b6, c5, d4, e3, f2, g1,
a6, b5, c4, d3, e2, f1,
a5, b4, c3, d2, e1,
a4, b3, c2, d1,
a3, b2, c1,
a2, b1,
a1
};
Now, my question is:
What is the fastest way to transform a 64 bit integer in the format rot0 into
the other formats and back? Iteration over all 64 bits is agonizingly painful.
Since all of these are fairly simple permutations, it seems that there ought to
be a very rapid way to do it.
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.