Bestimmen Sie die geschäftigste Zeit

9

Diese Herausforderung wurde stark von diesem Stapelüberlauf-Beitrag inspiriert .

Herausforderung

Bestimmen Sie anhand einer Reihe von Kunden, wann sie einen Raum betreten und wann sie ihn verlassen, die Zeitspanne (n), in der der Raum eine maximale Anzahl von Personen hat. Die Zeitauflösung sollte auf die Minute genau sein.

Wenn es zum Beispiel sind drei Clients 8 - 10, 9 - 11, 10 - 12, dann die richtige Antwort wäre 9 - 11; Während dieses Zeitraums befinden sich zwei Kunden im Raum, was der größtmögliche ist.

Eingang

Die Eingabe ist eine Liste von Paaren in irgendeiner Form. Dies kann entweder eine Liste mit 2 Tupeln, eine Liste mit gerader Länge mit verschachtelten Elementen usw. oder ein beliebiges vernünftiges Eingabeformat sein. Die Zeiten können in jedem vernünftigen Format angegeben werden, entweder in 12- oder 24-Stunden-Zeit. Sie können die Zeit auch als Anzahl der Minuten nach Mitternacht eingeben.

Ausgabe

Die Ausgabe sollte eine Liste von Paaren in irgendeiner Form sein, aber die Ausgabe ist strenger. Die Ausgabe kann keine flache Liste sein, sondern muss eine Liste von 2 Tupeln oder eine Liste von Listen usw. sein. Die Zeiten können in jedem vernünftigen Format entweder in 12- oder 24-Stunden-Zeit ausgegeben werden. Sie können die Zeit auch als Anzahl der Minuten nach Mitternacht ausgeben.

Beispiele

input
output

INPUT
08:00 - 10:00
09:00 - 11:00
10:00 - 12:00
OUTPUT
09:00 - 11:00

INPUT
08:20 - 09:20
09:00 - 09:10
08:00 - 09:30
08:50 - 10:40
OUTPUT
09:00 - 09:10

INPUT
08:00 - 10:00
09:00 - 10:00
09:30 - 11:00
OUTPUT
09:30 - 10:00 # The output is not always in the input list

INPUT
00:00 - 02:00
01:00 - 03:00
04:00 - 06:00
05:00 - 07:00
OUTPUT # This is the expected output for when there are multiple time ranges with the same "business".
01:00 - 02:00
05:00 - 06:00

Sie können davon ausgehen, dass das zweite Mal in einem Paar immer nach dem ersten Mal liegt. Zeitbereiche laufen nicht über Mitternacht.

HyperNeutrino
quelle
Was ist, wenn es mehrere Zeitbereiche gibt?
Esolanging Fruit
@ Challenger5 Was meinst du mit mehreren Zeitbereichen, Eingabe oder Ausgabe?
HyperNeutrino
@ HyperNeutrino-Ausgabe.
Esolanging Fruit
@ Challenger5 Testfall hinzugefügt, danke.
HyperNeutrino
Ist 09:00 - 10:00, 10:00 - 11:00eine gültige Ausgabe für den ersten Testfall?
Undichte Nonne

Antworten:

4

Brachylog , 25 Bytes

⟦₂ᵐkᵐcoḅlᵒlᵍthᵐ~c{~k~⟦₂}ᵐ

Probieren Sie es online aus!

Diese Antwort hat eine offensichtliche Struktur, die noch deutlicher wird, wenn Sie sie so schreiben:

{⟦₂k}ᵐc oḅ lᵒlᵍ thᵐ ~c{~k~⟦₂}ᵐ

Leider führt die Auswertungsreihenfolge von Brachylog dazu, dass das Programm in eine Endlosschleife gerät, wenn Sie versuchen, die betreffende Struktur auszunutzen. Dennoch ist es durchaus möglich, sich eine Brachylog-ähnliche Sprache vorzustellen, in der diese viel kürzer ist.


quelle
1

Brachylog , 58 Bytes

⟦₂ᵐkᵐcoḅBlᵐ⌉;B↔z{hl~t?}ˢhᵐhᵐ{∋+₁.¬∈?∧|∋.-₁¬∈?∧}ᶠo~c.{l2}ᵐ∧

Probieren Sie es online aus!

Dies muss die längste Brachylog-Antwort aller Zeiten sein ...

Undichte Nonne
quelle
0

Pyth , 33 24 Bytes

JsrMQcSs-M_BhMBS{.M/JZJ2

Probieren Sie es online aus!

Undichte Nonne
quelle
Dies scheint falsch zu verhalten dies . Ich werde dies auch als Testfall in die Frage aufnehmen.
HyperNeutrino
@ HyperNeutrino behoben.
Undichte Nonne
Das war eine schnelle Antwort. Gute Arbeit!
HyperNeutrino
0

Mathematica, 104 Bytes

Reduce[#==#~MaxValue~x,x]&@PiecewiseExpand@Tr[Piecewise@{{1,#<=x<#2}}&@@@#]/.{Or->List,a_<=x<b_->{a,b}}&

Dies setzt natürlich voraus, dass mehrere leistungsstarke Mathematica-Einbauten korrekt sind ...

jcai
quelle