Re[7]: Задачи-индикаторы мышления
От: rg45 СССР  
Дата: 07.04.24 10:00
Оценка:
Здравствуйте, Shmj, Вы писали:

S>

S>Для проверки пересечения двух числовых интервалов на C#, вы можете использовать следующее логическое выражение:

S>

S>bool DoIntervalsIntersect(int aStart, int aEnd, int bStart, int bEnd)
S>{
S>    return aStart <= bEnd && bStart <= aEnd;
S>}
S>


S>Это выражение возвращает true, если интервалы пересекаются, и false в противном случае. Оно проверяет, что начало одного интервала находится до конца другого, и наоборот. Это базовая проверка, которая работает для замкнутых интервалов, где aStart и aEnd определяют начало и конец первого интервала, а bStart и bEnd — для второго.


S>Мыслит?


А давай попробуем подсунуть ей денормализованное логическое выражение? Ну вот, например, следующее выражение эквивалентно предыдущему:

bool DoIntervalsIntersect(int aStart, int aEnd, int bStart, int bEnd)
{
    return
    bStart <= aStart && aStart <= bEnd ||
    bStart <= aEnd && aEnd <= bEnd ||
    aStart <= bStart && bStart <= aEnd ||
    aStart <= bEnd && bEnd <= aEnd;
}


Интересно, сможет упростить? Только, наверное, лучше бы как-то переименовать функцию и параметры. Можно попробовать скормить ей выражение в чистом виде, без функции, а имена параметров заменить на a, b, c, d:

    c <= a && a <= d ||
    c <= b && b <= d ||
    a <= c && c <= b ||
    a <= d && d <= b
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 07.04.2024 10:17 rg45 . Предыдущая версия . Еще …
Отредактировано 07.04.2024 10:14 rg45 . Предыдущая версия .
Отредактировано 07.04.2024 10:05 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.