diff --git a/app/main.py b/app/main.py index 68287892..72d42cb1 100644 --- a/app/main.py +++ b/app/main.py @@ -1,6 +1,36 @@ -from typing import Callable +from typing import Callable, Any, Hashable +from functools import wraps def cache(func: Callable) -> Callable: - # Write your code here - pass + cache_dict = {} + @wraps(func) + + def inner(*args: Hashable, **kwargs: Hashable) -> Any: + cache_key = (args, tuple(kwargs.items())) + if cache_key in cache_dict: + print("Getting from cache") + return cache_dict[cache_key] + print("Calculating new result") + result = func(*args, **kwargs) + cache_dict[cache_key] = result + return result + return inner + + +@cache +def long_time_func(a: int, b: int, c: int) -> int: + return (a ** b ** c) % (a * c) + + +@cache +def long_time_func_2(n_tuple: tuple, power: int) -> int: + return [number ** power for number in n_tuple] + + +long_time_func(1, 2, 3) +long_time_func(2, 2, 3) +long_time_func_2((5, 6, 7), 5) +long_time_func(1, 2, 3) +long_time_func_2((5, 6, 7), 10) +long_time_func_2((5, 6, 7), 10)