Офіс (назвемо його "Офіс") збирається скоротити витрачений час у 2019 році шляхом консолідації офісних свят. Будь-які двоє людей, які мають день народження між понеділком та п’ятницею (включно) того ж тижня, будуть відзначатися спільною вечіркою дня народження деякий час цього тижня. Люди, дні народження яких припадають на суботу чи неділю, взагалі не проводять вечірок.
Деяким людям не подобається ділитися днем народження з людьми, які не діляться власним днем народження. Вони будуть дуже сердиті, щоб влаштувати спільну вечірку на день народження .
Ми збираємось імітувати офіс і знайдемо перший тиждень, коли хтось дуже сердиться про свою спільну день народження .
Змагання
Напишіть програму або функцію, яка виводить перший номер тижня ISO на 2019 рік, коли хтось із імітованого офісу дуже сердиться за свою спільну день народження , дотримуючись наступних основних правил:
- введіть ціле число N > 1, що становить кількість працівників в офісі.
- в N днів народження самі по собі розподілені рівномірно у випадковому порядку з 1 січня по 31 грудня (ігнорувати 29 февр).
- однак робочими тижнями для визначення спільних учасників дня народження є дати проведення тижневих тижнів ISO, які складаються між 2019-W01-1 (2018-12-31) та 2019-W52-7 (2019-12-29). Новий тиждень ISO починається щопонеділка. (Я думаю, що це все, що вам потрібно знати про тижні ISO для цього виклику).
- для N людей, що знаходяться в офісі, кожен має 1/3 шансу мати тип особистості « дуже сердитий спільний день народження» , тому вам доведеться також імітувати це.
- але вони не будуть розлючені, якщо вечірку поділять з людьми, у яких той самий день народження.
- виведіть номер тижня ISO (точний формат для цього є гнучким, поки чіткий номер тижня) для першого появи дуже сердитої людини. Якщо немає гнівних людей, ви можете вивести все, що не плутати з тижні ISO, або програма може помилитися і т.д.
Деякі спрощення припущень:
- як я вже згадував, ігноруйте випуск від 29 лютого повністю (непотрібне ускладнення)
- ігноруйте державні свята (це міжнародна спільнота, тому наші свята відрізнятимуться) і просто припускайте, що офіс відкритий кожного будня.
Правила
Це код-гольф. Виграє найкоротша відповідь у байтах за кожну мову. Бійниці за замовчуванням заборонені.
Пояснення коду вітаються.
Опрацьовані приклади
Наведений приклад 1 із введенням N = 7. Перший та другий стовпці є випадковими, як описано в правилах (але насправді тут, звичайно, не випадкові).
Angry Type
Person? Birthday ISO Week Comment
================================================================================
N 2018-12-31 W01 In the 2019 ISO week date year
Y 2018-12-31 W01 Same birthday, so no anger happens
N 2019-02-05 W06
Y 2019-03-15 W11 No anger happens because other W11 b-day is a Saturday
N 2019-03-16 W11
N 2019-09-08 W36 My birthday!
Y 2019-12-30 - Not in the 2019 ISO week date year
Тож ніякого гніву не буває. Програма або функція може помилитися або вивести щось, що не плутати з номером тижня ISO.
Приклад 2 з N невизначеним.
Angry Type
Person? Birthday ISO Week Comment
================================================================================
N 2019-01-19 W03
Y 2019-02-04 W06
N 2019-02-05 W06 No anger because not an angry person
... ... ... (No angry people until...)
Y 2019-03-12 W11 Very Angry Person!
N 2019-03-14 W11
... ... ... ...
Вихід був би W11
чимось еквівалентним.