ЕГЭ по информатике · задание 2

Таблица истинности: какая переменная в каком столбце

Дано логическое выражение и несколько строк его таблицы истинности, часть клеток пустая. Столбцы не подписаны. Нужно восстановить, какой переменной соответствует каждый столбец.

Логические операции

¬aотрицание, НЕ. В Python: not a
a ∧ bИ: 1, только если оба 1. a and b
a ∨ bИЛИ: 0, только если оба 0. a or b
a → bимпликация: 0, только если a = 1, b = 0. a <= b
a ≡ bэквивалентность: 1, если a и b равны. a == b

Как решать вручную

  1. Выписать все наборы, где F принимает значение из фрагмента. Их обычно мало.
  2. Найти закономерности: переменная всегда равна 1 или 0, две переменные всегда равны или всегда различаются.
  3. По известным клеткам исключить невозможные столбцы.
  4. Подобрать расстановку, проверив, что строки фрагмента не совпадают.

Типичные ошибки

  • Забыть, что строки фрагмента разные: из-за этого часто получается лишний ответ.
  • Перепутать направление импликации: 1 → 0 даёт 0, а 0 → 1 даёт 1.
  • В Python написать not a <= b без скобок: это значит not (a <= b).

Разобранные варианты

Варианты 1–10 идут от простого к сложному: первые два с тремя переменными. Сначала стоит решить самому, потом открыть разбор. В каждом разборе есть программа на Python.

Вариант 1

3 переменные

Логическая функция F задана выражением F = ¬y ≡ (¬z ∨ x). Ниже дан фрагмент её таблицы истинности: 2 различные строки, часть клеток не заполнена. Неизвестно, какой из переменных x, y, z соответствует каждый столбец. Определите это соответствие. В ответе запишите буквы x, y, z в порядке столбцов (первая буква — переменная первого столбца и т. д.), подряд, без пробелов.

Перем. 1Перем. 2Перем. 3F
011
111
Разбор

Шаг 1. Когда F = 1? Перебираем все 8 наборов значений x, y, z. F = 1 только в 4 из них. Каждая строка фрагмента — один из этих наборов.

xyzF
0001
0111
1001
1011

Шаг 2. Ищем закономерности в подходящих наборах и сравниваем со столбцами фрагмента.

Простых закономерностей нет, поэтому подбираем расстановку, сравнивая строки фрагмента с наборами из шага 1.

Шаг 3. Подбираем расстановку, чтобы каждая строка совпала с одним из наборов шага 1 и строки не повторялись. Подходит только одна; заполненные пропуски выделены:

1: y2: x3: zF
0101
0111

Ответ: yxz

Решение на Python. Программа перебирает все заполнения пропусков и все расстановки переменных; <= — это импликация, == — эквивалентность.

from itertools import product, permutations

def F(x, y, z):
    return (not y) == ((not z) or x)

answers = set()
for a1, a2 in product([0, 1], repeat=2):
    table = [(0, 1, a1),
             (a2, 1, 1)]
    if len(set(table)) < len(table):  # строки фрагмента должны быть разными
        continue
    for p in permutations('xyz'):
        if all(F(**dict(zip(p, row))) == 1 for row in table):
            answers.add(''.join(p))

print(answers)

Вариант 2

3 переменные

Логическая функция F задана выражением F = (¬y ≡ z) → (x ∧ ¬z). Ниже дан фрагмент её таблицы истинности: 3 различные строки, часть клеток не заполнена. Неизвестно, какой из переменных x, y, z соответствует каждый столбец. Определите это соответствие. В ответе запишите буквы x, y, z в порядке столбцов (первая буква — переменная первого столбца и т. д.), подряд, без пробелов.

Перем. 1Перем. 2Перем. 3F
0110
000
0
Разбор

Шаг 1. Когда F = 0? Перебираем все 8 наборов значений x, y, z. F = 0 только в 3 из них. Каждая строка фрагмента — один из этих наборов.

xyzF
0010
0100
1010

Шаг 2. Ищем закономерности в подходящих наборах и сравниваем со столбцами фрагмента.

  • В подходящих наборах y и z всегда различаются. Значит, y и z не могут занимать пары столбцов: 1 и 3; 2 и 3.

Шаг 3. Подбираем расстановку, чтобы каждая строка совпала с одним из наборов шага 1 и строки не повторялись. Подходит только одна; заполненные пропуски выделены:

1: y2: z3: xF
0110
0100
1000

Ответ: yzx

Решение на Python. Программа перебирает все заполнения пропусков и все расстановки переменных; <= — это импликация, == — эквивалентность.

from itertools import product, permutations

