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')
Comments