Déterminer la période la plus occupée

9

Ce défi a été grandement inspiré par ce post Stack Overflow .

Défi

Étant donné un groupe de clients en termes de moment où ils entrent dans une salle et quand ils en sortent, déterminez la ou les périodes pendant lesquelles la salle a un nombre maximum de personnes. La résolution de l'heure doit être à la minute près.

Par exemple, s'il y a trois clients 8 - 10, 9 - 11, 10 - 12, la bonne réponse est 9 - 11; pendant cette période, il y a deux clients dans la salle, ce qui est le plus grand possible.

Contribution

L'entrée sera une liste de paires sous une forme quelconque. Cela peut être soit une liste de 2 tuples, une liste de longueur paire avec des éléments entrelacés, etc., n'importe quel format d'entrée raisonnable. Les heures peuvent être données dans n'importe quel format raisonnable, au format 12 ou 24 heures. Vous pouvez également saisir l'heure comme le nombre de minutes après minuit.

Production

La sortie doit être une liste de paires sous une forme quelconque, mais la sortie est plus stricte. La sortie ne peut pas être une liste plate, elle doit être une liste de 2 tuples ou une liste de listes, etc. Les heures peuvent être sorties dans n'importe quel format raisonnable, au format 12 ou 24 heures. Vous pouvez également afficher l'heure comme le nombre de minutes après minuit.

Exemples

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

Vous pouvez supposer que la deuxième fois dans une paire sera toujours après la première fois. Les plages horaires ne s'exécuteront pas à minuit.

HyperNeutrino
la source
Et s'il y a plusieurs plages horaires?
Esolanging Fruit
@ Challenger5 Qu'entendez-vous par plusieurs plages de temps, entrée ou sortie?
HyperNeutrino
Sortie @HyperNeutrino.
Esolanging Fruit
@ Challenger5 Ajout d'un cas de test, merci.
HyperNeutrino
Est 09:00 - 10:00, 10:00 - 11:00une sortie valide pour le premier cas de test?
Leaky Nun

Réponses:

4

Brachylog , 25 octets

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

Essayez-le en ligne!

Il y a une structure évidente à cette réponse, qui devient encore plus évidente si vous l'écrivez comme ceci:

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

Malheureusement, l'ordre d'évaluation de Brachylog fait en sorte que le programme passe dans une boucle infinie si vous essayez de profiter de la structure en question. Pourtant, il est certainement possible d'imaginer un langage de type Brachylog dans lequel il est beaucoup plus court.


la source
1

Brachylog , 58 octets

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

Essayez-le en ligne!

Ce doit être la réponse Brachylog la plus longue jamais ...

Leaky Nun
la source
0

Pyth , 33 24 octets

JsrMQcSs-M_BhMBS{.M/JZJ2

Essayez-le en ligne!

Leaky Nun
la source
Cela semble se comporter incorrectement pour cela . J'ajouterai cela comme cas de test à la question également.
HyperNeutrino
@HyperNeutrino corrigé.
Leaky Nun
Eh bien, c'était une réponse rapide. Bon travail!
HyperNeutrino
0

Mathematica, 104 octets

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

Bien sûr, cela suppose que plusieurs modules intégrés Mathematica haute puissance sont corrects ...

jcai
la source