Suppose we want to develop a data structure that can build up with an expire time, and supports a function that takes user id and a timestamp. This will check whether a user with given user_id at time given timestamp the request fails or not. It will fail only when the user had a successful request less than the given expire time ago.
So, if the input is like expire = 6 then construct an object obj, and call functions obj.limit(0,10), obj.limit(0,16), obj.limit(0,17) and obj.limit(1,20), then the output will be False, False, True and False respectively because for user 0, initially no request was there so it is false, then at time 16 it is not greater than expire time 6 than last request 10, but at 17 it is true and for the last request, it is for user 1 so initial request is false.
To solve this, we will follow these steps −
Define the constructor . This will take expire
Let us see the following implementation to get better understanding −
from collections import defaultdict class RateLimit: def __init__(self, expire): self.expire = expire self.lastCall = defaultdict(lambda: -1) def limit(self, uid, timestamp): last = self.lastCall[uid] if last == -1 or last + self.expire <= timestamp: self.lastCall[uid] = timestamp return False return True expire = 6 obj = RateLimit(expire) print(obj.limit(0,10)) print(obj.limit(0,16)) print(obj.limit(0,17)) print(obj.limit(1,20))
RateLimit(6) obj.limit(0,10) obj.limit(0,16) obj.limit(0,17) obj.limit(1,20)
False False True False