Advertisement
MBrendecke

Coding Challange 9

Oct 6th, 2018
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.71 KB | None | 0 0
  1. ### Version 2.0 ###
  2. from collections import defaultdict
  3. from json import dumps
  4. from time import perf_counter
  5.  
  6. from Session import Session
  7.  
  8.  
  9. def solve(nums: [], target: int):
  10.     diffs = defaultdict(list)
  11.     deltas = defaultdict(list)
  12.  
  13.     for index, number in enumerate(nums):
  14.         if number > target:
  15.             continue
  16.  
  17.         diff = target - number
  18.  
  19.         if diff == number:
  20.             return index, index
  21.  
  22.         diffs[diff].append(index)
  23.  
  24.     for index, number in enumerate(nums):
  25.         if number in diffs.keys():
  26.             for n in diffs[number]:
  27.                 position = (n, index)
  28.                 delta = (position[1] - position[0])
  29.                 deltas[abs(delta)].append(position)
  30.  
  31.     min_key = min(deltas.keys())
  32.     values = deltas[min_key]
  33.     ret_val = min(values, key=lambda x: x[0])
  34.  
  35.     return ret_val
  36.  
  37.  
  38. def challenge9() -> float:
  39.     session = Session(9)
  40.     json_obj = session.get().json()
  41.     k = json_obj['k']
  42.     nums = json_obj['list']
  43.  
  44.     t = perf_counter()
  45.     ret = solve(nums, k)
  46.     elapsed = perf_counter() - t
  47.  
  48.     param = dumps({"token": ret})
  49.     response = session.post(data=param)
  50.  
  51.     if not response.text.startswith("Success"):
  52.         print(response)
  53.         print(k)
  54.         print(nums)
  55.         print(ret)
  56.         raise ValueError("Inkorrekte Lösung")
  57.  
  58.     print(f'{response.text:10}: {ret}')
  59.     print(f'Dictionary: {elapsed * 1000:06.5f} ms')
  60.     return elapsed
  61.  
  62.  
  63. if __name__ == '__main__':
  64.     sum: float = 0
  65.     times = 0
  66.     try:
  67.         count = 100
  68.         for n in range(count):
  69.             sum += challenge9()
  70.             times += 1
  71.     finally:
  72.         print(f"Durchschnittlich: {sum / times * 1000:06.5f} ms")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement