import random from time import perf_counter class Server: def __init__(self): self.numbers = list() def __init_numbers(self, max_numbers: int, max_value: int): self.numbers.clear() for n in range(random.randint(4, max(4, max_numbers))): rnd = random.randint(0, max(0, max_value)) self.numbers.append(rnd) def __get_random_index(self) -> int: return random.randint(0, len(self.numbers) - 1) def __get_target(self, c: []) -> int: return sum(map(lambda n: (self.numbers[n]), c)) def __get_candidate(self) -> []: return [self.__get_random_index() for _ in range(4)] def generate(self, max_numbers: int, max_value: int): self.__init_numbers(max_numbers, max_value) candidate = self.__get_candidate() target = self.__get_target(candidate) solution = self.__get_solution(target) return [target, self.numbers, solution] def __get_solution(self, target: int): diffs = dict() for idx_i, i in enumerate(self.numbers): for idx_j, j in enumerate(self.numbers): sum = i + j if sum not in diffs: diffs[sum] = (idx_i, idx_j) if (target - sum) in diffs: return (idx_i, idx_j) + diffs[target - sum] return -1, -1, -1, -1 server = Server() time = 0 count = 1000 for i in range(count): t = perf_counter() challenge = server.generate(1000, 10000) candidate_sum = challenge[0] candidate_first = challenge[2] time += perf_counter() - t print(f'Durchläufe: {count}') print(f'Gesamtzeit: {time:06.5f} s') print(f'Time: {(time / count) * 1000:06.5f} ms')