На числовой прямой даны два отрезка: P = [7; 68] и Q = [23; 42]. Укажите наименьшую возможную длину такого отрезка A, для которого логическое выражение
¬(x ∈ A) → (((x ∈ Q) ∧ (x ∈ P)) → (x ∈ A))
истинно (т. е. принимает значение 1) при любом значении переменной х.
Приведём решение данной задачи на языке Python.
from itertools import combinations as c
P, Q = range(7, 68), range(23, 42)
li = [range(*x) for x in c((7, 23, 42, 68), 2)]
mi = 1000
for A in li:
if all((not (x in A)) <= (((x in Q) and (x in P)) <= (x in A))\
for x in range(-3000, 3000)):
mi = min(mi, len(A))
print(mi)
Ответ: 19.
Приведём решение Сергея Донец на PascalABC.NET:
begin
var P := 7..68;var Q := 23..42;
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 ->
not(x in A)<=(((x in Q)and(x in P))<=(x in A))
)).Min(A -> A.Size).Round.Print;
end.

