Code: Select all
#define FALSE 0
#define TRUE 1
#define QUIT 0
#define THINK 1
#define GETCMD 2
#define s32 signed __int32
#define u64 unsigned __int64
#define SQUARE64(x) (((((x) / 10) - 2) << 3) + ((x) - ((x) / 10 * 10) - 1))
#define SQUARE120(x) (((((x) >> 3) + 2) * 10) + (((x) & 7) + 1))
void Think(void);
void Initialize(void);
void GetCmd(void);
s32 main(void);
u64 dir7p[64];
u64 dir9p[64];
u64 dir7m[64];
u64 dir9m[64];
u64 dir1p[64];
u64 dir8p[64];
u64 dir1m[64];
u64 dir8m[64];
u64 dirKn[64];
u64 dirKi[64];
s32 mode = GETCMD;
u64 *dirPtr[8] = { dir7p, dir9p, dir7m, dir9m, dir1p, dir8p, dir1m, dir8m };
void Think() {
}
void GetCmd() {
mode = QUIT;
}
void Initialize() {
s32 i, fs120, ts120, fs64, ts64;
s32 dir[8] = { 9, 11, -9, -11, 1, 10, -1, -10 };
s32 din[8] = { 8, 12, 19, 21, -8, -12, -19, -21 };
s32 initBoard[120] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
for (fs64 = 63; fs64 >= 0; fs64--) {
fs120 = SQUARE120(fs64);
dirKi[fs64] = 0;
dirKn[fs64] = 0;
for (i = 7; i >= 0; i--) {
ts120 = fs120 + din[i];
if (initBoard[ts120]) {
dirKn[fs64] |= (u64)1 << SQUARE64(ts120);
}
dirPtr[i][fs64] = 0;
ts120 = fs120 + dir[i];
if (initBoard[ts120]) {
ts64 = SQUARE64(ts120);
dirKi[fs64] |= (u64)1 << ts64;
while(1) {
dirPtr[i][fs64] |= (u64)1 << ts64;
ts120 += dir[i];
if (!initBoard[ts120]) break;
ts64 = SQUARE64(ts120);
}
}
}
}
}
s32 main()
{
Initialize();
while (mode) {
if (mode == THINK) Think();
GetCmd();
}
return 0;
}