Top.Mail.Ru
Ответы

Помогите пожалуйста решить задачу из ЕГЭ по информатике

(№ 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))