35 lines
865 B
Python
35 lines
865 B
Python
|
from abc import abstractmethod
|
||
|
from logging import Logger
|
||
|
from typing import Any, Final, Iterable, Iterator, Protocol, Sequence, TypeVar, overload
|
||
|
|
||
|
_T = TypeVar("_T")
|
||
|
|
||
|
|
||
|
class ProgressHandler(Protocol):
|
||
|
@overload
|
||
|
def wrap(self, values: Sequence[_T]) -> Iterator[_T]: ...
|
||
|
|
||
|
@overload
|
||
|
def wrap(self, values: Iterable[_T], total: int) -> Iterator[_T]: ...
|
||
|
|
||
|
|
||
|
class BaseSolver:
|
||
|
def __init__(
|
||
|
self,
|
||
|
logger: Logger,
|
||
|
verbose: bool,
|
||
|
year: int,
|
||
|
day: int,
|
||
|
progress: ProgressHandler,
|
||
|
outputs: bool = False,
|
||
|
):
|
||
|
self.logger: Final = logger
|
||
|
self.verbose: Final = verbose
|
||
|
self.year: Final = year
|
||
|
self.day: Final = day
|
||
|
self.progress: Final = progress
|
||
|
self.outputs = outputs
|
||
|
|
||
|
@abstractmethod
|
||
|
def solve(self, input: str) -> Iterator[Any] | None: ...
|