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)