![]() |
Cinnamon
1.1
chess engine
|
00001 #ifndef NAMESPACES_H_ 00002 #define NAMESPACES_H_ 00003 #include <string.h> 00004 #include <algorithm> 00005 #include <sys/stat.h> 00006 #include <sys/timeb.h> 00007 #include <sstream> 00008 #include <climits> 00009 00010 namespace _board { 00011 using namespace std; 00012 00013 static const string NAME ="Cinnamon 1.1"; 00014 static const string STARTPOS ="rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; 00015 00016 typedef unsigned char uchar; 00017 typedef long long unsigned u64; 00018 00019 #define assert(a) if(!(a)){cout<<dec<<endl<<_time::getLocalTime()<<" ********************************** assert error in "<<_file::extractFileName(__FILE__)<< " line "<<__LINE__<<" "<<" **********************************"<<endl<<flush;exit(1);}; 00020 00021 #ifdef DEBUG_MODE 00022 00023 #define ASSERT(a) assert(a) 00024 #define INC(a) (a++) 00025 00026 #else 00027 00028 #define ASSERT(a) 00029 #define INC(a) 00030 00031 #endif 00032 00033 typedef struct { 00034 char promotionPiece; 00035 char pieceFrom; 00036 uchar capturedPiece; 00037 uchar from; 00038 uchar to; 00039 char side; 00040 uchar type; 00041 int score; 00042 bool used; 00043 } _Tmove; 00044 00045 typedef struct { 00046 _Tmove* moveList; 00047 int size; 00048 } _TmoveP; 00049 00050 00051 static const int BLACK = 0; 00052 static const int WHITE = 1; 00053 static const int _INFINITE = 32000; 00054 static const int FUTIL_MARGIN =154; 00055 static const int EXT_FUTILY_MARGIN =392; 00056 static const int RAZOR_MARGIN =1071; 00057 static const u64 POW2_0 =0x1ULL; 00058 static const u64 POW2_1 =0x2ULL; 00059 static const u64 POW2_2 =0x4ULL; 00060 static const u64 POW2_3 =0x8ULL; 00061 static const u64 POW2_4 =0x10ULL; 00062 static const u64 POW2_5 =0x20ULL; 00063 static const u64 POW2_6 =0x40ULL; 00064 static const u64 POW2_7 =0x80ULL; 00065 static const u64 POW2_56 =0x100000000000000ULL; 00066 static const u64 POW2_57 =0x200000000000000ULL; 00067 static const u64 POW2_58 =0x400000000000000ULL; 00068 static const u64 POW2_59 =0x800000000000000ULL; 00069 static const u64 POW2_60 =0x1000000000000000ULL; 00070 static const u64 POW2_61 =0x2000000000000000ULL; 00071 static const u64 POW2_62 =0x4000000000000000ULL; 00072 static const u64 POW2_63 =0x8000000000000000ULL; 00073 static const u64 NOTPOW2_0 =0xfffffffffffffffeULL; 00074 static const u64 NOTPOW2_1 =0xfffffffffffffffdULL; 00075 static const u64 NOTPOW2_2 =0xfffffffffffffffbULL; 00076 static const u64 NOTPOW2_3 =0xfffffffffffffff7ULL; 00077 static const u64 NOTPOW2_4 =0xffffffffffffffefULL; 00078 static const u64 NOTPOW2_5 =0xffffffffffffffdfULL; 00079 static const u64 NOTPOW2_7 =0xffffffffffffff7fULL; 00080 static const u64 NOTPOW2_56 =0xfeffffffffffffffULL; 00081 static const u64 NOTPOW2_57 =0xfdffffffffffffffULL; 00082 static const u64 NOTPOW2_58 =0xfbffffffffffffffULL; 00083 static const u64 NOTPOW2_59 =0xf7ffffffffffffffULL; 00084 static const u64 NOTPOW2_60 =0xefffffffffffffffULL; 00085 static const u64 NOTPOW2_61 =0xdfffffffffffffffULL; 00086 static const u64 NOTPOW2_63 =0x7fffffffffffffffULL; 00087 00088 static const string BOARD[64] = { 00089 "h1", "g1", "f1", "e1", "d1", "c1", "b1", "a1", 00090 "h2", "g2", "f2", "e2", "d2", "c2", "b2", "a2", 00091 "h3", "g3", "f3", "e3", "d3", "c3", "b3", "a3", 00092 "h4", "g4", "f4", "e4", "d4", "c4", "b4", "a4", 00093 "h5", "g5", "f5", "e5", "d5", "c5", "b5", "a5", 00094 "h6", "g6", "f6", "e6", "d6", "c6", "b6", "a6", 00095 "h7", "g7", "f7", "e7", "d7", "c7", "b7", "a7", 00096 "h8", "g8", "f8", "e8", "d8", "c8", "b8", "a8" 00097 }; 00098 00099 static const char FEN_PIECE[]= {'p','P','r','R','b','B','n','N','k','K','q','Q','-'}; 00100 00101 static const int INV_FEN[]= { 00102 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 00103 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 00104 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 00105 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, 00106 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, 00107 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 00108 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 00109 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 00110 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,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,0xFF, 00112 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF 00113 }; 00114 00115 static const uchar ORIZ_RIGHT[]= { 00116 0,0,0,0,0,0,0,0, 00117 8,8,8,8,8,8,8,8, 00118 16,16,16,16,16,16,16,16, 00119 24,24,24,24,24,24,24,24, 00120 32,32,32,32,32,32,32,32, 00121 40,40,40,40,40,40,40,40, 00122 48,48,48,48,48,48,48,48, 00123 56,56,56,56,56,56,56,56 00124 }; 00125 00126 static const uchar ORIZ_LEFT[]= { 00127 7,7,7,7,7,7,7,7, 00128 15,15,15,15,15,15,15,15, 00129 23,23,23,23,23,23,23,23, 00130 31,31,31,31,31,31,31,31, 00131 39,39,39,39,39,39,39,39, 00132 47,47,47,47,47,47,47,47, 00133 55,55,55,55,55,55,55,55, 00134 63,63,63,63,63,63,63,63 00135 }; 00136 00137 static const uchar VERT_UPPER[]= { 00138 56,57,58,59,60,61,62,63, 00139 56,57,58,59,60,61,62,63, 00140 56,57,58,59,60,61,62,63, 00141 56,57,58,59,60,61,62,63, 00142 56,57,58,59,60,61,62,63, 00143 56,57,58,59,60,61,62,63, 00144 56,57,58,59,60,61,62,63, 00145 56,57,58,59,60,61,62,63 00146 }; 00147 00148 static const uchar VERT_LOWER[]= { 00149 0,1,2,3,4,5,6,7, 00150 0,1,2,3,4,5,6,7, 00151 0,1,2,3,4,5,6,7, 00152 0,1,2,3,4,5,6,7, 00153 0,1,2,3,4,5,6,7, 00154 0,1,2,3,4,5,6,7, 00155 0,1,2,3,4,5,6,7, 00156 0,1,2,3,4,5,6,7 00157 }; 00158 00159 static const u64 RANDOM_KEY[15][64]= { 00160 #include "random.inc" 00161 }; 00162 00163 static const uchar RIGHT_UPPER[]= { 00164 63, 55, 47, 39, 31, 23, 15, 7, 00165 62, 63, 55, 47, 39, 31, 23, 15, 00166 61, 62, 63, 55, 47, 39, 31, 23, 00167 60, 61, 62, 63, 55, 47, 39, 31, 00168 59, 60, 61, 62, 63, 55, 47, 39, 00169 58, 59, 60, 61, 62, 63, 55, 47, 00170 57, 58, 59, 60, 61, 62, 63, 55, 00171 56, 57, 58, 59, 60, 61, 62, 63 00172 }; 00173 00174 static const uchar RIGHT_LOWER[]= { 00175 0, 1, 2, 3, 4, 5, 6, 7, 00176 8, 0, 1, 2, 3, 4, 5, 6, 00177 16, 8, 0, 1, 2, 3, 4, 5, 00178 24, 16, 8, 0, 1, 2, 3, 4, 00179 32, 24, 16, 8, 0, 1, 2, 3, 00180 40, 32, 24, 16, 8, 0, 1, 2, 00181 48, 40, 32, 24, 16, 8, 0, 1, 00182 56, 48, 40, 32, 24, 16, 8, 0 00183 }; 00184 00185 static const uchar LEFT_UPPER[]= { 00186 0, 8, 16, 24, 32, 40, 48, 56, 00187 8, 16, 24, 32, 40, 48, 56, 57, 00188 16, 24, 32, 40, 48, 56, 57, 58, 00189 24, 32, 40, 48, 56, 57, 58, 59, 00190 32, 40, 48, 56, 57, 58, 59, 60, 00191 40, 48, 56, 57, 58, 59, 60, 61, 00192 48, 56, 57, 58, 59, 60, 61, 62, 00193 56, 57, 58, 59, 60, 61, 62, 63 00194 }; 00195 00196 static const uchar LEFT_LOWER[]= { 00197 0, 1, 2, 3, 4, 5, 6, 7, 00198 1, 2, 3, 4, 5, 6, 7, 15, 00199 2, 3, 4, 5, 6, 7, 15, 23, 00200 3, 4, 5, 6, 7, 15, 23, 31, 00201 4, 5, 6, 7, 15, 23, 31, 39, 00202 5, 6, 7, 15, 23, 31, 39, 47, 00203 6, 7, 15, 23, 31, 39, 47, 55, 00204 7, 15, 23, 31, 39, 47, 55, 63 00205 }; 00206 00207 static const u64 MASK_BIT_UNSET_RIGHT_UP[]= { 00208 0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL, 00209 0x0ULL,0x1ULL,0x2ULL,0x4ULL,0x8ULL,0x10ULL,0x20ULL,0x40ULL, 00210 0x0ULL,0x100ULL,0x201ULL,0x402ULL,0x804ULL,0x1008ULL,0x2010ULL,0x4020ULL, 00211 0x0ULL,0x10000ULL,0x20100ULL,0x40201ULL,0x80402ULL,0x100804ULL,0x201008ULL,0x402010ULL, 00212 0x0ULL,0x1000000ULL,0x2010000ULL,0x4020100ULL,0x8040201ULL,0x10080402ULL,0x20100804ULL,0x40201008ULL, 00213 0x0ULL,0x100000000ULL,0x201000000ULL,0x402010000ULL,0x804020100ULL,0x1008040201ULL,0x2010080402ULL,0x4020100804ULL, 00214 0x0ULL,0x10000000000ULL,0x20100000000ULL,0x40201000000ULL,0x80402010000ULL,0x100804020100ULL,0x201008040201ULL,0x402010080402ULL, 00215 0x0ULL,0x1000000000000ULL,0x2010000000000ULL,0x4020100000000ULL,0x8040201000000ULL,0x10080402010000ULL,0x20100804020100ULL,0x40201008040201ULL 00216 }; 00217 00218 static const u64 MASK_BIT_UNSET_RIGHT_DOWN[]= { 00219 0x8040201008040200ULL,0x80402010080400ULL,0x804020100800ULL,0x8040201000ULL,0x80402000ULL,0x804000ULL,0x8000ULL,0x0ULL, 00220 0x4020100804020000ULL,0x8040201008040000ULL,0x80402010080000ULL,0x804020100000ULL,0x8040200000ULL,0x80400000ULL,0x800000ULL,0x0ULL, 00221 0x2010080402000000ULL,0x4020100804000000ULL,0x8040201008000000ULL,0x80402010000000ULL,0x804020000000ULL,0x8040000000ULL,0x80000000ULL,0x0ULL, 00222 0x1008040200000000ULL,0x2010080400000000ULL,0x4020100800000000ULL,0x8040201000000000ULL,0x80402000000000ULL,0x804000000000ULL,0x8000000000ULL,0x0ULL, 00223 0x804020000000000ULL,0x1008040000000000ULL,0x2010080000000000ULL,0x4020100000000000ULL,0x8040200000000000ULL,0x80400000000000ULL,0x800000000000ULL,0x0ULL, 00224 0x402000000000000ULL,0x804000000000000ULL,0x1008000000000000ULL,0x2010000000000000ULL,0x4020000000000000ULL,0x8040000000000000ULL,0x80000000000000ULL,0x0ULL, 00225 0x200000000000000ULL,0x400000000000000ULL,0x800000000000000ULL,0x1000000000000000ULL,0x2000000000000000ULL,0x4000000000000000ULL,0x8000000000000000ULL,0x0ULL, 00226 0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL 00227 }; 00228 00229 static const u64 MASK_BIT_UNSET_LEFT_UP[]= { 00230 0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL, 00231 0x2ULL,0x4ULL,0x8ULL,0x10ULL,0x20ULL,0x40ULL,0x80ULL,0x0ULL, 00232 0x204ULL,0x408ULL,0x810ULL,0x1020ULL,0x2040ULL,0x4080ULL,0x8000ULL,0x0ULL, 00233 0x20408ULL,0x40810ULL,0x81020ULL,0x102040ULL,0x204080ULL,0x408000ULL,0x800000ULL,0x0ULL, 00234 0x2040810ULL,0x4081020ULL,0x8102040ULL,0x10204080ULL,0x20408000ULL,0x40800000ULL,0x80000000ULL,0x0ULL, 00235 0x204081020ULL,0x408102040ULL,0x810204080ULL,0x1020408000ULL,0x2040800000ULL,0x4080000000ULL,0x8000000000ULL,0x0ULL, 00236 0x20408102040ULL,0x40810204080ULL,0x81020408000ULL,0x102040800000ULL,0x204080000000ULL,0x408000000000ULL,0x800000000000ULL,0x0ULL, 00237 0x2040810204080ULL,0x4081020408000ULL,0x8102040800000ULL,0x10204080000000ULL,0x20408000000000ULL,0x40800000000000ULL,0x80000000000000ULL,0x0ULL 00238 }; 00239 00240 static const u64 MASK_BIT_UNSET_LEFT_DOWN[]= { 00241 0x0ULL,0x100ULL,0x10200ULL,0x1020400ULL,0x102040800ULL,0x10204081000ULL,0x1020408102000ULL,0x102040810204000ULL, 00242 0x0ULL,0x10000ULL,0x1020000ULL,0x102040000ULL,0x10204080000ULL,0x1020408100000ULL,0x102040810200000ULL,0x204081020400000ULL, 00243 0x0ULL,0x1000000ULL,0x102000000ULL,0x10204000000ULL,0x1020408000000ULL,0x102040810000000ULL,0x204081020000000ULL,0x408102040000000ULL, 00244 0x0ULL,0x100000000ULL,0x10200000000ULL,0x1020400000000ULL,0x102040800000000ULL,0x204081000000000ULL,0x408102000000000ULL,0x810204000000000ULL, 00245 0x0ULL,0x10000000000ULL,0x1020000000000ULL,0x102040000000000ULL,0x204080000000000ULL,0x408100000000000ULL,0x810200000000000ULL,0x1020400000000000ULL, 00246 0x0ULL,0x1000000000000ULL,0x102000000000000ULL,0x204000000000000ULL,0x408000000000000ULL,0x810000000000000ULL,0x1020000000000000ULL,0x2040000000000000ULL, 00247 0x0ULL,0x100000000000000ULL,0x200000000000000ULL,0x400000000000000ULL,0x800000000000000ULL,0x1000000000000000ULL,0x2000000000000000ULL,0x4000000000000000ULL, 00248 0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL 00249 }; 00250 00251 static const u64 MASK_BIT_UNSET_DOWN[]= { 00252 0x101010101010100ULL,0x202020202020200ULL,0x404040404040400ULL,0x808080808080800ULL,0x1010101010101000ULL,0x2020202020202000ULL,0x4040404040404000ULL,0x8080808080808000ULL, 00253 0x101010101010000ULL,0x202020202020000ULL,0x404040404040000ULL,0x808080808080000ULL,0x1010101010100000ULL,0x2020202020200000ULL,0x4040404040400000ULL,0x8080808080800000ULL, 00254 0x101010101000000ULL,0x202020202000000ULL,0x404040404000000ULL,0x808080808000000ULL,0x1010101010000000ULL,0x2020202020000000ULL,0x4040404040000000ULL,0x8080808080000000ULL, 00255 0x101010100000000ULL,0x202020200000000ULL,0x404040400000000ULL,0x808080800000000ULL,0x1010101000000000ULL,0x2020202000000000ULL,0x4040404000000000ULL,0x8080808000000000ULL, 00256 0x101010000000000ULL,0x202020000000000ULL,0x404040000000000ULL,0x808080000000000ULL,0x1010100000000000ULL,0x2020200000000000ULL,0x4040400000000000ULL,0x8080800000000000ULL, 00257 0x101000000000000ULL,0x202000000000000ULL,0x404000000000000ULL,0x808000000000000ULL,0x1010000000000000ULL,0x2020000000000000ULL,0x4040000000000000ULL,0x8080000000000000ULL, 00258 0x100000000000000ULL,0x200000000000000ULL,0x400000000000000ULL,0x800000000000000ULL,0x1000000000000000ULL,0x2000000000000000ULL,0x4000000000000000ULL,0x8000000000000000ULL, 00259 0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL 00260 }; 00261 00262 static const u64 MASK_BIT_UNSET_UP[]= { 00263 0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL, 00264 0x1ULL,0x2ULL,0x4ULL,0x8ULL,0x10ULL,0x20ULL,0x40ULL,0x80ULL, 00265 0x101ULL,0x202ULL,0x404ULL,0x808ULL,0x1010ULL,0x2020ULL,0x4040ULL,0x8080ULL, 00266 0x10101ULL,0x20202ULL,0x40404ULL,0x80808ULL,0x101010ULL,0x202020ULL,0x404040ULL,0x808080ULL, 00267 0x1010101ULL,0x2020202ULL,0x4040404ULL,0x8080808ULL,0x10101010ULL,0x20202020ULL,0x40404040ULL,0x80808080ULL, 00268 0x101010101ULL,0x202020202ULL,0x404040404ULL,0x808080808ULL,0x1010101010ULL,0x2020202020ULL,0x4040404040ULL,0x8080808080ULL, 00269 0x10101010101ULL,0x20202020202ULL,0x40404040404ULL,0x80808080808ULL,0x101010101010ULL,0x202020202020ULL,0x404040404040ULL,0x808080808080ULL, 00270 0x1010101010101ULL,0x2020202020202ULL,0x4040404040404ULL,0x8080808080808ULL,0x10101010101010ULL,0x20202020202020ULL,0x40404040404040ULL,0x80808080808080ULL 00271 }; 00272 00273 static const u64 MASK_BIT_UNSET_LEFT[]= { 00274 0x0ULL,0x1ULL,0x3ULL,0x7ULL,0xfULL,0x1fULL,0x3fULL,0x7fULL, 00275 0x0ULL,0x100ULL,0x300ULL,0x700ULL,0xf00ULL,0x1f00ULL,0x3f00ULL,0x7f00ULL, 00276 0x0ULL,0x10000ULL,0x30000ULL,0x70000ULL,0xf0000ULL,0x1f0000ULL,0x3f0000ULL,0x7f0000ULL, 00277 0x0ULL,0x1000000ULL,0x3000000ULL,0x7000000ULL,0xf000000ULL,0x1f000000ULL,0x3f000000ULL,0x7f000000ULL, 00278 0x0ULL,0x100000000ULL,0x300000000ULL,0x700000000ULL,0xf00000000ULL,0x1f00000000ULL,0x3f00000000ULL,0x7f00000000ULL, 00279 0x0ULL,0x10000000000ULL,0x30000000000ULL,0x70000000000ULL,0xf0000000000ULL,0x1f0000000000ULL,0x3f0000000000ULL,0x7f0000000000ULL, 00280 0x0ULL,0x1000000000000ULL,0x3000000000000ULL,0x7000000000000ULL,0xf000000000000ULL,0x1f000000000000ULL,0x3f000000000000ULL,0x7f000000000000ULL, 00281 0x0ULL,0x100000000000000ULL,0x300000000000000ULL,0x700000000000000ULL,0xf00000000000000ULL,0x1f00000000000000ULL,0x3f00000000000000ULL,0x7f00000000000000ULL 00282 }; 00283 00284 static const u64 MASK_BIT_UNSET_RIGHT[]= { 00285 0xfeULL,0xfcULL,0xf8ULL,0xf0ULL,0xe0ULL,0xc0ULL,0x80ULL,0x0ULL, 00286 0xfe00ULL,0xfc00ULL,0xf800ULL,0xf000ULL,0xe000ULL,0xc000ULL,0x8000ULL,0x0ULL, 00287 0xfe0000ULL,0xfc0000ULL,0xf80000ULL,0xf00000ULL,0xe00000ULL,0xc00000ULL,0x800000ULL,0x0ULL, 00288 0xfe000000ULL,0xfc000000ULL,0xf8000000ULL,0xf0000000ULL,0xe0000000ULL,0xc0000000ULL,0x80000000,0x0ULL, 00289 0xfe00000000ULL,0xfc00000000ULL,0xf800000000ULL,0xf000000000ULL,0xe000000000ULL,0xc000000000ULL,0x8000000000ULL,0x0ULL, 00290 0xfe0000000000ULL,0xfc0000000000ULL,0xf80000000000ULL,0xf00000000000ULL,0xe00000000000ULL,0xc00000000000ULL,0x800000000000ULL,0x0ULL, 00291 0xfe000000000000ULL,0xfc000000000000ULL,0xf8000000000000ULL,0xf0000000000000ULL,0xe0000000000000ULL,0xc0000000000000ULL,0x80000000000000ULL,0x0ULL, 00292 0xfe00000000000000ULL,0xfc00000000000000ULL,0xf800000000000000ULL,0xf000000000000000ULL,0xe000000000000000ULL,0xc000000000000000ULL,0x8000000000000000ULL,0x0ULL 00293 }; 00294 00295 static const u64 RANK_FILE[64] = { 00296 0x1010101010101feULL, 0x2020202020202fdULL, 00297 0x4040404040404fbULL, 0x8080808080808f7ULL, 0x10101010101010efULL, 00298 0x20202020202020dfULL, 0x40404040404040bfULL, 0x808080808080807fULL, 00299 0x10101010101fe01ULL, 0x20202020202fd02ULL, 0x40404040404fb04ULL, 00300 0x80808080808f708ULL, 0x101010101010ef10ULL, 0x202020202020df20ULL, 00301 0x404040404040bf40ULL, 0x8080808080807f80ULL, 0x101010101fe0101ULL, 00302 0x202020202fd0202ULL, 0x404040404fb0404ULL, 0x808080808f70808ULL, 00303 0x1010101010ef1010ULL, 0x2020202020df2020ULL, 0x4040404040bf4040ULL, 00304 0x80808080807f8080ULL, 0x1010101fe010101ULL, 0x2020202fd020202ULL, 00305 0x4040404fb040404ULL, 0x8080808f7080808ULL, 0x10101010ef101010ULL, 00306 0x20202020df202020ULL, 0x40404040bf404040ULL, 0x808080807f808080ULL, 00307 0x10101fe01010101ULL, 0x20202fd02020202ULL, 0x40404fb04040404ULL, 00308 0x80808f708080808ULL, 0x101010ef10101010ULL, 0x202020df20202020ULL, 00309 0x404040bf40404040ULL, 0x8080807f80808080ULL, 0x101fe0101010101ULL, 00310 0x202fd0202020202ULL, 0x404fb0404040404ULL, 0x808f70808080808ULL, 00311 0x1010ef1010101010ULL, 0x2020df2020202020ULL, 0x4040bf4040404040ULL, 00312 0x80807f8080808080ULL, 0x1fe010101010101ULL, 0x2fd020202020202ULL, 00313 0x4fb040404040404ULL, 0x8f7080808080808ULL, 0x10ef101010101010ULL, 00314 0x20df202020202020ULL, 0x40bf404040404040ULL, 0x807f808080808080ULL, 00315 0xfe01010101010101ULL, 0xfd02020202020202ULL, 0xfb04040404040404ULL, 00316 0xf708080808080808ULL, 0xef10101010101010ULL, 0xdf20202020202020ULL, 00317 0xbf40404040404040ULL, 0x7f80808080808080ULL 00318 }; 00319 00320 static const u64 RANK_BOUND[64] = { 00321 0x2ULL, 0x5ULL, 0xaULL, 0x14ULL, 0x28ULL, 00322 0x50ULL, 0xa0ULL, 0x40ULL, 0x200ULL, 0x500ULL, 0xa00ULL, 0x1400ULL, 00323 0x2800ULL, 0x5000ULL, 0xa000ULL, 0x4000ULL, 0x20000ULL, 0x50000ULL, 00324 0xa0000ULL, 0x140000ULL, 0x280000ULL, 0x500000ULL, 0xa00000ULL, 00325 0x400000ULL, 0x2000000ULL, 0x5000000ULL, 0xa000000ULL, 0x14000000ULL, 00326 0x28000000ULL, 0x50000000ULL, 0xa0000000ULL, 0x40000000ULL, 00327 0x200000000ULL, 0x500000000ULL, 0xa00000000ULL, 0x1400000000ULL, 00328 0x2800000000ULL, 0x5000000000ULL, 0xa000000000ULL, 0x4000000000ULL, 00329 0x20000000000ULL, 0x50000000000ULL, 0xa0000000000ULL, 00330 0x140000000000ULL, 0x280000000000ULL, 0x500000000000ULL, 00331 0xa00000000000ULL, 0x400000000000ULL, 0x2000000000000ULL, 00332 0x5000000000000ULL, 0xa000000000000ULL, 0x14000000000000ULL, 00333 0x28000000000000ULL, 0x50000000000000ULL, 0xa0000000000000ULL, 00334 0x40000000000000ULL, 0x200000000000000ULL, 0x500000000000000ULL, 00335 0xa00000000000000ULL, 0x1400000000000000ULL, 0x2800000000000000ULL, 00336 0x5000000000000000ULL, 0xa000000000000000ULL, 0x4000000000000000ULL 00337 }; 00338 00339 static const u64 RANK[64] = { 00340 0xffULL, 0xffULL, 0xffULL, 0xffULL, 0xffULL, 00341 0xffULL, 0xffULL, 0xffULL, 0xff00ULL, 0xff00ULL, 0xff00ULL, 00342 0xff00ULL, 0xff00ULL, 0xff00ULL, 0xff00ULL, 0xff00ULL, 0xff0000ULL, 00343 0xff0000ULL, 0xff0000ULL, 0xff0000ULL, 0xff0000ULL, 0xff0000ULL, 00344 0xff0000ULL, 0xff0000ULL, 0xff000000ULL, 0xff000000ULL, 0xff000000ULL, 00345 0xff000000ULL, 0xff000000ULL, 0xff000000ULL, 0xff000000ULL, 00346 0xff000000ULL, 0xff00000000ULL, 0xff00000000ULL, 0xff00000000ULL, 00347 0xff00000000ULL, 0xff00000000ULL, 0xff00000000ULL, 0xff00000000ULL, 00348 0xff00000000ULL, 0xff0000000000ULL, 0xff0000000000ULL, 00349 0xff0000000000ULL, 0xff0000000000ULL, 0xff0000000000ULL, 00350 0xff0000000000ULL, 0xff0000000000ULL, 0xff0000000000ULL, 0xff000000000000ULL, 00351 0xff000000000000ULL, 0xff000000000000ULL, 0xff000000000000ULL, 00352 0xff000000000000ULL, 0xff000000000000ULL, 0xff000000000000ULL, 00353 0xff000000000000ULL, 0xff00000000000000ULL, 0xff00000000000000ULL, 00354 0xff00000000000000ULL, 0xff00000000000000ULL, 0xff00000000000000ULL, 00355 0xff00000000000000ULL, 0xff00000000000000ULL, 0xff00000000000000ULL 00356 }; 00357 00358 static const u64 RIGHT_DIAG[64] = { 00359 0x8040201008040200ULL, 0x80402010080400ULL, 00360 0x804020100800ULL, 0x8040201000ULL, 0x80402000ULL, 0x804000ULL, 00361 0x8000ULL, 0x0ULL, 0x4020100804020000ULL, 0x8040201008040001ULL, 00362 0x80402010080002ULL, 0x804020100004ULL, 0x8040200008ULL, 0x80400010ULL, 00363 0x800020ULL, 0x40ULL, 0x2010080402000000ULL, 0x4020100804000100ULL, 00364 0x8040201008000201ULL, 0x80402010000402ULL, 0x804020000804ULL, 00365 0x8040001008ULL, 0x80002010ULL, 0x4020ULL, 0x1008040200000000ULL, 00366 0x2010080400010000ULL, 0x4020100800020100ULL, 0x8040201000040201ULL, 00367 0x80402000080402ULL, 0x804000100804ULL, 0x8000201008ULL, 0x402010ULL, 00368 0x804020000000000ULL, 0x1008040001000000ULL, 0x2010080002010000ULL, 00369 0x4020100004020100ULL, 0x8040200008040201ULL, 0x80400010080402ULL, 00370 0x800020100804ULL, 0x40201008ULL, 0x402000000000000ULL, 00371 0x804000100000000ULL, 0x1008000201000000ULL, 0x2010000402010000ULL, 00372 0x4020000804020100ULL, 0x8040001008040201ULL, 0x80002010080402ULL, 00373 0x4020100804ULL, 0x200000000000000ULL, 0x400010000000000ULL, 00374 0x800020100000000ULL, 0x1000040201000000ULL, 0x2000080402010000ULL, 00375 0x4000100804020100ULL, 0x8000201008040201ULL, 0x402010080402ULL, 00376 0x0ULL, 0x1000000000000ULL, 0x2010000000000ULL, 0x4020100000000ULL, 00377 0x8040201000000ULL, 0x10080402010000ULL, 0x20100804020100ULL, 00378 0x40201008040201ULL 00379 }; 00380 00381 static const u64 LEFT_DIAG[64] = { 00382 0x0ULL, 0x100ULL, 0x10200ULL, 0x1020400ULL, 00383 0x102040800ULL, 0x10204081000ULL, 0x1020408102000ULL, 00384 0x102040810204000ULL, 0x2ULL, 0x10004ULL, 0x1020008ULL, 0x102040010ULL, 00385 0x10204080020ULL, 0x1020408100040ULL, 0x102040810200080ULL, 00386 0x204081020400000ULL, 0x204ULL, 0x1000408ULL, 0x102000810ULL, 00387 0x10204001020ULL, 0x1020408002040ULL, 0x102040810004080ULL, 00388 0x204081020008000ULL, 0x408102040000000ULL, 0x20408ULL, 0x100040810ULL, 00389 0x10200081020ULL, 0x1020400102040ULL, 0x102040800204080ULL, 00390 0x204081000408000ULL, 0x408102000800000ULL, 0x810204000000000ULL, 00391 0x2040810ULL, 0x10004081020ULL, 0x1020008102040ULL, 00392 0x102040010204080ULL, 0x204080020408000ULL, 0x408100040800000ULL, 00393 0x810200080000000ULL, 0x1020400000000000ULL, 0x204081020ULL, 00394 0x1000408102040ULL, 0x102000810204080ULL, 0x204001020408000ULL, 00395 0x408002040800000ULL, 0x810004080000000ULL, 0x1020008000000000ULL, 00396 0x2040000000000000ULL, 0x20408102040ULL, 0x100040810204080ULL, 00397 0x200081020408000ULL, 0x400102040800000ULL, 0x800204080000000ULL, 00398 0x1000408000000000ULL, 0x2000800000000000ULL, 0x4000000000000000ULL, 00399 0x2040810204080ULL, 0x4081020408000ULL, 0x8102040800000ULL, 00400 0x10204080000000ULL, 0x20408000000000ULL, 0x40800000000000ULL, 00401 0x80000000000000ULL, 0x0ULL 00402 }; 00403 00404 static const u64 LEFT_RIGHT_DIAG[64] = { 00405 0x8040201008040200ULL,0x80402010080500ULL,0x804020110a00ULL,0x8041221400ULL,0x182442800ULL, 00406 0x10204885000ULL,0x102040810a000ULL,0x102040810204000ULL,0x4020100804020002ULL,0x8040201008050005ULL,0x804020110a000aULL, 00407 0x804122140014ULL,0x18244280028ULL,0x1020488500050ULL,0x102040810a000a0ULL,0x204081020400040ULL,0x2010080402000204ULL, 00408 0x4020100805000508ULL,0x804020110a000a11ULL,0x80412214001422ULL,0x1824428002844ULL,0x102048850005088ULL,0x2040810a000a010ULL, 00409 0x408102040004020ULL,0x1008040200020408ULL,0x2010080500050810ULL,0x4020110a000a1120ULL,0x8041221400142241ULL,0x182442800284482ULL,0x204885000508804ULL, 00410 0x40810a000a01008ULL,0x810204000402010ULL,0x804020002040810ULL,0x1008050005081020ULL,0x20110a000a112040ULL,0x4122140014224180ULL,0x8244280028448201ULL, 00411 0x488500050880402ULL,0x810a000a0100804ULL,0x1020400040201008ULL,0x402000204081020ULL,0x805000508102040ULL,0x110a000a11204080ULL, 00412 0x2214001422418000ULL,0x4428002844820100ULL,0x8850005088040201ULL,0x10a000a010080402ULL,0x2040004020100804ULL,0x200020408102040ULL, 00413 0x500050810204080ULL,0xa000a1120408000ULL,0x1400142241800000ULL,0x2800284482010000ULL,0x5000508804020100ULL,0xa000a01008040201ULL, 00414 0x4000402010080402ULL,0x2040810204080ULL,0x5081020408000ULL,0xa112040800000ULL,0x14224180000000ULL,0x28448201000000ULL,0x50880402010000ULL, 00415 0xa0100804020100ULL,0x40201008040201ULL 00416 }; 00417 00418 static const u64 LEFT_RIGHT_RANK_FILE[64] = { 00419 0x81412111090503feULL,0x2824222120a07fdULL,0x404844424150efbULL,0x8080888492a1cf7ULL,0x10101011925438efULL,0x2020212224a870dfULL,0x404142444850e0bfULL,0x8182848890a0c07fULL, 00420 0x412111090503fe03ULL,0x824222120a07fd07ULL,0x4844424150efb0eULL,0x80888492a1cf71cULL,0x101011925438ef38ULL,0x20212224a870df70ULL,0x4142444850e0bfe0ULL,0x82848890a0c07fc0ULL, 00421 0x2111090503fe0305ULL,0x4222120a07fd070aULL,0x844424150efb0e15ULL,0x888492a1cf71c2aULL,0x1011925438ef3854ULL,0x212224a870df70a8ULL,0x42444850e0bfe050ULL,0x848890a0c07fc0a0ULL, 00422 0x11090503fe030509ULL,0x22120a07fd070a12ULL,0x4424150efb0e1524ULL,0x88492a1cf71c2a49ULL,0x11925438ef385492ULL,0x2224a870df70a824ULL,0x444850e0bfe05048ULL,0x8890a0c07fc0a090ULL, 00423 0x90503fe03050911ULL,0x120a07fd070a1222ULL,0x24150efb0e152444ULL,0x492a1cf71c2a4988ULL,0x925438ef38549211ULL,0x24a870df70a82422ULL,0x4850e0bfe0504844ULL,0x90a0c07fc0a09088ULL, 00424 0x503fe0305091121ULL,0xa07fd070a122242ULL,0x150efb0e15244484ULL,0x2a1cf71c2a498808ULL,0x5438ef3854921110ULL,0xa870df70a8242221ULL,0x50e0bfe050484442ULL,0xa0c07fc0a0908884ULL, 00425 0x3fe030509112141ULL,0x7fd070a12224282ULL,0xefb0e1524448404ULL,0x1cf71c2a49880808ULL,0x38ef385492111010ULL,0x70df70a824222120ULL,0xe0bfe05048444241ULL,0xc07fc0a090888482ULL, 00426 0xfe03050911214181ULL,0xfd070a1222428202ULL,0xfb0e152444840404ULL,0xf71c2a4988080808ULL,0xef38549211101010ULL,0xdf70a82422212020ULL,0xbfe0504844424140ULL,0x7fc0a09088848281ULL 00427 }; 00428 00429 static const char FILE_AT[64] = { 00430 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 00431 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 00432 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7 00433 }; 00434 00435 static const char RANK_AT[64] = { 00436 0,0,0,0,0,0,0,0, 00437 1,1,1,1,1,1,1,1, 00438 2,2,2,2,2,2,2,2, 00439 3,3,3,3,3,3,3,3, 00440 4,4,4,4,4,4,4,4, 00441 5,5,5,5,5,5,5,5, 00442 6,6,6,6,6,6,6,6, 00443 7,7,7,7,7,7,7,7 00444 }; 00445 static const u64 PAWNS_8_1[2] = { 0xFFULL,0xFF00000000000000ULL }; 00446 00447 static const u64 PAWNS_JUMP[2] = { 0xFF000000000000ULL,0xFF00ULL }; 00448 static const u64 PAWNS_7_2[2] = { 0xFF00ULL,0xFF000000000000ULL }; 00449 00450 static const u64 FILE_[64] = { 00451 0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL,0x4040404040404040ULL, 00452 0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL,0x4040404040404040ULL, 00453 0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL,0x4040404040404040ULL, 00454 0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL, 00455 0x4040404040404040ULL,0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL, 00456 0x4040404040404040ULL,0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL, 00457 0x4040404040404040ULL,0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL, 00458 0x4040404040404040ULL,0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL, 00459 0x4040404040404040ULL,0x8080808080808080ULL 00460 }; 00461 00462 static const u64 POW2[64] = { 00463 0x1ULL,0x2ULL,0x4ULL,0x8ULL,0x10ULL,0x20ULL,0x40ULL,0x80ULL,0x100ULL,0x200ULL,0x400ULL,0x800ULL,0x1000ULL,0x2000ULL,0x4000ULL,0x8000ULL,0x10000ULL,0x20000ULL, 00464 0x40000ULL,0x80000ULL,0x100000ULL,0x200000ULL,0x400000ULL,0x800000ULL,0x1000000ULL,0x2000000ULL,0x4000000ULL,0x8000000ULL,0x10000000ULL,0x20000000ULL,0x40000000ULL,0x80000000ULL, 00465 0x100000000ULL,0x200000000ULL,0x400000000ULL,0x800000000ULL,0x1000000000ULL,0x2000000000ULL,0x4000000000ULL,0x8000000000ULL,0x10000000000ULL,0x20000000000ULL,0x40000000000ULL, 00466 0x80000000000ULL,0x100000000000ULL,0x200000000000ULL,0x400000000000ULL,0x800000000000ULL,0x1000000000000ULL,0x2000000000000ULL,0x4000000000000ULL,0x8000000000000ULL,0x10000000000000ULL, 00467 0x20000000000000ULL,0x40000000000000ULL,0x80000000000000ULL,0x100000000000000ULL,0x200000000000000ULL,0x400000000000000ULL,0x800000000000000ULL,0x1000000000000000ULL,0x2000000000000000ULL, 00468 0x4000000000000000ULL,0x8000000000000000ULL 00469 }; 00470 00471 static const u64 NOTPOW2[64] = { 00472 0xfffffffffffffffeULL,0xfffffffffffffffdULL,0xfffffffffffffffbULL,0xfffffffffffffff7ULL,0xffffffffffffffefULL,0xffffffffffffffdfULL,0xffffffffffffffbfULL, 00473 0xffffffffffffff7fULL,0xfffffffffffffeffULL,0xfffffffffffffdffULL,0xfffffffffffffbffULL,0xfffffffffffff7ffULL,0xffffffffffffefffULL,0xffffffffffffdfffULL,0xffffffffffffbfffULL, 00474 0xffffffffffff7fffULL,0xfffffffffffeffffULL,0xfffffffffffdffffULL,0xfffffffffffbffffULL,0xfffffffffff7ffffULL,0xffffffffffefffffULL,0xffffffffffdfffffULL,0xffffffffffbfffffULL, 00475 0xffffffffff7fffffULL,0xfffffffffeffffffULL,0xfffffffffdffffffULL,0xfffffffffbffffffULL,0xfffffffff7ffffffULL,0xffffffffefffffffULL,0xffffffffdfffffffULL,0xffffffffbfffffffULL, 00476 0xffffffff7fffffffULL,0xfffffffeffffffffULL,0xfffffffdffffffffULL,0xfffffffbffffffffULL,0xfffffff7ffffffffULL,0xffffffefffffffffULL,0xffffffdfffffffffULL,0xffffffbfffffffffULL, 00477 0xffffff7fffffffffULL,0xfffffeffffffffffULL,0xfffffdffffffffffULL,0xfffffbffffffffffULL,0xfffff7ffffffffffULL,0xffffefffffffffffULL,0xffffdfffffffffffULL,0xffffbfffffffffffULL, 00478 0xffff7fffffffffffULL,0xfffeffffffffffffULL,0xfffdffffffffffffULL,0xfffbffffffffffffULL,0xfff7ffffffffffffULL,0xffefffffffffffffULL,0xffdfffffffffffffULL,0xffbfffffffffffffULL, 00479 0xff7fffffffffffffULL,0xfeffffffffffffffULL,0xfdffffffffffffffULL,0xfbffffffffffffffULL,0xf7ffffffffffffffULL,0xefffffffffffffffULL,0xdfffffffffffffffULL,0xbfffffffffffffffULL, 00480 0x7fffffffffffffffULL 00481 }; 00482 00483 static const u64 PAWN_FORK_MASK[2][64] = { { 00484 0,0,0,0,0,0,0,0, 00485 00486 0x2ULL, 00487 0x5ULL, 00488 0xaULL, 00489 0x14ULL, 00490 0x28ULL, 00491 0x50ULL, 00492 0xa0ULL, 00493 0x40ULL, 00494 00495 0x200ULL, 00496 0x500ULL, 00497 0xa00ULL, 00498 0x1400ULL, 00499 0x2800ULL, 00500 0x5000ULL, 00501 0xa000ULL, 00502 0x4000ULL, 00503 00504 0x20000ULL, 00505 0x50000ULL, 00506 0xa0000ULL, 00507 0x140000ULL, 00508 0x280000ULL, 00509 0x500000ULL, 00510 0xa00000ULL, 00511 0x400000ULL, 00512 00513 0x2000000ULL, 00514 0x5000000ULL, 00515 0xa000000ULL, 00516 0x14000000ULL, 00517 0x28000000ULL, 00518 0x50000000ULL, 00519 0xa0000000ULL, 00520 0x40000000ULL, 00521 00522 0x200000000ULL, 00523 0x500000000ULL, 00524 0xa00000000ULL, 00525 0x1400000000ULL, 00526 0x2800000000ULL, 00527 0x5000000000ULL, 00528 0xa000000000ULL, 00529 0x4000000000ULL, 00530 00531 0x20000000000ULL, 00532 0x50000000000ULL, 00533 0xa0000000000ULL, 00534 0x140000000000ULL, 00535 0x280000000000ULL, 00536 0x500000000000ULL, 00537 0xa00000000000ULL, 00538 0x400000000000ULL, 00539 00540 0,0,0,0,0,0,0,0 00541 00542 }, { 00543 0,0,0,0,0,0,0,0, 00544 00545 0x20000ULL, 00546 0x50000ULL, 00547 0xa0000ULL, 00548 0x140000ULL, 00549 0x280000ULL, 00550 0x500000ULL, 00551 0xa00000ULL, 00552 0x400000ULL, 00553 00554 0x2000000ULL, 00555 0x5000000ULL, 00556 0xa000000ULL, 00557 0x14000000ULL, 00558 0x28000000ULL, 00559 0x50000000ULL, 00560 0xa0000000ULL, 00561 0x40000000ULL, 00562 00563 0x200000000ULL, 00564 0x500000000ULL, 00565 0xa00000000ULL, 00566 0x1400000000ULL, 00567 0x2800000000ULL, 00568 0x5000000000ULL, 00569 0xa000000000ULL, 00570 0x4000000000ULL, 00571 00572 0x20000000000ULL, 00573 0x50000000000ULL, 00574 0xa0000000000ULL, 00575 0x140000000000ULL, 00576 0x280000000000ULL, 00577 0x500000000000ULL, 00578 0xa00000000000ULL, 00579 0x400000000000ULL, 00580 00581 0x2000000000000ULL, 00582 0x5000000000000ULL, 00583 0xa000000000000ULL, 00584 0x14000000000000ULL, 00585 0x28000000000000ULL, 00586 0x50000000000000ULL, 00587 0xa0000000000000ULL, 00588 0x40000000000000ULL, 00589 00590 0x200000000000000ULL, 00591 0x500000000000000ULL, 00592 0xa00000000000000ULL, 00593 0x1400000000000000ULL, 00594 0x2800000000000000ULL, 00595 0x5000000000000000ULL, 00596 0xa000000000000000ULL, 00597 0x4000000000000000ULL, 00598 00599 0,0,0,0,0,0,0,0 00600 } 00601 }; 00602 00603 static const u64 PAWN_CAPTURE_MASK[2][64] = { { 00604 0x0000000000000000ULL, 00605 0x0000000000000000ULL, 0x0000000000000000ULL, 0x0000000000000000ULL, 00606 0x0000000000000000ULL, 0x0000000000000000ULL, 0x0000000000000000ULL, 00607 0x0000000000000000ULL, 0x0000000000000002ULL, 0x0000000000000005ULL, 00608 0x000000000000000AULL, 0x0000000000000014ULL, 0x0000000000000028ULL, 00609 0x0000000000000050ULL, 0x00000000000000A0ULL, 0x0000000000000040ULL, 00610 0x0000000000000200ULL, 0x0000000000000500ULL, 0x0000000000000A00ULL, 00611 0x0000000000001400ULL, 0x0000000000002800ULL, 0x0000000000005000ULL, 00612 0x000000000000A000ULL, 0x0000000000004000ULL, 0x0000000000020000ULL, 00613 0x0000000000050000ULL, 0x00000000000A0000ULL, 0x0000000000140000ULL, 00614 0x0000000000280000ULL, 0x0000000000500000ULL, 0x0000000000A00000ULL, 00615 0x0000000000400000ULL, 0x0000000002000000ULL, 0x0000000005000000ULL, 00616 0x000000000A000000ULL, 0x0000000014000000ULL, 0x0000000028000000ULL, 00617 0x0000000050000000ULL, 0x00000000A0000000ULL, 0x0000000040000000ULL, 00618 0x0000000200000000ULL, 0x0000000500000000ULL, 0x0000000A00000000ULL, 00619 0x0000001400000000ULL, 0x0000002800000000ULL, 0x0000005000000000ULL, 00620 0x000000A000000000ULL, 0x0000004000000000ULL, 0x0000020000000000ULL, 00621 0x0000050000000000ULL, 0x00000A0000000000ULL, 0x0000140000000000ULL, 00622 0x0000280000000000ULL, 0x0000500000000000ULL, 0x0000A00000000000ULL, 00623 0x0000400000000000ULL, 0x0002000000000000ULL, 0x0005000000000000ULL, 00624 0x000A000000000000ULL, 0x0014000000000000ULL, 0x0028000000000000ULL, 00625 0x0050000000000000ULL, 0x00A0000000000000ULL, 0x0040000000000000ULL 00626 }, 00627 { 00628 0x0000000000000200ULL, 0x0000000000000500ULL, 0x0000000000000A00ULL, 00629 0x0000000000001400ULL, 0x0000000000002800ULL, 00630 0x0000000000005000ULL, 0x000000000000A000ULL, 00631 0x0000000000004000ULL, 0x0000000000020000ULL, 00632 0x0000000000050000ULL, 0x00000000000A0000ULL, 00633 0x0000000000140000ULL, 0x0000000000280000ULL, 00634 0x0000000000500000ULL, 0x0000000000A00000ULL, 00635 0x0000000000400000ULL, 0x0000000002000000ULL, 00636 0x0000000005000000ULL, 0x000000000A000000ULL, 00637 0x0000000014000000ULL, 0x0000000028000000ULL, 00638 0x0000000050000000ULL, 0x00000000A0000000ULL, 00639 0x0000000040000000ULL, 0x0000000200000000ULL, 00640 0x0000000500000000ULL, 0x0000000A00000000ULL, 00641 0x0000001400000000ULL, 0x0000002800000000ULL, 00642 0x0000005000000000ULL, 0x000000A000000000ULL, 00643 0x0000004000000000ULL, 0x0000020000000000ULL, 00644 0x0000050000000000ULL, 0x00000A0000000000ULL, 00645 0x0000140000000000ULL, 0x0000280000000000ULL, 00646 0x0000500000000000ULL, 0x0000A00000000000ULL, 00647 0x0000400000000000ULL, 0x0002000000000000ULL, 00648 0x0005000000000000ULL, 0x000A000000000000ULL, 00649 0x0014000000000000ULL, 0x0028000000000000ULL, 00650 0x0050000000000000ULL, 0x00A0000000000000ULL, 00651 0x0040000000000000ULL, 0x0200000000000000ULL, 00652 0x0500000000000000ULL, 0x0A00000000000000ULL, 00653 0x1400000000000000ULL, 0x2800000000000000ULL, 00654 0x5000000000000000ULL, 0xA000000000000000ULL, 00655 0x4000000000000000ULL, 0x0000000000000000ULL, 00656 0x0000000000000000ULL, 0x0000000000000000ULL, 00657 0x0000000000000000ULL, 0x0000000000000000ULL, 00658 0x0000000000000000ULL, 0x0000000000000000ULL, 00659 0x0000000000000000ULL 00660 } 00661 }; 00662 00663 static const u64 NEAR_MASK1[64] = { 00664 0x0000000000000302ULL, 0x0000000000000705ULL, 00665 0x0000000000000E0AULL, 0x0000000000001C14ULL, 0x0000000000003828ULL, 00666 0x0000000000007050ULL, 0x000000000000E0A0ULL, 0x000000000000C040ULL, 00667 0x0000000000030203ULL, 0x0000000000070507ULL, 0x00000000000E0A0EULL, 00668 0x00000000001C141CULL, 0x0000000000382838ULL, 0x0000000000705070ULL, 00669 0x0000000000E0A0E0ULL, 0x0000000000C040C0ULL, 0x0000000003020300ULL, 00670 0x0000000007050700ULL, 0x000000000E0A0E00ULL, 0x000000001C141C00ULL, 00671 0x0000000038283800ULL, 0x0000000070507000ULL, 0x00000000E0A0E000ULL, 00672 0x00000000C040C000ULL, 0x0000000302030000ULL, 0x0000000705070000ULL, 00673 0x0000000E0A0E0000ULL, 0x0000001C141C0000ULL, 0x0000003828380000ULL, 00674 0x0000007050700000ULL, 0x000000E0A0E00000ULL, 0x000000C040C00000ULL, 00675 0x0000030203000000ULL, 0x0000070507000000ULL, 0x00000E0A0E000000ULL, 00676 0x00001C141C000000ULL, 0x0000382838000000ULL, 0x0000705070000000ULL, 00677 0x0000E0A0E0000000ULL, 0x0000C040C0000000ULL, 0x0003020300000000ULL, 00678 0x0007050700000000ULL, 0x000E0A0E00000000ULL, 0x001C141C00000000ULL, 00679 0x0038283800000000ULL, 0x0070507000000000ULL, 0x00E0A0E000000000ULL, 00680 0x00C040C000000000ULL, 0x0302030000000000ULL, 0x0705070000000000ULL, 00681 0x0E0A0E0000000000ULL, 0x1C141C0000000000ULL, 0x3828380000000000ULL, 00682 0x7050700000000000ULL, 0xE0A0E00000000000ULL, 0xC040C00000000000ULL, 00683 0x0203000000000000ULL, 0x0507000000000000ULL, 0x0A0E000000000000ULL, 00684 0x141C000000000000ULL, 0x2838000000000000ULL, 0x5070000000000000ULL, 00685 0xA0E0000000000000ULL, 0x40C0000000000000ULL 00686 }; 00687 00688 static const u64 NEAR_MASK2[64] = { 00689 0x70706ULL,0xf0f0dULL,0x1f1f1bULL,0x3e3e36ULL,0x7c7c6cULL,0xf8f8d8ULL,0xf0f0b0ULL,0xe0e060ULL,0x7070607ULL,0xf0f0d0fULL,0x1f1f1b1fULL,0x3e3e363eULL,0x7c7c6c7cULL,0xf8f8d8f8ULL, 00690 0xf0f0b0f0ULL,0xe0e060e0ULL,0x707060707ULL,0xf0f0d0f0fULL,0x1f1f1b1f1fULL,0x3e3e363e3eULL,0x7c7c6c7c7cULL,0xf8f8d8f8f8ULL,0xf0f0b0f0f0ULL,0xe0e060e0e0ULL,0x70706070700ULL, 00691 0xf0f0d0f0f00ULL,0x1f1f1b1f1f00ULL,0x3e3e363e3e00ULL,0x7c7c6c7c7c00ULL,0xf8f8d8f8f800ULL,0xf0f0b0f0f000ULL,0xe0e060e0e000ULL,0x7070607070000ULL,0xf0f0d0f0f0000ULL,0x1f1f1b1f1f0000ULL, 00692 0x3e3e363e3e0000ULL,0x7c7c6c7c7c0000ULL,0xf8f8d8f8f80000ULL,0xf0f0b0f0f00000ULL,0xe0e060e0e00000ULL,0x707060707000000ULL,0xf0f0d0f0f000000ULL,0x1f1f1b1f1f000000ULL, 00693 0x3e3e363e3e000000ULL,0x7c7c6c7c7c000000ULL,0xf8f8d8f8f8000000ULL,0xf0f0b0f0f0000000ULL,0xe0e060e0e0000000ULL,0x706070700000000ULL,0xf0d0f0f00000000ULL,0x1f1b1f1f00000000ULL, 00694 0x3e363e3e00000000ULL,0x7c6c7c7c00000000ULL,0xf8d8f8f800000000ULL,0xf0b0f0f000000000ULL,0xe060e0e000000000ULL,0x607070000000000ULL,0xd0f0f0000000000ULL,0x1b1f1f0000000000ULL, 00695 0x363e3e0000000000ULL,0x6c7c7c0000000000ULL,0xd8f8f80000000000ULL,0xb0f0f00000000000ULL,0x60e0e00000000000ULL 00696 }; 00697 00698 static const u64 KNIGHT_MASK[64] = { 00699 0x0000000000020400ULL, 0x0000000000050800ULL, 00700 0x00000000000A1100ULL, 0x0000000000142200ULL, 0x0000000000284400ULL, 00701 0x0000000000508800ULL, 0x0000000000A01000ULL, 0x0000000000402000ULL, 00702 0x0000000002040004ULL, 0x0000000005080008ULL, 0x000000000A110011ULL, 00703 0x0000000014220022ULL, 0x0000000028440044ULL, 0x0000000050880088ULL, 00704 0x00000000A0100010ULL, 0x0000000040200020ULL, 0x0000000204000402ULL, 00705 0x0000000508000805ULL, 0x0000000A1100110AULL, 0x0000001422002214ULL, 00706 0x0000002844004428ULL, 0x0000005088008850ULL, 0x000000A0100010A0ULL, 00707 0x0000004020002040ULL, 0x0000020400040200ULL, 0x0000050800080500ULL, 00708 0x00000A1100110A00ULL, 0x0000142200221400ULL, 0x0000284400442800ULL, 00709 0x0000508800885000ULL, 0x0000A0100010A000ULL, 0x0000402000204000ULL, 00710 0x0002040004020000ULL, 0x0005080008050000ULL, 0x000A1100110A0000ULL, 00711 0x0014220022140000ULL, 0x0028440044280000ULL, 0x0050880088500000ULL, 00712 0x00A0100010A00000ULL, 0x0040200020400000ULL, 0x0204000402000000ULL, 00713 0x0508000805000000ULL, 0x0A1100110A000000ULL, 0x1422002214000000ULL, 00714 0x2844004428000000ULL, 0x5088008850000000ULL, 0xA0100010A0000000ULL, 00715 0x4020002040000000ULL, 0x0400040200000000ULL, 0x0800080500000000ULL, 00716 0x1100110A00000000ULL, 0x2200221400000000ULL, 0x4400442800000000ULL, 00717 0x8800885000000000ULL, 0x100010A000000000ULL, 0x2000204000000000ULL, 00718 0x0004020000000000ULL, 0x0008050000000000ULL, 0x00110A0000000000ULL, 00719 0x0022140000000000ULL, 0x0044280000000000ULL, 0x0088500000000000ULL, 00720 0x0010A00000000000ULL, 0x0020400000000000ULL 00721 }; 00722 00723 static const u64 ENPASSANT_MASK[2][64] = { { 00724 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 00725 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 00726 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 00727 0ULL, 0ULL, 0x200000000ULL, 0x500000000ULL, 0xA00000000ULL, 00728 0x1400000000ULL, 0x2800000000ULL, 0x5000000000ULL, 0xA000000000ULL, 00729 0x4000000000ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 00730 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 00731 0ULL, 0ULL, 0 00732 }, { 00733 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 00734 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 00735 0ULL, 0ULL, 0ULL, 0ULL, 0x2000000ULL, 0x5000000ULL, 0xA000000ULL, 00736 0x14000000ULL, 0x28000000ULL, 0x50000000ULL, 0xA0000000ULL, 00737 0x40000000ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 00738 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 00739 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0 00740 } 00741 }; 00742 00743 } 00744 00745 using namespace _board; 00746 namespace _memory { 00747 #ifdef _WIN32 00748 #include <windows.h> 00749 #else 00750 #include <sys/mman.h> 00751 #endif 00752 void* _mmap(string fileName); 00753 void _munmap(void *blob,int fileSize); 00754 } 00755 00756 namespace _time { 00757 string getLocalTime(); 00758 int diffTime(struct timeb a,struct timeb b); 00759 } 00760 00761 namespace _string { 00762 void trimRight( string& str ); 00763 void replace(string& f,string s1,string s2); 00764 void replace(string& f,char c1,char c2) ; 00765 } 00766 00767 namespace _file { 00768 int fileSize(const string& FileName) ; 00769 string extractFileName(string path); 00770 } 00771 00772 namespace _random { 00773 void init(); 00774 u64 getRandom64(); 00775 } 00776 00777 namespace _bits { 00778 extern u64 MASK_BIT_SET[64][64]; 00779 extern u64 MASK_BIT_SET_NOBOUND[64][64]; 00780 extern char MASK_BIT_SET_COUNT[64][64]; 00781 extern char MASK_BIT_SET_NOBOUND_COUNT[64][64]; 00782 extern u64** LINK_ROOKS; 00783 void init(); 00784 void _free(); 00785 00786 template <int side,int shift> __inline static u64 shiftForward(const u64 bits ) { 00787 return side==WHITE ? bits<<shift : bits>>shift; 00788 } 00789 00790 #if UINTPTR_MAX == 0xffffffffffffffff 00791 __inline static int BITScanForward(u64 bits) { 00792 return __builtin_ffsll(bits) - 1; 00793 } 00794 00795 __inline static int BITScanReverse(u64 bits) { 00796 return 63 - __builtin_clzll(bits) ; 00797 } 00798 #else 00799 __inline static int BITScanForward(u64 bits) { 00800 return ((unsigned) bits) ? __builtin_ffs(bits) - 1 : __builtin_ffs(bits >> 32) + 31; 00801 } 00802 00803 __inline static int BITScanReverse(u64 bits) { 00804 return ((unsigned) (bits >> 32))? 63-__builtin_clz(bits >> 32) : 31-__builtin_clz(bits) ; 00805 } 00806 #endif 00807 00808 #ifdef HAS_POPCNT 00809 __inline static int bitCount(u64 bits) { 00810 return __builtin_popcountll(bits); 00811 } 00812 #else 00813 __inline static int bitCount(u64 bits) { 00814 int count = 0; 00815 while (bits) { 00816 count++; 00817 bits &= bits - 1; 00818 } 00819 return count; 00820 } 00821 #endif 00822 00823 } 00824 00825 00826 namespace _eval { 00827 00828 static const int VALUEPAWN = 100; 00829 static const int VALUEROOK = 520; 00830 static const int VALUEBISHOP = 335; 00831 static const int VALUEKNIGHT = 330; 00832 static const int VALUEQUEEN = 980; 00833 static const int VALUEKING =_INFINITE; 00834 00835 static const int PIECES_VALUE[] = { 00836 VALUEPAWN, VALUEPAWN, VALUEROOK, VALUEROOK, 00837 VALUEBISHOP, VALUEBISHOP, VALUEKNIGHT, VALUEKNIGHT, VALUEKING, 00838 VALUEKING, VALUEQUEEN, VALUEQUEEN, 0 00839 }; 00840 00841 enum _Tstatus { 00842 OPEN, MIDDLE, END 00843 }; 00844 00845 static const int MOB_QUEEN[][29] = { 00846 {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 00847 {-10,-9,-5,0,3,6,7,10,11,12,15,18,28,30,32,35,40,50,51,52,53,54,55,56,57,58,59,60,61}, 00848 {-20,-15,-10,0,1,3,4,9,11,12,15,18,28,30,32,33,34,36,37,39,40,41,42,43,44,45,56,47,48} 00849 }; 00850 00851 static const int MOB_ROOK[][15] = { 00852 {-1,0,1,4,5,6,7,9,12,14,19,22,23,24,25}, 00853 {-9,-8,1,8,9,10,15,20,28,30,40,45,50,51,52}, 00854 {-15,-10,-5,0,9,11,16,22,30,32,40,45,50,51,52} 00855 }; 00856 00857 static const int MOB_KNIGHT[] = {-8,-4,7,10,15,20,30,35,40}; 00858 static const int MOB_BISHOP[] = {-8,-7,2,8,9,10,15,20,28,30,40,45,50,50,50}; 00859 00860 static const int MOB_KING[][9] = { 00861 {1,2,2,1,0,0,0,0,0}, 00862 {-5,0,5,5,5,0,0,0,0}, 00863 {-50,-30,-10,10,25,40,50,55,60} 00864 }; 00865 00866 static const int MOB_CASTLE[][3] = { 00867 {-50,30,50}, 00868 {-1,10,10}, 00869 {0,0,0} 00870 }; 00871 00872 static const int MOB_PAWNS[] = {-1,2,3,4,5,10,12,14,18,22,25,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,70,75,80,90,95,100,110}; 00873 00874 static const int BONUS_ATTACK_KING[] = { -1, 2, 8, 64, 128, 512,512,512,512,512,512,512,512,512,512,512,512,512 }; 00875 00876 static const u64 PAWN_PROTECTED_MASK[2][64] = { { 00877 0x200ULL, 0x500ULL, 0xa00ULL, 0x1400ULL, 00878 0x2800ULL, 0x5000ULL, 0xa000ULL, 0x4000ULL, 0x20000ULL, 0x50000ULL, 00879 0xa0000ULL, 0x140000ULL, 0x280000ULL, 0x500000ULL, 0xa00000ULL, 00880 0x400000ULL, 0x2000000ULL, 0x5000000ULL, 0xa000000ULL, 0x14000000ULL, 00881 0x28000000ULL, 0x50000000ULL, 0xa0000000ULL, 0x40000000ULL, 00882 0x200000000ULL, 0x500000000ULL, 0xa00000000ULL, 0x1400000000ULL, 00883 0x2800000000ULL, 0x5000000000ULL, 0xa000000000ULL, 0x4000000000ULL, 00884 0x20000000000ULL, 0x50000000000ULL, 0xa0000000000ULL, 00885 0x140000000000ULL, 0x280000000000ULL, 0x500000000000ULL, 00886 0xa00000000000ULL, 0x400000000000ULL, 0x2000000000000ULL, 00887 0x5000000000000ULL, 0xa000000000000ULL, 0x14000000000000ULL, 00888 0x28000000000000ULL, 0x50000000000000ULL, 0xa0000000000000ULL, 00889 0x40000000000000ULL, 0xFF000000000000ULL, 0xFF000000000000ULL, 00890 0xFF000000000000ULL, 0xFF000000000000ULL, 0xFF000000000000ULL, 00891 0xFF000000000000ULL, 0xFF000000000000ULL, 0xFF000000000000ULL, 0, 0, 0, 00892 0, 0, 0, 0, 0 00893 }, { 00894 0, 0, 0, 0, 0, 0, 0, 0, 0xFF00ULL, 0xFF00ULL, 00895 0xFF00ULL, 0xFF00ULL, 0xFF00ULL, 0xFF00ULL, 0xFF00ULL, 0xFF00ULL, 00896 0x200ULL, 0x500ULL, 0xa00ULL, 0x1400ULL, 0x2800ULL, 0x5000ULL, 00897 0xa000ULL, 0x4000ULL, 0x20000ULL, 0x50000ULL, 0xa0000ULL, 0x140000ULL, 00898 0x280000ULL, 0x500000ULL, 0xa00000ULL, 0x400000ULL, 0x2000000ULL, 00899 0x5000000ULL, 0xa000000ULL, 0x14000000ULL, 0x28000000ULL, 00900 0x50000000ULL, 0xa0000000ULL, 0x40000000ULL, 0x200000000ULL, 00901 0x500000000ULL, 0xa00000000ULL, 0x1400000000ULL, 0x2800000000ULL, 00902 0x5000000000ULL, 0xa000000000ULL, 0x4000000000ULL, 0x20000000000ULL, 00903 0x50000000000ULL, 0xa0000000000ULL, 0x140000000000ULL, 00904 0x280000000000ULL, 0x500000000000ULL, 0xa00000000000ULL, 00905 0x400000000000ULL, 0xFF00000000000000ULL, 0xFF00000000000000ULL, 00906 0xFF00000000000000ULL, 0xFF00000000000000ULL, 0xFF00000000000000ULL, 00907 0xFF00000000000000ULL, 0xFF00000000000000ULL, 0xFF00000000000000ULL 00908 } 00909 }; 00910 00911 static const u64 PAWN_BACKWARD_MASK[2][64] = { { 00912 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 00913 0ULL, 131584ULL, 328960ULL, 657920ULL, 1315840ULL, 2631680ULL, 00914 5263360ULL, 10526720ULL, 4210688ULL, 33685504ULL, 84213760ULL, 00915 168427520ULL, 336855040ULL, 673710080ULL, 1347420160ULL, 2694840320ULL, 00916 1077936128ULL, 8623489024ULL, 21558722560ULL, 43117445120ULL, 00917 86234890240ULL, 172469780480ULL, 344939560960ULL, 689879121920ULL, 00918 275951648768ULL, 2207613190144ULL, 5519032975360ULL, 11038065950720ULL, 00919 22076131901440ULL, 44152263802880ULL, 88304527605760ULL, 00920 176609055211520ULL, 70643622084608ULL, 565148976676864ULL, 00921 1412872441692160ULL, 2825744883384320ULL, 5651489766768640ULL, 00922 11302979533537280ULL, 22605959067074560ULL, 45211918134149120ULL, 00923 18084767253659648ULL, 562949953421312ULL, 1407374883553280ULL, 00924 2814749767106560ULL, 5629499534213120ULL, 11258999068426240ULL, 00925 22517998136852480ULL, 45035996273704960ULL, 18014398509481984ULL, 0ULL, 00926 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0 00927 }, { 00928 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 00929 512ULL, 1280ULL, 2560ULL, 5120ULL, 10240ULL,20480ULL, 40960ULL, 16384ULL, 00930 131584ULL, 328960ULL, 657920ULL,1315840ULL, 2631680ULL, 5263360ULL, 10526720ULL, 4210688ULL, 00931 33685504ULL, 84213760ULL, 168427520ULL, 336855040ULL, 673710080ULL, 1347420160ULL, 2694840320ULL, 1077936128ULL, 00932 8623489024ULL,21558722560ULL, 43117445120ULL, 86234890240ULL, 172469780480ULL, 00933 344939560960ULL, 689879121920ULL, 275951648768ULL, 2207613190144ULL, 00934 5519032975360ULL, 11038065950720ULL, 22076131901440ULL, 00935 44152263802880ULL, 88304527605760ULL, 176609055211520ULL, 00936 70643622084608ULL, 565148976676864ULL, 1412872441692160ULL, 00937 2825744883384320ULL, 5651489766768640ULL, 11302979533537280ULL, 00938 22605959067074560ULL, 45211918134149120ULL, 18084767253659648ULL, 0ULL, 00939 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0 00940 } 00941 }; 00942 00943 static const u64 PAWN_PASSED_MASK[2][64] = { { 00944 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 00945 0x0ULL, 0x0ULL, 0x0ULL, 0x3ULL, 0x7ULL, 0xeULL, 0x1cULL, 0x38ULL, 00946 0x70ULL, 0xe0ULL, 0xc0ULL, 0x303ULL, 0x707ULL, 0xe0eULL, 0x1c1cULL, 00947 0x3838ULL, 0x7070ULL, 0xe0e0ULL, 0xc0c0ULL, 0x30303ULL, 0x70707ULL, 00948 0xe0e0eULL, 0x1c1c1cULL, 0x383838ULL, 0x707070ULL, 0xe0e0e0ULL, 00949 0xc0c0c0ULL, 0x3030303ULL, 0x7070707ULL, 0xe0e0e0eULL, 0x1c1c1c1cULL, 00950 0x38383838ULL, 0x70707070ULL, 0xe0e0e0e0ULL, 0xc0c0c0c0ULL, 00951 0x303030303ULL, 0x707070707ULL, 0xe0e0e0e0eULL, 0x1c1c1c1c1cULL, 00952 0x3838383838ULL, 0x7070707070ULL, 0xe0e0e0e0e0ULL, 0xc0c0c0c0c0ULL, 00953 0x30303030303ULL, 0x70707070707ULL, 0xe0e0e0e0e0eULL, 00954 0x1c1c1c1c1c1cULL, 0x383838383838ULL, 0x707070707070ULL, 00955 0xe0e0e0e0e0e0ULL, 0xc0c0c0c0c0c0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 00956 0x0ULL, 0x0ULL, 0x0ULL, 0x0 00957 }, { 00958 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 00959 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x303030303030000ULL, 00960 0x707070707070000ULL, 0xe0e0e0e0e0e0000ULL, 0x1c1c1c1c1c1c0000ULL, 00961 0x3838383838380000ULL, 0x7070707070700000ULL, 0xe0e0e0e0e0e00000ULL, 00962 0xc0c0c0c0c0c00000ULL, 0x303030303000000ULL, 0x707070707000000ULL, 00963 0xe0e0e0e0e000000ULL, 0x1c1c1c1c1c000000ULL, 0x3838383838000000ULL, 00964 0x7070707070000000ULL, 0xe0e0e0e0e0000000ULL, 0xc0c0c0c0c0000000ULL, 00965 0x303030300000000ULL, 0x707070700000000ULL, 0xe0e0e0e00000000ULL, 00966 0x1c1c1c1c00000000ULL, 0x3838383800000000ULL, 0x7070707000000000ULL, 00967 0xe0e0e0e000000000ULL, 0xc0c0c0c000000000ULL, 0x303030000000000ULL, 00968 0x707070000000000ULL, 0xe0e0e0000000000ULL, 0x1c1c1c0000000000ULL, 00969 0x3838380000000000ULL, 0x7070700000000000ULL, 0xe0e0e00000000000ULL, 00970 0xc0c0c00000000000ULL, 0x303000000000000ULL, 0x707000000000000ULL, 00971 0xe0e000000000000ULL, 0x1c1c000000000000ULL, 0x3838000000000000ULL, 00972 0x7070000000000000ULL, 0xe0e0000000000000ULL, 0xc0c0000000000000ULL, 00973 0x300000000000000ULL, 0x700000000000000ULL, 0xe00000000000000ULL, 00974 0x1c00000000000000ULL, 0x3800000000000000ULL, 0x7000000000000000ULL, 00975 0xe000000000000000ULL, 0xc000000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 00976 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0 00977 } 00978 }; 00979 00980 static const uchar PAWN_PASSED[2][64] = { { 00981 200, 200, 200, 200, 200, 200, 200, 200, 00982 100, 100, 100, 100, 100, 100, 100, 100, 00983 40, 40, 40, 40, 40, 40, 40, 40, 00984 19, 19, 19, 21, 21, 19, 19, 19, 00985 13, 13, 13, 25, 25, 13, 13, 13, 00986 0, 0, 0, 0, 0, 0, 0, 0, 00987 0, 0, 0, 0, 0, 0, 0, 0, 00988 0, 0, 0, 0, 0, 0, 0, 0 00989 }, { 00990 0, 0, 0, 0, 0, 0, 0, 0, 00991 0, 0, 0, 0, 0, 0, 0, 0, 00992 0, 0, 0, 0, 0, 0, 0, 0, 00993 13, 13, 13, 25, 25, 13, 13, 13, 00994 19, 19, 19, 21, 21, 19, 19, 19, 00995 40, 40, 40, 40, 40, 40, 40, 40, 00996 100, 100, 100, 100, 100, 100, 100, 100, 00997 200, 200, 200, 200, 200, 200, 200, 200 00998 } 00999 }; 01000 01001 static const u64 PAWN_ISOLATED_MASK[64] = { 01002 0x202020202020202ULL, 0x505050505050505ULL, 01003 0xA0A0A0A0A0A0A0AULL, 0x1414141414141414ULL, 0x2828282828282828ULL, 01004 0x5050505050505050ULL, 0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL, 01005 0x202020202020202ULL, 0x505050505050505ULL, 0xA0A0A0A0A0A0A0AULL, 01006 0x1414141414141414ULL, 0x2828282828282828ULL, 0x5050505050505050ULL, 01007 0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL, 0x202020202020202ULL, 01008 0x505050505050505ULL, 0xA0A0A0A0A0A0A0AULL, 0x1414141414141414ULL, 01009 0x2828282828282828ULL, 0x5050505050505050ULL, 0xA0A0A0A0A0A0A0A0ULL, 01010 0x4040404040404040ULL, 0x202020202020202ULL, 0x505050505050505ULL, 01011 0xA0A0A0A0A0A0A0AULL, 0x1414141414141414ULL, 0x2828282828282828ULL, 01012 0x5050505050505050ULL, 0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL, 01013 0x202020202020202ULL, 0x505050505050505ULL, 0xA0A0A0A0A0A0A0AULL, 01014 0x1414141414141414ULL, 0x2828282828282828ULL, 0x5050505050505050ULL, 01015 0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL, 0x202020202020202ULL, 01016 0x505050505050505ULL, 0xA0A0A0A0A0A0A0AULL, 0x1414141414141414ULL, 01017 0x2828282828282828ULL, 0x5050505050505050ULL, 0xA0A0A0A0A0A0A0A0ULL, 01018 0x4040404040404040ULL, 0x202020202020202ULL, 0x505050505050505ULL, 01019 0xA0A0A0A0A0A0A0AULL, 0x1414141414141414ULL, 0x2828282828282828ULL, 01020 0x5050505050505050ULL, 0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL, 01021 0x202020202020202ULL, 0x505050505050505ULL, 0xA0A0A0A0A0A0A0AULL, 01022 0x1414141414141414ULL, 0x2828282828282828ULL, 0x5050505050505050ULL, 01023 0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL 01024 }; 01025 01026 static const char DISTANCE_KING_OPENING[64] = { 01027 -8, -8, -8, -8, -8, -8, -8, -8, 01028 -8, -8, -8, -8, -8, -8, -8, -8, 01029 -8, -8, -12, -12, -12, -12, -8, -8, 01030 -8, -8, -12, -16, -16, -12, -8, -8, 01031 -8, -8, -12, -16, -16, -12, -8, -8, 01032 -8, -8, -12, -12, -12, -12, -8, -8, 01033 -8, -8, -8, -8, -8, -8, -8, -8, 01034 -8, -8, -8, -8, -8, -8, -8, -8 01035 }; 01036 01037 static const char DISTANCE_KING_ENDING[64] = { 01038 12, 12, 12, 12, 12, 12, 12, 12, 01039 12, 12, 12, 12, 12, 12, 12, 12, 01040 12, 12, 16, 16, 16, 16, 12, 12, 01041 12, 12, 16, 20, 20, 16, 12, 12, 01042 12, 12, 16, 20, 20, 16, 12, 12, 01043 12, 12, 16, 16, 16, 16, 12, 12, 01044 12, 12, 12, 12, 12, 12, 12, 12, 01045 12, 12, 12, 12, 12, 12, 12, 12 01046 }; 01047 01048 } 01049 01050 #endif 01051