def cascadeTranslations(self): offset = 0 for Entry in self.entries: offset = max(Entry.minStart - Entry.initialMinStart, offset) if not Entry.getIsSolved(): Entry.minStart = Entry.initialMinStart + offset offset = 0 for Entry in self.entries[::-1]: offset = max(Entry.initialMaxEnd - Entry.maxEnd, offset) if not Entry.getIsSolved(): Entry.maxEnd = Entry.initialMaxEnd - offset
def locateIslands(self): i = -1 while i < self.length - 1 and self.representation[i+1] == 0: i += 1 if i < self.length - 1: for Entry in self.entries: if Entry.getIsSolved(): i = Entry.maxEnd + 1 else: representation = self.representation[i+1:] if 1 in representation: firstIndex = Entry.firstIndex(representation, 1) Entry.maxEnd = min(Entry.maxEnd, i + firstIndex + Entry.value) i += firstIndex + Entry.value while i < self.length - 1 and self.representation[i+1] == 1: i += 1 else: i = self.length - 1 if i >= self.length - 1: break i = self.length while i > 0 and self.representation[i-1] == 0: i -= 1 if i > 0: for Entry in self.entries[::-1]: if Entry.getIsSolved(): i = Entry.minStart - 1 else: representation = self.representation[:i] if 1 in representation: firstIndex = Entry.firstIndex(representation[::-1], 1) Entry.minStart = max(Entry.minStart, i - firstIndex - Entry.value) i -= firstIndex + Entry.value while i > 0 and self.representation[i-1] == 1: i -= 1 else: i = 0 if i <= 0: break