class Machine: _state: int = 0 def consume_character(self, char: str) -> None: if self._state == 0: if char == '1': self._state = 1 else: self._state = 0 elif self._state == 1: if char == '9': self._state = 2 else: self._state = 0 elif self._state == 2: if char == '1' or char == '2' or char == '3' or char == '4' or char == '5' or char == '6' or char == '7' or char == '8' or char == '9': self._state = 3 else: self._state = 0 elif self._state == 3: if char == '1' or char == '2' or char == '3' or char == '4' or char == '5' or char == '6' or char == '7' or char == '8' or char == '9': self._state = 4 else: self._state = 0 elif self._state == 4: if char == ' ': self._state = 5 else: self._state = 0 elif self._state == 5: if char == 'r': self._state = 6 else: self._state = 0 elif self._state == 6: if char == '.': self._state = 7 else: self._state = 0 def is_success_state(self) -> bool: return self._state == 7 def restart(self) -> None: self._state = 0 def find_lines_with_date(text: str) -> list[int]: output: list[int] = [] line_number = 0 machine = Machine() for char in text: machine.consume_character(char) if char == '\n': if machine.is_success_state(): output.append(line_number) machine.restart() line_number += 1 if machine.is_success_state(): output.append(line_number) line_number += 1 return output text: str = None with open('polish_wiki_excerpt.exp', 'r', encoding='utf8') as file: text = file.read() result = find_lines_with_date(text) print(result)