comply with all codewars tests

This commit is contained in:
Michael Schären 2026-03-05 22:38:56 +01:00
parent 027c78ed62
commit d0205282de

View File

@ -52,6 +52,8 @@ class RegExParser:
sequences = RegExParser.parse_sequences(self.pattern) sequences = RegExParser.parse_sequences(self.pattern)
print(sequences)
return RegExParser.parse_regex(sequences) return RegExParser.parse_regex(sequences)
def is_valid(self): def is_valid(self):
@ -107,7 +109,10 @@ class RegExParser:
return None return None
elif depth == 0: elif depth == 0:
group = "".join(buffer) group = "".join(buffer)
result.append(RegExParser.parse_sequences(group)) next_sequence = RegExParser.parse_sequences(group)
if isinstance(next_sequence, str):
next_sequence = "(" + next_sequence + ")"
result.append(next_sequence)
buffer = [] buffer = []
else: else:
buffer.append(c) buffer.append(c)
@ -121,12 +126,11 @@ class RegExParser:
return result if len(result) > 1 else result[0] return result if len(result) > 1 else result[0]
@staticmethod @staticmethod
def parse_regex(sequences) -> RegExp | None: def parse_regex(sequences) -> RegExp | list[RegExp] | None:
if isinstance(sequences, str): if isinstance(sequences, str):
if sequences.find("*") == 0: if sequences.find("*") == 0:
sequences = sequences[1:] sequences = sequences[1:]
print(sequences)
if sequences == "": if sequences == "":
return None return None
@ -188,10 +192,16 @@ class RegExParser:
else: else:
regex = RegExParser.parse_regex(current_sequence) regex = RegExParser.parse_regex(current_sequence)
if regex: if regex:
if isinstance(regex, list):
result.extend(regex)
else:
result.append(regex) result.append(regex)
else: else:
regex = RegExParser.parse_regex(current_sequence) regex = RegExParser.parse_regex(current_sequence)
if regex: if regex:
if isinstance(regex, list):
result.extend(regex)
else:
result.append(regex) result.append(regex)
sequence_idx += 1 sequence_idx += 1
@ -199,8 +209,12 @@ class RegExParser:
return Str(result) if len(result) > 1 else result[0] return Str(result) if len(result) > 1 else result[0]
@staticmethod @staticmethod
def get_type(sequence) -> RegExp: def get_type(sequence) -> RegExp | list[RegExp]:
regex: RegExp regex: RegExp | list[RegExp]
if sequence.startswith("("):
sequence = sequence[1:]
if sequence.endswith(")"):
sequence = sequence[:-1]
if len(sequence) > 1: if len(sequence) > 1:
string = [] string = []
@ -227,7 +241,10 @@ class RegExParser:
if __name__ == "__main__": if __name__ == "__main__":
test_cases = ["((aa)|ab)*|a"] test_cases = [
"(a|b)*",
#'I%T8]dX9b=k;lm_e/4i\x0b-+pFPWq#~\\,"a5.n}(Hcs{uCz*yA`OKJwZ7V<j\n\x0cfG !L@\r2ghQr$)[ot3Rx&M'
]
for test_case in test_cases: for test_case in test_cases:
print("---------------------") print("---------------------")