def F(x, y, z):
    return ((not y) == z) <= (x and (not z))

answers = set()
for a1, a2, a3, a4 in product([0, 1], repeat=4):
    table = [(0, 1, 1),
             (0, a1, 0),
             (a2, a3, a4)]
    if len(set(table)) < len(table):  # строки фрагмента должны быть разными
        continue
    for p in permutations('xyz'):
        if all(F(**dict(zip(p, row))) == 0 for row in table):
            answers.add(''.join(p))

print(answers)

Вариант 3

4 переменные

Логическая функция F задана выражением F = (¬x ∨ w) → (z → y). Ниже дан фрагмент её таблицы истинности: 3 различные строки, часть клеток не заполнена. Неизвестно, какой из переменных w, x, y, z соответствует каждый столбец. Определите это соответствие. В ответе запишите буквы w, x, y, z в порядке столбцов (первая буква — переменная первого столбца и т. д.), подряд, без пробелов.

Перем. 1Перем. 2Перем. 3Перем. 4F
000
1010
000
Разбор

Шаг 1. Когда F = 0? Перебираем все 16 наборов значений w, x, y, z. F = 0 только в 3 из них. Каждая строка фрагмента — один из этих наборов.

wxyzF
00010
10010
11010

Шаг 2. Ищем закономерности в подходящих наборах и сравниваем со столбцами фрагмента.

  • Во всех подходящих наборах y = 0. В столбцах 1 и 4 есть 1, поэтому y может стоять только в столбце 2 или 3.
  • Во всех подходящих наборах z = 1. В столбцах 2, 3 и 4 есть 0, поэтому z может стоять только в столбце 1.

Шаг 3. Подбираем расстановку, чтобы каждая строка совпала с одним из наборов шага 1 и строки не повторялись. Подходит только одна; заполненные пропуски выделены:

1: z2: y3: x4: wF
10010
10110
10000

Ответ: zyxw

Решение на Python. Программа перебирает все заполнения пропусков и все расстановки переменных; <= — это импликация, == — эквивалентность.

from itertools import product, permutations

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

answers = set()
for a1, a2, a3, a4, a5 in product([0, 1], repeat=5):
    table = [(a1, 0, 0, a2),
             (1, 0, a3, 1),
             (a4, a5, 0, 0)]
    if len(set(table)) < len(table):  # строки фрагмента должны быть разными
        continue
    for p in permutations('wxyz'):
        if all(F(**dict(zip(p, row))) == 0 for row in table):
            answers.add(''.join(p))

print(answers)

Вариант 4

4 переменные

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

Перем. 1Перем. 2Перем. 3Перем. 4F
110
010
1000
Разбор

Шаг 1. Когда F = 0? Перебираем все 16 наборов значений w, x, y, z. F = 0 только в 4 из них. Каждая строка фрагмента — один из этих наборов.

wxyzF
00000
01000
01100
10000

Шаг 2. Ищем закономерности в подходящих наборах и сравниваем со столбцами фрагмента.

  • Во всех подходящих наборах z = 0. В столбцах 1, 2 и 4 есть 1, поэтому z может стоять только в столбце 3.

Шаг 3. Подбираем расстановку, чтобы каждая строка совпала с одним из наборов шага 1 и строки не повторялись. Подходит только одна; заполненные пропуски выделены:

1: w2: y3: z4: xF
01010
00010
10000

Ответ: wyzx

Решение на Python. Программа перебирает все заполнения пропусков и все расстановки переменных; <= — это импликация, == — эквивалентность.

from itertools import product, permutations

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

answers = set()
for a1, a2, a3, a4, a5 in product([0, 1], repeat=5):
    table = [(a1, 1, a2, 1),
             (0, a3, a4, 1),
             (1, 0, 0, a5)]
    if len(set(table)) < len(table):  # строки фрагмента должны быть разными
        continue
    for p in permutations('wxyz'):
        if all(F(**dict(zip(p, row))) == 0 for row in table):
            answers.add(''.join(p))

print(answers)

Вариант 5

4 переменные

Логическая функция F задана выражением F = (w → y) → (x ≡ (z ∧ x)). Ниже дан фрагмент её таблицы истинности: 3 различные строки, часть клеток не заполнена. Неизвестно, какой из переменных w, x, y, z соответствует каждый столбец. Определите это соответствие. В ответе запишите буквы w, x, y, z в порядке столбцов (первая буква — переменная первого столбца и т. д.), подряд, без пробелов.

Перем. 1Перем. 2Перем. 3Перем. 4F
010
000
000
Разбор

Шаг 1. Когда F = 0? Перебираем все 16 наборов значений w, x, y, z. F = 0 только в 3 из них. Каждая строка фрагмента — один из этих наборов.

