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.
Odpowiedzi:
Python 2 ,
172202 bajtyWypróbuj online!
ups! Pominięto wymóg; koszt 30 bajtów.
OP podaje, że twoje urodziny nie przypadają 29 lutego.
Jeśli twoje urodziny przypadają 30 grudnia, nie przypadnie to w żadnym tygodniu ISO w 2019 roku, więc w każdym razie nie możesz być bardzo złym tygodniem ISO w 2019 roku.
To pozostawia 364 inne urodziny, aby uznać cię za bardzo zły. 104 z nich przypada w weekendy, kiedy postanowiliśmy, że nie będziesz się tym bardzo denerwował. Dbamy więc tylko o ciebie 260/365 czasu; tzn. kiedy
R(0,364)>104
(randint
zakres obejmuje). Biorąc pod uwagę to ograniczenie, możliwe jest, że Twoje urodziny w dzień powszedni przypadają na jeden z 52 tygodni ISO w 2019 r. Oraz w każdy dzień tygodnia tego tygodnia; i niezależnie, że masz 1 na 3 prawdopodobieństwo, że będziesz osobą bardzo złą.D jest wtedy zestawem,
(weeknum,weekday)
dzięki któremu jeśli potencjalnie Gniewna osoba ma urodziny, nie musi być Amgry, chyba że w tym tygodniu będzie jeszcze inna osoba.0 jest zwracane, jeśli żadna osoba bardzo rozgniewana nie zamanifestuje się podczas tygodnia ISO 2019; w przeciwnym razie zwracany jest numer tygodnia ISO najwcześniejszego krachu.
źródło
Galaretka ,
36 3233 bajtów+1 bajt, aby naprawić przypadek 30 grudnia, którego nie zauważyłem (jak zauważył Chas Brown w komentarzach poniżej PO)
-4 dzięki Erikowi Outgolferowi (inline pomocnik i użycie produktu zewnętrznego)
Łącze monadyczne, które daje liczbę całkowitą w[ 0 , 52 ] gdzie 0 oznacza brak bardzo złych ludzi w ciągu roku, a inne wyniki to numery tygodni ISO.
Wypróbuj online!
Lub zobacz tę wersję, która drukuje pogrupowane tygodnie, w których przypadają urodziny każdej osoby (0 na weekendy), a następnie drukuje listę zamówień o tym samym zamówieniu, czy te osoby są bardzo wściekłe, i ostatecznie drukuje wynik.
źródło
Java 8, 198 bajtów
Dane wyjściowe są zerowe (0–51); wartość 52 oznacza brak bardzo złych ludzi. Wypróbuj online tutaj .
Nie golfowany:
źródło
91>26
zamiast364>104