ThongCoder's picture
Upload 16 files
709c473 verified
import re
class Element:
def __init__(
self,
name: str,
emoji: str | None = None,
database_id: int | None = None,
) -> None:
self.name = name
self.emoji = emoji or "\N{BLACK QUESTION MARK ORNAMENT}"
self.database_id = database_id
def __hash__(self) -> int:
return hash(self.name)
def __eq__(self, other: "Element") -> bool:
return self.name == other.name
def __str__(self) -> str:
return f"{self.emoji} {self.name}"
def __repr__(self) -> str:
return repr(str(self))
@property
def numeric(self) -> bool:
return re.search(r"\d", self.name) is not None
class PendingPair:
def __init__(self, first: Element, second: Element) -> None:
self.first, self.second = (
(first, second) if first.name < second.name else (second, first)
)
def __hash__(self) -> int:
return hash((self.first, self.second))
def __eq__(self, other: "Pair") -> bool:
return self.first == other.first and self.second == other.second
def __str__(self) -> str:
return f"{self.first} + {self.second}"
def __repr__(self) -> str:
return f"{self.first!r} + {self.second!r}"
@property
def numeric(self) -> bool:
return self.first.numeric or self.second.numeric
class Pair(PendingPair):
def __init__(
self,
first: Element,
second: Element,
result: Element,
is_discovery: bool | None = None,
) -> None:
super().__init__(first, second)
self.result = result
self.is_discovery = is_discovery is True
def __str__(self) -> str:
addendum = " (New Discovery!)" if self.is_discovery else ""
return f"{super().__str__()} = {self.result}{addendum}"
def __repr__(self) -> str:
addendum = " (New Discovery!)" if self.is_discovery else ""
return f"{super().__repr__()} = {self.result!r}{addendum}"
@property
def elements(self) -> tuple[Element, Element, Element]:
return self.first, self.second, self.result