Itertools на Python: ленивый перебор комбинаций параметров

Напишите решение на Python и проверьте его на странице.

Другие упражнения по этой теме: Itertools в Python: задачи на комбинации, groupby и ленивые потоки.

Парные испытания конфигураций

В испытательной лаборатории проверяют устойчивость датчиков к перепадам внешних условий. Инженеры перебирают все возможные комбинации настроек из нескольких независимых линеек: диапазона температур, уровней давления и рабочих частот. Хранить полную таблицу всех вариантов в памяти не нужно — конфигурации должны генерироваться последовательно прямо во время работы.

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

Настройте генерацию тестовых конфигураций без предварительного сохранения всех комбинаций и разбейте полученный поток на парные запуски для испытательных стендов.

Что уже дано

Заготовка содержит объявление функции paired_configurations(temperatures, pressures, frequencies), которую необходимо реализовать.

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

Напишите тело функции paired_configurations(temperatures, pressures, frequencies). Она принимает три конечных упорядоченных списка целых чисел (длиной от 0 до 80 элементов каждый, со значениями от -1 000 000 до 1 000 000) и возвращает одноразовый итератор.

Итератор должен выдавать кортежи-пакеты, составленные из конфигураций вида (temperature, pressure, frequency):

  • Конфигурации формируются как прямое декартово произведение переданных списков в порядке аргументов: температура меняется медленнее всего, частота — быстрее всего.
  • Исходный порядок элементов списков и повторяющиеся значения сохраняются: каждая комбинация генерируется ровно один раз для каждого сочетания позиций.
  • Если хотя бы один из списков пуст, итератор не должен выдать ни одной конфигурации.
  • Каждый выдаваемый пакет содержит ровно две конфигурации: ((t1, p1, f1), (t2, p2, f2)).
  • Если общее число комбинаций нечётно, последний пакет содержит ровно одну конфигурацию: ((tn, pn, fn),).

Важное требование к памяти: запрещено материализовать полную таблицу комбинаций в список или другую структуру данных до выдачи первого пакета. Итератор должен формировать элементы лениво. Дополнительные временные выделения памяти при создании итератора и извлечении его первого пакета не должны превышать лимит в 8 388 608 байт (8 МиБ) сверх памяти исходных списков параметров.

Ввод и вывод

Стандартный ввод stdin не используется; вызовы print и вывод в stdout не требуются. Проверяющая система после выполнения вашего кода считывает из области видимости скрипта функцию верхнего уровня paired_configurations и вызывает её напрямую.

Пример использования

print(list(paired_configurations([10], [1], [100, 200, 300])))

Вывод:

[((10, 1, 100), (10, 1, 200)), ((10, 1, 300),)]
РешениеPython

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

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

Связанные задачи