class BlacklistItem: # name: Name of the item to see why it was discarded # coords: One up to six coords [[x, y], ...] of the pattern, values zero to six # misses: Amount of coords that don't have to match # transformations: List of transformations that should be applied to the # pattern before testing. L, R - Rotate. F - Flip. M - Mirror: ["R", "F"] def __init__(self, name, coords, misses=0, transformations=[]): self.name = name self.misses = misses self.main_pattern = Pattern(name, coords, misses) self.patterns = [self.main_pattern] self.transformations = transformations self._perform_transformations() def _perform_transformations(self): for r in self.transformations: rotated_coords = r.perform(self.get_coords()) min_coord = coords_min(rotated_coords) relocated = relocate(rotated_coords, min_coord) self.patterns.append( Pattern(self.name + " " + r.get_suffix(), relocated, self.misses)) def get_name(self): return self.name def get_coords(self): return self.main_pattern.get_coords() def get_patterns(self): return self.patterns def get_main_pattern(self): return self.patterns[0] def get_misses(self): return self.misses def matches(self, tipp): for p in self.patterns: if p.matches(tipp): return True return False def __str__(self): return self.str_pretty(1) def str_pretty(self, verbosity=1): s = '' if verbosity > 0: if verbosity == 1: s += self.patterns[0].str_pretty(verbosity) if verbosity > 1: for p in self.patterns: s += p.str_pretty(verbosity) return s