Spaces:
Runtime error
Runtime error
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 | |
# Iterative search | |
# Actively searches and prevents a pattern from being returned | |
class IterSearch: | |
def __init__(self, pattern): | |
self.pattern = list(pattern) | |
self.buffer = [] | |
def __call__(self, char): | |
self.buffer += [char] | |
if (self.pattern[:len(self.buffer)] == self.buffer): | |
if (len(self.buffer) >= len(self.pattern)): | |
self.buffer.clear() | |
return [] | |
_tmp = self.buffer[:] | |
self.buffer.clear() | |
return _tmp | |
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') | |
if __name__ == "__main__": | |
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] | |