wxyzF
01000
01100
11100

Шаг 2. Ищем закономерности в подходящих наборах и сравниваем со столбцами фрагмента.

  • Во всех подходящих наборах x = 1. В столбцах 2, 3 и 4 есть 0, поэтому x может стоять только в столбце 1.
  • Во всех подходящих наборах z = 0. В столбце 4 есть 1, поэтому z может стоять только в столбце 1 или 2 или 3.

Шаг 3. Подбираем расстановку, чтобы каждая строка совпала с одним из наборов шага 1 и строки не повторялись. Подходит только одна; заполненные пропуски выделены:

1: x2: z3: y4: wF
10110
10000
10100

Ответ: xzyw

Решение на Python. Программа перебирает все заполнения пропусков и все расстановки переменных; <= — это импликация, == — эквивалентность.

from itertools import product, permutations

def F(w, x, y, z):
    return (w <= y) <= (x == (z and x))

answers = set()
for a1, a2, a3, a4, a5, a6 in product([0, 1], repeat=6):
    table = [(a1, 0, a2, 1),
             (a3, a4, 0, 0),
             (a5, 0, a6, 0)]
    if len(set(table)) < len(table):  # строки фрагмента должны быть разными
        continue
    for p in permutations('wxyz'):
        if all(F(**dict(zip(p, row))) == 0 for row in table):
            answers.add(''.join(p))

print(answers)

Вариант 6

4 переменные

Логическая функция F задана выражением F = ((x → w) → y) ∧ ¬z ∧ x. Ниже дан фрагмент её таблицы истинности: 3 различные строки, часть клеток не заполнена. Неизвестно, какой из переменных w, x, y, z соответствует каждый столбец. Определите это соответствие. В ответе запишите буквы w, x, y, z в порядке столбцов (первая буква — переменная первого столбца и т. д.), подряд, без пробелов.

Перем. 1Перем. 2Перем. 3Перем. 4F
101
111
001
Разбор

Шаг 1. Когда F = 1? Перебираем все 16 наборов значений w, x, y, z. F = 1 только в 3 из них. Каждая строка фрагмента — один из этих наборов.

wxyzF
01001
01101
11101

Шаг 2. Ищем закономерности в подходящих наборах и сравниваем со столбцами фрагмента.

  • Во всех подходящих наборах x = 1. В столбцах 1 и 4 есть 0, поэтому x может стоять только в столбце 2 или 3.
  • Во всех подходящих наборах z = 0. В столбцах 1, 2 и 4 есть 1, поэтому z может стоять только в столбце 3.

Шаг 3. Подбираем расстановку, чтобы каждая строка совпала с одним из наборов шага 1 и строки не повторялись. Подходит только одна; заполненные пропуски выделены:

1: y2: x3: z4: wF
11001
11011
01001

Ответ: yxzw

Решение на Python. Программа перебирает все заполнения пропусков и все расстановки переменных; <= — это импликация, == — эквивалентность.

from itertools import product, permutations

def F(w, x, y, z):
    return ((x <= w) <= y) and (not z) and x

answers = set()
for a1, a2, a3, a4, a5, a6 in product([0, 1], repeat=6):
    table = [(a1, 1, a2, 0),
             (1, a3, a4, 1),
             (0, a5, a6, 0)]
    if len(set(table)) < len(table):  # строки фрагмента должны быть разными
        continue
    for p in permutations('wxyz'):
        if all(F(**dict(zip(p, row))) == 1 for row in table):
            answers.add(''.join(p))

print(answers)

Вариант 7

4 переменные

Логическая функция F задана выражением F = z ∧ ¬((x → w) ∧ (y ∨ w)). Ниже дан фрагмент её таблицы истинности: 3 различные строки, часть клеток не заполнена. Неизвестно, какой из переменных w, x, y, z соответствует каждый столбец. Определите это соответствие. В ответе запишите буквы w, x, y, z в порядке столбцов (первая буква — переменная первого столбца и т. д.), подряд, без пробелов.

Перем. 1Перем. 2Перем. 3Перем. 4F
001
101
011
Разбор

Шаг 1. Когда F = 1? Перебираем все 16 наборов значений w, x, y, z. F = 1 только в 3 из них. Каждая строка фрагмента — один из этих наборов.

wxyzF
00011
01011
01111

Шаг 2. Ищем закономерности в подходящих наборах и сравниваем со столбцами фрагмента.

  • Во всех подходящих наборах w = 0. В столбцах 1 и 4 есть 1, поэтому w может стоять только в столбце 2 или 3.
  • Во всех подходящих наборах z = 1. В столбцах 1, 2 и 4 есть 0, поэтому z может стоять только в столбце 3.

