My Project
|
千日手の検出. More...
#include <repetitionCounter.h>
Classes | |
struct | Table |
Public Types | |
typedef std::list< int > | list_t |
Public Member Functions | |
RepetitionCounter () | |
RepetitionCounter (const RepetitionCounter &c) | |
RepetitionCounter (const NumEffectState &initial) | |
~RepetitionCounter () | |
void | push (const NumEffectState &state, Move move) |
state の状態で move を(これから)指すことを記録 | |
void | push (const NumEffectState &state) |
指した後の局面を記録 | |
void | push (const HashKey &key, const NumEffectState &state) |
指した後の局面を記録 | |
void | pop () |
void | clear () |
const Sennichite | isSennichite (const NumEffectState &state, Move move) const |
const Sennichite | isAlmostSennichite (const HashKey &key) const |
このまま同形を繰り返したらどの結果になるかを返す | |
const std::pair< Sennichite, int > | distanceToSennichite (const HashKey &key) const |
unsigned int | countRepetition (const HashKey &) const |
const list_t | getRepetitions (const HashKey &) const |
void | printMatches (const HashKey &key) const |
int | getLastMove (const HashKey &key) const |
key の手を最後に登録した指手番号. | |
int | getFirstMove (const HashKey &key) const |
key の手を最初に登録した指手番号. | |
int | checkCount (Player attack) const |
const HashKeyStack & | history () const |
bool | isConsistent () const |
Static Public Member Functions | |
static bool | maybeEqual (const RepetitionCounter &l, const RepetitionCounter &r) |
Private Member Functions | |
int | order () const |
void | push (const HashKey &new_key, bool is_check) |
const Sennichite | isAlmostSennichiteUnsafe (int first_move) const |
Private Attributes | |
std::unique_ptr< Table > | table |
CArray< std::vector< int >, 2 > | continuous_check |
HashKeyStack | hash_history |
千日手の検出.
連続王手の千日手(同一局面の最初と4回目の間の一方の指し手が王手のみだった場合)は、連続王手をかけていたほうが負け。 http://www.computer-shogi.org/wcsc14/youryou.html
Definition at line 20 of file repetitionCounter.h.
typedef std::list<int> osl::RepetitionCounter::list_t |
Definition at line 28 of file repetitionCounter.h.
osl::RepetitionCounter::RepetitionCounter | ( | ) |
Definition at line 34 of file repetitionCounter.cc.
References clear().
osl::RepetitionCounter::RepetitionCounter | ( | const RepetitionCounter & | c | ) |
Definition at line 40 of file repetitionCounter.cc.
References isConsistent(), and table.
|
explicit |
Definition at line 51 of file repetitionCounter.cc.
osl::RepetitionCounter::~RepetitionCounter | ( | ) |
Definition at line 60 of file repetitionCounter.cc.
|
inline |
Definition at line 91 of file repetitionCounter.h.
References osl::CArray< T, Capacity >::back(), and continuous_check.
Referenced by osl::checkmate::DualDfpn::writeRootHistory().
void osl::RepetitionCounter::clear | ( | ) |
Definition at line 19 of file repetitionCounter.cc.
References osl::hash::HashKeyStack::clear(), continuous_check, hash_history, initial_capacity, and table.
Referenced by RepetitionCounter(), and RepetitionCounter().
unsigned int osl::RepetitionCounter::countRepetition | ( | const HashKey & | key | ) | const |
Definition at line 190 of file repetitionCounter.cc.
const std::pair< osl::Sennichite, int > osl::RepetitionCounter::distanceToSennichite | ( | const HashKey & | key | ) | const |
Definition at line 181 of file repetitionCounter.cc.
References osl::Sennichite::NORMAL().
int osl::RepetitionCounter::getFirstMove | ( | const HashKey & | key | ) | const |
key の手を最初に登録した指手番号.
Definition at line 152 of file repetitionCounter.cc.
Referenced by isAlmostSennichite().
int osl::RepetitionCounter::getLastMove | ( | const HashKey & | key | ) | const |
Definition at line 199 of file repetitionCounter.cc.
|
inline |
Definition at line 95 of file repetitionCounter.h.
References hash_history.
Referenced by osl::checkmate::DualDfpn::writeRootHistory().
|
inline |
このまま同形を繰り返したらどの結果になるかを返す
Definition at line 69 of file repetitionCounter.h.
References getFirstMove(), isAlmostSennichiteUnsafe(), and osl::Sennichite::NORMAL().
|
inlineprivate |
Definition at line 55 of file repetitionCounter.h.
References osl::BLACK, osl::Sennichite::BLACK_LOSE(), continuous_check, osl::Sennichite::DRAW(), order(), osl::WHITE, and osl::Sennichite::WHITE_LOSE().
Referenced by isAlmostSennichite().
bool osl::RepetitionCounter::isConsistent | ( | ) | const |
Definition at line 221 of file repetitionCounter.cc.
References osl::alt(), osl::hash::HashKeyStack::empty(), osl::hash::HashKeyStack::pop(), osl::hash::HashKeyStack::top(), and osl::hash::HashKey128::turn().
Referenced by RepetitionCounter().
const osl::Sennichite osl::RepetitionCounter::isSennichite | ( | const NumEffectState & | state, |
Move | move | ||
) | const |
Definition at line 166 of file repetitionCounter.cc.
References osl::hash::HashKey::newHashWithMove(), and osl::Sennichite::NORMAL().
|
static |
Definition at line 256 of file repetitionCounter.cc.
References continuous_check, hash_history, and table.
|
inlineprivate |
Definition at line 26 of file repetitionCounter.h.
References hash_history, and osl::hash::HashKeyStack::size().
Referenced by isAlmostSennichiteUnsafe().
void osl::RepetitionCounter::pop | ( | ) |
Definition at line 119 of file repetitionCounter.cc.
References osl::alt(), and osl::hash::HashKey128::turn().
void osl::RepetitionCounter::printMatches | ( | const HashKey & | key | ) | const |
Definition at line 209 of file repetitionCounter.cc.
void osl::RepetitionCounter::push | ( | const HashKey & | key, |
const NumEffectState & | state | ||
) |
指した後の局面を記録
Definition at line 91 of file repetitionCounter.cc.
References osl::NumEffectState::inCheck().
|
private |
Definition at line 65 of file repetitionCounter.cc.
References osl::alt(), and osl::hash::HashKey128::turn().
Referenced by RepetitionCounter().
void osl::RepetitionCounter::push | ( | const NumEffectState & | state | ) |
指した後の局面を記録
Definition at line 98 of file repetitionCounter.cc.
void osl::RepetitionCounter::push | ( | const NumEffectState & | state, |
Move | move | ||
) |
state の状態で move を(これから)指すことを記録
Definition at line 104 of file repetitionCounter.cc.
References osl::NumEffectState::isCheck(), osl::Move::isPass(), osl::Move::isValidOrPass(), osl::hash::HashKey::newHashWithMove(), osl::Move::player(), and osl::SimpleState::turn().
|
private |
Definition at line 24 of file repetitionCounter.h.
Referenced by checkCount(), clear(), isAlmostSennichiteUnsafe(), and maybeEqual().
|
private |
Definition at line 25 of file repetitionCounter.h.
Referenced by clear(), history(), maybeEqual(), and order().
|
private |
Definition at line 23 of file repetitionCounter.h.
Referenced by clear(), maybeEqual(), and RepetitionCounter().