Задача к ЕГЭ по информатике на тему «частично заполненный фрагмент таблицы» №3

Миша заполнял таблицу истинности логической функции F

(x → w) ∧(¬z ∨y) ∧(y → x)

но успел заполнить лишь фрагмент из четырёх различных её строк, даже не указав, какому столбцу таблицы соответствует каждая из переменных w  , x  , y  , z  .

??? ??? ??? ??? f
1 1 0 1 1
1 1 1
1 1 0 0 1
0 0 1
0 1 0 0 1

Определите, какому столбцу таблицы соответствует каждая из переменных w  , x  , y  , z  . В ответе напишите буквы w  , x  , y  , z  в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т.д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.

Решение 1

def f(x, y, z, w):
    return (not(x) or w) and (not(z) or y) and (not(y) or x)

print("x y z w")
a = (0, 1)
for x in a:
    for y in a:
        for z in a:
            for w in a:
                if f(x, y, z, w) == 1:
                    print(x, y, z, w)

Запустим программу и получим такой вывод:

x y z w

0 0 0 0

0 0 0 1

1 0 0 1

1 1 0 1

1 1 1 1

Заметим, что в сходной таблице отсутствуют строки, полностью заполненные нулями и единицами, а в получившейся они есть, значит 2-я строка будет состоять полностью из единиц, а 4-я полностью из нулей после заполнения пропусков. w поставим на 2-е место, так как только у нее есть четыре единицы. По соответствующим признакам x поставим на 1-е место, z на 3-е и y на 4-е.

Решение 2

from itertools import *

def f(w, x, y, z):
    return (x <= w) and (not(z) or y) and (y <= x)

for i in product([0, 1], repeat=4):
    a, b, c, d = i
    tb = [(1, 1, 0, 1), (a, b, 1, 1), (1, 1, 0, 0), (0, 0, c, d), (0, 1, 0, 0)]
    if len(set(tb)) == 5:
        for j in permutations(list(’wxyz’)):
            t = [f(**dict(zip(j, k))) for k in tb]
            if t == [1, 1, 1, 1, 1]:
                print(j)

Ответ: xwzy
Оцените статью
Я решу все!