Określ najbardziej zajęty czas

9

To wyzwanie było bardzo zainspirowane postem przepełnienia stosu .

Wyzwanie

Biorąc pod uwagę grupę klientów pod względem czasu, gdy wchodzą do pokoju i kiedy z niego wychodzą, określ okres (y) czasu, w którym pokój ma maksymalną liczbę osób. Rozdzielczość czasowa powinna być z dokładnością do minuty.

Na przykład, jeśli istnieją trzy klienci 8 - 10, 9 - 11, 10 - 12, to prawidłowa odpowiedź będzie 9 - 11; w tym czasie w pokoju jest dwóch klientów, co jest największym możliwym.

Wejście

Dane wejściowe będą listą par w jakiejś formie. Może to być albo lista 2-krotek, lista o parzystej długości z przeplatanymi elementami itp., Dowolny rozsądny format wejściowy. Czasy można podać w dowolnym rozsądnym formacie, w czasie 12 lub 24 godzinnym. Możesz także wprowadzić czas jako liczbę minut po północy.

Wynik

Dane wyjściowe powinny być listą par w jakiejś formie, ale wynik jest bardziej rygorystyczny. Wynik nie może być płaską listą, musi to być lista 2-krotek lub lista list itp. Czasy mogą być generowane w dowolnym rozsądnym formacie, w czasie 12- lub 24-godzinnym. Możesz także podać czas jako liczbę minut po północy.

Przykłady

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

Możesz założyć, że drugi raz w parze zawsze będzie po raz pierwszy. Przedziały czasowe nie będą biegać do północy.

HyperNeutrino
źródło
Co jeśli istnieje wiele zakresów czasowych?
Esolanging Fruit
@ Challenger5 Co rozumiesz przez wiele zakresów czasowych, danych wejściowych lub wyjściowych?
HyperNeutrino,
@HyperNeutrino Output.
Esolanging Fruit
@ Challenger5 Dodano przypadek testowy, dzięki.
HyperNeutrino,
Czy 09:00 - 10:00, 10:00 - 11:00jest poprawny wynik dla pierwszego przypadku testowego?
Leaky Nun

Odpowiedzi:

4

Brachylog , 25 bajtów

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

Wypróbuj online!

Ta odpowiedź ma oczywistą strukturę, która staje się jeszcze bardziej oczywista, jeśli napiszesz ją w następujący sposób:

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

Niestety, kolejność oceny Brachylog sprawia, że ​​program przechodzi w nieskończoną pętlę, jeśli spróbujesz skorzystać z danej struktury. Jednak z pewnością można sobie wyobrazić język podobny do Brachyloga, w którym jest on znacznie krótszy.


źródło
1

Brachylog , 58 bajtów

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

Wypróbuj online!

To musi być najdłuższa odpowiedź Brachylog w historii ...

Leaky Nun
źródło
0

Pyth , 33 24 bajty

JsrMQcSs-M_BhMBS{.M/JZJ2

Wypróbuj online!

Leaky Nun
źródło
To wydaje się zachowywać się nieodpowiednio do tego . Dodam to również jako przypadek testowy do pytania.
HyperNeutrino
@HyperNeutrino naprawione.
Leaky Nun
To była szybka odpowiedź. Dobra robota!
HyperNeutrino,
0

Mathematica, 104 bajty

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

Oczywiście zakłada to, że kilka wbudowanych Mathematica o dużej mocy jest poprawnych ...

jcai
źródło