Teacher & coder

Задача № 161

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

\[ w \land (x \rightarrow y) \land (\neg y \land z \lor y \land \neg z) \]

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

????F
00  1
 0011
1 011

Определите, какому столбцу таблицы соответствует каждая из переменных \( w \), \( x \), \( y \), \( z \).

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

Пример. Функция \( F \) задана выражением \( ¬x \lor y \), зависящим от двух переменных, а фрагмент таблицы имеет следующий вид.

??F
010

В этом случае первому столбцу соответствует переменная \( y \), а второму столбцу - переменная \( x \). В ответе следует написать: \( yx \).

Можно скопировать и вставить все ответы сразу
ЕГКР 27 апреля 2024 года (Московский пробник)
Прокрути, чтобы прочитать решение задачи
Ты уверен, что хочешь это сделать?
Удачного чтения!

Решение

Код из видео

# подключаем стандартные библиотеки
from itertools import permutations, product

# напишем функцию, которая получает переменные и возвращает результат функции
def f(x, y, z, w):
    return int( w and (x <= y) and ((not y) and z or y and (not z)))


# заполним пропуски в таблице
# с помощью product рассмотрим все возможные варианты таблиц
for a1, a2, a3, a4 in product((0,1), repeat=4):
    table = (
        (0,0,a1,a2),
        (a3,0,0,1),
        (1,a4,0,1),
    )

    # по условию задачи строки таблицы неповторяющиеся
    # проверяем это условие и пропускаем повторяющиеся
    if len(table) != len(set(table)): continue

    # рассматриваем все перестановки для переменных
    for vars in permutations('xyzw'):
        # если при такой перестановке все строки дали нужный
        # выводим ответ
        if [f(**dict(zip(vars, row))) for row in table] == [1,1,1]:
            # звездочка нужна, чтобы не видеть лишних символов
            print(*vars)
    

Артём Зинкин

Лучше не гуглить и подумать самостоятельно. Тест можно пройти несколько раз :)
Чтобы поделиться задачей с коллегами или друзьями, отправьте им ссылку :)
Забыл сказать, что у этой задачи есть подробное решение. Посмотрите его :)
Попробуйте решить эту задачу сами и посмотрите наши разборы похожих задач :)
Кстати, на ЕГЭ тоже нельзя копировать :)
Этим материалом удобно поделиться по прямой ссылке :)