Специализированные структуры данных и потоковая обработка

Коллекции стандартной библиотеки: deque, Counter, defaultdict и ChainMap

Содержание курса

0 / 1 баллов

Оценка квот вычислительного пула

Планировщик пакетных задач распределяет вычислительные ресурсы общего пула между входящими заявками. Перед запуском пакета задач система должна проверить, хватит ли доступных мощностей на все поступившие требования разом, либо рассчитать дефицит и частично удовлетворимый объём квот.

Что уже дано

Готовая заготовка считывает JSON-данные из стандартного ввода, вызывает функцию evaluate_quota(pool_limits, requests) и выводит результат в стандартный вывод в формате JSON.

Что нужно сделать

Реализуйте функцию evaluate_quota(pool_limits: dict[str, int], requests: list[dict[str, int]]) -> dict.

Функция принимает два аргумента:

  • pool_limits — доступное количество ресурсов в пуле;
  • requests — список заявок, где каждая заявка содержит требуемые количества ресурсов для отдельной задачи.

Все количества ресурсов во входных данных неотрицательны (могут быть равны нулю). Если ресурс не упомянут в пуле или в заявке, его количество считается равным 0.

Правила проверки и расчёта:

  1. Все заявки суммируются по каждому ресурсу перед сопоставлением с пулом.
  2. Пакет считается полностью выполнимым ("is_fulfilled": True), если суммарный спрос по каждому ресурсу не превышает доступный лимит в пуле (включая случай, когда список requests пуст).
  3. Если пакет выполним:
  • remaining_pool содержит разность между запасом пула и суммарным запросом по каждому ресурсу. В итоговый словарь включаются только строго положительные остатки (включая ресурсы пула, которые вообще не запрашивались). Нулевые остатки отбрасываются;
  • поля shortage и satisfied_quota принимают значение None (null в JSON).
  1. Если хотя бы по одному ресурсу суммарный запрос превышает объём пула, пакет не может быть выполнен ("is_fulfilled": False):
  • remaining_pool принимает значение None (null в JSON);
  • shortage содержит только те ресурсы, по которым возник дефицит, а значением является строго положительная разность между суммарным спросом и лимитом пула;
  • satisfied_quota содержит покомпонентный минимум между лимитом пула и суммарным спросом для каждого ресурса, но только с теми значениями, которые строго больше нуля.

Функция должна возвращать словарь с четырьмя ключами: "is_fulfilled", "remaining_pool", "satisfied_quota" и "shortage".

Ввод и вывод

Программа взаимодействует с окружением через стандартные потоки stdin и stdout.

Формат ввода

В stdin передаётся JSON-объект с двумя полями:

  • "pool" — объект вида {"resource_name": int, ...};
  • "requests" — массив объектов вида [{"resource_name": int, ...}, ...]. Допускается пустой список [].

Формат вывода

Программа выводит в stdout одну JSON-строку с отсортированными ключами, содержащую поля is_fulfilled, remaining_pool, satisfied_quota и shortage.

О данных в ответах

Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.

Проверяется тестами (1)
  • Тест 1
    Ввод
    {"pool":{"cpu":64,"gpu":4,"ram_gb":256},"requests":[{"cpu":16,"gpu":2,"ram_gb":64},{"cpu":32,"gpu":1,"ram_gb":128}]}
    Ожидаемый вывод
    {"is_fulfilled":true,"remaining_pool":{"cpu":16,"gpu":1,"ram_gb":64},"satisfied_quota":null,"shortage":null}
Решение
Как проверяется решение

Сравнение вывода: Правила исходной проверяющей системы. Интерактивный запуск не влияет на оценку. Лимит сессии — 5 минут, процессорного времени — 10 секунд.

Отправьте решение, чтобы увидеть результаты тестов.

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

Переписка и фото хранятся 90 дней после последнего принятого сообщения и доступны преподавателям курса. Чтобы попросить преподавателя подключиться, отправьте обращение из диалога.

Проверка решения остаётся отдельным действием.