Заполнить рандомно n множеств из одного множества

Здрасте. Делал лабораторную и тут просто дич а не задача(не репорьте). крч есть множество n-это ассоримент продуктов (ну я его задал). И есть m магазинов где есть какие-то продукты из множества n. Нужно сделать множества продуктов которые: А) есть во всех магазинах; B) множество продуктов которые есть хотя бы в одном и C) которых нету нигде. Но вот проблема с тем что-бы m магазинам раздать рандомное x продуктов из множества n


Ответы (1 шт):

Автор решения: Zhihar

Делал лабораторную и тут просто дич а не задача(не репорьте)

если разложить задачу на небольшие подзадачи, то это уже не будет ДИЧЬЮ, а будет легко решаема

  1. Но вот проблема с тем что-бы m магазинам раздать рандомное x продуктов из множества n

тут надо разобраться - после раздачи из множества n множество уменьшается или нет?

если не уменьшается, то задача выглядит так:

for i in range(n):
    # перемешать товары
    random.shuffle(storage)

    # получить кол-во товаров для магазина i
    count = random.randomint(1, len(storage))

    # получить товары
    shops.attach(storage[:count])

если надо уменьшать - то надо всего лишь добавить 1 строку - уменьшение списка доступных товаров:

for i in range(n):
    # перемешать товары
    random.shuffle(storage)

    # получить кол-во товаров для магазина i
    count = random.randomint(1, len(storage))

    # получить товары
    shops.attach(storage[:count])

    # уменьшить список товаров
    storage = storage[count:]
  1. А) есть во всех магазинах; B) множество продуктов которые есть хотя бы в одном и C) которых нету нигде.

все это реализуется через работу со множествами - у них весь нужный функционал есть

типа

common = goods1 & goods2
unique = goods1 ^ goods2

и т.д.

P.S.

кстати с перемешиванием каждый раз - это я даже погорячился - если из множества товары отбираются (множество уменьшается), то можно просто один раз перемешать товары, а потом разбить множество на куски, но надо обязательно выбирать не все товары, чтобы не возникла ситуация, когда для остальных магазинов товаров уже не останется

# перемешать товары
random.shuffle(storage)

# выбрать товары
for i in range(n):

    # получить кол-во товаров для магазина i, но так чтобы для остальных магазинов осталось хотя бы по 1 товару
    count = random.randomint(1, len(storage) - i)

    # получить товары
    shops.attach(storage[:count])

    # уменьшить список товаров
    storage = storage[count:]
→ Ссылка