Шаг 3. Подбираем расстановку, чтобы каждая строка совпала с одним из наборов шага 1 и строки не повторялись. Подходит только одна; заполненные пропуски выделены:

1: x2: w3: z4: yF
00101
10101
10111

Ответ: xwzy

Решение на Python. Программа перебирает все заполнения пропусков и все расстановки переменных; <= — это импликация, == — эквивалентность.

from itertools import product, permutations

def F(w, x, y, z):
    return z and (not ((x <= w) and (y or w)))

answers = set()
for a1, a2, a3, a4, a5, a6 in product([0, 1], repeat=6):
    table = [(0, 0, a1, a2),
             (1, a3, a4, 0),
             (a5, 0, a6, 1)]
    if len(set(table)) < len(table):  # строки фрагмента должны быть разными
        continue
    for p in permutations('wxyz'):
        if all(F(**dict(zip(p, row))) == 1 for row in table):
            answers.add(''.join(p))

print(answers)

Вариант 8

4 переменные

Логическая функция F задана выражением F = ¬(z ≡ (¬w ∧ x)) ∧ ((y → x) ≡ w). Ниже дан фрагмент её таблицы истинности: 3 различные строки, часть клеток не заполнена. Неизвестно, какой из переменных w, x, y, z соответствует каждый столбец. Определите это соответствие. В ответе запишите буквы w, x, y, z в порядке столбцов (первая буква — переменная первого столбца и т. д.), подряд, без пробелов.

Перем. 1Перем. 2Перем. 3Перем. 4F
011
001
101
Разбор

Шаг 1. Когда F = 1? Перебираем все 16 наборов значений w, x, y, z. F = 1 только в 4 из них. Каждая строка фрагмента — один из этих наборов.

wxyzF
00111
10011
11011
11111

Шаг 2. Ищем закономерности в подходящих наборах и сравниваем со столбцами фрагмента.

  • Во всех подходящих наборах z = 1. В столбцах 2, 3 и 4 есть 0, поэтому z может стоять только в столбце 1.

Шаг 3. Подбираем расстановку, чтобы каждая строка совпала с одним из наборов шага 1 и строки не повторялись. Подходит только одна; заполненные пропуски выделены:

1: z2: y3: w4: xF
10111
11001
10101

Ответ: zywx

Решение на Python. Программа перебирает все заполнения пропусков и все расстановки переменных; <= — это импликация, == — эквивалентность.

from itertools import product, permutations

def F(w, x, y, z):
    return (not (z == ((not w) and x))) and ((y <= x) == w)

answers = set()
for a1, a2, a3, a4, a5, a6 in product([0, 1], repeat=6):
    table = [(a1, 0, 1, a2),
             (a3, a4, 0, 0),
             (1, a5, a6, 0)]
    if len(set(table)) < len(table):  # строки фрагмента должны быть разными
        continue
    for p in permutations('wxyz'):
        if all(F(**dict(zip(p, row))) == 1 for row in table):
            answers.add(''.join(p))

print(answers)

Вариант 9

4 переменные

Логическая функция F задана выражением F = (w ∧ ¬(y ≡ x)) → (y ∧ (z ≡ ¬w)). Ниже дан фрагмент её таблицы истинности: 3 различные строки, часть клеток не заполнена. Неизвестно, какой из переменных w, x, y, z соответствует каждый столбец. Определите это соответствие. В ответе запишите буквы w, x, y, z в порядке столбцов (первая буква — переменная первого столбца и т. д.), подряд, без пробелов.

Перем. 1Перем. 2Перем. 3Перем. 4F
100
100
00
Разбор

Шаг 1. Когда F = 0? Перебираем все 16 наборов значений w, x, y, z. F = 0 только в 3 из них. Каждая строка фрагмента — один из этих наборов.

wxyzF
10110
11000
11010

Шаг 2. Ищем закономерности в подходящих наборах и сравниваем со столбцами фрагмента.

  • Во всех подходящих наборах w = 1. В столбцах 3 и 4 есть 0, поэтому w может стоять только в столбце 1 или 2.
  • В подходящих наборах x и y всегда различаются.

Шаг 3. Подбираем расстановку, чтобы каждая строка совпала с одним из наборов шага 1 и строки не повторялись. Подходит только одна; заполненные пропуски выделены:

1: w2: z3: y4: xF
11010
10010
11100

Ответ: wzyx

Решение на Python. Программа перебирает все заполнения пропусков и все расстановки переменных; <= — это импликация, == — эквивалентность.

from itertools import product, permutations

