The purpose of this method is to scan the row that
contains a given board position
x, look for digits used in that row at other positions,
and return a “bitmap”: a nine-element list
whose elements correspond to the nine digits in [1,9],
such that each element is 1 if that digit is used
elsewhere in the row, and 0 otherwise.
# - - - S u d o k u S o l v e r . _ _ u s e d I n R o w - - - def __usedInRow ( self, x ): """What digits are used elsewhere in the row containing x? [ x is an integer in [0,BOARD_L) -> return a 9-element bitmap whose elements are true iff the corresponding digit is used elsewhere in the row containing board position x ] """
First we figure out which row contains board index
x. Then we set up the
initial bitmap as a list of zeroes.
#-- 1 -- # [ rx := the row index of board position x # cx := the column index of board position x # result := a list of MAT_L zeroes ] rx, cx = self.__xToRowCol ( x ) result =  * MAT_L
As we scan the row, it is important to skip over the column
x. The process of
eliminating possibilities for a given cell must not
depend on the state of the cell under consideration.
#-- 2 -- # [ result := result with elements corresponding to # digits found in row rx (except for column cx) ] for col in range(MAT_L): #-- 2 body -- # [ if (col != cx) and # (self has a nonzero value D in cell (rx, col) -> # result[D-1] := 1 # else -> # I ] if col != cx: cell = self.get(rx, col) if cell != EMPTY: result[cell-1] = 1 #-- 3 -- return result