from collections import deque
class LimUniqueResponder:
def __init__(self, lim: int):
if lim <= 0:
raise ValueError("lim must be a positive integer") # Validate input
self.responses: deque[str] = deque(maxlen=lim) # Use deque for auto-removal
self.lastInsert = ""
self.urg = UniqueRandomGenerator(0)
def get_a_response(self) -> str:
if not self.responses:
return ""
return self.responses[self.urg.get_unique_random()]
def responses_contains_str(self, item: str) -> bool:
return item in self.responses
def str_contains_response(self, item: str) -> bool:
return any(response and response in item for response in self.responses)
def add_response(self, s1: str) -> None:
if not s1 or not isinstance(s1, str): # Validate input
return
if self.lastInsert == s1:
return
if s1 not in self.responses:
self.responses.append(s1)
self.lastInsert = s1
self.urg = UniqueRandomGenerator(len(self.responses))
def add_responses(self, *replies: str) -> None:
for value in replies:
self.add_response(value)
def get_savable_str(self) -> str:
return "_".join(self.responses)
def get_last_item(self) -> str:
return self.responses[-1] if self.responses else ""