Ein Büro (nennen wir es "The Office") wird 2019 durch die Konsolidierung von Bürogeburtstagsfeiern weniger Zeit verschwenden. Zwei Personen mit einem Geburtstag zwischen Montag und Freitag (einschließlich) derselben Woche werden irgendwann in dieser Woche mit einer gemeinsamen Geburtstagsfeier gefeiert . Menschen, deren Geburtstage auf einen Samstag oder Sonntag fallen, bekommen überhaupt keine Party.
Einige Leute mögen es nicht, eine Geburtstagsfeier mit Leuten zu teilen, die ihren tatsächlichen Geburtstag nicht teilen. Sie werden sehr wütend sein, eine gemeinsame Geburtstagsfeier zu haben .
Wir werden ein Büro simulieren und die erste Woche finden, in der jemand sehr wütend auf seine gemeinsame Geburtstagsfeier wird .
Die Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die die erste ISO-Wochennummer für 2019 ausgibt, in der jemand in einem simulierten Büro über die gemeinsame Geburtstagsfeier sehr wütend wird , wobei die folgenden Grundregeln gelten:
- Geben Sie eine Ganzzahl N > 1 ein, die der Anzahl der Mitarbeiter im Büro entspricht.
- Die N Geburtstage selbst werden vom 1. Januar bis 31. Dezember gleichmäßig zufällig verteilt (ignorieren Sie den 29. Februar).
- Die Arbeitswochen für die Bestimmung der gemeinsamen Geburtstagsfeiern sind jedoch die ISO-Wochentermine 2019, die zwischen 2019-W01-1 (2018-12-31) und 2019-W52-7 (2019-12-29) liegen. Jeden Montag beginnt eine neue ISO-Woche. (Ich denke, das ist alles, was Sie wirklich über ISO-Wochen für diese Herausforderung wissen müssen).
- Für die N Personen im Büro hat jeder eine Chance von 1/3, einen Persönlichkeitstyp für eine sehr verärgerte gemeinsame Geburtstagsfeier zu haben. Sie müssen dies also auch simulieren.
- Aber sie werden nicht böse sein, wenn die Party mit Leuten geteilt wird, die denselben Geburtstag haben.
- Geben Sie die ISO-Wochennummer (das genaue Format hierfür ist flexibel, solange die Wochennummer klar ist) für das erste Auftreten einer sehr verärgerten Person aus. Wenn es keine wütenden Leute gibt, können Sie alles ausgeben, was nicht mit einer ISO-Woche verwechselt wird, oder das Programm kann Fehler usw. verursachen.
Einige vereinfachende Annahmen:
- Ignorieren Sie, wie bereits erwähnt, die Ausgabe vom 29. Februar vollständig (eine unnötige Komplikation).
- Ignorieren Sie Feiertage (dies ist eine internationale Gemeinschaft, daher unterscheiden sich unsere Feiertage) und gehen Sie einfach davon aus, dass das Büro an jedem Wochentag geöffnet ist.
Regeln
Das ist Code-Golf. Die kürzeste Antwort in Bytes für jede Sprache gewinnt. Standardschlupflöcher verboten.
Code-Erklärungen sind willkommen.
Arbeitsbeispiele
Erfundenes Beispiel 1 mit Eingabe N = 7. Erste und zweite Spalte sind zufällig, wie in den Regeln beschrieben (aber hier natürlich nicht zufällig).
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
Es passiert also keine Wut. Das Programm oder die Funktion kann Fehler verursachen oder etwas ausgeben, das nicht mit einer ISO-Wochennummer verwechselt wird.
Beispiel 2 mit N nicht spezifiziert.
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
... ... ... ...
Die Ausgabe wäre W11
oder etwas Äquivalentes.