Biuro (nazwijmy to „The Office”) ograniczy zmarnowany czas w 2019 roku poprzez konsolidację biurowych przyjęć urodzinowych. Wszelkie dwie osoby z urodzinami od poniedziałku do piątku (włącznie) w tym samym tygodniu będą obchodzone ze wspólną imprezą urodzinową w tym tygodniu. Ludzie, których urodziny przypadają w sobotę lub niedzielę, w ogóle nie mają imprezy.
Niektóre osoby nie lubią dzielić przyjęcia urodzinowego z osobami, które nie dzielą swoich faktycznych urodzin. Będą bardzo źli na wspólne przyjęcie urodzinowe .
Zamierzamy symulować biuro i znaleźć pierwszy tydzień, w którym ktoś bardzo się rozgniewa na temat wspólnego przyjęcia urodzinowego .
Wyzwanie
Napisz program lub funkcję, która wyświetli pierwszy numer tygodnia ISO na rok 2019, w którym ktoś w symulowanym biurze jest bardzo zły na ich temat wspólnego przyjęcia urodzinowego , z zastrzeżeniem następujących podstawowych zasad:
- wprowadź liczbę całkowitą N > 1, która jest liczbą pracowników w biurze.
- N urodzin siebie są rozmieszczone równomiernie na losowo z 1 stycznia Dec 31 (ignoruj 29 lutego).
- ale tygodni roboczych w celu ustalenia wspólnych przyjęć urodzinowych są daty tygodnia ISO w 2019 r., które wynoszą między 2019-W01-1 (2018-12-31) a 2019-W52-7 (2019-12-29). Nowy tydzień ISO zaczyna się w każdy poniedziałek. (Myślę, że to wszystko, co naprawdę musisz wiedzieć o tygodniach ISO dla tego wyzwania).
- dla N osób w biurze, każdy ma 1/3 szansy na bardzo złość osobowości typu Shared Birthday Party , więc musisz to również zasymulować.
- ale nie będą wściekli, jeśli impreza będzie dzielona z ludźmi, którzy ją mają same urodziny.
- wypisz numer tygodnia ISO (dokładny format jest elastyczny, pod warunkiem, że numer tygodnia jest wyraźny) dla pierwszego wystąpienia Very Angry Osoby . Jeśli nie ma wściekłych ludzi, możesz wypisać wszystko, co nie jest mylone z tygodniem ISO lub program może się pomylić itp.
Niektóre założenia upraszczające:
- jak wspomniałem, całkowicie zignoruj problem z 29 lutego (niepotrzebna komplikacja)
- zignoruj święta państwowe (jest to społeczność międzynarodowa, więc nasze święta będą się różnić) i po prostu załóż, że biuro jest otwarte w każdy dzień powszedni.
Zasady
To jest golf golfowy. Najkrótsza odpowiedź w bajtach dla każdego języka wygrywa. Domyślne luki zabronione.
Witamy wyjaśnienia kodu.
Pracowane przykłady
Opracowany przykład 1 z wejściem N = 7. Pierwsza i druga kolumna są losowe, jak opisano w regułach (ale tak naprawdę nie są losowe tutaj).
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
Więc nie ma gniewu. Program lub funkcja może powodować błędy lub generować coś, co nie jest mylone z numerem tygodnia ISO.
Przykład 2 z N nieokreślonym.
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
... ... ... ...
Wynik byłby W11
lub coś równoważnego.