- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
public class Visit
{
public DateTime Start {get; set;}
public DateTime Finish {get; set;}
}
public bool IsConflict(Visit a, Visit b)
{
var s = GetArray(a);
var s2 = GetArray(b);
return Compare(s,s2);
}
private List<string> GetArray(Visit visit)
{
var list = new List<string>();
while (visit.Start < visit.Finish)
{
list.Add(visit.Finish.ToString()); // в строках!
visit.Finish -= TimeSpan.FromMinutes(1); // по 1й минуте!!!
}
return list;
}
private bool Compare(List<string> list1, List<string> list2)
{
foreach (var s in list1)
{
if (list2.Any(x => x == s))
{
return false;
}
}
return true;
}
Основная здесь функция, предназначенная для вызова, - IsConflict(Visit a, Visit b)
Она должна проверять, пересекаются ли меджу собой два промежутка времени.
Вот такая проверка со сложностью O(n*n) , где n - кол-во минут в промежутках времени.
kegdan 18.09.2013 17:22 # +2
Прикольно, что IsConflict = true когда конфликта нет. И наоборот
epic_fail 19.09.2013 01:04 # −3
kegdan 19.09.2013 04:29 # −3
bormand 19.09.2013 05:15 # +3
kegdan 19.09.2013 05:23 # −1
guest 20.09.2013 06:46 # 0
2) Добавил бы метод IsCrossing. Потом наверняка понадобятся Before, After.
guest 24.09.2013 09:55 # +1
Varashiloff 09.10.2013 15:18 # +1
Stertor 09.10.2013 23:33 # 0
)
*podsobka=memalloc[300]