Статья Автор: Деникина Н.В., Деникин А.В.

Решение через product

От четырёх циклов к одной строке

Строка from itertools import product подключает готовый перебор наборов. Затем product((0, 1), repeat=4) берёт значения из пары (0, 1) для четырёх позиций. Он выдаёт по одному набору за раз. Например, набор (0, 1, 0, 0) цикл разложит так: x = 0, y = 1, z = 0, w = 0.

Получатся те же 16 наборов, что и в четырёх циклах. Для каждого считаем F. Внутри if F == 1 печатаем только нужные строки вместе со значением F.

Что ещё предстоит найти?

В программе порядок известен: его задаёт print(x, y, z, w, F). В условии первые четыре столбца перемешаны, а строки могут идти в другом порядке. Первая строка условия не обязана быть первой в выводе.

Сначала найдём значение, которое повторяется во всём столбце. Если подходят несколько столбцов, пока сохраним все варианты. Чтобы различить оставшиеся буквы, сравним два числа в одной строке.


ЕГЭ-2024

Дано в задании

F = (¬x ∧ y ∧ z ∧ ¬w) ∨ (¬x ∧ y ∧ ¬z ∧ ¬w) ∨ (x ∧ y ∧ z ∧ ¬w)

Даны три разные строки. Точка — неизвестное значение: 0 или 1. Каждая из переменных x, y, z, w занимает свой столбец. Нужно назвать их слева направо.

№1№2№3№4F
1···1
0·1·1
·00·1
Как записать формулу в Python

Каждая скобка становится отдельной строкой. Вместо ∧ пишем and, вместо ∨ — or, а ¬w читаем как not w. Функция int превращает результат проверки в число: 1 или 0.



Точка — пока неизвестно. Выделенные цветом 0 и 1 — значения, которые уже удалось доказать.

Найдём постоянные значения

Посмотрим на вывод программы: у y во всех строках стоит 1, а у w — 0. Эти значения сохраняются и в соответствующих столбцах условия.

Для y не подходят столбцы с известными нулями, для w — с единицами. Сопоставим оба признака с условием и начнём с переменной, для которой остаётся одно место.

Вывод Python · только F = 1
xyzwF
01001
01101
11101
Фрагмент из условия
№1№2№3№4F
1···1
0·1·1
·00·1
Определим место y

В первом столбце условия есть 0 во второй строке. Во втором и третьем — 0 в третьей строке. Все три столбца исключаются: y должен содержать только единицы. В четвёртом столбце значения не указаны, поэтому он допускает три единицы.

Для y остаётся только четвёртый столбец. Заполним его единицами.

Вывод Python · только F = 1
xyzwF
01001
01101
11101
Фрагмент из условия
№1не y№2не y№3не yyF
1··11
0·111
·0011

y → 4-й столбец

Определим место w

У w во всех строках нули. Первый и третий столбцы содержат единицы, поэтому не подходят. Четвёртый уже определён как y и заполнен единицами.

Для w остаётся второй столбец. Заполним два пропуска нулями; ноль в третьей строке уже дан.

Вывод Python · только F = 1
xyzwF
01001
01101
11101
Фрагмент из условия
№1не ww№3не wyF
10·11
00111
·0011

w → 2-й столбец

Проверим один из двух порядков

Остались x и z. Во второй строке условия в первом столбце 0, в третьем 1. Предположим, что первый столбец — z, а третий — x. Тогда x = 1 и z = 0.

В выводе есть только одна строка с x = 1, и в ней z = 1. Значит, проверяемый порядок невозможен. Остаётся x первым, z третьим.

Вывод Python · только F = 1
xyzwF
01001
01101
11101
Фрагмент из условия
xwzyF
10·11
00111
·0011

x → 1-й столбец · z → 3-й столбец

Сверим три строки

В первой строке x = 1, поэтому z = 1. В третьей z = 0, поэтому x = 0. Во второй x и z уже даны.

Три строки различны и совпадают с наборами из вывода. Запишем подписи слева направо.

Вывод Python · только F = 1
xyzwF
01001
01101
11101
Фрагмент из условия
xwzyF
10111
00111
00011

Ответ: xwzy


ЕГЭ-2025

Дано в задании

F = x ∧ (z → w) ∧ ¬y

Даны три разные строки. Точка — неизвестное значение: 0 или 1. Каждая из переменных x, y, z, w занимает свой столбец. Нужно назвать их слева направо.

№1№2№3№4F
··1·1
·10·1
10··1
Как записать формулу в Python

Выражение z → w ложно только при z = 1 и w = 0. Значит, оно истинно, если z = 0 или w = 1. Так получается запись (not z or w). Функция int превращает результат проверки в число: 1 или 0.



Точка — пока неизвестно. Выделенные цветом 0 и 1 — значения, которые уже удалось доказать.

Найдём постоянные значения

Посмотрим на постоянные значения в выводе программы: x содержит только единицы, y — только нули. Найдём в условии столбцы, которые допускают такие значения.

