Все задачи №2
№2

Фрагмент таблицы истинности (F = 0)

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

F
010
1100
1100

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

Источник: ФИПИ (пересдача 03.07.2025), № 23548

Ответвпиши то, что вывела программа
Показать разбор
  1. Перепиши функцию на Python: → это <=, ≡ это ==, ¬ это not, ∨ это or, ∧ это and. Ставь скобки вокруг каждой операции.
  2. Перепиши фрагмент в кортеж t, последним числом в строке ставь значение F (тут везде 0).
  3. Пустых клеток 4, заполни их всеми способами через product и отбрось варианты, где строки совпали.
  4. Через permutations перебери порядок столбцов и проверь, что f на каждой строке даёт значение из таблицы.
  5. Один порядок находится при разных заполнениях, поэтому собирай его в множество. Ответ это буквы в порядке столбцов, подряд.
from itertools import product, permutations

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

ans = set()
for a, b, c, d in product([0, 1], repeat=4):
    t = (
        (0, 1, a, b, 0),
        (1, c, 1, 0, 0),
        (d, 1, 1, 0, 0),
    )
    if len(t) == len(set(t)):
        for p in permutations('xyzw'):
            if all(f(**dict(zip(p, line))) == line[-1] for line in t):
                ans.add(''.join(p))
print(*ans)