Задание 15
Логические выражения
Типов: 6
Как распознать
Даны B, C и неизвестный отрезок A.
Условие
Найти минимальную длину A, чтобы формула с принадлежностью отрезкам была истинна для всех x.
Разбор
Проверяй концы отрезков и соседние точки.
Шаблон
def f(x):
B = 36<=x<=75
C = 60<=x<=110
A = a1<=x<=a2
return (not A) <= (B==C)
r = []
d = [y for x in (36,60,75,110) for y in (x,x-0.1,x+0.1)]
for a1 in d:
for a2 in d:
if all(f(x) == 1 for x in d) and a2>=a1:
r += [a2-a1]
print(round(min(r)))Как распознать
Формула содержит P, Q, A и две импликации.
Условие
Найти минимальную длину A для истинности формулы при всех x.
Разбор
Перебери пары критических границ.
Шаблон
def f(x):
P = 17 <= x <= 58
Q = 29 <= x <= 80
A = a1 <= x <= a2
return P <= ((Q and (not A)) <= (not P))
r = []
d = [y for x in (17, 29, 58, 80) for y in (x, x - 0.1, x + 0.1)]
for a1 in d:
for a2 in d:
if all(f(x) == 1 for x in d) and a2 >= a1:
r += [a2 - a1]
print(round(min(r)))Как распознать
В формуле есть отрезки и квадрат переменной.
Условие
Найти минимальную длину A; область x ограничена неотрицательными числами.
Разбор
Добавь к критическим точкам корень из границы неравенства.
Шаблон
def f(x):
P = 52 <= x <= 105
Q = 0 <= x <= 53
A = a1 <= x <= a2
return ((not P) and (not Q) and (not A)) <= (x ** 2 > 303601)
r = []
d = [y for x in (0, 52, 53, 105, 303601 ** 0.5) for y in (x, x - 0.1, x + 0.1) if y >= 0]
for a1 in d:
for a2 in d:
if a2 >= a1 and all(f(x) for x in d):
r += [a2 - a1]
print(round(min(r)))Как распознать
Параметр A участвует в выражении с операцией &.
Условие
Найти наименьшее A, при котором формула истинна для каждого x.
Разбор
Перебери A и достаточно широкий диапазон x.
Шаблон
def f(x, A):
return ((x & 52 != 0) and (x & 48 == 0)) <= (not (x & A == 0))
print(min([A for A in range(0, 1000) if all(f(x, A) == 1 for x in range(0, 2000))]))Как распознать
В условии дана функция делимости ДЕЛ(x, y).
Условие
Найти наибольшее A для истинности формулы при любом натуральном x.
Разбор
Реализуй ДЕЛ через остаток и перебери A.
Шаблон
def DEL(x, y):
return x % y == 0
def f(x, A):
return ((not DEL(x, 7)) and DEL(x, 13)) <= (x > A - 40)
print(max([A for A in range(1, 1000) if all(f(x, A) == 1 for x in range(1, 2000))]))Как распознать
Формула содержит x, y и параметр A.
Условие
Найти минимальное A, при котором формула истинна для всех неотрицательных x и y.
Разбор
Полностью перебери разумные диапазоны A, x и y.
Шаблон
def f(x, y, A):
return (x <= 19) or (y < 2 * x + A - 50) or (y > 17)
print(min([A for A in range(0, 200) if all(f(x, y, A) == 1 for x in range(0, 400) for y in range(0, 400))]))