[quote=« alt3, post:2, topic: 27697 »]Dans le second exemple, où est le chevauchement ?
Sinon, il faudrait pas que:
(premier horaire seconde tranche > seconde horaire premiere tranche)
ET
(second horaire deuxieme tranche < premier horaire premiere tranche)
pour que ce soit ok ?
(ceci est une réponse rapide )[/quote]
Oui mais non, regarde les exemple lorsque le mec fini à 23:00 et recommence à 00:00 ou lorsque le mec fini à 00:00 et qui reprend à 01:00 dans un cas B > C et dans l’autre B > C
NON (heure 2eme debut < heure 1er debut ET
heure 2eme fin > heure 1er fin) ET
NON (heure 1er debut < heure 2eme debut ET
heure 1er fin > heure 2eme fin) )
avec une vérification du changement de jour pour éviter tout problème, genre si les 2h sont inférieur au début et fin des autres jeurs, on ajoute un jour
[quote=« ZGoblin, post:6, topic: 27697 »]Ben justement, il n’y a pas de chevauchement pourtant :
ne fonctionne pas car 23:00 > 00:00, c’est ce que je voulais t’expliquer.[/quote]
Et en mélangeant un peu toutes les idées ?
Est ce que ca ne permettrait pas de determiner si tu viens de passer un jour ?
int add = 0;
si (date de debut du deuxieme horaire < date debut du premier horaire && date de debut du deuxieme horaire < date fin du premier horaire)
add = 24;
La solution en vb, le format des horraires est ##:##
[code]’---------------------------------------------------------------------------------------
’ Function F_B_PlageHoraire
’---------------------------------------------------------------------------------------
’
’---------------------------------------------------------------------------------------
'
Function PlageHorraire(Debut1 As String, Fin1 As String, Debut2 As String, Fin2 As String) As Boolean
Dim DebutSec1 As Long
Dim FinSec1 As Long
Dim DebutSec2 As Long
Dim FinSec2 As Long
’ Résultat
PlageHorraire = Total1 > 0 Or Total2 > 0
End Function
‘---------------------------------------------------------------------------------------
’ Function CSeconde
’---------------------------------------------------------------------------------------
’
’---------------------------------------------------------------------------------------
'
Function CSeconde(Heure As String) As Long
CSeconde = CLng(Split(Heure, “:”)(0)) * 3600 + CLng(Split(Heure, “:”)(1)) * 60
End Function[/code]
L’algo est connu : c’est planning strategy
Par exemple il sert a minimiser le nombre de vol pour les avions tout en couvrant tout les horraires.
T’as juste à verifier dans ton cas qu’un seul avion a etait utilisé…
//edit
Bon aller je trouve pas sur google, mon prof semble renommer les algos
Tu trie les horraire par heure de depart.
On prend la premiere plage horraire (PH1) on la fou dans le premier avion (A1).
Ensuite si PH2 se superpose a PH1 en comparant heure de debut de PH2 et heure de fin de PH1 on le fout dans un deuxieme avion.
Si on le met allah suite et rebelote… en partant du premier avion
O(nlog(n)).
si tu as utiliser un avion c’est que tes horraires se superposent pas.
Moi j’ai une idée (peut-etre pas la plus optimisée, mais la plus simple à coder).
Son gros avantage, c’est qu’elle ne se limite pas à la vérification de 2 plages horaires, mais d’une infinité :
tu fais une liste de clé / valeur avec comme clé, l’heure de début et comme valeur l’heure de fin de tes inervalles.
ensuite tu prends toutes tes horaires dans une autre liste et tu les tris et tu n’as plus qu’a faire :
[code]Dictionnary<DateTime,DateTime> liste1; // Heures de fin / heures de début d’intervalle
List liste2; // toutes les heures
Bon ce bout de code est en C#, mais ca peut se faire dans n’importe quel langage.
Attention, niveau perf, je pense pas que ce soit la meilleur façon de faire.
Non non, c’est bien la première proposition.
En fait les deux reviennent au même mais la première est plus rapide (un test d’égalité / inégalité est plus simple à réaliser qu’un test infériorité / supériorité)
Il faut utiliser les dates concaténées aux heures et pas simplement les heures sinon on ne s’en sort pas au niveau des changements de jours, d’années etc…