Информатика · 11 класс Задача №3673167
А
А
Краткий ответ
- xzyw
- zyxw
- zxwy
Ключевой принцип
Импликация \(a \to b\) ложна только при \(a=1,\ b=0\).
Если \(F\) — дизъюнкция и \(F=0\), то все её части должны быть равны нулю.
Задание 1
\[ F=(y\to\neg(x\to z))\lor w \]
При \(F=0\):
- \(w=0\);
- \(y\to\neg(x\to z)=0\), значит \(y=1\);
- \(x\to z=1\).
По таблице:
- третий столбец — \(y\);
- четвёртый — \(w\);
- в строке \(0,1\) первый столбец — \(x\), второй — \(z\).
Ответ: xzyw.
Задание 2
\[ F=\neg(x\to y)\lor(z\equiv w)\lor z \]
При \(F=0\):
- \(x\to y=1\);
- \(z\ne w\);
- \(z=0\), поэтому \(w=1\).
По таблице:
- первый столбец — \(z\);
- четвёртый — \(w\);
- в третьей строке \(c_2=1,\ c_3=0\), поэтому \(c_2=y,\ c_3=x\).
Ответ: zyxw.
Задание 3
\[ F=\neg(z\to x)\lor(y\to w)\lor\neg y \]
При \(F=0\):
- \(z\to x=1\);
- \(y=1\);
- \(w=0\).
По таблице:
- четвёртый столбец — \(y\);
- третий — \(w\);
- в первой строке \(c_1=0,\ c_2=1\), поэтому \(c_1=z,\ c_2=x\).
Ответ: zxwy.
Код на Python для всех трёх заданий
from itertools import permutations, product
def implication(a, b):
return (not a) or b
# Задание 1:
# F = (y -> ¬(x -> z)) ∨ w
def f1(v):
return (
implication(v["y"], not implication(v["x"], v["z"]))
or bool(v["w"])
)
# Задание 2:
# F = ¬(x -> y) ∨ (z ≡ w) ∨ z
def f2(v):
return (
(not implication(v["x"], v["y"]))
or (v["z"] == v["w"])
or bool(v["z"])
)
# Задание 3:
# F = ¬(z -> x) ∨ (y -> w) ∨ ¬y
def f3(v):
return (
(not implication(v["z"], v["x"]))
or implication(v["y"], v["w"])
or (not bool(v["y"]))
)
# None означает пустую клетку в таблице
tables = [
(
f1,
[
(None, 0, None, None),
(0, 1, None, None),
(1, None, None, 0),
],
"xzyw",
),
(
f2,
[
(0, 0, None, None),
(None, None, 1, None),
(None, 1, 0, None),
],
"zyxw",
),
(
f3,
[
(0, 1, None, None),
(None, 0, None, None),
(1, None, 0, None),
],
"zxwy",
),
]
def find_order(function, table):
result = []
# Перебираем все 24 порядка переменных
for order in permutations("xyzw"):
valid_order = True
for row in table:
row_has_solution = False
# Перебираем значения пустых клеток
for bits in product((0, 1), repeat=4):
matches = all(
cell is None or cell == bits[i]
for i, cell in enumerate(row)
)
if not matches:
continue
values = dict(zip(order, bits))
# Во всех строках таблицы F = 0
if not function(values):
row_has_solution = True
break
if not row_has_solution:
valid_order = False
break
if valid_order:
result.append("".join(order))
return result
correct_answers = ["xzyw", "zyxw", "zxwy"]
for number, ((function, table, expected), correct) in enumerate(
zip(tables, correct_answers), start=1
):
answer = find_order(function, table)
assert answer == [expected]
print(f"{number}: {answer[0]}")
Вывод программы:
1: xzyw
2: zyxw
3: zxwy
