import re class CompetitionClass: def __init__(self, text: str): self.name = text def __repr__(self): return self.name class CombinedCompetitionClass: def __init__(self, clsA: CompetitionClass, clsB: CompetitionClass): self.clsA = clsA self.clsB = clsB def __repr__(self): return f'{self.clsA}/{self.clsB}' class CompetitionClassParser: def __init__(self): self.NEWC = CompetitionClass('Newc.') self.BEG = CompetitionClass('Beg.') self.ADV = CompetitionClass('Adv.') self.mapNames = { 'Newc': self.NEWC, 'Newc.': self.NEWC, 'Newcomer': self.NEWC, 'Beg': self.BEG, 'Beg.': self.BEG, 'Beginner': self.BEG, 'Adv': self.ADV, 'Adv.': self.ADV, 'Advanced': self.ADV, } def parseClass(self, cls: str) -> CompetitionClass|CombinedCompetitionClass: match = re.compile('^(\\w+\\.?)/(\\w+\\.?)$').match(cls) if match is not None: clsA = self.mapNames[match.group(1)] clsB = self.mapNames[match.group(2)] return CombinedCompetitionClass(clsA, clsB) else: return self.mapNames[cls] def isPureClass(self, cls: str) -> bool: parsedClass = self.parseClass(cls) return isinstance(parsedClass, CompetitionClass)