Помогите пожалуйста решить задачу из ЕГЭ по информатике
(№ 4833) Логическая функция F задаётся выражением ((z → y) ∧ (¬ x → w)) → ((z ≡ w) ∨ (y ∧ ¬ x)). На рисунке приведён частично заполненный фрагмент таблицы истинности функции F, содержащий неповторяющиеся строки. Определите, какому столбцу таблицы истинности функции F соответствует каждая из переменных x, y, z, w.
В ответе напишите буквы x, y, z, w в том порядке, в котором идут соответствующие им столбцы. Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
таблица
По дате
По рейтингу
1234567891011121314151617
x y z w F
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1
1234567891011121314151617181920212223242526272829303132333435
from itertools import product
# выражение, определяющее функцию F
def F(x, y, z, w):
return ((z <= y) and (not x <= w)) <= ((z == w) or (y and not x))
# определяем порядок переменных
order = ['x', 'y', 'z', 'w']
# заполняем таблицу истинности
truth_table = []
for values in product([False, True], repeat=4):
row = dict(zip(order, values))
row['result'] = F(**row)
truth_table.append(row)
# сравниваем полученные значения с таблицей в задании
given_table = [
{'z': True, 'y': True, 'result': False},
{'z': True, 'y': False, 'result': False},
{'z': False, 'y': True, 'result': False},
{'z': False, 'y': False, 'result': True},
]
# определяем порядок переменных по столбцам
column_order = []
for var in order:
for i, row in enumerate(given_table):
if row[var] != truth_table[i][var]:
break
else:
column_order.append(var)
# выводим ответ
print(''.join(column_order))
Больше по теме