types.Range()
This commit is contained in:
parent
587fee299f
commit
1b777d5849
@ -59,3 +59,32 @@ class List(list):
|
||||
this_window.append(self[i * size + j])
|
||||
|
||||
yield this_window
|
||||
|
||||
|
||||
class Range:
|
||||
def __init__(self, start: int, end: int) -> None:
|
||||
self.start = start
|
||||
self.end = end
|
||||
|
||||
def overlaps(self, other: Range) -> bool:
|
||||
return other.start <= self.start <= other.end or other.start <= self.end <= other.end or (other.start <= self.start and other.end >= self.end) or (self.start <= other.start and self.end >= other.end)
|
||||
|
||||
def merge(self, other: Range) -> Range:
|
||||
if not self.overlaps(other):
|
||||
raise ValueError("Ranges do not overlap")
|
||||
|
||||
return Range(min(self.start, other.start), max(self.end, other.end))
|
||||
|
||||
def __contains__(self, item: int) -> bool:
|
||||
return self.start <= item <= self.end
|
||||
|
||||
def __len__(self) -> int:
|
||||
return self.end - self.start + 1
|
||||
|
||||
def __iter__(self) -> Iterable[int]:
|
||||
for x in range(self.start, self.end + 1):
|
||||
yield x
|
||||
|
||||
def __reversed__(self) -> Iterable[int]:
|
||||
for x in range(self.end, self.start - 1, -1):
|
||||
yield x
|
||||
Loading…
Reference in New Issue
Block a user