# - - - P u z z l e . _ _ c r o s s i n g C l a s h def __crossingClash ( self, coord, thisSlot, char ): '''Do the choices for a slot crossing thisSlot clash with char? [ (coord is a Coord in self) and (thisSlot is a slot in self containing coord) and (char is a one-character string, uppercased) -> if (coord is the intersection of two slots in self) and (no choices for the slot crossing thisSlot have choice[charx] in coord's position) -> return True else -> return False ] '''
This method returns
True if there is a clash, that
is, if there is a crossing slot and none of its choices have
char at the position where the slots cross.
First we check to see if there is an intersecting slot. See Section 34, “
Puzzle.whatSlots(): What slots intersect
a given coordinate?” for the method that finds all the
slots that include a given coordinate. We use a list
comprehension to eliminate
thisSlot from the result
list. If the resulting list is empty, there is no crossing slot,
so we return
False to signify that there is no
#-- 1 -- # [ slotList := list of slots intersecting coord other # than thisSlot ] slotList = [ slot for slot in self.whatSlots ( coord ) if slot is not thisSlot ] #-- 2 -- if len(slotList) == 0: return False else: otherSlot = slotList
Next we find the index of
coord relative to
otherSlot. Then we iterate over all the choices for
self.__wordBank; if any
of those choices has
char at that index, we return
False to signify that there is no clash.
#-- 3 -- # [ otherCharx := index in otherSlot of coord ] otherCharx = otherSlot.findCoord ( coord ) #-- 4 -- # [ if any choice for otherSlot in self.__wordBank has a # character in position [otherCharx] that matches char -> # return False # else -> I ] for otherChoice in self.__wordBank.genSlotChoices ( otherSlot ): if otherChoice[otherCharx] == char: return False
Since no choice for
char at the crossing position, return
True to signify
that there is a clash.
#-- 5 -- return True