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.
Antworten:
Python 2 ,
172202 BytesProbieren Sie es online aus!
Hoppla! Verpasste eine Anforderung; kosten 30 Bytes.
Das OP gibt an, dass Sie nicht am 29. Februar Geburtstag haben.
Wenn Sie am 30. Dezember Geburtstag haben, fällt er nicht in eine ISO-Woche von 2019, sodass Sie auf keinen Fall eine sehr verärgerte ISO-Woche von 2019 sein können.
Das lässt 364 andere Geburtstage übrig, um Sie als sehr wütend zu betrachten. 104 davon fallen an Wochenenden, wenn wir festgelegt haben, dass Sie darüber nicht sehr wütend werden. Wir kümmern uns also nur 260/365 um Sie. dh wenn
R(0,364)>104
(randint
der Bereich ist inklusive). Angesichts dieser Einschränkung ist es wahrscheinlich, dass Ihr Geburtstag an Wochentagen in eine der 52 ISO-Wochen von 2019 und an einen beliebigen Wochentag dieser Woche fällt. und unabhängig davon, dass Sie 1 von 3 sind, wahrscheinlich eine sehr verärgerte Person.D ist dann ein Satz von,
(weeknum,weekday)
so dass, wenn eine potenziell verärgerte Person einen tatsächlichen Geburtstag teilt, es nicht notwendig ist, Amgry zu sein, es sei denn, es gibt noch eine andere Person, die in dieser Woche Geburtstag hat.0 wird zurückgegeben, wenn sich während einer ISO 2019-Woche keine sehr verärgerten Personen manifestieren. Andernfalls wird die ISO-Wochennummer der frühesten Kernschmelze zurückgegeben.
quelle
Gelee ,
36 3233 Bytes+1 Byte, um den 30-Dez-Randfall zu beheben, den ich nicht bemerkt hatte (wie von Chas Brown in den Kommentaren unter dem OP hervorgehoben)
-4 danke an Erik den Outgolfer (Inline-Helfer und Verwendung des Außenprodukts)
Eine monadische Verbindung, die eine ganze Zahl in ergibt[ 0 , 52 ] wo 0 bedeutet, dass während des Jahres überhaupt keine sehr verärgerten Menschen anwesend sind und andere Ausgaben ISO-Wochenzahlen sind.
Probieren Sie es online aus!
Oder sehen Sie sich diese Version an, in der die Wochen, in denen der Geburtstag jeder Person liegt (0 für Wochenenden), gruppiert gedruckt werden. Anschließend wird eine Liste mit Listen in derselben Reihenfolge gedruckt, in der angegeben wird, ob diese Personen vom Typ "Sehr wütend" sind, und schließlich das Ergebnis gedruckt.
quelle
Java 8, 198 Bytes
Die Ausgabe basiert auf Null (0-51). Ein Wert von 52 zeigt an, dass keine sehr wütenden Personen anwesend sind. Probieren Sie es hier online aus .
Ungolfed:
quelle
91>26
statt364>104