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