Подсчёт дефицита ресурсов в Python: квоты и суммы заявок
Напишите решение на Python и проверьте его на странице.
Другие упражнения по этой теме: Collections в Python: задачи на ChainMap, defaultdict и deque.
Оценка квот вычислительного пула
Планировщик пакетных задач распределяет вычислительные ресурсы общего пула между входящими заявками. Перед запуском пакета задач система должна проверить, хватит ли доступных мощностей на все поступившие требования разом, либо рассчитать дефицит и частично удовлетворимый объём квот.
Что уже дано
Готовая заготовка считывает JSON-данные из стандартного ввода, вызывает функцию evaluate_quota(pool_limits, requests) и выводит результат в стандартный вывод в формате JSON.
Что нужно сделать
Реализуйте функцию evaluate_quota(pool_limits: dict[str, int], requests: list[dict[str, int]]) -> dict.
Функция принимает два аргумента:
pool_limits— доступное количество ресурсов в пуле;requests— список заявок, где каждая заявка содержит требуемые количества ресурсов для отдельной задачи.
Все количества ресурсов во входных данных неотрицательны (могут быть равны нулю). Если ресурс не упомянут в пуле или в заявке, его количество считается равным 0.
Правила проверки и расчёта:
- Все заявки суммируются по каждому ресурсу перед сопоставлением с пулом.
- Пакет считается полностью выполнимым (
"is_fulfilled": True), если суммарный спрос по каждому ресурсу не превышает доступный лимит в пуле (включая случай, когда списокrequestsпуст). - Если пакет выполним:
remaining_poolсодержит разность между запасом пула и суммарным запросом по каждому ресурсу. В итоговый словарь включаются только строго положительные остатки (включая ресурсы пула, которые вообще не запрашивались). Нулевые остатки отбрасываются;- поля
shortageиsatisfied_quotaпринимают значениеNone(nullв JSON).
- Если хотя бы по одному ресурсу суммарный запрос превышает объём пула, пакет не может быть выполнен (
"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.
Пример
- Ввод
{"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}
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- Удаление ключа из ChainMap в Python: проверка поведения del
- Обратный индекс на Python: группировка уникальных значений через defaultdict
- ChainMap в Python: исправьте приоритет настроек и удаление переопределений
- Иерархия конфигурации в Python: изоляция настроек разных клиентов
- Скользящее окно Python: найдите кратчайшую подстроку с тремя символами
- Объединение команд и подсчёт рейтинга на Python
