![]() |
Cinnamon
1.0
chess engine
|
00001 #ifndef NAMESPACES_H_ 00002 #define NAMESPACES_H_ 00003 00004 #include <algorithm> 00005 #include <sys/stat.h> 00006 #include <sys/timeb.h> 00007 #ifdef _WIN32 00008 #include <windows.h> 00009 #include <time.h> 00010 #else 00011 #include <sys/mman.h> 00012 #endif 00013 00014 namespace _board { 00015 using namespace std; 00016 00017 static const string NAME ="Cinnamon 1.0"; 00018 static const string STARTPOS ="rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; 00019 00020 typedef unsigned char uchar; 00021 typedef long long unsigned u64; 00022 00023 00024 #define assert(a) if(!(a)){cout<<endl<<_time::getLocalTime()<<" ********************************** assert error IN "<<__FILE__<< " line "<<__LINE__<<" **********************************"<<endl<<flush;exit(1);}; 00025 00026 #ifdef DEBUG_MODE 00027 00028 #define ASSERT(a) assert(a) 00029 #define INC(a) (a++) 00030 00031 #else 00032 00033 #define ASSERT(a) 00034 #define INC(a) 00035 00036 #endif 00037 00038 typedef struct { 00039 uchar promotionPiece; 00040 char pieceFrom; 00041 uchar capturedPiece; 00042 uchar from; 00043 uchar to; 00044 char side; 00045 uchar type; 00046 int score; 00047 bool used; 00048 } _Tmove; 00049 00050 typedef struct { 00051 _Tmove* moveList; 00052 int size; 00053 } _TmoveP; 00054 00055 static const int BLACK = 0; 00056 static const int WHITE = 1; 00057 static const int _INFINITE = 32000; 00058 #ifndef NO_FP_MODE 00059 static const int FUTIL_MARGIN =154; 00060 static const int EXT_FUTILY_MARGIN =392; 00061 static const int RAZOR_MARGIN =1071; 00062 #endif 00063 static const u64 POW2_0 =0x1ULL; 00064 static const u64 POW2_1 =0x2ULL; 00065 static const u64 POW2_2 =0x4ULL; 00066 static const u64 POW2_3 =0x8ULL; 00067 static const u64 POW2_4 =0x10ULL; 00068 static const u64 POW2_5 =0x20ULL; 00069 static const u64 POW2_6 =0x40ULL; 00070 static const u64 POW2_7 =0x80ULL; 00071 static const u64 POW2_56 =0x100000000000000ULL; 00072 static const u64 POW2_57 =0x200000000000000ULL; 00073 static const u64 POW2_58 =0x400000000000000ULL; 00074 static const u64 POW2_59 =0x800000000000000ULL; 00075 static const u64 POW2_60 =0x1000000000000000ULL; 00076 static const u64 POW2_61 =0x2000000000000000ULL; 00077 static const u64 POW2_62 =0x4000000000000000ULL; 00078 static const u64 POW2_63 =0x8000000000000000ULL; 00079 static const u64 NOTPOW2_0 =0xfffffffffffffffeULL; 00080 static const u64 NOTPOW2_1 =0xfffffffffffffffdULL; 00081 static const u64 NOTPOW2_2 =0xfffffffffffffffbULL; 00082 static const u64 NOTPOW2_3 =0xfffffffffffffff7ULL; 00083 static const u64 NOTPOW2_4 =0xffffffffffffffefULL; 00084 static const u64 NOTPOW2_5 =0xffffffffffffffdfULL; 00085 static const u64 NOTPOW2_7 =0xffffffffffffff7fULL; 00086 static const u64 NOTPOW2_56 =0xfeffffffffffffffULL; 00087 static const u64 NOTPOW2_57 =0xfdffffffffffffffULL; 00088 static const u64 NOTPOW2_58 =0xfbffffffffffffffULL; 00089 static const u64 NOTPOW2_59 =0xf7ffffffffffffffULL; 00090 static const u64 NOTPOW2_60 =0xefffffffffffffffULL; 00091 static const u64 NOTPOW2_61 =0xdfffffffffffffffULL; 00092 static const u64 NOTPOW2_63 =0x7fffffffffffffffULL; 00093 00094 00095 00096 static const string BOARD[64] = { 00097 "h1", "g1", "f1", "e1", "d1", "c1", "b1", "a1", 00098 "h2", "g2", "f2", "e2", "d2", "c2", "b2", "a2", 00099 "h3", "g3", "f3", "e3", "d3", "c3", "b3", "a3", 00100 "h4", "g4", "f4", "e4", "d4", "c4", "b4", "a4", 00101 "h5", "g5", "f5", "e5", "d5", "c5", "b5", "a5", 00102 "h6", "g6", "f6", "e6", "d6", "c6", "b6", "a6", 00103 "h7", "g7", "f7", "e7", "d7", "c7", "b7", "a7", 00104 "h8", "g8", "f8", "e8", "d8", "c8", "b8", "a8" 00105 }; 00106 00107 static const char FEN_PIECE[]= {'p','P','r','R','b','B','n','N','k','K','q','Q','-'}; 00108 00109 static const int INV_FEN[]= { 00110 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 00111 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 00112 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 00113 0xFF,0xFF,5,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,9,0xFF,0xFF,7,0xFF,1,11,3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 00114 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,4,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,8,0xFF,0xFF,6,0xFF,0,10,2,0xFF,0xFF,0xFF, 00115 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 00116 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 00117 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 00118 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 00119 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 00120 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF 00121 }; 00122 00123 static const char ORIZ_RIGHT[]= { 00124 0,0,0,0,0,0,0,0, 00125 8,8,8,8,8,8,8,8, 00126 16,16,16,16,16,16,16,16, 00127 24,24,24,24,24,24,24,24, 00128 32,32,32,32,32,32,32,32, 00129 40,40,40,40,40,40,40,40, 00130 48,48,48,48,48,48,48,48, 00131 56,56,56,56,56,56,56,56 00132 }; 00133 00134 static const char ORIZ_LEFT[]= { 00135 7,7,7,7,7,7,7,7, 00136 15,15,15,15,15,15,15,15, 00137 23,23,23,23,23,23,23,23, 00138 31,31,31,31,31,31,31,31, 00139 39,39,39,39,39,39,39,39, 00140 47,47,47,47,47,47,47,47, 00141 55,55,55,55,55,55,55,55, 00142 63,63,63,63,63,63,63,63 00143 }; 00144 00145 static const char VERT_UPPER[]= { 00146 56,57,58,59,60,61,62,63, 00147 56,57,58,59,60,61,62,63, 00148 56,57,58,59,60,61,62,63, 00149 56,57,58,59,60,61,62,63, 00150 56,57,58,59,60,61,62,63, 00151 56,57,58,59,60,61,62,63, 00152 56,57,58,59,60,61,62,63, 00153 56,57,58,59,60,61,62,63 00154 }; 00155 00156 static const char VERT_LOWER[]= { 00157 0,1,2,3,4,5,6,7, 00158 0,1,2,3,4,5,6,7, 00159 0,1,2,3,4,5,6,7, 00160 0,1,2,3,4,5,6,7, 00161 0,1,2,3,4,5,6,7, 00162 0,1,2,3,4,5,6,7, 00163 0,1,2,3,4,5,6,7, 00164 0,1,2,3,4,5,6,7 00165 }; 00166 00167 static const u64 RANDOM_KEY[15][64]= { 00168 #include "random.inc" 00169 }; 00170 00171 static const char RIGHT_UPPER[]= { 00172 63, 55, 47, 39, 31, 23, 15, 7, 62, 63, 55, 47, 39, 31, 23, 15, 61, 62, 00173 63, 55, 47, 39, 31, 23, 60, 61, 62, 63, 55, 47, 39, 31, 59, 60, 61, 62, 63, 00174 55, 47, 39, 58, 59, 60, 61, 62, 63, 55, 47, 00175 57, 58, 59, 60, 61, 62, 63, 55, 56, 57, 58, 59, 60, 61, 62, 63 00176 }; 00177 00178 static const char RIGHT_LOWER[]= { 00179 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 16, 8, 0, 1, 00180 2, 3, 4, 5, 24, 16, 8, 0, 1, 2, 3, 4, 32, 24, 16, 8, 0, 1, 2, 00181 3, 40, 32, 24, 16, 8, 0, 1, 2, 48, 40, 32, 24, 16, 8, 0, 1, 56, 00182 48, 40, 32, 24, 16, 8, 0 00183 }; 00184 00185 static const char LEFT_UPPER[]= { 00186 0, 8, 16, 24, 32, 40, 48, 56, 8, 16, 24, 32, 40, 48, 56, 57, 16, 24, 00187 32, 40, 48, 56, 57, 58, 24, 32, 40, 48, 56, 57, 58, 59, 32, 40, 48, 00188 56, 57, 58, 59, 60, 40, 48, 56, 57, 58, 59, 60, 61, 48, 56, 57, 58, 00189 59, 60, 61, 62, 56, 57, 58, 59, 60, 61, 62, 63 00190 }; 00191 00192 static const char LEFT_LOWER[]= { 00193 0, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 15, 2, 3, 4, 5, 00194 6, 7, 15, 23, 3, 4, 5, 6, 7, 15, 23, 31, 4, 5, 6, 7, 15, 23, 31, 00195 39, 5, 6, 7, 15, 23, 31, 39, 47, 6, 7, 15, 23, 31, 39, 47, 55, 7, 00196 15, 23, 31, 39, 47, 55, 63 00197 }; 00198 00199 00200 static const u64 RANK_FILE[64] = { 00201 0x1010101010101feULL, 0x2020202020202fdULL, 00202 0x4040404040404fbULL, 0x8080808080808f7ULL, 0x10101010101010efULL, 00203 0x20202020202020dfULL, 0x40404040404040bfULL, 0x808080808080807fULL, 00204 0x10101010101fe01ULL, 0x20202020202fd02ULL, 0x40404040404fb04ULL, 00205 0x80808080808f708ULL, 0x101010101010ef10ULL, 0x202020202020df20ULL, 00206 0x404040404040bf40ULL, 0x8080808080807f80ULL, 0x101010101fe0101ULL, 00207 0x202020202fd0202ULL, 0x404040404fb0404ULL, 0x808080808f70808ULL, 00208 0x1010101010ef1010ULL, 0x2020202020df2020ULL, 0x4040404040bf4040ULL, 00209 0x80808080807f8080ULL, 0x1010101fe010101ULL, 0x2020202fd020202ULL, 00210 0x4040404fb040404ULL, 0x8080808f7080808ULL, 0x10101010ef101010ULL, 00211 0x20202020df202020ULL, 0x40404040bf404040ULL, 0x808080807f808080ULL, 00212 0x10101fe01010101ULL, 0x20202fd02020202ULL, 0x40404fb04040404ULL, 00213 0x80808f708080808ULL, 0x101010ef10101010ULL, 0x202020df20202020ULL, 00214 0x404040bf40404040ULL, 0x8080807f80808080ULL, 0x101fe0101010101ULL, 00215 0x202fd0202020202ULL, 0x404fb0404040404ULL, 0x808f70808080808ULL, 00216 0x1010ef1010101010ULL, 0x2020df2020202020ULL, 0x4040bf4040404040ULL, 00217 0x80807f8080808080ULL, 0x1fe010101010101ULL, 0x2fd020202020202ULL, 00218 0x4fb040404040404ULL, 0x8f7080808080808ULL, 0x10ef101010101010ULL, 00219 0x20df202020202020ULL, 0x40bf404040404040ULL, 0x807f808080808080ULL, 00220 0xfe01010101010101ULL, 0xfd02020202020202ULL, 0xfb04040404040404ULL, 00221 0xf708080808080808ULL, 0xef10101010101010ULL, 0xdf20202020202020ULL, 00222 0xbf40404040404040ULL, 0x7f80808080808080ULL 00223 }; 00224 00225 static const u64 RANK_BOUND[64] = { 00226 0x2ULL, 0x5ULL, 0xaULL, 0x14ULL, 0x28ULL, 00227 0x50ULL, 0xa0ULL, 0x40ULL, 0x200ULL, 0x500ULL, 0xa00ULL, 0x1400ULL, 00228 0x2800ULL, 0x5000ULL, 0xa000ULL, 0x4000ULL, 0x20000ULL, 0x50000ULL, 00229 0xa0000ULL, 0x140000ULL, 0x280000ULL, 0x500000ULL, 0xa00000ULL, 00230 0x400000ULL, 0x2000000ULL, 0x5000000ULL, 0xa000000ULL, 0x14000000ULL, 00231 0x28000000ULL, 0x50000000ULL, 0xa0000000ULL, 0x40000000ULL, 00232 0x200000000ULL, 0x500000000ULL, 0xa00000000ULL, 0x1400000000ULL, 00233 0x2800000000ULL, 0x5000000000ULL, 0xa000000000ULL, 0x4000000000ULL, 00234 0x20000000000ULL, 0x50000000000ULL, 0xa0000000000ULL, 00235 0x140000000000ULL, 0x280000000000ULL, 0x500000000000ULL, 00236 0xa00000000000ULL, 0x400000000000ULL, 0x2000000000000ULL, 00237 0x5000000000000ULL, 0xa000000000000ULL, 0x14000000000000ULL, 00238 0x28000000000000ULL, 0x50000000000000ULL, 0xa0000000000000ULL, 00239 0x40000000000000ULL, 0x200000000000000ULL, 0x500000000000000ULL, 00240 0xa00000000000000ULL, 0x1400000000000000ULL, 0x2800000000000000ULL, 00241 0x5000000000000000ULL, 0xa000000000000000ULL, 0x4000000000000000ULL 00242 }; 00243 00244 static const u64 RANK[64] = { 00245 0xffULL, 0xffULL, 0xffULL, 0xffULL, 0xffULL, 00246 0xffULL, 0xffULL, 0xffULL, 0xff00ULL, 0xff00ULL, 0xff00ULL, 00247 0xff00ULL, 0xff00ULL, 0xff00ULL, 0xff00ULL, 0xff00ULL, 0xff0000ULL, 00248 0xff0000ULL, 0xff0000ULL, 0xff0000ULL, 0xff0000ULL, 0xff0000ULL, 00249 0xff0000ULL, 0xff0000ULL, 0xff000000ULL, 0xff000000ULL, 0xff000000ULL, 00250 0xff000000ULL, 0xff000000ULL, 0xff000000ULL, 0xff000000ULL, 00251 0xff000000ULL, 0xff00000000ULL, 0xff00000000ULL, 0xff00000000ULL, 00252 0xff00000000ULL, 0xff00000000ULL, 0xff00000000ULL, 0xff00000000ULL, 00253 0xff00000000ULL, 0xff0000000000ULL, 0xff0000000000ULL, 00254 0xff0000000000ULL, 0xff0000000000ULL, 0xff0000000000ULL, 00255 0xff0000000000ULL, 0xff0000000000ULL, 0xff0000000000ULL, 0xff000000000000ULL, 00256 0xff000000000000ULL, 0xff000000000000ULL, 0xff000000000000ULL, 00257 0xff000000000000ULL, 0xff000000000000ULL, 0xff000000000000ULL, 00258 0xff000000000000ULL, 0xff00000000000000ULL, 0xff00000000000000ULL, 00259 0xff00000000000000ULL, 0xff00000000000000ULL, 0xff00000000000000ULL, 00260 0xff00000000000000ULL, 0xff00000000000000ULL, 0xff00000000000000ULL 00261 }; 00262 00263 static const u64 RIGHT_DIAG[64] = { 00264 0x8040201008040200ULL, 0x80402010080400ULL, 00265 0x804020100800ULL, 0x8040201000ULL, 0x80402000ULL, 0x804000ULL, 00266 0x8000ULL, 0x0ULL, 0x4020100804020000ULL, 0x8040201008040001ULL, 00267 0x80402010080002ULL, 0x804020100004ULL, 0x8040200008ULL, 0x80400010ULL, 00268 0x800020ULL, 0x40ULL, 0x2010080402000000ULL, 0x4020100804000100ULL, 00269 0x8040201008000201ULL, 0x80402010000402ULL, 0x804020000804ULL, 00270 0x8040001008ULL, 0x80002010ULL, 0x4020ULL, 0x1008040200000000ULL, 00271 0x2010080400010000ULL, 0x4020100800020100ULL, 0x8040201000040201ULL, 00272 0x80402000080402ULL, 0x804000100804ULL, 0x8000201008ULL, 0x402010ULL, 00273 0x804020000000000ULL, 0x1008040001000000ULL, 0x2010080002010000ULL, 00274 0x4020100004020100ULL, 0x8040200008040201ULL, 0x80400010080402ULL, 00275 0x800020100804ULL, 0x40201008ULL, 0x402000000000000ULL, 00276 0x804000100000000ULL, 0x1008000201000000ULL, 0x2010000402010000ULL, 00277 0x4020000804020100ULL, 0x8040001008040201ULL, 0x80002010080402ULL, 00278 0x4020100804ULL, 0x200000000000000ULL, 0x400010000000000ULL, 00279 0x800020100000000ULL, 0x1000040201000000ULL, 0x2000080402010000ULL, 00280 0x4000100804020100ULL, 0x8000201008040201ULL, 0x402010080402ULL, 00281 0x0ULL, 0x1000000000000ULL, 0x2010000000000ULL, 0x4020100000000ULL, 00282 0x8040201000000ULL, 0x10080402010000ULL, 0x20100804020100ULL, 00283 0x40201008040201ULL 00284 }; 00285 00286 static const u64 LEFT_DIAG[64] = { 00287 0x0ULL, 0x100ULL, 0x10200ULL, 0x1020400ULL, 00288 0x102040800ULL, 0x10204081000ULL, 0x1020408102000ULL, 00289 0x102040810204000ULL, 0x2ULL, 0x10004ULL, 0x1020008ULL, 0x102040010ULL, 00290 0x10204080020ULL, 0x1020408100040ULL, 0x102040810200080ULL, 00291 0x204081020400000ULL, 0x204ULL, 0x1000408ULL, 0x102000810ULL, 00292 0x10204001020ULL, 0x1020408002040ULL, 0x102040810004080ULL, 00293 0x204081020008000ULL, 0x408102040000000ULL, 0x20408ULL, 0x100040810ULL, 00294 0x10200081020ULL, 0x1020400102040ULL, 0x102040800204080ULL, 00295 0x204081000408000ULL, 0x408102000800000ULL, 0x810204000000000ULL, 00296 0x2040810ULL, 0x10004081020ULL, 0x1020008102040ULL, 00297 0x102040010204080ULL, 0x204080020408000ULL, 0x408100040800000ULL, 00298 0x810200080000000ULL, 0x1020400000000000ULL, 0x204081020ULL, 00299 0x1000408102040ULL, 0x102000810204080ULL, 0x204001020408000ULL, 00300 0x408002040800000ULL, 0x810004080000000ULL, 0x1020008000000000ULL, 00301 0x2040000000000000ULL, 0x20408102040ULL, 0x100040810204080ULL, 00302 0x200081020408000ULL, 0x400102040800000ULL, 0x800204080000000ULL, 00303 0x1000408000000000ULL, 0x2000800000000000ULL, 0x4000000000000000ULL, 00304 0x2040810204080ULL, 0x4081020408000ULL, 0x8102040800000ULL, 00305 0x10204080000000ULL, 0x20408000000000ULL, 0x40800000000000ULL, 00306 0x80000000000000ULL, 0x0ULL 00307 }; 00308 00309 static const u64 LEFT_RIGHT_DIAG[64] = { 00310 0x8040201008040200ULL,0x80402010080500ULL,0x804020110a00ULL,0x8041221400ULL,0x182442800ULL, 00311 0x10204885000ULL,0x102040810a000ULL,0x102040810204000ULL,0x4020100804020002ULL,0x8040201008050005ULL,0x804020110a000aULL, 00312 0x804122140014ULL,0x18244280028ULL,0x1020488500050ULL,0x102040810a000a0ULL,0x204081020400040ULL,0x2010080402000204ULL, 00313 0x4020100805000508ULL,0x804020110a000a11ULL,0x80412214001422ULL,0x1824428002844ULL,0x102048850005088ULL,0x2040810a000a010ULL, 00314 0x408102040004020ULL,0x1008040200020408ULL,0x2010080500050810ULL,0x4020110a000a1120ULL,0x8041221400142241ULL,0x182442800284482ULL,0x204885000508804ULL, 00315 0x40810a000a01008ULL,0x810204000402010ULL,0x804020002040810ULL,0x1008050005081020ULL,0x20110a000a112040ULL,0x4122140014224180ULL,0x8244280028448201ULL, 00316 0x488500050880402ULL,0x810a000a0100804ULL,0x1020400040201008ULL,0x402000204081020ULL,0x805000508102040ULL,0x110a000a11204080ULL, 00317 0x2214001422418000ULL,0x4428002844820100ULL,0x8850005088040201ULL,0x10a000a010080402ULL,0x2040004020100804ULL,0x200020408102040ULL, 00318 0x500050810204080ULL,0xa000a1120408000ULL,0x1400142241800000ULL,0x2800284482010000ULL,0x5000508804020100ULL,0xa000a01008040201ULL, 00319 0x4000402010080402ULL,0x2040810204080ULL,0x5081020408000ULL,0xa112040800000ULL,0x14224180000000ULL,0x28448201000000ULL,0x50880402010000ULL, 00320 0xa0100804020100ULL,0x40201008040201ULL 00321 }; 00322 00323 static const u64 LEFT_RIGHT_RANK_FILE[64] = { 00324 0x81412111090503feULL,0x2824222120a07fdULL,0x404844424150efbULL,0x8080888492a1cf7ULL,0x10101011925438efULL,0x2020212224a870dfULL,0x404142444850e0bfULL,0x8182848890a0c07fULL, 00325 0x412111090503fe03ULL,0x824222120a07fd07ULL,0x4844424150efb0eULL,0x80888492a1cf71cULL,0x101011925438ef38ULL,0x20212224a870df70ULL,0x4142444850e0bfe0ULL,0x82848890a0c07fc0ULL, 00326 0x2111090503fe0305ULL,0x4222120a07fd070aULL,0x844424150efb0e15ULL,0x888492a1cf71c2aULL,0x1011925438ef3854ULL,0x212224a870df70a8ULL,0x42444850e0bfe050ULL,0x848890a0c07fc0a0ULL, 00327 0x11090503fe030509ULL,0x22120a07fd070a12ULL,0x4424150efb0e1524ULL,0x88492a1cf71c2a49ULL,0x11925438ef385492ULL,0x2224a870df70a824ULL,0x444850e0bfe05048ULL,0x8890a0c07fc0a090ULL, 00328 0x90503fe03050911ULL,0x120a07fd070a1222ULL,0x24150efb0e152444ULL,0x492a1cf71c2a4988ULL,0x925438ef38549211ULL,0x24a870df70a82422ULL,0x4850e0bfe0504844ULL,0x90a0c07fc0a09088ULL, 00329 0x503fe0305091121ULL,0xa07fd070a122242ULL,0x150efb0e15244484ULL,0x2a1cf71c2a498808ULL,0x5438ef3854921110ULL,0xa870df70a8242221ULL,0x50e0bfe050484442ULL,0xa0c07fc0a0908884ULL, 00330 0x3fe030509112141ULL,0x7fd070a12224282ULL,0xefb0e1524448404ULL,0x1cf71c2a49880808ULL,0x38ef385492111010ULL,0x70df70a824222120ULL,0xe0bfe05048444241ULL,0xc07fc0a090888482ULL, 00331 0xfe03050911214181ULL,0xfd070a1222428202ULL,0xfb0e152444840404ULL,0xf71c2a4988080808ULL,0xef38549211101010ULL,0xdf70a82422212020ULL,0xbfe0504844424140ULL,0x7fc0a09088848281ULL 00332 }; 00333 00334 static const char FILE_AT[64] = { 00335 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 00336 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 00337 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7 00338 }; 00339 00340 static const char RANK_AT[64] = { 00341 0,0,0,0,0,0,0,0, 00342 1,1,1,1,1,1,1,1, 00343 2,2,2,2,2,2,2,2, 00344 3,3,3,3,3,3,3,3, 00345 4,4,4,4,4,4,4,4, 00346 5,5,5,5,5,5,5,5, 00347 6,6,6,6,6,6,6,6, 00348 7,7,7,7,7,7,7,7 00349 }; 00350 00351 static const u64 PAWNS_7_2[2] = { 0xFF000000000000ULL, 0xFF00ULL }; 00352 00353 static const u64 FILE_[64] = { 00354 0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL,0x4040404040404040ULL, 00355 0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL,0x4040404040404040ULL, 00356 0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL,0x4040404040404040ULL, 00357 0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL, 00358 0x4040404040404040ULL,0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL, 00359 0x4040404040404040ULL,0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL, 00360 0x4040404040404040ULL,0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL, 00361 0x4040404040404040ULL,0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL, 00362 0x4040404040404040ULL,0x8080808080808080ULL 00363 }; 00364 00365 00366 static const u64 POW2[64] = { 00367 0x1ULL,0x2ULL,0x4ULL,0x8ULL,0x10ULL,0x20ULL,0x40ULL,0x80ULL,0x100ULL,0x200ULL,0x400ULL,0x800ULL,0x1000ULL,0x2000ULL,0x4000ULL,0x8000ULL,0x10000ULL,0x20000ULL, 00368 0x40000ULL,0x80000ULL,0x100000ULL,0x200000ULL,0x400000ULL,0x800000ULL,0x1000000ULL,0x2000000ULL,0x4000000ULL,0x8000000ULL,0x10000000ULL,0x20000000ULL,0x40000000ULL,0x80000000ULL, 00369 0x100000000ULL,0x200000000ULL,0x400000000ULL,0x800000000ULL,0x1000000000ULL,0x2000000000ULL,0x4000000000ULL,0x8000000000ULL,0x10000000000ULL,0x20000000000ULL,0x40000000000ULL, 00370 0x80000000000ULL,0x100000000000ULL,0x200000000000ULL,0x400000000000ULL,0x800000000000ULL,0x1000000000000ULL,0x2000000000000ULL,0x4000000000000ULL,0x8000000000000ULL,0x10000000000000ULL, 00371 0x20000000000000ULL,0x40000000000000ULL,0x80000000000000ULL,0x100000000000000ULL,0x200000000000000ULL,0x400000000000000ULL,0x800000000000000ULL,0x1000000000000000ULL,0x2000000000000000ULL, 00372 0x4000000000000000ULL,0x8000000000000000ULL 00373 }; 00374 00375 static const u64 NOTPOW2[64] = { 00376 0xfffffffffffffffeULL,0xfffffffffffffffdULL,0xfffffffffffffffbULL,0xfffffffffffffff7ULL,0xffffffffffffffefULL,0xffffffffffffffdfULL,0xffffffffffffffbfULL, 00377 0xffffffffffffff7fULL,0xfffffffffffffeffULL,0xfffffffffffffdffULL,0xfffffffffffffbffULL,0xfffffffffffff7ffULL,0xffffffffffffefffULL,0xffffffffffffdfffULL,0xffffffffffffbfffULL, 00378 0xffffffffffff7fffULL,0xfffffffffffeffffULL,0xfffffffffffdffffULL,0xfffffffffffbffffULL,0xfffffffffff7ffffULL,0xffffffffffefffffULL,0xffffffffffdfffffULL,0xffffffffffbfffffULL, 00379 0xffffffffff7fffffULL,0xfffffffffeffffffULL,0xfffffffffdffffffULL,0xfffffffffbffffffULL,0xfffffffff7ffffffULL,0xffffffffefffffffULL,0xffffffffdfffffffULL,0xffffffffbfffffffULL, 00380 0xffffffff7fffffffULL,0xfffffffeffffffffULL,0xfffffffdffffffffULL,0xfffffffbffffffffULL,0xfffffff7ffffffffULL,0xffffffefffffffffULL,0xffffffdfffffffffULL,0xffffffbfffffffffULL, 00381 0xffffff7fffffffffULL,0xfffffeffffffffffULL,0xfffffdffffffffffULL,0xfffffbffffffffffULL,0xfffff7ffffffffffULL,0xffffefffffffffffULL,0xffffdfffffffffffULL,0xffffbfffffffffffULL, 00382 0xffff7fffffffffffULL,0xfffeffffffffffffULL,0xfffdffffffffffffULL,0xfffbffffffffffffULL,0xfff7ffffffffffffULL,0xffefffffffffffffULL,0xffdfffffffffffffULL,0xffbfffffffffffffULL, 00383 0xff7fffffffffffffULL,0xfeffffffffffffffULL,0xfdffffffffffffffULL,0xfbffffffffffffffULL,0xf7ffffffffffffffULL,0xefffffffffffffffULL,0xdfffffffffffffffULL,0xbfffffffffffffffULL, 00384 0x7fffffffffffffffULL 00385 }; 00386 00387 static const u64 PAWN_CAPTURE_MASK[2][64] = { { 00388 0x0000000000000000ULL, 00389 0x0000000000000000ULL, 0x0000000000000000ULL, 0x0000000000000000ULL, 00390 0x0000000000000000ULL, 0x0000000000000000ULL, 0x0000000000000000ULL, 00391 0x0000000000000000ULL, 0x0000000000000002ULL, 0x0000000000000005ULL, 00392 0x000000000000000AULL, 0x0000000000000014ULL, 0x0000000000000028ULL, 00393 0x0000000000000050ULL, 0x00000000000000A0ULL, 0x0000000000000040ULL, 00394 0x0000000000000200ULL, 0x0000000000000500ULL, 0x0000000000000A00ULL, 00395 0x0000000000001400ULL, 0x0000000000002800ULL, 0x0000000000005000ULL, 00396 0x000000000000A000ULL, 0x0000000000004000ULL, 0x0000000000020000ULL, 00397 0x0000000000050000ULL, 0x00000000000A0000ULL, 0x0000000000140000ULL, 00398 0x0000000000280000ULL, 0x0000000000500000ULL, 0x0000000000A00000ULL, 00399 0x0000000000400000ULL, 0x0000000002000000ULL, 0x0000000005000000ULL, 00400 0x000000000A000000ULL, 0x0000000014000000ULL, 0x0000000028000000ULL, 00401 0x0000000050000000ULL, 0x00000000A0000000ULL, 0x0000000040000000ULL, 00402 0x0000000200000000ULL, 0x0000000500000000ULL, 0x0000000A00000000ULL, 00403 0x0000001400000000ULL, 0x0000002800000000ULL, 0x0000005000000000ULL, 00404 0x000000A000000000ULL, 0x0000004000000000ULL, 0x0000020000000000ULL, 00405 0x0000050000000000ULL, 0x00000A0000000000ULL, 0x0000140000000000ULL, 00406 0x0000280000000000ULL, 0x0000500000000000ULL, 0x0000A00000000000ULL, 00407 0x0000400000000000ULL, 0x0002000000000000ULL, 0x0005000000000000ULL, 00408 0x000A000000000000ULL, 0x0014000000000000ULL, 0x0028000000000000ULL, 00409 0x0050000000000000ULL, 0x00A0000000000000ULL, 0x0040000000000000ULL 00410 }, 00411 { 00412 0x0000000000000200ULL, 0x0000000000000500ULL, 0x0000000000000A00ULL, 00413 0x0000000000001400ULL, 0x0000000000002800ULL, 00414 0x0000000000005000ULL, 0x000000000000A000ULL, 00415 0x0000000000004000ULL, 0x0000000000020000ULL, 00416 0x0000000000050000ULL, 0x00000000000A0000ULL, 00417 0x0000000000140000ULL, 0x0000000000280000ULL, 00418 0x0000000000500000ULL, 0x0000000000A00000ULL, 00419 0x0000000000400000ULL, 0x0000000002000000ULL, 00420 0x0000000005000000ULL, 0x000000000A000000ULL, 00421 0x0000000014000000ULL, 0x0000000028000000ULL, 00422 0x0000000050000000ULL, 0x00000000A0000000ULL, 00423 0x0000000040000000ULL, 0x0000000200000000ULL, 00424 0x0000000500000000ULL, 0x0000000A00000000ULL, 00425 0x0000001400000000ULL, 0x0000002800000000ULL, 00426 0x0000005000000000ULL, 0x000000A000000000ULL, 00427 0x0000004000000000ULL, 0x0000020000000000ULL, 00428 0x0000050000000000ULL, 0x00000A0000000000ULL, 00429 0x0000140000000000ULL, 0x0000280000000000ULL, 00430 0x0000500000000000ULL, 0x0000A00000000000ULL, 00431 0x0000400000000000ULL, 0x0002000000000000ULL, 00432 0x0005000000000000ULL, 0x000A000000000000ULL, 00433 0x0014000000000000ULL, 0x0028000000000000ULL, 00434 0x0050000000000000ULL, 0x00A0000000000000ULL, 00435 0x0040000000000000ULL, 0x0200000000000000ULL, 00436 0x0500000000000000ULL, 0x0A00000000000000ULL, 00437 0x1400000000000000ULL, 0x2800000000000000ULL, 00438 0x5000000000000000ULL, 0xA000000000000000ULL, 00439 0x4000000000000000ULL, 0x0000000000000000ULL, 00440 0x0000000000000000ULL, 0x0000000000000000ULL, 00441 0x0000000000000000ULL, 0x0000000000000000ULL, 00442 0x0000000000000000ULL, 0x0000000000000000ULL, 00443 0x0000000000000000ULL 00444 } 00445 }; 00446 00447 static const u64 NEAR_MASK1[64] = { 00448 0x0000000000000302ULL, 0x0000000000000705ULL, 00449 0x0000000000000E0AULL, 0x0000000000001C14ULL, 0x0000000000003828ULL, 00450 0x0000000000007050ULL, 0x000000000000E0A0ULL, 0x000000000000C040ULL, 00451 0x0000000000030203ULL, 0x0000000000070507ULL, 0x00000000000E0A0EULL, 00452 0x00000000001C141CULL, 0x0000000000382838ULL, 0x0000000000705070ULL, 00453 0x0000000000E0A0E0ULL, 0x0000000000C040C0ULL, 0x0000000003020300ULL, 00454 0x0000000007050700ULL, 0x000000000E0A0E00ULL, 0x000000001C141C00ULL, 00455 0x0000000038283800ULL, 0x0000000070507000ULL, 0x00000000E0A0E000ULL, 00456 0x00000000C040C000ULL, 0x0000000302030000ULL, 0x0000000705070000ULL, 00457 0x0000000E0A0E0000ULL, 0x0000001C141C0000ULL, 0x0000003828380000ULL, 00458 0x0000007050700000ULL, 0x000000E0A0E00000ULL, 0x000000C040C00000ULL, 00459 0x0000030203000000ULL, 0x0000070507000000ULL, 0x00000E0A0E000000ULL, 00460 0x00001C141C000000ULL, 0x0000382838000000ULL, 0x0000705070000000ULL, 00461 0x0000E0A0E0000000ULL, 0x0000C040C0000000ULL, 0x0003020300000000ULL, 00462 0x0007050700000000ULL, 0x000E0A0E00000000ULL, 0x001C141C00000000ULL, 00463 0x0038283800000000ULL, 0x0070507000000000ULL, 0x00E0A0E000000000ULL, 00464 0x00C040C000000000ULL, 0x0302030000000000ULL, 0x0705070000000000ULL, 00465 0x0E0A0E0000000000ULL, 0x1C141C0000000000ULL, 0x3828380000000000ULL, 00466 0x7050700000000000ULL, 0xE0A0E00000000000ULL, 0xC040C00000000000ULL, 00467 0x0203000000000000ULL, 0x0507000000000000ULL, 0x0A0E000000000000ULL, 00468 0x141C000000000000ULL, 0x2838000000000000ULL, 0x5070000000000000ULL, 00469 0xA0E0000000000000ULL, 0x40C0000000000000ULL 00470 }; 00471 00472 static const u64 NEAR_MASK2[64] = { 00473 0x70706ULL,0xf0f0dULL,0x1f1f1bULL,0x3e3e36ULL,0x7c7c6cULL,0xf8f8d8ULL,0xf0f0b0ULL,0xe0e060ULL,0x7070607ULL,0xf0f0d0fULL,0x1f1f1b1fULL,0x3e3e363eULL,0x7c7c6c7cULL,0xf8f8d8f8ULL, 00474 0xf0f0b0f0ULL,0xe0e060e0ULL,0x707060707ULL,0xf0f0d0f0fULL,0x1f1f1b1f1fULL,0x3e3e363e3eULL,0x7c7c6c7c7cULL,0xf8f8d8f8f8ULL,0xf0f0b0f0f0ULL,0xe0e060e0e0ULL,0x70706070700ULL, 00475 0xf0f0d0f0f00ULL,0x1f1f1b1f1f00ULL,0x3e3e363e3e00ULL,0x7c7c6c7c7c00ULL,0xf8f8d8f8f800ULL,0xf0f0b0f0f000ULL,0xe0e060e0e000ULL,0x7070607070000ULL,0xf0f0d0f0f0000ULL,0x1f1f1b1f1f0000ULL, 00476 0x3e3e363e3e0000ULL,0x7c7c6c7c7c0000ULL,0xf8f8d8f8f80000ULL,0xf0f0b0f0f00000ULL,0xe0e060e0e00000ULL,0x707060707000000ULL,0xf0f0d0f0f000000ULL,0x1f1f1b1f1f000000ULL, 00477 0x3e3e363e3e000000ULL,0x7c7c6c7c7c000000ULL,0xf8f8d8f8f8000000ULL,0xf0f0b0f0f0000000ULL,0xe0e060e0e0000000ULL,0x706070700000000ULL,0xf0d0f0f00000000ULL,0x1f1b1f1f00000000ULL, 00478 0x3e363e3e00000000ULL,0x7c6c7c7c00000000ULL,0xf8d8f8f800000000ULL,0xf0b0f0f000000000ULL,0xe060e0e000000000ULL,0x607070000000000ULL,0xd0f0f0000000000ULL,0x1b1f1f0000000000ULL, 00479 0x363e3e0000000000ULL,0x6c7c7c0000000000ULL,0xd8f8f80000000000ULL,0xb0f0f00000000000ULL,0x60e0e00000000000ULL 00480 }; 00481 00482 static const u64 KNIGHT_MASK[64] = { 00483 0x0000000000020400ULL, 0x0000000000050800ULL, 00484 0x00000000000A1100ULL, 0x0000000000142200ULL, 0x0000000000284400ULL, 00485 0x0000000000508800ULL, 0x0000000000A01000ULL, 0x0000000000402000ULL, 00486 0x0000000002040004ULL, 0x0000000005080008ULL, 0x000000000A110011ULL, 00487 0x0000000014220022ULL, 0x0000000028440044ULL, 0x0000000050880088ULL, 00488 0x00000000A0100010ULL, 0x0000000040200020ULL, 0x0000000204000402ULL, 00489 0x0000000508000805ULL, 0x0000000A1100110AULL, 0x0000001422002214ULL, 00490 0x0000002844004428ULL, 0x0000005088008850ULL, 0x000000A0100010A0ULL, 00491 0x0000004020002040ULL, 0x0000020400040200ULL, 0x0000050800080500ULL, 00492 0x00000A1100110A00ULL, 0x0000142200221400ULL, 0x0000284400442800ULL, 00493 0x0000508800885000ULL, 0x0000A0100010A000ULL, 0x0000402000204000ULL, 00494 0x0002040004020000ULL, 0x0005080008050000ULL, 0x000A1100110A0000ULL, 00495 0x0014220022140000ULL, 0x0028440044280000ULL, 0x0050880088500000ULL, 00496 0x00A0100010A00000ULL, 0x0040200020400000ULL, 0x0204000402000000ULL, 00497 0x0508000805000000ULL, 0x0A1100110A000000ULL, 0x1422002214000000ULL, 00498 0x2844004428000000ULL, 0x5088008850000000ULL, 0xA0100010A0000000ULL, 00499 0x4020002040000000ULL, 0x0400040200000000ULL, 0x0800080500000000ULL, 00500 0x1100110A00000000ULL, 0x2200221400000000ULL, 0x4400442800000000ULL, 00501 0x8800885000000000ULL, 0x100010A000000000ULL, 0x2000204000000000ULL, 00502 0x0004020000000000ULL, 0x0008050000000000ULL, 0x00110A0000000000ULL, 00503 0x0022140000000000ULL, 0x0044280000000000ULL, 0x0088500000000000ULL, 00504 0x0010A00000000000ULL, 0x0020400000000000ULL 00505 }; 00506 00507 static const u64 ENPASSANT_MASK[2][64] = { { 00508 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 00509 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 00510 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 00511 0ULL, 0ULL, 0x200000000ULL, 0x500000000ULL, 0xA00000000ULL, 00512 0x1400000000ULL, 0x2800000000ULL, 0x5000000000ULL, 0xA000000000ULL, 00513 0x4000000000ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 00514 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 00515 0ULL, 0ULL, 0 00516 }, { 00517 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 00518 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 00519 0ULL, 0ULL, 0ULL, 0ULL, 0x2000000ULL, 0x5000000ULL, 0xA000000ULL, 00520 0x14000000ULL, 0x28000000ULL, 0x50000000ULL, 0xA0000000ULL, 00521 0x40000000ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 00522 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 00523 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0 00524 } 00525 }; 00526 00527 } 00528 00529 using namespace _board; 00530 00531 namespace _memory { 00532 void* _mmap(string fileName); 00533 void _munmap(void *blob,int fileSize); 00534 } 00535 00536 namespace _time { 00537 string getLocalTime(); 00538 int diffTime(struct timeb a,struct timeb b); 00539 } 00540 00541 namespace _string { 00542 void trimRight( string& str ); 00543 void replace(string& f,string s1,string s2); 00544 void replace(string& f,char c1,char c2) ; 00545 } 00546 00547 namespace _file { 00548 int fileSize(const string& FileName) ; 00549 } 00550 00551 namespace _bits { 00552 extern u64** LINK_ROOKS; 00553 void init(); 00554 void _free(); 00555 00556 #if UINTPTR_MAX == 0xffffffffffffffff 00557 __inline static int BITScanForward(u64 bits) { 00558 return __builtin_ffsll(bits) - 1; 00559 } 00560 #else 00561 __inline static int BITScanForward(u64 bits) { 00562 return ((unsigned) bits) ? __builtin_ffs(bits) - 1 : __builtin_ffs(bits >> 32) + 31; 00563 } 00564 #endif 00565 00566 __inline static int bitCount(u64 bits) { 00567 int count = 0; 00568 while (bits) { 00569 count++; 00570 bits &= bits - 1; 00571 } 00572 return count; 00573 } 00574 00575 } 00576 00577 00578 namespace _eval { 00579 00580 static const int VALUEPAWN =100; 00581 static const int VALUEROOK= 520; 00582 static const int VALUEBISHOP= 335; 00583 static const int VALUEKNIGHT =330; 00584 static const int VALUEQUEEN =980; 00585 static const int VALUEKING =_INFINITE; 00586 00587 static const int PIECES_VALUE[] = { 00588 VALUEPAWN, VALUEPAWN, VALUEROOK, VALUEROOK, 00589 VALUEBISHOP, VALUEBISHOP, VALUEKNIGHT, VALUEKNIGHT, VALUEKING, 00590 VALUEKING, VALUEQUEEN, VALUEQUEEN, 0 00591 }; 00592 00593 enum _Tstatus { 00594 OPEN, MIDDLE, END 00595 }; 00596 00597 static const int BONUS_ATTACK_KING[16] = { 0, 0, 8, 16, 32, 64, 128, 256, 512,512,512,512,512,512,512,512 }; 00598 00599 static const u64 PAWN_PROTECTED_MASK[2][64] = { { 00600 0x200ULL, 0x500ULL, 0xa00ULL, 0x1400ULL, 00601 0x2800ULL, 0x5000ULL, 0xa000ULL, 0x4000ULL, 0x20000ULL, 0x50000ULL, 00602 0xa0000ULL, 0x140000ULL, 0x280000ULL, 0x500000ULL, 0xa00000ULL, 00603 0x400000ULL, 0x2000000ULL, 0x5000000ULL, 0xa000000ULL, 0x14000000ULL, 00604 0x28000000ULL, 0x50000000ULL, 0xa0000000ULL, 0x40000000ULL, 00605 0x200000000ULL, 0x500000000ULL, 0xa00000000ULL, 0x1400000000ULL, 00606 0x2800000000ULL, 0x5000000000ULL, 0xa000000000ULL, 0x4000000000ULL, 00607 0x20000000000ULL, 0x50000000000ULL, 0xa0000000000ULL, 00608 0x140000000000ULL, 0x280000000000ULL, 0x500000000000ULL, 00609 0xa00000000000ULL, 0x400000000000ULL, 0x2000000000000ULL, 00610 0x5000000000000ULL, 0xa000000000000ULL, 0x14000000000000ULL, 00611 0x28000000000000ULL, 0x50000000000000ULL, 0xa0000000000000ULL, 00612 0x40000000000000ULL, 0xFF000000000000ULL, 0xFF000000000000ULL, 00613 0xFF000000000000ULL, 0xFF000000000000ULL, 0xFF000000000000ULL, 00614 0xFF000000000000ULL, 0xFF000000000000ULL, 0xFF000000000000ULL, 0, 0, 0, 00615 0, 0, 0, 0, 0 00616 }, { 00617 0, 0, 0, 0, 0, 0, 0, 0, 0xFF00ULL, 0xFF00ULL, 00618 0xFF00ULL, 0xFF00ULL, 0xFF00ULL, 0xFF00ULL, 0xFF00ULL, 0xFF00ULL, 00619 0x200ULL, 0x500ULL, 0xa00ULL, 0x1400ULL, 0x2800ULL, 0x5000ULL, 00620 0xa000ULL, 0x4000ULL, 0x20000ULL, 0x50000ULL, 0xa0000ULL, 0x140000ULL, 00621 0x280000ULL, 0x500000ULL, 0xa00000ULL, 0x400000ULL, 0x2000000ULL, 00622 0x5000000ULL, 0xa000000ULL, 0x14000000ULL, 0x28000000ULL, 00623 0x50000000ULL, 0xa0000000ULL, 0x40000000ULL, 0x200000000ULL, 00624 0x500000000ULL, 0xa00000000ULL, 0x1400000000ULL, 0x2800000000ULL, 00625 0x5000000000ULL, 0xa000000000ULL, 0x4000000000ULL, 0x20000000000ULL, 00626 0x50000000000ULL, 0xa0000000000ULL, 0x140000000000ULL, 00627 0x280000000000ULL, 0x500000000000ULL, 0xa00000000000ULL, 00628 0x400000000000ULL, 0xFF00000000000000ULL, 0xFF00000000000000ULL, 00629 0xFF00000000000000ULL, 0xFF00000000000000ULL, 0xFF00000000000000ULL, 00630 0xFF00000000000000ULL, 0xFF00000000000000ULL, 0xFF00000000000000ULL 00631 } 00632 }; 00633 00634 static const u64 PAWN_BACKWARD_MASK[2][64] = { { 00635 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 00636 0ULL, 131584ULL, 328960ULL, 657920ULL, 1315840ULL, 2631680ULL, 00637 5263360ULL, 10526720ULL, 4210688ULL, 33685504ULL, 84213760ULL, 00638 168427520ULL, 336855040ULL, 673710080ULL, 1347420160ULL, 2694840320ULL, 00639 1077936128ULL, 8623489024ULL, 21558722560ULL, 43117445120ULL, 00640 86234890240ULL, 172469780480ULL, 344939560960ULL, 689879121920ULL, 00641 275951648768ULL, 2207613190144ULL, 5519032975360ULL, 11038065950720ULL, 00642 22076131901440ULL, 44152263802880ULL, 88304527605760ULL, 00643 176609055211520ULL, 70643622084608ULL, 565148976676864ULL, 00644 1412872441692160ULL, 2825744883384320ULL, 5651489766768640ULL, 00645 11302979533537280ULL, 22605959067074560ULL, 45211918134149120ULL, 00646 18084767253659648ULL, 562949953421312ULL, 1407374883553280ULL, 00647 2814749767106560ULL, 5629499534213120ULL, 11258999068426240ULL, 00648 22517998136852480ULL, 45035996273704960ULL, 18014398509481984ULL, 0ULL, 00649 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0 00650 }, { 00651 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 00652 512ULL, 1280ULL, 2560ULL, 5120ULL, 10240ULL,20480ULL, 40960ULL, 16384ULL, 00653 131584ULL, 328960ULL, 657920ULL,1315840ULL, 2631680ULL, 5263360ULL, 10526720ULL, 4210688ULL, 00654 33685504ULL, 84213760ULL, 168427520ULL, 336855040ULL, 673710080ULL, 1347420160ULL, 2694840320ULL, 1077936128ULL, 00655 8623489024ULL,21558722560ULL, 43117445120ULL, 86234890240ULL, 172469780480ULL, 00656 344939560960ULL, 689879121920ULL, 275951648768ULL, 2207613190144ULL, 00657 5519032975360ULL, 11038065950720ULL, 22076131901440ULL, 00658 44152263802880ULL, 88304527605760ULL, 176609055211520ULL, 00659 70643622084608ULL, 565148976676864ULL, 1412872441692160ULL, 00660 2825744883384320ULL, 5651489766768640ULL, 11302979533537280ULL, 00661 22605959067074560ULL, 45211918134149120ULL, 18084767253659648ULL, 0ULL, 00662 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0 00663 } 00664 }; 00665 00666 static const u64 PAWN_PASSED_MASK[2][64] = { { 00667 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 00668 0x0ULL, 0x0ULL, 0x0ULL, 0x3ULL, 0x7ULL, 0xeULL, 0x1cULL, 0x38ULL, 00669 0x70ULL, 0xe0ULL, 0xc0ULL, 0x303ULL, 0x707ULL, 0xe0eULL, 0x1c1cULL, 00670 0x3838ULL, 0x7070ULL, 0xe0e0ULL, 0xc0c0ULL, 0x30303ULL, 0x70707ULL, 00671 0xe0e0eULL, 0x1c1c1cULL, 0x383838ULL, 0x707070ULL, 0xe0e0e0ULL, 00672 0xc0c0c0ULL, 0x3030303ULL, 0x7070707ULL, 0xe0e0e0eULL, 0x1c1c1c1cULL, 00673 0x38383838ULL, 0x70707070ULL, 0xe0e0e0e0ULL, 0xc0c0c0c0ULL, 00674 0x303030303ULL, 0x707070707ULL, 0xe0e0e0e0eULL, 0x1c1c1c1c1cULL, 00675 0x3838383838ULL, 0x7070707070ULL, 0xe0e0e0e0e0ULL, 0xc0c0c0c0c0ULL, 00676 0x30303030303ULL, 0x70707070707ULL, 0xe0e0e0e0e0eULL, 00677 0x1c1c1c1c1c1cULL, 0x383838383838ULL, 0x707070707070ULL, 00678 0xe0e0e0e0e0e0ULL, 0xc0c0c0c0c0c0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 00679 0x0ULL, 0x0ULL, 0x0ULL, 0x0 00680 }, { 00681 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 00682 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x303030303030000ULL, 00683 0x707070707070000ULL, 0xe0e0e0e0e0e0000ULL, 0x1c1c1c1c1c1c0000ULL, 00684 0x3838383838380000ULL, 0x7070707070700000ULL, 0xe0e0e0e0e0e00000ULL, 00685 0xc0c0c0c0c0c00000ULL, 0x303030303000000ULL, 0x707070707000000ULL, 00686 0xe0e0e0e0e000000ULL, 0x1c1c1c1c1c000000ULL, 0x3838383838000000ULL, 00687 0x7070707070000000ULL, 0xe0e0e0e0e0000000ULL, 0xc0c0c0c0c0000000ULL, 00688 0x303030300000000ULL, 0x707070700000000ULL, 0xe0e0e0e00000000ULL, 00689 0x1c1c1c1c00000000ULL, 0x3838383800000000ULL, 0x7070707000000000ULL, 00690 0xe0e0e0e000000000ULL, 0xc0c0c0c000000000ULL, 0x303030000000000ULL, 00691 0x707070000000000ULL, 0xe0e0e0000000000ULL, 0x1c1c1c0000000000ULL, 00692 0x3838380000000000ULL, 0x7070700000000000ULL, 0xe0e0e00000000000ULL, 00693 0xc0c0c00000000000ULL, 0x303000000000000ULL, 0x707000000000000ULL, 00694 0xe0e000000000000ULL, 0x1c1c000000000000ULL, 0x3838000000000000ULL, 00695 0x7070000000000000ULL, 0xe0e0000000000000ULL, 0xc0c0000000000000ULL, 00696 0x300000000000000ULL, 0x700000000000000ULL, 0xe00000000000000ULL, 00697 0x1c00000000000000ULL, 0x3800000000000000ULL, 0x7000000000000000ULL, 00698 0xe000000000000000ULL, 0xc000000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 00699 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0 00700 } 00701 }; 00702 00703 static const uchar PAWN_PASSED[2][64] = { { 00704 200, 200, 200, 200, 200, 200, 200, 200, 100, 00705 100, 100, 100, 100, 100, 100, 100, 40, 40, 40, 40, 40, 40, 40, 40, 19, 00706 19, 19, 21, 21, 19, 19, 19, 13, 13, 13, 25, 25, 13, 13, 13, 0, 0, 0, 0, 00707 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 00708 }, { 00709 0, 0, 00710 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 00711 13, 13, 25, 25, 13, 13, 13, 19, 19, 19, 21, 21, 19, 19, 19, 40, 40, 40, 00712 40, 40, 40, 40, 40, 100, 100, 100, 100, 100, 100, 100, 100, 200, 200, 00713 200, 200, 200, 200, 200, 200 00714 } 00715 }; 00716 00717 00718 static const u64 PAWN_ISOLATED_MASK[64] = { 00719 0x202020202020202ULL, 0x505050505050505ULL, 00720 0xA0A0A0A0A0A0A0AULL, 0x1414141414141414ULL, 0x2828282828282828ULL, 00721 0x5050505050505050ULL, 0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL, 00722 0x202020202020202ULL, 0x505050505050505ULL, 0xA0A0A0A0A0A0A0AULL, 00723 0x1414141414141414ULL, 0x2828282828282828ULL, 0x5050505050505050ULL, 00724 0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL, 0x202020202020202ULL, 00725 0x505050505050505ULL, 0xA0A0A0A0A0A0A0AULL, 0x1414141414141414ULL, 00726 0x2828282828282828ULL, 0x5050505050505050ULL, 0xA0A0A0A0A0A0A0A0ULL, 00727 0x4040404040404040ULL, 0x202020202020202ULL, 0x505050505050505ULL, 00728 0xA0A0A0A0A0A0A0AULL, 0x1414141414141414ULL, 0x2828282828282828ULL, 00729 0x5050505050505050ULL, 0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL, 00730 0x202020202020202ULL, 0x505050505050505ULL, 0xA0A0A0A0A0A0A0AULL, 00731 0x1414141414141414ULL, 0x2828282828282828ULL, 0x5050505050505050ULL, 00732 0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL, 0x202020202020202ULL, 00733 0x505050505050505ULL, 0xA0A0A0A0A0A0A0AULL, 0x1414141414141414ULL, 00734 0x2828282828282828ULL, 0x5050505050505050ULL, 0xA0A0A0A0A0A0A0A0ULL, 00735 0x4040404040404040ULL, 0x202020202020202ULL, 0x505050505050505ULL, 00736 0xA0A0A0A0A0A0A0AULL, 0x1414141414141414ULL, 0x2828282828282828ULL, 00737 0x5050505050505050ULL, 0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL, 00738 0x202020202020202ULL, 0x505050505050505ULL, 0xA0A0A0A0A0A0A0AULL, 00739 0x1414141414141414ULL, 0x2828282828282828ULL, 0x5050505050505050ULL, 00740 0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL 00741 }; 00742 00743 } 00744 00745 00746 static const char DISTANCE_KING_OPENING[64] = { 00747 -16, -16, -16, -16, -16, -16, -16, 00748 -16, -16, -19, -19, -19, -19, -19, -19, -16, -16, -19, -22, -22, -22, 00749 -22, -19, -16, -16, -19, -22, -24, -24, -22, -19, -16, -16, -19, -22, 00750 -24, -24, -22, -19, -16, -16, -19, -22, -22, -22, -22, -19, -16, -16, 00751 -19, -19, -19, -19, -19, -19, -16, -16, -16, -16, -16, -16, -16, -16, 00752 -16 00753 }; 00754 00755 static const char DISTANCE_KING_ENDING[64] = { 00756 30, 30, 30, 30, 30, 30, 30, 30, 30, 00757 32, 32, 32, 32, 32, 32, 30, 30, 32, 34, 34, 34, 34, 32, 30, 30, 32, 34, 00758 36, 36, 34, 32, 30, 30, 32, 34, 36, 36, 34, 32, 30, 30, 32, 34, 34, 34, 00759 34, 32, 30, 30, 32, 32, 32, 32, 32, 32, 30, 30, 30, 30, 30, 30, 30, 30, 00760 30 00761 }; 00762 00763 00764 #endif