Задание 2 КЕГЭ: дана часть таблицы истинности — как определить, какому столбцу какая переменная?
В задании 2 дают логическое выражение и кусок таблицы истинности, где столбцы переменных перемешаны (подписаны не x1, x2, а как попало), плюс есть строки, для которых выражение истинно. Надо понять, в каком порядке идут переменные. Я понимаю, как строить таблицу истинности, но вот этот "матчинг столбцов" меня убивает. Как действовать?
2 ответа
Идея: построй на питоне ВСЕ строки, на которых выражение истинно, а потом сопоставь их с данным фрагментом таблицы.
from itertools import product
# выражение, например: (x1 -> x2) and (x2 -> x3) and (x3 -> x4)
for vals in product([0, 1], repeat=4):
x1, x2, x3, x4 = vals
F = (not x1 or x2) and (not x2 or x3) and (not x3 or x4)
if F:
print(vals) # печатаем только истинные наборы
Теперь у тебя список истинных наборов, например (0,0,0,0), (0,0,0,1)... В задании дан фрагмент с такими же строками, но столбцы переставлены. Сопоставляй:
- Возьми строки фрагмента (значения 0/1 по неизвестным столбцам).
- Найди, какая перестановка столбцов превращает их в строки из твоего вывода.
- Часто хватает уникальных строк: если в твоём списке есть строка с единственной единицей в позиции x3 — она однозначно ловит, где столбец x3 во фрагменте.
То есть код даёт эталон, а ты подбираешь перестановку столбцов под эталон.
Практический способ матчинга без полного перебора перестановок: посчитай в эталонных истинных наборах, сколько единиц в каждом столбце (x1, x2, x3, x4). Потом во фрагменте задания посчитай число единиц в каждом данном столбце. Столбец эталона и столбец фрагмента с одинаковым числом единиц — кандидаты на совпадение. Если числа единиц у всех переменных разные — задача решается сразу однозначно. Если совпадают — добивай по конкретным строкам.