from manim import * # This one does not work, as I decided that it would be better to do it the old-fashioned way. # What does that mean? # 67 slides for the same problem PATTERN = "PF-is-?n?o?t?-bad" STRING = "PF-is-bad" class patternMatching(Scene): def construct(self): # Show inputs on top pattern = Text(PATTERN, font_size=24) string = Text(STRING, font_size=24) pattern.to_edge(UP) string.next_to(pattern, DOWN) self.patterns = VGroup(pattern, string) # Write the initial function call self.play(Write(self.patterns)) self.wait(2) self.results = [] self.is_match(PATTERN, STRING) def is_match(self, pattern, string): self.results.append(Text(f"{pattern}, {string}", font_size=24).to_edge(UP)) # Base case: If either the pattern or string is empty if not pattern: return self.callback() # If the pattern is not empty but the string is if len(pattern) > 1 and pattern[1] == '?': return (pattern[0] == string[0] and self.is_match(pattern[2:], string[1:])) or self.is_match(pattern[2:], string) 0 # If the pattern is not empty and the string is not empty return pattern[0] == string[0] and self.is_match(pattern[1:], string[1:])