Bonanzaの定跡ファイルを使おうと思って
bona同梱のprobe.cを参考にして、ハッシュを求めて、
その値をもとに、定跡ファイルのインデックス部をアクセスし、DB部を参照しているのですが、
値がオカシイらしく、うまく読めません。
ハッシュの求め方が間違っているのか? それとも途中の処理が違うのか?
probe.cをコンパイルして動かしてみたら、それもエラーになりました(´・ω・`)ショボーン
2手目 後手 ▼ 9 8 7 6 5 4 3 2 1 ---------------------------+ v香v桂v銀v金v玉v金v銀v桂v香|一 ・v飛 ・ ・ ・ ・ ・v角 ・|二 v歩v歩v歩v歩v歩v歩v歩v歩v歩|三 ・ ・ ・ ・ ・ ・ ・ ・ ・|四 ・ ・ ・ ・ ・ ・ ・ ・ ・|五 ・ ・ 歩 ・ ・ ・ ・ ・ ・|六 歩 歩 ・ 歩 歩 歩 歩 歩 歩|七 ・ 角 ・ ・ ・ ・ ・ 飛 ・|八 香 桂 銀 金 王 金 銀 桂 香|九 ---------------------------+ △ hashVal=294d4826ca505010 bonaHash=1a1b415cdc66b6a2 ibook_section=0x36a2 position=0x2632d7 u16=0x9c ERROR:2: line 1347
この局面から、bonaのHashを求めて、それの0x3fffのANDの値を使ってindex部をゲットして、
それからDBの位置とサイズをゲットして、
if ( fread( book_section, 1, (size_t)size_section, pf_book ) != (size_t)size_section ) { fprintf( stderr, "ERROR:2: line %d\n", __LINE__ ); exit( 1 ); }
ここでエラー。
bonaのハッシュを求めるコードを見ていて面白いのが、
左右反転、上下反転のハッシュも求めている。もしかして、定跡上、統合しているのかな?
さすがに探索中に左右反転の局面が出てくることないけど、定跡をサーチするならうまい方法かも。
先後同形なら、上下反転も有効かもしれない。
オセロなんかは左右・上下反転、裏返しなどでも、探索局面を減らせるらしい