Контест Middle Сеть, Codable и хранение обновлено

Задача на Swift: повтор запроса с экспоненциальной задержкой

Условие

Сетевой клиент повторяет запрос по правилам:

  • ответ 2xx: успех;
  • повторяем только при коде 0 (таймаут), 429 и 5xx, остальные коды это сразу неудача;
  • всего не больше maxAttempts попыток;
  • перед i-м повтором (с 1) ждём min(cap, base · 2^(i-1)) мс.

Первая строка: base cap maxAttempts (1 ≤ base ≤ cap ≤ 10⁹, 1 ≤ maxAttempts ≤ 60). Вторая: q (1 ≤ q ≤ 2·10⁴). Дальше q строк: коды ответов на последовательные попытки (кодов хватает до остановки).

Для каждого сценария выведите OK <попыток> <ожидание> или FAIL <последний код> <попыток> <ожидание>.

Пример

500 4000 5
4
200
503 503 200
404
500 0 429 503 502
OK 1 0
OK 3 1500
FAIL 404 1 0
FAIL 502 5 7500

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

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