return history[piece::get_index(type, board.get_side())][to_underlying(move.target())];
}
std::vector<int> move_list_sort(MoveList &list, const Move best) {
static std::vector<int> score(256);
void move_list_sort(MoveList &list, std::vector<int> &score, int crnt) {
for (int i = crnt + 1; i < list.size(); i++) {
if (score[crnt] < score[i]) {
std::swap(list[crnt], list[i]);
std::swap(score[crnt], score[i]);
}
}
}
std::vector<int> move_list_score(MoveList &list, const Move best) {
std::vector<int> score(list.size(), 0);
bool best_found = false;
for (int i = 0; i < list.size(); i++) {
score[i] = move_list_score(list[i]);
score[i] = move_score(list[i]);
if (list[i] == best) {
score[i] = 30000;
best_found = true;
}
}
if (!best_found && ply && follow_pv) {
if (best_found) return score;
if (ply && follow_pv) {
follow_pv = false;
for (int i = 0; i < list.size(); i++) {
if (list[i] == pvtable.best(ply)) {