elkfjoksdjflksdjfinDS

fukurou

the supreme coder
ADMIN
Python:
class UniqueRandomGenerator:
    def __init__(self, n1: int):
        self.n1 = n1
        self.numbers = list(range(n1))
        self.remaining_numbers = []  # Declare here to avoid the error
        self.reset()

    def reset(self):
        self.remaining_numbers = self.numbers.copy()
        random.shuffle(self.remaining_numbers)

    def get_unique_random(self) -> int:
        if not self.remaining_numbers:
            self.reset()
        return self.remaining_numbers.pop()
 

fukurou

the supreme coder
ADMIN
Python:
class LimUniqueResponder:
    def __init__(self, lim: int):
        self.responses: list[str] = []
        self.lim = lim
        self.urg = UniqueRandomGenerator(0)
        self.lastInsert = ""

    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 self.lastInsert == s1:
            # exits because repeat insert attempt
            return
        if len(self.responses) > self.lim - 1:
            self.responses.pop(0)
        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:
        if not self.responses:
            return ""
        return self.responses[-1]
 

fukurou

the supreme coder
ADMIN
Python:
import random

class UniqueRandomGenerator:
    def __init__(self, n1: int):
        if n1 < 0:
            raise ValueError("n1 must be a non-negative integer")  # Validate input
        self.n1 = n1
        self.remaining_numbers = random.sample(range(n1), n1)  # Directly shuffle at initialization

    def reset(self):
        self.remaining_numbers = random.sample(range(self.n1), self.n1)  # Avoid unnecessary copying

    def get_unique_random(self) -> int:
        if not self.remaining_numbers:
            self.reset()
        return self.remaining_numbers.pop()

Python:
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 ""
 

fukurou

the supreme coder
ADMIN
Python:
    def add_response(self, s1: str) -> None:
        if self.lastInsert == s1:
            # exits because repeat insert attempt
            return
        if len(self.responses) > self.lim - 1:
            self.responses.pop(0)
        else:
            self.urg = UniqueRandomGenerator(len(self.responses)+1)
        if s1 not in self.responses:
            self.responses.append(s1)
            self.lastInsert = s1
 
Top