Тип 15 № 89752 
Преобразование логических выражений. Числовые отрезки
i
На числовой прямой даны два отрезка: B = [22; 40] и C = [32; 50]. Укажите наименьшую возможную длину такого отрезка A, для которого логическое выражение
¬(x ∈ A) → ((x ∈ B) ≡ (x ∈ C))
истинно (т. е. принимает значение 1) при любом значении переменной х.
Решение. Введем обозначения:
(x ∈А) ≡ A; (x ∈ B) ≡ B; (x ∈ C) ≡ C.
Применив преобразование импликации, получаем:
¬A → (B ≡ C) = A ∨ (B ≡ C)
Логическое ИЛИ истинно, если истинно хотя бы одно утверждение. Выражение B ≡ C истинно на отрезках (-∞, 22], [32, 40] и [50, ∞). Значит, A должно быть истинно вне этого отрезка. Следовательно, A должно быть истинно на отрезке (22, 50). Его длина 50 - 22 = 28.
Ответ: 28.
Приведём решение Сергея Донец на PascalABC.NET:
begin
var B := 22..40;var C := 32..50;
var setX:=|B.First,B.Last,C.First,C.Last,-999,999|
.SelectMany(x->|x-0.1,x,x+0.1|);
setX.Order.Combinations(2).Select(m->m[0]..m[1])
.Where(A->setX.All(x->
not(x in A)<=((x in B)=(x in C))
)).Min(A->A.Size).Round.Print;
end.
Ответ: 28