Автор: Демоверсия 2025
Уровень: Базовый
Условие задачи:
Миша заполнял таблицу истинности логической функции F=((w→y)→x)∨¬z, но успел заполнить лишь фрагмент из трёх различных её строк, даже не указав, какому столбцу таблицы соответствует каждая из переменных w, x, y, z.
Теоретическая справка:
Базовой код, позволяет третий год подряд решать 2 номер ЕГЭ без особых проблем.
Код решения:
Комментарии к коду:
- from itertools import *
Импортируем все функции из модуля itertools, который предоставляет инструменты для работы с итерациями, включая произведение и перестановки. - def F(x, y, z, w):
Определяем функцию F, которая принимает четыре аргумента x, y, z и w. - return ((w <= y) <= x) or (not z)
Возвращаем результат логического выражения, которое проверяет две условия: первое - сравнение w и y, затем с x, и второе - отрицание z. - for a1, a2, a3, a4, a5, a6, a7 in product([0, 1], repeat=7):
Генерируем все возможные комбинации из 7 бит (0 и 1) и проходим по ним, присваивая значения переменным a1 до a7. - table = [(a1, a2, 1, a3), (a4, 0, a5, a6), (a7, 1, 0, 0)]
Создаем список table, состоящий из трех кортежей. Первый кортеж состоит из a1, a2, 1 и a3, второй - из a4, 0, a5 и a6, третий - из a7, 1, 0 и 0. - if len(set(table)) == len(table):
Проверяем, все ли кортежи в table уникальны, сравнивая длину множества уникальных элементов и длину самого списка table. - for i in permutations('xyzw'):
Проходим по всем перестановкам строк 'xyzw', присваивая текущую перестановку переменной i. - if [F(**dict(zip(i, r))) for r in table] == [0, 0, 0]:
Создаем список, применяя функцию F к каждой строке table с использованием текущей перестановки i. Мы создаем словарь с парами (ключ, значение) с помощью zip и распаковываем его в функцию F. Сравниваем результат с списком [0, 0, 0], который обозначает, что все результаты функции F должны быть нулем. - print(*i, sep='')
Если условие выполнено, печатаем текущую перестановку i, разделяя элементы пробелами.