Программное решение при помощи перебора:
for x in range(2):
for y in range(2):
for z in range(2):
for w in range(2):
f1 = (x <= y) or ((not w) == z)
f2 = (x <= y) == (w and not z)
if f1 == f2:
print(x, y, z, w)Программа выведет в результате для соответствующих столбцов x,y,z,w:
0 0 0 1
0 1 0 1
1 0 1 0
1 1 0 1
Единственный столбец с тремя нулями z может соответствовать только последнему столбцу в исходной таблице, тогда лишнюю строку, где z=1 уберём.
Обновим данные в соответствии с выше указанным выводом:
x y w z
0 0 1 0
0 1 1 0
1 1 1 0
Столбец с тремя единицами w может стоять только первым в исходной таблице, так как в остальных столбцах есть уже по нулю.
Обновим данные в соответствии с выше указанным выводом:
w x y z
1 0 0 0
1 0 1 0
1 1 1 0
Столбец с двумя нулями x может стоять только третьим в исходной таблице, а столбец y - вторым.
Ответ: wyxz.
Программное решение при помощи генерации комбинаций:
from itertools import product, permutations
def f1(x, y, z, w):
return (x <= y) or ((not w) == z)
def f2(x, y, z, w):
return (x <= y) == (w and not z)
combs = [list(map(int, c)) for c in product('01', repeat=6)]
for c1, c2, c3, c4, c5, c6 in combs:
t = [(c1, c2, c3, 0), (c4, c5, 0, 0), (c6, 0, 0, 0)]
if len(t) == len(set(t)):
for xyzw in permutations('xyzw'):
res1 = [f1(**dict(zip(xyzw, r))) for r in t]
res2 = [f2(**dict(zip(xyzw, r))) for r in t]
if res1 == res2:
print(xyzw)Ответ: wyxz.