Inspiriert von einem realen Szenario, das ich hier um eine Antwort gebeten habe: /superuser/1312212/writing-a-formula-to-count-how-many-times-each-date- erscheint in einem Datumssatz ran
Bei einem vorgegebenen Array von Zeiträumen (oder Startdatum-Enddatum-Paaren) wird für alle Tage im Gesamtbereich die Anzahl der Zeiträume ausgegeben, die jeden Tag abdecken.
Beispielsweise:
# Start End
1 2001-01-01 2001-01-01
2 2001-01-01 2001-01-03
3 2001-01-01 2001-01-02
4 2001-01-03 2001-01-03
5 2001-01-05 2001-01-05
In Anbetracht der obigen Daten sollten die Ergebnisse wie folgt aussehen:
2001-01-01: 3 (Records 1,2,3)
2001-01-02: 2 (Records 2,3)
2001-01-03: 2 (Records 2,4)
2001-01-04: 0
2001-01-05: 1 (Record 5)
Sie müssen nur die Zählungen für jeden Tag ausgeben (in der Reihenfolge, sortiert nach ältesten und neuesten). nicht in welchen Datensätzen sie erscheinen.
Sie können davon ausgehen, dass jede Zeitspanne nur Daten und keine Zeiten enthält. und so sind immer ganze tage vertreten.
I / O
Eingang kann in jedem Format erfolgen, das eine Reihe von Zeiträumen darstellt - also entweder eine Reihe von Zeitpaaren oder eine Sammlung von (eingebauten) Objekten, die Start- und Enddaten enthalten. Die Datumsangaben sind, wie bei PPCG-Herausforderungen üblich, auf einen Zeitraum zwischen 1901 und 2099 begrenzt.
Sie können davon ausgehen, dass die Eingabe nach Belieben vorsortiert ist (in Ihrer Antwort angeben). Eingabedaten sind inklusive (der Bereich umfasst also das gesamte Start- und Enddatum).
Sie können auch davon ausgehen, dass von den beiden Daten in einem bestimmten Bereich das erste älter oder gleich dem zweiten ist (dh Sie haben keinen negativen Datumsbereich).
Die Ausgabe ist ein Array, das die Anzahl für jeden Tag vom ältesten bis zum neuesten in der Eingabe enthält, wenn nach Startdatum sortiert.
Die Ausgabe für das obige Beispiel wäre also {3,2,2,0,1}
In diesem Fall sind einige Tage möglicherweise nicht in einem Zeitbereich enthalten 0
wird für dieses Datum ausgegeben.
Gewinnkriterien
Dies ist Code-Golf, also gewinnt das niedrigste Byte. Es gelten die üblichen Ausschlüsse
Pseudo-Algorithmus Beispiel
For each time range in input
If start is older than current oldest, update current oldest
If end is newer than current newest, update current newest
End For
For each day in range oldest..newest
For each time range
If timerange contains day
add 1 to count for day
End For
Output count array
Andere Algorithmen, um zum gleichen Ergebnis zu gelangen, sind in Ordnung.
0
sollte in einem Wörterbuch sein? Es scheint nur den Benutzer zu zwingen, von min(input)
bis zu iterieren max(input)
, was nichts zum Kern der Herausforderung (Rechenzeit) hinzuzufügen scheint.