---
# System prepended metadata

title: Erlang test task

---

# Erlang test task
Напишите приложение `token_bucket`, реализующее алгоритм текущего ведра с одним ведром.
 
При реализации используйте ETS и функции для работы со счетчиками (ets:update_counter/3,4).
 
Интерфейс приложения:
 
```
token_bucket:limit_is_reached(UserId :: term(), MaxRps :: non_neg_integer()) -> boolean().
```
 
Если лимит запросов достугнут - функция возвращает true, иначе - false.
UserId - произвольный идентификатор.
MaxRps указывает максимальное количество запросов в секунду для данной проверки (представим, что мы берем данное значение динамически из конфига).
При MaxRps = 0 проверка отключается и функция всегда возвращает false (лимит не достигнут).
 
Для сборки приложения используйте erlang.mk.
 
Приложение будет проверяться на работоспособность в терминале следующим образом:
 
```
$ make run
1> token_bucket:limit_is_reached(123, 3).
false
2> [token_bucket:limit_is_reached(123, 3) || _ <- lists:seq(1,100)].
[false,false,false,true,true,true|...]
```
 
При реализации важна работоспособность алгоритма и организация приложения.
Наша цель - увидеть, как вы пишите код.