Помогите найти ошибку в коде для 2-ого задания ЕГЭ на языке Python
from itertools import product, permutations
def F1(x, y, z, w):
return (x <= y) == (z <= w)
def F2(x, y, z, w):
return (x <= y) == ((not w) == z)
for x1,x2,x3,x4,x5 in product([0, 1], repeat=5):
t=(
(0,x1,0,0,0,x2),
(0,x3,1,1,x4,0),
(0,0,x5,0,0,1)
)
if len(t) == len(set(t)):
for p in permutations('xyzw',r=4):
if [F1(**dict(zip(p, m))) for m in t] == [F2(**dict(zip(p, m))) for m in t]:
print(*p)
Само задание:
Ответы (2 шт):
Вот тут if [F1(...) ...] == [F2(...) ...]: вы предполагаете что F1 = F2. Но этого нет в условии. Более того в третьей строке таблицы истинности прямо сказано, что они не равны.
С другой стороны, вы не проверяете что вычисленные значения совпадают с двумя последними столбцами таблицы.
Функция F2 записана с ошибкой: == → and.
И правильный ответ может быть выведен несколько раз.
from itertools import product, permutations
def F1(x, y, z, w):
return (x <= y) == (z <= w)
def F2(x, y, z, w):
return (x <= y) and ((not w) == z)
answer = set()
for x1, x2, x3, x4, x5 in product([0, 1], repeat=5):
t = (
(0, x1, 0, 0, 0, x2),
(0, x3, 1, 1, x4, 0),
(0, 0, x5, 0, 0, 1)
)
if len(t) == len(set(t)):
for p in permutations('xyzw', r=4):
if all(F1(**dict(zip(p, xyzw))) == f1 for *xyzw, f1, _ in t):
if all(F2(**dict(zip(p, xyzw))) == f2 for *xyzw, _, f2 in t):
answer.add(p)
for p in answer:
print(*p, sep='')
$ python temp.py yxzw
Пустоты в матрице заполняем None, в т.ч. в полях F1 и F2. В двойном цикле перебираем сначала сочетания возможных значений 3-х переменных (именно столько пустот в столбцах с переменными - ведь подбираем именно их), затем сочетания индексов переменных, которые передаем аргументами в функции. При нахождении первого случая, когда значения функция по имеющейся таблице истинности во всех 3-х строках совпали, печатаем и выходим из циклов.
from itertools import product, permutations
def F1(x, y, z, w):
return (x <= y) == (z <= w)
def F2(x, y, z, w):
return (x <= y) and ((not w) == z)
def find_vars():
t = ([0, None, 0, 0, 0, None],
[0, None, 1, 1, None, 0],
[0, 0, None, 0, 0, 1])
for a, b, c in product([0, 1], repeat=3):
t[0][1], t[1][1], t[2][2] = a, b, c
for p in permutations(range(4), r=4):
cnt = 0
for row in t:
arg = [row[x] for x in p]
cnt += (row[-2] in (F1(*arg), None)) and (row[-1] in (F2(*arg), None))
if cnt == len(t):
print(''.join('xyzw'[i] for i in p))
return
find_vars()
yxzw
