MBrendecke icon

Coding Challange 8 - Server

MBrendecke | PRO | 09/23/18 02:40:55 PM UTC | 0 ⭐ | 357 👁️ | Never ⏰ | []
Python |

1.75 KB

|

None

|

0 👍

/

0 👎

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