Determinar el momento más ocupado

9

Este desafío se inspiró en gran medida en esta publicación de Stack Overflow .

Desafío

Dado un grupo de clientes en términos de cuándo ingresan a una habitación y cuándo salen, determine el período de tiempo en que la habitación tiene un número máximo de personas. La resolución del tiempo debe ser al minuto.

Por ejemplo, si hay tres clientes 8 - 10, 9 - 11, 10 - 12, entonces la respuesta correcta sería 9 - 11; Durante este período, hay dos clientes en la sala, que es el más grande posible.

Entrada

La entrada será una lista de pares de alguna forma. Puede ser una lista de 2 tuplas, una lista de longitud par con elementos intercalados, etc., cualquier formato de entrada razonable. Los horarios se pueden dar en cualquier formato razonable, ya sea en 12 o 24 horas. También puede ingresar el tiempo como el número de minutos después de la medianoche.

Salida

La salida debe ser una lista de pares de alguna forma, pero la salida es más estricta. La salida no puede ser una lista plana, debe ser una lista de 2 tuplas o una lista de listas, etc. Las horas pueden salir en cualquier formato razonable, ya sea en 12 o 24 horas. También puede mostrar el tiempo como el número de minutos después de la medianoche.

Ejemplos

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

Puede suponer que la segunda vez en un par siempre será después de la primera. Los rangos de tiempo no se ejecutarán durante la medianoche.

Hiperneutrino
fuente
¿Qué pasa si hay múltiples rangos de tiempo?
Esolanging Fruit
@ Challenger5 ¿Qué quiere decir con múltiples rangos de tiempo, entrada o salida?
HyperNeutrino
@HyperNeutrino Output.
Esolanging Fruit
@ Challenger5 Agregó un caso de prueba, gracias.
HyperNeutrino
¿Es 09:00 - 10:00, 10:00 - 11:00una salida válida para el primer caso de prueba?
Leaky Nun

Respuestas:

4

Brachylog , 25 bytes

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

Pruébalo en línea!

Hay una estructura obvia para esta respuesta, que se vuelve aún más obvia si la escribe así:

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

Desafortunadamente, el orden de evaluación de Brachylog hace que el programa entre en un ciclo infinito si intenta aprovechar la estructura en cuestión. Aún así, ciertamente es posible imaginar un lenguaje similar a Brachylog en el que esto es mucho más corto.


fuente
1

Brachylog , 58 bytes

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

Pruébalo en línea!

Esta tiene que ser la respuesta más larga de Brachylog ...

Monja permeable
fuente
0

Pyth , 33 24 bytes

JsrMQcSs-M_BhMBS{.M/JZJ2

Pruébalo en línea!

Monja permeable
fuente
Esto parece comportarse incorrectamente para esto . Agregaré esto como un caso de prueba en la pregunta también.
HyperNeutrino
@HyperNeutrino arreglado.
Leaky Nun
Bueno, esa fue una respuesta rápida. ¡Buen trabajo!
HyperNeutrino
0

Mathematica, 104 bytes

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

Por supuesto, esto supone que varias funciones integradas de Mathematica de alta potencia son correctas ...

jcai
fuente