Детский вопрос про пересечение интервалов дат

Redjik

Джедай-мастер
Как то была такая же задачка, на пальцах у меня не получилось правда.
Для наглядности, Рома, сделай две полоски из бумаги, типа интервалы и подвигай их.
Мне помогло, я пришел к period1_start <= period2_end and period1_end >= period2_start.
У нас же не точки, а интервалы, поэтому проверки 2, а не 6.

ЗЫ. я вроде ниточками доходил =)
 

Фанат

oncle terrible
Команда форума
У нас же не точки, а интервалы, поэтому проверки 2, а не 6.
Блин, Ваня, и ты туда же :)
Проверки имеются в виду самого алгоритма. Не входящих данных, а алгоритма. Не те, которые которые алгоритм должен произвести, а наши собственные проверки алгоритма на корректность. Те самые ниточки. их должно быть шесть.
 

artoodetoo

великий и ужасный
ok, тестируем пригодность условия
(new_begin <= old_end AND new_end >= old_start)

я сделал фиддл для проверки описанных шести случаев. есть шесть записей в таблице. с проверяемым интервалом они находятся в отношении как Вы описали:
тестируемый интервал ('2014-03-10', '2014-03-17'), данные в таблице:
(1, '2014-03-18', '2014-03-25'),
(2, '2014-03-15', '2014-03-22'),
(3, '2014-03-05', '2014-03-22'),
(4, '2014-03-12', '2014-03-15'),
(5, '2014-03-05', '2014-03-15'),
(6, '2014-03-01', '2014-03-05');
первая и шестая записи очевидно НЕ пересекают интервал. остальные пересекают.

возможно нагляднее будет "вид сбоку": фиддл
№-результат
1-0
2-1
3-1
4-1
5-1
6-0

надеюсь это кому-то нужно.
 
Последнее редактирование:

Фанат

oncle terrible
Команда форума
ok, тестируем пригодность условия
Сорри, я совсем не настаивал на этом. Я на тот момент уже убедился в том, что правило работает. Это просто было стороннее замечание, оффтопик про методику тестирования
 

Redjik

Джедай-мастер
А, дак тут нужен другой подход был. Нужно было выдвинуть теорему, а потом доказать ее. Ну все как в школе. Правда я не любил это делать, поэтому не подскажу как, но уверен, что эту теорему можно доказать.
 
Сверху