Контест Senior Исключения и ошибки обновлено

Повторы с экспоненциальной задержкой

Условие

Смоделируйте функцию retry(callable $op, int $maxAttempts). Каждая попытка возвращает ok, бросает временную ошибку (fail) или постоянную (fatal). Временную ошибку повторяем, пока число попыток меньше maxAttempts, а перед попыткой номер k+1 ждём 100·2^(k-1) мс. Постоянную ошибку не повторяем. Если заданные результаты закончились, все следующие попытки считаются fail.

Ввод: n (n ≤ 2·10⁴), затем n строк: maxAttempts и результаты попыток по порядку.

Вывод: для каждой строки одно из ok after k, fatal after k, gave up after k, затем waited T (суммарное ожидание в мс).

Пример

4
3 fail ok
3 fail fail fail
5 fail fatal ok
1 ok
ok after 2 waited 100
gave up after 3 waited 300
fatal after 2 waited 100
ok after 1 waited 0

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.