Миша заполнял таблицу истинности логической функции F
но успел заполнить лишь фрагмент из четырёх различных её строк, даже не указав, какому столбцу таблицы соответствует каждая из переменных ,
,
,
.
??? | ??? | ??? | ??? | f |
1 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | ||
1 | 1 | 0 | 0 | 1 |
0 | 0 | 1 | ||
0 | 1 | 0 | 0 | 1 |
Определите, какому столбцу таблицы соответствует каждая из переменных ,
,
,
. В ответе напишите буквы
,
,
,
в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т.д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
Решение 1
def f(x, y, z, w):
return (not(x) or w) and (not(z) or y) and (not(y) or x)
print("x y z w")
a = (0, 1)
for x in a:
for y in a:
for z in a:
for w in a:
if f(x, y, z, w) == 1:
print(x, y, z, w)
Запустим программу и получим такой вывод:
x y z w
0 0 0 0
0 0 0 1
1 0 0 1
1 1 0 1
1 1 1 1
Заметим, что в сходной таблице отсутствуют строки, полностью заполненные нулями и единицами, а в получившейся они есть, значит 2-я строка будет состоять полностью из единиц, а 4-я полностью из нулей после заполнения пропусков. w поставим на 2-е место, так как только у нее есть четыре единицы. По соответствующим признакам x поставим на 1-е место, z на 3-е и y на 4-е.
Решение 2
from itertools import *
def f(w, x, y, z):
return (x <= w) and (not(z) or y) and (y <= x)
for i in product([0, 1], repeat=4):
a, b, c, d = i
tb = [(1, 1, 0, 1), (a, b, 1, 1), (1, 1, 0, 0), (0, 0, c, d), (0, 1, 0, 0)]
if len(set(tb)) == 5:
for j in permutations(list(’wxyz’)):
t = [f(**dict(zip(j, k))) for k in tb]
if t == [1, 1, 1, 1, 1]:
print(j)