На недавнем тимбилдинге было "бинго" для знакомств с коллегами. "Бинго" это листок с 24 ячейками, в которых написаны утверждения о людях, например: "Попадал в телевизор", "Любит экзотическую еду" и так далее. Задачей было заполнить все ячейки фамилиями коллег без повторений. Я один из двух людей (среди ~300), кому это удалось, хочу поделиться алгоритмом. Вообще, знание игровых механик и алгоритмическое мышление могут пригодиться вам в самых неожиданных ситуациях.
Во-первых, я взял несколько разных листов с "бинго". Всего было 5-6 версий с немного разными ячейками, логично было пытаться заполнять тот, где меньше редких утверждений, под которые сложно найти человека.
Во-вторых, и это основное, половина листа заполнилась после рассадки за столы. Я предложил соседям по столу такой подход:
1. Каждому присваивается число
2. Все листы с бинго собираем в стопку и передаём стопку от одного края стола до другого по часовой стрелке
3. Когда к тебе попали листы, ты на каждом, кроме своих, ставишь свой номер в углу тех ячеек, которые содержат верные для тебя утверждения
4. Когда стопку все заполнили, возвращаем каждому его листы
5. Получив лист, ты выбираешь в нём ячейки с самым маленьким ненулевым количеством номеров в них (обычно это один номер) и вносишь в одну из них фамилию вместо номера
6. Номер внесённого человека зачёркивается во всех ячейках этого листа
7. Пункты 5 и 6 повторяются, пока незачёркнутых номеров не осталось
Быстро выяснилось, что вообще все варианты листов без проблем заполняются на N-1 ячеек, где N — количество людей за столом (потому что себя вносить нельзя).
Оставалось только дозаполнить остатки, половина из которых опять же закрывалась теми коллегами, кого я знаю, потому что столы были сформированы так, чтобы вы с меньшей вероятностью сели со своими прямыми знакомыми. Профит.
Я принёс листок сдавать, но выяснилось, что чуть раньше полностью готовое бинго сдал мой коллега Дмитрий, который, представляете, ходил и общался с людьми ради этого. Вот прямо разговаривал! Ужас какой.
#life