Задание №2 — Построение таблицы истинности
Миша заполнял таблицу истинности функции F
но успел заполнить лишь фрагмент из трёх различных её строк, даже не указав, какому столбцу таблицы соответствует каждая из переменных w, х, у, z:
| F | ||||
| 0 | 1 | 0 | ||
| 0 | 0 | 0 | ||
| 0 | 0 | 0 | 0 |
Определите, какому столбцу таблицы соответствует каждая из переменных w, х, у, z. В ответе напишите буквы w, х, у, z в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т. д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
Пример. Функция F задана выражением зависящим от двух переменных, а фрагмент таблицы имеет следующий вид.
| F | ||
| 0 | 1 | 0 |
В этом случае первому столбцу соответствует переменная y, а второму столбцу - переменная х. В ответе следует написать: yx.
Правильный ответ
zywx
Пояснение
Решение:
Функция — это дизъюнкция, поэтому удобно смотреть, когда она равна 0: все три слагаемых должны быть нулями, то есть одновременно , и .
Во всех трёх строках фрагмента , значит, в каждой из них , и не бывает при .
Шаг 1. Находим столбец z. В столбце переменной должны стоять единицы во всех трёх строках. Третий столбец во всех строках равен 0 — не подходит. Четвёртый столбец равен 1, 0, 0 — не подходит. Второй столбец в третьей строке равен 0 — не подходит. Остаётся первый столбец: — первый столбец (и в нём всюду единицы).
Шаг 2. Находим столбец w. В столбце должны стоять нули во всех трёх строках. Четвёртый столбец содержит единицу, поэтому — это либо второй, либо третий столбец.
Шаг 3. Отбрасываем лишние варианты. Здесь важно, что Миша выписал три различные строки таблицы.
- Пусть — второй столбец. Тогда и стоят в третьем и четвёртом столбцах. Если — четвёртый, то в первой строке , а — третий столбец, там 0; получается и — противоречие. Если же — третий столбец, а — четвёртый, то во второй и третьей строках все четыре значения оказываются равны 1, 0, 0, 0, то есть строки совпадают — тоже противоречие.
- Значит, — третий столбец, а и стоят во втором и четвёртом. Если — второй, а — четвёртый, то во второй строке , поэтому ; в третьей строке тоже , а во втором столбце задан нулём. Обе строки снова превращаются в 1, 0, 0, 0 — совпадение, чего быть не может.
Остаётся единственный вариант: — четвёртый столбец, — второй. Проверим его: в первой строке , , значит, ; во второй , и можно взять равным 1; в третьей , . Получаются три различные строки, и во всех .
Итого порядок столбцов: , , , .
Тот же ответ даёт короткая программа, перебирающая все 24 расстановки переменных по столбцам:
from itertools import permutations, product
def F(x, y, z, w):
return not (not x or y) or not z or w
frag = [((None, None, 0, 1), 0),
((None, None, 0, 0), 0),
((None, 0, 0, 0), 0)]
def fits(pat, row):
return all(p is None or p == v for p, v in zip(pat, row))
for p in permutations('xyzw'):
table = []
for vals in product([0, 1], repeat=4):
d = dict(zip(p, vals))
table.append((vals, int(bool(F(d['x'], d['y'], d['z'], d['w'])))))
for tri in permutations(table, 3):
if all(fits(pat, row) and val == f
for (pat, val), (row, f) in zip(frag, tri)):
print(''.join(p))
break
Ответ: zywx