Token Bucket Rate Limiter
Token Bucket Rate Limiter
You are simulating a token bucket rate limiter.
Parameters:
capacity: maximum tokens in the bucket.refillRate: tokens added per unit time.requests: a list of requests with a time and token cost.
Rules:
- The bucket starts full at time
0. - Before each request at time
t, refill:tokens = min(capacity, tokens + (t - lastTime) * refillRate) - If
tokens >= cost, accept the request and deductcost. - Otherwise reject the request.
Return a boolean slice indicating whether each request is accepted.
Types
type Request struct {
Time int
Cost int
}
Function signature
func TokenBucketAllow(capacity int, refillRate int, requests []Request) []bool
Example
capacity = 5
refillRate = 1
requests = [
{Time:0, Cost:4},
{Time:2, Cost:2},
{Time:3, Cost:2},
{Time:3, Cost:1},
]
output = [true, true, true, false]
Constraints
0 <= len(requests) <= 1000000 <= capacity, refillRate <= 1_000_0000 <= Time, Cost <= 1_000_000Timeis non-decreasing inrequests
Notes
- If
capacity == 0, all positive-cost requests are rejected. - If
Cost == 0, a request is always accepted.
Run tests to see results
No issues detected