Откройте контекст
Выберите папку проекта и обозначьте нужные файлы или поведение.
Распределите до 10000 мест между не более чем 1000 неотрицательными целыми весами по наибольшим остаткам. Проверьте нулевые веса и равные остатки с разрешением равенства по порядку ввода, отклоняя положительное распределение при нулевой сумме весов до деления.
Выберите папку проекта и обозначьте нужные файлы или поведение.
Укажите входные данные, ожидаемый результат и границы, которые нужно сохранить.
Проверьте предлагаемые изменения и команды, прежде чем полагаться на результат.
Сравните фактическое поведение с ожидаемым. Если проверка не проходит, разберитесь в причине перед следующими изменениями.
def allocate(weights, seats):
if type(weights) not in (list, tuple) or len(weights) > 1000:
raise ValueError("weights.container")
weights = tuple(weights)
if type(seats) is not int or not 0 <= seats <= 10000:
raise ValueError("seats.range")
if len(weights) > 1000 or any(type(w) is not int or w < 0 for w in weights):
raise ValueError("weights.invalid")
total = sum(weights)
if total == 0:
if seats:
raise ValueError("weight.zero")
return [0] * len(weights)
result = [w * seats // total for w in weights]
remaining = seats - sum(result)
order = sorted(range(len(weights)), key=lambda i: (-(weights[i] * seats % total), i))
for i in order[:remaining]:
result[i] += 1
return resultПример — отправная точка для реального проекта, а не утверждение, что сгенерированный код уже протестирован. Адаптируйте пути, зависимости и ожидаемое поведение к своему приложению.