Determinar o horário mais movimentado

9

Esse desafio foi muito inspirado por este post do Stack Overflow .

Desafio

Dado um grupo de clientes em termos de quando eles entram em uma sala e quando eles saem, determine o (s) período (s) de tempo em que a sala tem um número máximo de pessoas. A resolução do tempo deve ser para o minuto.

Por exemplo, se existem três clientes 8 - 10, 9 - 11, 10 - 12, em seguida, a resposta correta seria 9 - 11; durante esse período, há dois clientes na sala, o maior possível.

Entrada

A entrada será uma lista de pares de alguma forma. Pode ser uma lista de duas tuplas, uma lista de comprimento par com elementos intercalados etc., qualquer formato de entrada razoável. Os horários podem ser fornecidos em qualquer formato razoável, em 12 ou 24 horas. Você também pode inserir a hora como o número de minutos após a meia-noite.

Resultado

A saída deve ser uma lista de pares de alguma forma, mas a saída é mais rígida. A saída não pode ser uma lista simples, deve ser uma lista de duas tuplas ou uma lista de listas, etc. Os horários podem ser exibidos em qualquer formato razoável, em 12 ou 24 horas. Você também pode imprimir o tempo como o número de minutos após a meia-noite.

Exemplos

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

Você pode supor que a segunda vez em um par será sempre após a primeira vez. Os intervalos de tempo não serão executados durante a meia-noite.

HyperNeutrino
fonte
E se houver vários intervalos de tempo?
Esolanging Fruit
@ Challenger5 O que você quer dizer com vários intervalos de tempo, entrada ou saída?
HyperNeutrino
@HyperNeutrino Output.
Esolanging Fruit
@ Challenger5 Adicionado um caso de teste, obrigado.
HyperNeutrino
É 09:00 - 10:00, 10:00 - 11:00uma saída válida para o primeiro caso de teste?
Freira vazando

Respostas:

4

Braquilog , 25 bytes

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

Experimente online!

Existe uma estrutura óbvia para essa resposta, que se torna ainda mais óbvia se você a escrever assim:

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

Infelizmente, a ordem de avaliação de Brachylog faz com que o programa entre em um loop infinito se você tentar tirar proveito da estrutura em questão. Ainda assim, é certamente possível imaginar uma linguagem semelhante ao Brachylog na qual isso é muito mais curto.


fonte
3

Geléia , 22 21 20 bytes

r/€Ṗ€F©®ċ$ÐṀQœ^‘$Ṣs2

Experimente online!

Freira Furada
fonte
1

Braquilog , 58 bytes

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

Experimente online!

Essa deve ser a resposta Brachylog mais longa de todos os tempos ...

Freira Furada
fonte
0

Pitão , 33 24 bytes

JsrMQcSs-M_BhMBS{.M/JZJ2

Experimente online!

Freira Furada
fonte
Isso parece se comportar incorretamente para isso . Vou adicionar isso como um caso de teste à pergunta também.
HyperNeutrino
@HyperNeutrino corrigido.
Freira vazando
Bem, essa foi uma resposta rápida. Bom trabalho!
HyperNeutrino
0

Mathematica, 104 bytes

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

Obviamente, isso pressupõe que vários recursos integrados do Mathematica de alta potência estejam corretos ...

jcai
fonte