Команда вирішила, що кожного ранку хтось повинен приносити круасани для всіх. Це не повинно бути однаковою людиною кожен раз, тому повинна бути система, яка визначає, чия черга наступна. Мета цього питання - визначити алгоритм для вирішення, чия черга буде завтра принести круасани завтра.
Обмеження, припущення та завдання:
- Чия черга принести круасани, буде визначено попереднього дня.
- У будь-який день деякі люди відсутні. Алгоритм повинен вибрати когось, хто буде присутній в той день. Припустимо, що всі прогули відомі за день заздалегідь, тому покупця круасанів можна визначити в попередній день.
- В цілому більшість людей присутні в більшість днів.
- В інтересах справедливості кожен повинен купувати круасани стільки разів, ніж інші. (В основному, припустимо, що кожен член команди має однакову суму грошей, щоб витратити на круасани.)
- Було б непогано мати якийсь елемент випадковості або хоча б сприйняти випадковість, щоб полегшити нудьгу реєстру. Це не важке обмеження: це скоріше естетичне судження. Однак одну і ту ж людину не слід обирати двічі поспіль.
- Людина, яка приносить круасани, повинна знати заздалегідь. Отже, якщо людина P має принести круасани в день D, то цей факт слід визначити в якийсь попередній день, де присутня людина P. Наприклад, якщо приношення круасана завжди визначається напередодні, то це має бути одна з осіб, які були присутніми напередодні.
- Кількість членів команди досить мала, що ресурси для зберігання та обчислення фактично необмежені. Наприклад, алгоритм може спиратися на повну історію того, хто приніс круасани, коли раніше. До декількох хвилин обчислень на швидкому ПК кожен день було б нормально.
Це модель реальної світової проблеми, тому ви можете оскаржувати або уточнювати припущення, якщо ви думаєте, що вони краще моделюють сценарій.
Походження 1: Дізнайтеся, хто збирається придбати круасани Флоріана Маргайн.
Походження 2: Дізнайтеся, хто збирається придбати круасани від Жиля.
Це питання є тією ж версією, що і Жилла, і він був повторно розміщений на програмістах як експеримент, щоб побачити, як різні громади вирішують завдання програмування.