Сначала отметим столбцы, в которых уже есть и 0, и 1: для постоянных x и y они не подходят.

Вывод Python · только F = 1
xyzwF
10001
10011
10111
Фрагмент из условия
№1№2№3№4F
··1·1
·10·1
10··1
Где остались места для x и y?

Во втором столбце видны 1 и 0. В третьем тоже видны 1 и 0. Поэтому постоянные x и y могут занимать только первый и четвёртый столбцы.

В первом уже есть 1 в третьей строке. Это исключает y, у которого всегда 0. Получаем x в первом, а y в четвёртом.

Вывод Python · только F = 1
xyzwF
10001
10011
10111
Фрагмент из условия
x№2№3yF
1·101
11001
10·01

x → 1-й столбец · y → 4-й столбец

Проверим оставшиеся две подписи

Во второй строке условия второй столбец равен 1, третий равен 0. Если второй назвать z, а третий w, то пара (z, w) должна быть (1, 0).

Сравним с парами (z, w) в выводе: (0, 0), (0, 1), (1, 1). Пары (1, 0) нет. Поэтому второй — w, третий — z. Четвёртый для w уже исключён: его занимает y.

Вывод Python · только F = 1
xyzwF
10001
10011
10111
Фрагмент из условия
xwzyF
1·101
11001
10·01

w → 2-й столбец · z → 3-й столбец

Заполним оставшиеся клетки

В первой строке z = 1. В выводе только одна такая строка, и в ней w = 1. В третьей строке w = 0. Только один набор имеет w = 0, и там z = 0.

Каждой строке условия соответствует отдельный набор из вывода. Запишем ответ в порядке столбцов условия.

Вывод Python · только F = 1
xyzwF
10001
10011
10111
Фрагмент из условия
xwzyF
11101
11001
10001

Ответ: xwzy


ЕГЭ-2026

Дано в задании

F = (x → y) ∧ (y → z) ∧ (z → w)

Даны три разные строки. Точка — неизвестное значение: 0 или 1. Каждая из переменных x, y, z, w занимает свой столбец. Нужно назвать их слева направо.

№1№2№3№4F
0··11
1·011
·1·01
Как записать формулу в Python

Заменяем каждое A → B на (not A or B): это выражение ложно только при A = 1 и B = 0. Три скобки соединяем через and. Функция int превращает результат проверки в число: 1 или 0.



Точка — пока неизвестно. Выделенные цветом 0 и 1 — значения, которые уже удалось доказать.

Какие наборы можно исключить сразу?

Во всех трёх строках условия уже видны и 0, и 1. Перестановка столбцов этого не изменит.

0000 не подходит ни одной строке: в нём нет единицы. 1111 тоже не подходит: в нём нет нуля. Остаются 0001, 0011, 0111.

Вывод Python · только F = 1
xyzwF
00001
00011
00111
01111
11111
Фрагмент из условия
№1№2№3№4F
0··11
1·011
·1·01
Сравним оставшиеся наборы

Во всех трёх оставшихся наборах w = 1. В условии первый столбец содержит 0 в первой строке, третий — 0 во второй, четвёртый — 0 в третьей.

Только второй столбец допускает три единицы. Он и есть w.

Вывод Python · только F = 1
xyzwF
00001
00011
00111
01111
11111
Фрагмент из условия
№1w№3№4F
01·11
11011
·1·01

w → 2-й столбец

Найдём постоянный ноль

В тех же трёх наборах x = 0. В первом столбце условия есть 1 во второй строке, во втором — 1 в третьей, в четвёртом — 1 в первой.

Для x подходит только третий столбец. Заполним его нулями.

Вывод Python · только F = 1
xyzwF
00001
00011
00111
01111
11111
Фрагмент из условия
№1wx№4F
01011
11011
·1001

x → 3-й столбец

Проверим порядок y и z

В первой строке первый столбец равен 0, четвёртый равен 1. Если первый — z, а четвёртый — y, получаем y = 1, z = 0.

Но пары (y, z) в оставшемся выводе — (0, 0), (0, 1), (1, 1). Пары (1, 0) нет. Значит, первый — y, четвёртый — z.

Вывод Python · только F = 1
xyzwF
00001
00011
00111
01111
11111
Фрагмент из условия
ywxzF
01011
11011
·1001

y → 1-й столбец · z → 4-й столбец

Восстановим значение по строке

В третьей строке z = 0. Только набор 0001 имеет такой z. В нём y = 0, поэтому в первую клетку третьей строки вписываем 0.

Первая строка соответствует 0011, вторая — 0111, третья — 0001. Все три исходные строки различны.

Вывод Python · только F = 1
xyzwF
00001
00011
00111
01111
11111
Фрагмент из условия
ywxzF
01011
11011
01001

Ответ: ywxz


Проверим понимание

В задаче 2026 программа вывела пять строк с F = 1, а в условии их три. Нужно ли брать первые три строки вывода?

Печать