MBrendecke icon

Coding Challange 9

MBrendecke | PRO | 10/07/18 12:45:59 AM UTC | 0 ⭐ | 447 👁️ | Never ⏰ | []
Python |

1.71 KB

|

None

|

0 👍

/

0 👎

### Version 2.0 ###
from collections import defaultdict
from json import dumps
from time import perf_counter
 
from Session import Session
 
 
def solve(nums: [], target: int):
    diffs = defaultdict(list)
    deltas = defaultdict(list)
 
    for index, number in enumerate(nums):
        if number > target:
            continue
 
        diff = target - number
 
        if diff == number:
            return index, index
 
        diffs[diff].append(index)
 
    for index, number in enumerate(nums):
        if number in diffs.keys():
            for n in diffs[number]:
                position = (n, index)
                delta = (position[1] - position[0])
                deltas[abs(delta)].append(position)
 
    min_key = min(deltas.keys())
    values = deltas[min_key]
    ret_val = min(values, key=lambda x: x[0])
 
    return ret_val
 
 
def challenge9() -> float:
    session = Session(9)
    json_obj = session.get().json()
    k = json_obj['k']
    nums = json_obj['list']
 
    t = perf_counter()
    ret = solve(nums, k)
    elapsed = perf_counter() - t
 
    param = dumps({"token": ret})
    response = session.post(data=param)
 
    if not response.text.startswith("Success"):
        print(response)
        print(k)
        print(nums)
        print(ret)
        raise ValueError("Inkorrekte Lösung")
 
    print(f'{response.text:10}: {ret}')
    print(f'Dictionary: {elapsed * 1000:06.5f} ms')
    return elapsed
 
 
if __name__ == '__main__':
    sum: float = 0
    times = 0
    try:
        count = 100
        for n in range(count):
            sum += challenge9()
            times += 1
    finally:
        print(f"Durchschnittlich: {sum / times * 1000:06.5f} ms")

Comments