#include "engine/transposition_table.h" void transposition_table_init() { for (int i = 0; i < PIECE_TYPE_COUNT; i++) { for (int j = 0; j < 64; j++) { zobrist_keys.piece[i][j] = random_u64(); } } for (int i = 0; i < CASTLE_COUNT; i++) { zobrist_keys.castle[i] = random_u64(); } for (int i = 0; i < TURN_COUNT; i++) { zobrist_keys.turn[i] = random_u64(); } for (int i = 0; i < 64; i++) { zobrist_keys.en_passant[i] = random_u64(); } } u64 zobrist_hash(position_t position) { u64 output = 0; for (int i = 0; i < 64; i++) { int piece_type = find_piece_on_square(&position, i); output ^= zobrist_keys.piece[piece_type][i]; } if (position.castling & WHITE_SHORT_CASTLE) { output ^= zobrist_keys.castle[0]; } if (position.castling & WHITE_LONG_CASTLE) { output ^= zobrist_keys.castle[1]; } if (position.castling & BLACK_SHORT_CASTLE) { output ^= zobrist_keys.castle[2]; } if (position.castling & BLACK_LONG_CASTLE) { output ^= zobrist_keys.castle[3]; } output ^= zobrist_keys.turn[position.turn]; output ^= zobrist_keys.en_passant[position.passantable_file]; return output; }