Офис (назовем его «Офис») сократит потраченное время в 2019 году, объединив офисные дни рождения. Любые два человека с днем рождения между понедельником и пятницей (включительно) одной и той же недели будут отмечаться совместно с Днем рождения на этой неделе. Люди, чьи дни рождения выпадают на субботу или воскресенье, вообще не устраивают вечеринки.
Некоторые люди не любят делить вечеринку по случаю дня рождения с людьми, которые не разделяют их фактический день рождения. Они будут очень злы на вечеринку по случаю дня рождения .
Мы собираемся смоделировать офис и найти первую неделю, когда кто-то очень сердится из- за своей общей вечеринки по случаю дня рождения .
Соревнование
Напишите программу или функцию, которая выводит первый номер недели ISO для 2019 года, в котором кто-то в имитируемом офисе становится очень злым по поводу своей общей вечеринки по случаю дня рождения при условии соблюдения следующих основных правил:
- введите целое число N > 1, которое является числом работников в офисе.
- в N дней рождения сами по себе распределены равномерно в случайном порядке с 1 января по 31 декабря (игнорировать 29 февр).
- но рабочими неделями в целях определения общих дней рождения являются даты недели ИСО 2019, между 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
или что-то эквивалентное.