def F(w, x, y, z):
    return (w and (not (y == x))) <= (y and (z == (not w)))

answers = set()
for a1, a2, a3, a4, a5, a6, a7 in product([0, 1], repeat=7):
    table = [(1, a1, 0, a2),
             (1, a3, 0, a4),
             (a5, a6, a7, 0)]
    if len(set(table)) < len(table):  # строки фрагмента должны быть разными
        continue
    for p in permutations('wxyz'):
        if all(F(**dict(zip(p, row))) == 0 for row in table):
            answers.add(''.join(p))

print(answers)

Вариант 10

4 переменные

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

Перем. 1Перем. 2Перем. 3Перем. 4F
010
110
10
Разбор

Шаг 1. Когда F = 0? Перебираем все 16 наборов значений w, x, y, z. F = 0 только в 3 из них. Каждая строка фрагмента — один из этих наборов.

wxyzF
00010
10000
11000

Шаг 2. Ищем закономерности в подходящих наборах и сравниваем со столбцами фрагмента.

  • Во всех подходящих наборах y = 0. В столбцах 2, 3 и 4 есть 1, поэтому y может стоять только в столбце 1.
  • В подходящих наборах w и z всегда различаются. Значит, w и z не могут занимать пары столбцов: 3 и 4.

Шаг 3. Подбираем расстановку, чтобы каждая строка совпала с одним из наборов шага 1 и строки не повторялись. Подходит только одна; заполненные пропуски выделены:

1: y2: z3: x4: wF
00010
00110
01000

Ответ: yzxw

Решение на Python. Программа перебирает все заполнения пропусков и все расстановки переменных; <= — это импликация, == — эквивалентность.

from itertools import product, permutations

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

answers = set()
for a1, a2, a3, a4, a5, a6, a7 in product([0, 1], repeat=7):
    table = [(0, a1, a2, 1),
             (a3, a4, 1, 1),
             (a5, 1, a6, a7)]
    if len(set(table)) < len(table):  # строки фрагмента должны быть разными
        continue
    for p in permutations('wxyz'):
        if all(F(**dict(zip(p, row))) == 0 for row in table):
            answers.add(''.join(p))

print(answers)

Для самостоятельного решения

Варианты 11–15 без разборов. Ответ можно проверить кнопкой.

Вариант 11

4 переменные

Логическая функция F задана выражением F = z ∧ ¬((y → x) ∧ (¬w → x)). Ниже дан фрагмент её таблицы истинности: 3 различные строки, часть клеток не заполнена. Неизвестно, какой из переменных w, x, y, z соответствует каждый столбец. Определите это соответствие. В ответе запишите буквы w, x, y, z в порядке столбцов (первая буква — переменная первого столбца и т. д.), подряд, без пробелов.

Перем. 1Перем. 2Перем. 3Перем. 4F
00011
111
01

Вариант 12

4 переменные

Логическая функция F задана выражением F = x → ((y ∨ z) ∧ (¬w → ¬z)). Ниже дан фрагмент её таблицы истинности: 3 различные строки, часть клеток не заполнена. Неизвестно, какой из переменных w, x, y, z соответствует каждый столбец. Определите это соответствие. В ответе запишите буквы w, x, y, z в порядке столбцов (первая буква — переменная первого столбца и т. д.), подряд, без пробелов.

Перем. 1Перем. 2Перем. 3Перем. 4F
1110
110
00

Вариант 13

4 переменные

Логическая функция F задана выражением F = ¬(x → z) ∧ ((y ∧ ¬w) → (y → z)). Ниже дан фрагмент её таблицы истинности: 3 различные строки, часть клеток не заполнена. Неизвестно, какой из переменных w, x, y, z соответствует каждый столбец. Определите это соответствие. В ответе запишите буквы w, x, y, z в порядке столбцов (первая буква — переменная первого столбца и т. д.), подряд, без пробелов.

Перем. 1Перем. 2Перем. 3Перем. 4F
111
001
001

Вариант 14

4 переменные

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

Перем. 1Перем. 2Перем. 3Перем. 4F
10
110
110

Вариант 15

4 переменные

Логическая функция F задана выражением F = (y → x) ∧ z ∧ (¬w → (y ≡ z)). Ниже дан фрагмент её таблицы истинности: 3 различные строки, часть клеток не заполнена. Неизвестно, какой из переменных w, x, y, z соответствует каждый столбец. Определите это соответствие. В ответе запишите буквы w, x, y, z в порядке столбцов (первая буква — переменная первого столбца и т. д.), подряд, без пробелов.

Перем. 1Перем. 2Перем. 3Перем. 4F
01
001
011