shogi/__init__.py
def zobrist_hash(self, array=None):
        '''
        Returns a Zobrist hash of the current position.
        '''
        # Hash in the board setup.
        zobrist_hash = self.board_zobrist_hash(array)

        if array is None:
            array = DEFAULT_RANDOM_ARRAY

        if self.turn == WHITE:
            zobrist_hash ^= array[2268]

        # pieces in hand pattern is
        # 19 * 5 * 5 * 5 * 5 * 3 * 3 = 106875 < pow(2, 17)
        # just checking black side is okay in normal state
        i = (
                self.pieces_in_hand[BLACK][ROOK] * 35625 +
                self.pieces_in_hand[BLACK][BISHOP] * 11875 +
                self.pieces_in_hand[BLACK][GOLD] * 2375 +
                self.pieces_in_hand[BLACK][SILVER] * 475 +
                self.pieces_in_hand[BLACK][KNIGHT] * 95 +
                self.pieces_in_hand[BLACK][LANCE] * 19 +
                self.pieces_in_hand[BLACK][PAWN])
        bit = bit_scan(i)
        while bit != -1 and bit is not None:
            zobrist_hash ^= array[2269 + bit]
            bit = bit_scan(i, bit + 1)

        return zobrist_hash
def zobrist_hash(self, array=None):
        '''
        Returns a Zobrist hash of the current position.
        '''
        # Hash in the board setup.
        zobrist_hash = self.board_zobrist_hash(array)

        if array is None:
            array = DEFAULT_RANDOM_ARRAY

        if self.turn == WHITE:
            zobrist_hash ^= array[2268]

        # pieces in hand pattern is
        # 19 * 5 * 5 * 5 * 5 * 3 * 3 = 106875 < pow(2, 17)
        # just checking black side is okay in normal state
        i = (
                self.pieces_in_hand[BLACK][ROOK] * 35625 +
                self.pieces_in_hand[BLACK][BISHOP] * 11875 +
                self.pieces_in_hand[BLACK][GOLD] * 2375 +
                self.pieces_in_hand[BLACK][SILVER] * 475 +
                self.pieces_in_hand[BLACK][KNIGHT] * 95 +
                self.pieces_in_hand[BLACK][LANCE] * 19 +
                self.pieces_in_hand[BLACK][PAWN])
        bit = bit_scan(i)
        while bit != -1 and bit is not None:
            zobrist_hash ^= array[2269 + bit]
            bit = bit_scan(i, bit + 1)

        return zobrist_hash
def zobrist_hash ( self , array = None ) : # Hash in the board setup. zobrist_hash = self . board_zobrist_hash ( array ) if array is None : array = DEFAULT_RANDOM_ARRAY if self . turn == WHITE : zobrist_hash ^= array [ 2268 ] # pieces in hand pattern is # 19 * 5 * 5 * 5 * 5 * 3 * 3 = 106875 < pow(2, 17) # just checking black side is okay in normal state i = ( self . pieces_in_hand [ BLACK ] [ ROOK ] * 35625 + self . pieces_in_hand [ BLACK ] [ BISHOP ] * 11875 + self . pieces_in_hand [ BLACK ] [ GOLD ] * 2375 + self . pieces_in_hand [ BLACK ] [ SILVER ] * 475 + self . pieces_in_hand [ BLACK ] [ KNIGHT ] * 95 + self . pieces_in_hand [ BLACK ] [ LANCE ] * 19 + self . pieces_in_hand [ BLACK ] [ PAWN ] ) bit = bit_scan ( i ) while bit != - 1 and bit is not None : zobrist_hash ^= array [ 2269 + bit ] bit = bit_scan ( i , bit + 1 ) return zobrist_hash
Returns a Zobrist hash of the current position.
Returns a Zobrist hash of the current position .