Невозможно переопределить с помощью сохраненного свойства 'leadConstraint', переопределив неоткрытое var вне его определяющего модуля xcode 10

(StartA & lt; = EndB) и (EndA> = StartB)

Доказательство: Пусть ConditionA означает, что DateRange A полностью после DateRange B _ |---- DateRange A ------| |---Date Range B -----| _ (True, если StartA > EndB)

Пусть ConditionB означает, что DateRange A полностью до DateRange B |---- DateRange A -----| _ _ |---Date Range B ----| (True, если EndA < StartB)

Затем Overlap существует, если ни A Nor B не является истинным - ( Если один диапазон не является полностью ни за другим, ни полностью перед другим, то они должны перекрываться.)

Теперь один из законов Де Моргана говорит, что:

Not (A Or B) & lt; => Not A And Not B

Что означает: (StartA <= EndB) and (EndA >= StartB)


ПРИМЕЧАНИЕ. Сюда входят условия, при которых края накладываются точно. Если вы хотите исключить это, измените операторы >= на > и <= на <


NOTE2. Благодаря @Baodad, см. этот блог , фактическое перекрытие меньше всего: {endA-startA, endA - startB, endB-startA, endB - startB}

(StartA <= EndB) and (EndA >= StartB) (StartA <= EndB) and (StartB <= EndA)


ПРИМЕЧАНИЕ 3. Благодаря @tomosius более короткая версия читает: DateRangesOverlap = max(start1, start2) < min(end1, end2) Это на самом деле синтаксический ярлык для более длинной реализации, который включает дополнительные проверки, чтобы проверить, что даты начала включены или до конца. Вывод этого сверху:

Если даты начала и окончания могут быть не в порядке, то есть, если возможно, что startA > endA или startB > endB, тогда вы также должны проверить, что они в порядке, так что вы должны добавить два дополнительных правила достоверности: (StartA <= EndB) and (StartB <= EndA) and (StartA <= EndA) and (StartB <= EndB) или: (StartA <= EndB) and (StartA <= EndA) and (StartB <= EndA) and (StartB <= EndB) или (StartA <= Min(EndA, EndB) and (StartB <= Min(EndA, EndB)) или: (Max(StartA, StartB) <= Min(EndA, EndB)

Но для реализации Min() и Max() у вас есть для кода, (используя C тройной для скручивания) ,: (StartA > StartB? Start A: StartB) <= (EndA < EndB? EndA: EndB)

0
задан Sahil Manchanda 16 January 2019 в 11:46
поделиться