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.


¿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.





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 ...

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.