Логическая функция F задаётся выражением:
На рисунке приведён фрагмент таблицы истинности функции F, содержащий неповторяющиеся наборы аргументов.
| ? | ? | ? | ? | F |
|---|---|---|---|---|
| 0 | 0 | 0 | ||
| 0 | 1 | 0 | 1 | 0 |
| 1 | 0 | 0 |
Определите, какому столбцу таблицы соответствует каждая из переменных w, x, y, z.
В ответе запишите буквы w, x, y, z в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т. д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
Составим таблицу истинности для выражения
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):
if ((x and not (y)) or (y == z ) or not (w)) == False:
print(x, y, z, w)
Далее выпишем полученные наборы переменных. В наборах переменные запишем в порядке х, y, z, w. Получим следующие наборы:
(0, 0, 1, 1),
(0, 1, 0, 1),
(1, 1, 0, 1).
Сопоставим эти наборы с приведенным в задании фрагментом таблицы истинности.
Рассмотрим третью строку таблицы истинности. Она может соответствовать только набору (1, 1, 0, 1). Посколкьу в этом наборе z равен нулю, то третий столбец — это z.
Рассмотрим второй столбец таблицы. Все значения в нем 1. Следовательно, это столбец w.
Первый столбец соответствует x, а четвертый столбец — y.
Ответ: xwzy.
Приведём решение Евгения Джобса (аналитическое).
Проанализируем выражение и таблицу. Видим три подвыражения перечисленные через знак дизъюнкции. Все выражение для трех различных наборов имеет ложные значения.
Составим таблицы истинности для всех подвыражений, когда они ложны.
| x | y | x∧¬y |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 1 | 0 |
| y | z | y≡z |
|---|---|---|
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| ¬w | w |
|---|---|
| 1 | 0 |
Из полученных таблиц истинности выведем все возможные наборы x, y, z, w для всего выражения.
| x | y | z | w | F |
|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 | 0 |
Сопоставим полученный фрагмент с фрагментом из задания:
| ? | ? | ? | ? | F |
|---|---|---|---|---|
| 0 | 0 | 0 | ||
| 0 | 1 | 0 | 1 | 0 |
| 1 | 0 | 0 |
Заметим, что w может быть только вторым столбцом (все единицы), y — последний столбец (один ноль), z — третий столбец, так как противоположен по значению столбцу y
Приведём решение Евгения Джобса на языке Python.
Данное решение построено на переборе всех возможных пропусков во фрагменте из задания и всех возможных перестановок имен столбцов.
def f(x, y, z, w):
for x in range(0, 2):
return (x and not y) or (y == z) or not w
from itertools import *
# перебор всех пробелов
for a1, a2, a3, a4 in product([0, 1], repeat=4):
# все наборы
t = [(0,a1,a2,0),(0,1,0,1),(a3,1,0,a4)]
# проверка различности всех наборов
if len(set(t)) != len(t):
continue
# перебор всех перестановок имен столбцов
for p in permutations('xyzw'):
# проверка на совпадение результата
if [f(**dict(zip(p,r))) for r in t]==[0,0,0]:
print(*p, sep='')

