Advertisement
MBrendecke

Coding Challange 8 - Server

Sep 23rd, 2018
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.75 KB | None | 0 0
  1. import random
  2. from time import perf_counter
  3.  
  4.  
  5. class Server:
  6.     def __init__(self):
  7.         self.numbers = list()
  8.  
  9.     def __init_numbers(self, max_numbers: int, max_value: int):
  10.         self.numbers.clear()
  11.  
  12.         for n in range(random.randint(4, max(4, max_numbers))):
  13.             rnd = random.randint(0, max(0, max_value))
  14.             self.numbers.append(rnd)
  15.  
  16.     def __get_random_index(self) -> int:
  17.         return random.randint(0, len(self.numbers) - 1)
  18.  
  19.     def __get_target(self, c: []) -> int:
  20.         return sum(map(lambda n: (self.numbers[n]), c))
  21.  
  22.     def __get_candidate(self) -> []:
  23.         return [self.__get_random_index() for _ in range(4)]
  24.  
  25.     def generate(self, max_numbers: int, max_value: int):
  26.         self.__init_numbers(max_numbers, max_value)
  27.         candidate = self.__get_candidate()
  28.         target = self.__get_target(candidate)
  29.         solution = self.__get_solution(target)
  30.         return [target, self.numbers, solution]
  31.  
  32.     def __get_solution(self, target: int):
  33.         diffs = dict()
  34.  
  35.         for idx_i, i in enumerate(self.numbers):
  36.             for idx_j, j in enumerate(self.numbers):
  37.                 sum = i + j
  38.  
  39.                 if sum not in diffs:
  40.                     diffs[sum] = (idx_i, idx_j)
  41.  
  42.                 if (target - sum) in diffs:
  43.                     return (idx_i, idx_j) + diffs[target - sum]
  44.  
  45.         return -1, -1, -1, -1
  46.  
  47.  
  48. server = Server()
  49. time = 0
  50. count = 1000
  51. for i in range(count):
  52.     t = perf_counter()
  53.  
  54.     challenge = server.generate(1000, 10000)
  55.     candidate_sum = challenge[0]
  56.     candidate_first = challenge[2]
  57.  
  58.     time += perf_counter() - t
  59.  
  60. print(f'Durchläufe: {count}')
  61. print(f'Gesamtzeit: {time:06.5f} s')
  62. print(f'Time: {(time / count) * 1000:06.5f} ms')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement