SIGN IN SIGN UP
2023-05-06 15:16:58 +02:00
ANSI_COLOR_RESET = "\x1b[0m"
ANSI_COLOR_YELLOW = "\x1b[33m"
ANSI_BOLD = "\x1b[1m"
ANSI_COLOR_GREEN = "\x1b[32m"
CONSOLE_COLOR_DEFAULT = ANSI_COLOR_RESET
CONSOLE_COLOR_PROMPT = ANSI_COLOR_YELLOW
CONSOLE_COLOR_USER_INPUT = ANSI_BOLD + ANSI_COLOR_GREEN
2024-07-09 12:20:17 -04:00
2023-05-06 15:16:58 +02:00
# Iterative search
# Actively searches and prevents a pattern from being returned
class IterSearch:
2024-07-09 12:20:17 -04:00
def __init__(self, pattern):
self.pattern = list(pattern)
self.buffer = []
2023-05-06 15:16:58 +02:00
2024-07-09 12:20:17 -04:00
def __call__(self, char):
self.buffer += [char]
2023-05-06 15:16:58 +02:00
2024-07-09 12:20:17 -04:00
if self.pattern[: len(self.buffer)] == self.buffer:
if len(self.buffer) >= len(self.pattern):
self.buffer.clear()
return []
2023-05-06 15:16:58 +02:00
2024-07-09 12:20:17 -04:00
_tmp = self.buffer[:]
self.buffer.clear()
return _tmp
2023-05-06 15:16:58 +02:00
2024-07-09 12:20:17 -04:00
class Circle:
def __init__(self, size, default=0):
self.list = [default] * size
self.maxsize = size
self.size = 0
self.offset = 0
def append(self, elem):
if self.size < self.maxsize:
self.list[self.size] = elem
self.size += 1
else:
self.list[self.offset] = elem
self.offset = (self.offset + 1) % self.maxsize
def __getitem__(self, val):
if isinstance(val, int):
if 0 > val or val >= self.size:
raise IndexError("Index out of range")
return (
self.list[val]
if self.size < self.maxsize
else self.list[(self.offset + val) % self.maxsize]
)
elif isinstance(val, slice):
start, stop, step = val.start, val.stop, val.step
if step is None:
step = 1
if start is None:
start = 0
if stop is None:
stop = self.size
if start < 0:
start = self.size + start
if stop < 0:
stop = self.size + stop
indices = range(start, stop, step)
return [
self.list[(self.offset + i) % self.maxsize]
for i in indices
if i < self.size
]
else:
raise TypeError("Invalid argument type")
2023-05-06 15:16:58 +02:00
if __name__ == "__main__":
2024-07-09 12:20:17 -04:00
c = Circle(5)
c.append(1)
print(c.list)
print(c[:])
assert c[0] == 1
assert c[:5] == [1]
for i in range(2, 5 + 1):
c.append(i)
print(c.list)
print(c[:])
assert c[0] == 1
assert c[:5] == [1, 2, 3, 4, 5]
for i in range(5 + 1, 9 + 1):
c.append(i)
print(c.list)
print(c[:])
assert c[0] == 5
assert c[:5] == [5, 6, 7, 8, 9]
# assert c[:-5] == [5,6,7,8,9]
assert c[:10] == [5, 6, 7, 8, 9]