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