Условие: Тип 2 № 56502
• Статья подготовлена командой itpy
• Полный разбор задачи в Notion
Логическая функция F задаётся выражением:
((x → y) ∨ (z → w)) ∧ ((z ≡ y) → (w ≡ x)).
Дан частично заполненный фрагмент, содержащий неповторяющиеся строки таблицы истинности функции F.
Определите, какому столбцу таблицы истинности соответствует каждая из переменных w, x, y, z.
Решение через Python и комментарии к нему:
💡 Комментарии к коду решения:
- from itertools import * - Импортируем все функци из модуля itertools.
- def F(x, y, z, w): - Определяем функцию F с четырьмя параметрами x, y, z, w.
- return ((x <= y) or (z <= w)) and ((z == y) <= (w == x)) - Возвращаем результат логического выражения.
- for a1, a2, a3, a4 in product([0, 1], repeat=4): - Запускаем итерацию по всем возможным комбинациям 0 и 1 для переменных a1, a2, a3, a4 (кол-во переменных зависит от кол-ва пропусков в таблице).
- table = [(a1, 1, 0, a2), (0, 1, 0, 1), (a3, 1, 0, a4)] - Формируем таблицу истинности значений по заданным правилам (из условия).
- if len(set(table)) == len(table): - Проверяем, что все строки в таблице уникальны.
- for i in permutations('xyzw'): - Запускаем итерацию по всем перестановкам символов 'xyzw'.
- if [F(**dict(zip(i, r))) for r in table] == [0, 0, 0]: - Проверяем условие для текущей перестановки и таблицы значений.
- print(*i, sep='') - Выводим перестановку, удовлетворяющую условию.