📄 hasher.cpp
字号:
/**
@file
Hash codes and hash functions
*/
#include "Hasher.h"
using namespace Othello;
unsigned int Hasher::Key32(const Board &board)
{
assert(board.IsClean());
unsigned int k=0;
for(unsigned int i=p11; i<s89; i++)
if(Zorbist[i][board.table[i]+1]!=0) //??? isn't this pointless
k^=Zorbist[i][board.table[i]+1];
return k;
}
unsigned int Hasher::Lock32(const Board &board)
{
assert(board.IsClean());
unsigned int k=0;
for(unsigned int i=p11; i<s89; i++)
if(Zorbist2[i][board.table[i]+1]!=0) //???
k^=Zorbist2[i][board.table[i]+1];
return k;
}
unsigned int Hasher::Hash1(const BookBoard &b)
{
unsigned int k=0;
for(int l=0; l<4; l++)
for(int i=0; i<16; i++)
{
if(b.l[l] & BookBoard::maskempty[i]) //0+1
//empty
k^=Zorbist[i+l*16][1];
else
if(b.l[l] & BookBoard::maskwhite[i]) //-1+1
//white
k^=Zorbist[i+l*16][0];
else //1+1
//black
k^=Zorbist[i+l*16][2];
}
return k;
}
unsigned int Hasher::Hash2(const BookBoard &b)
{
unsigned int k=0;
for(int l=0; l<4; l++)
for(int i=0; i<16; i++)
{
if(b.l[l] & BookBoard::maskempty[i]) //0+1
//empty
k^=Zorbist2[i+l*16][1];
else
if(b.l[l] & BookBoard::maskwhite[i]) //-1+1
//white
k^=Zorbist2[i+l*16][0];
else //1+1
//black
k^=Zorbist2[i+l*16][2];
}
return k;
}
//random numbers. DO NOT EDIT THEM !!!
unsigned int Hasher::Zorbist[10*10][3]=
{
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{4080774206u,3513173042u,1884024056u},
{992732356u ,2835655762u,2140230751u},
{2606369050u,1468752621u,918965511u },
{2087278809u,1244363247u,2763778331u},
{3828099910u,1465415222u,1374542338u},
{3273180974u,2293851914u,4123592089u},
{1960513693u,3122927487u,3120859673u},
{79472542u ,1328391121u,1769325556u},
{0 ,0 ,0 },
{0 ,0 ,0 },
{3527916907u,3601313090u,3197885688u},
{1909986406u,2439852641u,1150824678u},
{2643261807u,1590914111u,1889460522u},
{3401343676u,3018244944u,4008837039u},
{3959156562u,2347505222u,2934889985u},
{3170575978u,1910745929u,912937665u },
{757057325u ,2983143582u,3604500795u},
{1742494916u,2668506692u,2700609293u},
{0 ,0 ,0 },
{0 ,0 ,0 },
{4017811764u,3413730545u,574549579u },
{3938074582u,4109611318u,889628299u },
{1762097121u,2244508458u,2607899608u},
{3838195509u,3780181996u,2705347710u},
{248641260u ,742840970u ,1591185851u},
{1515557087u,4207980880u,2470240901u},
{3492523512u,1165857098u,1938854867u},
{42353963u ,1083746292u,188528986u },
{0 ,0 ,0 },
{0 ,0 ,0 },
{596531795u ,3761282819u,116759214u },
{870869982u ,3166705107u,1342972055u},
{853503385u ,586343533u ,55244337u },
{2593268951u,50494587u ,1649126946u},
{1169038236u,3839262531u,2933960741u},
{853900778u ,855291486u ,398755336u },
{65601017u ,1283005567u,151776945u },
{3207420057u,2840874233u,2630218564u},
{0 ,0 ,0 },
{0 ,0 ,0 },
{1911674620u,1221525591u,2613660949u},
{4002113140u,2015302959u,67687902u },
{2001430457u,278232804u ,70243904u },
{1798085772u,4244866237u,816364143u },
{3634493314u,2503071212u,2520795642u},
{2255512797u,1818902573u,247308897u },
{870363773u ,2214106116u,1578692705u},
{2886808445u,1434310684u,2712062101u},
{0 ,0 ,0 },
{0 ,0 ,0 },
{3599691311u,1859319672u,3082216370u},
{84351069u ,970447294u ,2974992397u},
{2926063127u,2490251558u,361116816u },
{1629858561u,3265742850u,1951440508u},
{3572536692u,2275572958u,1897638085u},
{2159564892u,2751040365u,1517199151u},
{3047156429u,897946254u ,659734303u },
{1842078682u,1631307479u,2901871673u},
{0 ,0 ,0 },
{0 ,0 ,0 },
{1308321628u,3364370933u,3003098375u},
{814556643u ,2924210235u,3124627917u},
{830780490u ,1980388489u,2054645271u},
{2930126433u,2438805749u,2383028185u},
{1300363199u,3411108773u,519893391u },
{2326471487u,254187303u ,1935973435u},
{647994498u ,2589303006u,3074693850u},
{2997451155u,215902868u ,3834725507u},
{0 ,0 ,0 },
{0 ,0 ,0 },
{1625099662u,1784021441u,1172966178u},
{3693721717u,1309959343u,1094225792u},
{3666420868u,3755378406u,3717738628u},
{2549333297u,64465305u ,997937243u },
{2132676532u,3298321810u,3456897818u},
{3864479181u,4169747263u,3901537740u},
{3528870374u,4252372355u,995978512u },
{2769869008u,3388135169u,1027839637u},
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 }
};
//random numbers. DO NOT EDIT THEM !!!
unsigned int Hasher::Zorbist2[10*10][3]=
{
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{3658645116u,3292313771u,3238502690u},
{3261939132u,2860979668u,2848259135u},
{4079185066u,562403728u ,3794575696u},
{2396327649u,409795785u ,1168907288u},
{61130337u ,63841843u ,1801449796u},
{2560561080u,1237780994u,914800799u },
{3505576827u,3507833851u,152900694u },
{4196579709u,4232619445u,348595454u },
{0 ,0 ,0 },
{0 ,0 ,0 },
{953087944u ,74572198u ,3653156517u},
{3022298338u,3519265846u,1461162680u},
{2242234557u,2667770427u,2002120386u},
{4006762348u,2406135344u,3924583230u},
{3063834005u,1048107457u,981729476u },
{979419630u ,3530495709u,3702454653u},
{1931198134u,1130486622u,2820155136u},
{739592060u ,3236835678u,3827600991u},
{0 ,0 ,0 },
{0 ,0 ,0 },
{4161050830u,2833152837u,2096560446u},
{1527789035u,919392965u ,4263380589u},
{210654522u ,2586072429u,1603422705u},
{3244154463u,2598185103u,2282252496u},
{3384319155u,2832537581u,778747702u },
{1229003390u,787540804u ,2155834504u},
{1078898131u,2733948140u,1813312976u},
{4006071437u,731472058u ,2836514082u},
{0 ,0 ,0 },
{0 ,0 ,0 },
{562565421u ,2317569102u,2893317651u},
{4040789165u,2677457626u,4111701827u},
{3014436427u,2945875003u,824057103u },
{3640742708u,2909178714u,477670964u },
{898814852u ,3765956278u,2426887895u},
{1954603928u,55364276u ,4162537444u},
{348208998u ,1333167409u,101979148u },
{3655542876u,3346119888u,3737548496u},
{0 ,0 ,0 },
{0 ,0 ,0 },
{2413980684u,1319826634u,115434087u },
{1371367150u,3980053038u,2231358725u},
{1610180067u,2915079669u,825885363u },
{3727154142u,319208381u ,3073861049u},
{1598484779u,303521865u ,1076631397u},
{316496379u ,51240964u ,4010918842u},
{858297656u ,975617777u ,589223610u },
{212572017u ,2217285443u,2240350887u},
{0 ,0 ,0 },
{0 ,0 ,0 },
{2433999967u,1967972119u,3844861983u},
{523662813u ,3020235340u,4047522437u},
{2242452949u,2501749193u,1439172153u},
{502769525u ,2187023124u,1878463319u},
{3306774681u,319071441u ,2023599221u},
{1610852380u,829943647u ,641283007u },
{3536421111u,1630387338u,583533129u },
{200300719u ,1187278084u,2287062483u},
{0 ,0 ,0 },
{0 ,0 ,0 },
{2568017904u,3310912275u,3117241347u},
{4076569903u,1348319040u,1712416566u},
{1240376473u,2741019004u,1539395804u},
{3817506992u,4237272416u,1225265745u},
{436306306u ,2159835130u,3730759965u},
{280523670u ,4070355009u,2690421951u},
{1006309692u,3556343910u,1035827177u},
{4007627191u,3940878180u,4200828712u},
{0 ,0 ,0 },
{0 ,0 ,0 },
{271132248u ,485674167u ,2750929903u},
{1134806224u,3488054206u,987192423u },
{4292955852u,3900958004u,2926312208u},
{910481366u ,671630318u ,2859689764u},
{2140653784u,524496109u ,578609291u },
{1247637727u,3275627545u,96607959u },
{2889458193u,3100108616u,1126138060u},
{4114540529u,2798771701u,500428800u },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 },
{0 ,0 ,0 }
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -