Un ufficio (chiamiamolo "The Office") ridurrà il tempo sprecato nel 2019 consolidando le feste di compleanno dell'ufficio. Ogni due persone con un compleanno tra lunedì e venerdì (incluso) della stessa settimana saranno festeggiate con una festa di compleanno condivisa qualche volta quella settimana. Le persone i cui compleanni cadono di sabato o domenica non ricevono alcuna festa.
Ad alcune persone non piace condividere una festa di compleanno con persone che non condividono il loro compleanno reale. Saranno molto arrabbiati per una festa di compleanno condivisa .
Simuleremo un ufficio e troveremo la prima settimana in cui qualcuno si arrabbia molto per la sua festa di compleanno condivisa .
La sfida
Scrivi un programma o una funzione che emetta il primo numero della settimana ISO per il 2019 in cui qualcuno in un ufficio simulato si arrabbi molto per la sua festa di compleanno condivisa , fatte salve le seguenti regole di base:
- inserire un numero intero N > 1, che è il numero di lavoratori nell'ufficio.
- i N compleanni stessi sono uniformemente distribuiti a caso dal 1 Gennaio - 31 Dicembre (29 Feb ignorano).
- ma le settimane lavorative ai fini della determinazione delle feste di compleanno condivise sono le date della settimana ISO 2019, comprese tra 2019-W01-1 (2018-12-31) e 2019-W52-7 (2019-12-29). Una nuova settimana ISO inizia ogni lunedì. (Penso che questo sia tutto ciò che devi veramente sapere sulle settimane ISO per questa sfida).
- per le persone N in ufficio, ognuna ha una probabilità 1/3 di avere un tipo di personalità per la festa di compleanno condivisa molto arrabbiato , quindi dovrai simularlo anche tu.
- ma non si arrabbieranno se la festa è condivisa con persone che hanno lo stesso compleanno.
- emette il numero della settimana ISO (il formato esatto per questo è flessibile fintanto che il numero della settimana è chiaro) per la prima occorrenza di una persona molto arrabbiata . Se non ci sono persone arrabbiate, puoi produrre qualsiasi cosa che non sia confusa con una settimana ISO o che il programma possa sbagliare ecc.
Alcune ipotesi di semplificazione:
- come ho già detto, ignora completamente il problema del 29 febbraio (una complicazione non necessaria)
- ignora le festività (questa è una comunità internazionale, quindi le nostre festività differiranno) e supponi che l'ufficio sia aperto ogni giorno della settimana.
Regole
Questo è code-golf. Vince la risposta più breve in byte per ogni lingua. Violazioni predefinite vietate.
Spiegazioni sul codice benvenute.
Esempi lavorati
Esempio contrastato 1 con input N = 7. La prima e la seconda colonna sono casuali come descritto nelle regole (ma in realtà non sono casuali qui ovviamente).
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
Quindi non accade rabbia. Il programma o la funzione possono generare errori o generare qualcosa di non confuso con un numero di settimana ISO.
Esempio 2 con N non specificato.
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
... ... ... ...
L'output sarebbe W11o qualcosa di equivalente.