На числовой прямой даны два отрезка: P = [25; 40] и Q = [11; 32]. Укажите наименьшую возможную длину такого отрезка A, для которого логическое выражение
(x ∈ P) → (((x ∈ Q) ∧ (x ∈ P)) → (x ∈ A))
истинно (т. е. принимает значение 1) при любом значении переменной х.
Приведём решение на языке Python.
from itertools import combinations as c
P, Q = range(25, 40), range(11, 32)
li = [range(*x) for x in c((11, 25, 32, 40), 2)]
mi = 1000
for A in li:
if all((x in P) <= (((x in Q) and (x in P)) <= (x in A))\
for x in range(-3000, 3000)):
mi = min(mi, len(A))
print(mi)
Ответ: 7.
Приведём решение Сергея Донец на PascalABC.NET:
begin
var P := 25..40;var Q := 11..32;
var setX := |P.First,P.Last,Q.First,Q.Last,-99999,99999|
.SelectMany(x -> |x - 0.1, x, x + 0.1|);
setX.Order.Combinations(2).Select(m -> m[0]..m[1])
.Where(A -> setX.All(x ->
(x in P)<=(((x in Q)and(x in P))<=(x in A))
)).Min(A -> A.Size).Print;
end.

