Комментарии 3
Формулу для количества "возможных успешных розыгрышей" во втором подходе слабО вывести? Интересная комбинаторная задачка.
Может не совсем понял суть проблемы, но почему бы просто не закольцевать участников в случайном порядке и чтобы каждый был сантой для соседа справа?
import random as rd
arr = ['Вася', 'Петя', 'Маша', 'Даша', 'Леша', 'Глаша']
rd.shuffle(arr)
for i in range(-1, len(arr)-1):
print(f'{arr[i]} выбирает подарок для {arr[i+1]}')
Если организатор знает пары, то что ему мешает воспользоваться самым первым способом и генерировать случайные пары до тех пор, пока всё не станет хорошо? А потом их просто разослать. Во-вторых, каким образом предлагается рассылать случайное число от участникам в день розыгрыша, если у них нет интернета? Видимо письмом. Наконец, схема «получи один огромный лист, а затем получи второй с числом, чтобы выбрать человека с первого листа» кажется несколько избыточной и гораздо более склонной к ошибкам (особенно для пожилых участников).
Как рандомайзить Тайных Сант, если участники далеко и сидят без интернета