Две логические функции заданы выражениями:
Дан частично заполненный фрагмент, содержащий неповторяющиеся строки таблицы истинности обеих функций.
Определите, какому столбцу таблицы истинности соответствует каждая из переменных w, x, y, z.
| ??? | ??? | ??? | ??? | F1 | F2 |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | ||
| 0 | 0 | 0 | 0 | 1 | |
| 1 | 1 | 0 | 0 |
В ответе напишите буквы x, y, z, w в том порядке, в котором идут соответствующие им столбцы (сначала — буква, соответствующая первому столбцу; затем — буква, соответствующая второму столбцу, и т. д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
Пример. Пусть задано выражение x → y, зависящее от двух переменных x и y, и фрагмент таблицы истинности:
| Переменная 1 | Переменная 2 | Функция |
|---|---|---|
| ??? | ??? | F |
| 0 | 1 | 0 |
Тогда первому столбцу соответствует переменная y, а второму столбцу соответствует переменная x. В ответе нужно написать: yx.
Составим таблицу истинности для исходных выражений при помощи языка Python:
def f_1(x, y, z, w):
if ((x or not(y)) == (z <= w )) == 1:
return 1
else:
return 0
def f_2(x, y, z, w):
if ((not(x) == y) and (z <= w)) == 1:
return 1
else:
return 0
print('x y z w f1 f2')
for x in range(2):
for y in range(2):
for z in range(2):
for w in range(2):
print(x, y, z, w, ' ', f_1(x, y, z, w), ' ',f_2(x, y, z, w))
Мы получили 16 наборов. Рассмотрим вторую строку таблицы, в ней значение первой функции равно 0, а значение второй — 1, при этом три переменные принимают значение 0. Это возможно только в одном случае (0, 1, 0, 0), то есть y соответствует третий столбец.
Теперь найдем случай, при котором первая функция принимает значение 0, y принимает значение 0, и ещё две переменные принимают значение 0. Это возможно только в одном случае (0, 0, 1, 0), то есть z соответствует первый столбец.
Теперь найдем случай, при котором вторая функция принимает значение 0, z принимает любое значение, y принимает значение 1, одна переменная принимает значение 1, и ещё одна принимает значение 0. Это возможно только в случаях (1, 1, 1, 0) и (1, 1, 0, 0), в обоих случаях одна переменная равна 0, вторая — 1, то есть x соответствует второй столбец, и w соответствует четвертый столбец.
Таким образом, z соответствует первый столбец, x — второй, y — третий, w — четвертый.
Ответ: zxyw.
Приведем решение Ильи Крылова на языке Python:
print("x y z w")
for x in range(0,2):
for y in range(0,2):
for z in range(0,2):
for w in range(0,2):
result1 = bool((x or not(y))==(z <= w))
result2 = bool((not(x)==y)and(z<=w))
if (result1 == True) and (result2 == True):
continue
print(x,y,z,w,' ',int(result1),int(result2))

