def implication(a, b):
return not a or b
# полная таблица истинности (как в вашем коде)
table = []
for x in (0, 1):
for y in (0, 1):
for z in (0, 1):
for w in (0, 1):
f1 = int(implication(w, y) == implication(z, x))
f2 = int(implication(w, y) and (not x) == z)
table.append({'x': x, 'y': y, 'z': z, 'w': w, 'f1': f1, 'f2': f2})
# фрагмент из задания ('?' - пусто)
rows = [
[0, '?', 0, 0, 0, 1],
[0, 0, 0, '?', 0, '?'],
[0, 1, 1, '?', '?', 0],
]
# перебираем, какая переменная в каком столбце
for a in 'xyzw':
for b in 'xyzw':
for c in 'xyzw':
for d in 'xyzw':
if len({a, b, c, d}) < 4:
continue
cols = [a, b, c, d, 'f1', 'f2']
ok = True
for row in rows:
found = False
for t in table:
match = True
for i in range(6):
if row[i] != '?' and row[i] != t[cols[i]]:
match = False
if match:
found = True
if not found:
ok = False
if ok:
print(a + b + c + d)
ZGVmIGltcGxpY2F0aW9uKGEsIGIpOgogICAgcmV0dXJuIG5vdCBhIG9yIGIKCiMg0L/QvtC70L3QsNGPINGC0LDQsdC70LjRhtCwINC40YHRgtC40L3QvdC+0YHRgtC4ICjQutCw0Log0LIg0LLQsNGI0LXQvCDQutC+0LTQtSkKdGFibGUgPSBbXQpmb3IgeCBpbiAoMCwgMSk6CiAgICBmb3IgeSBpbiAoMCwgMSk6CiAgICAgICAgZm9yIHogaW4gKDAsIDEpOgogICAgICAgICAgICBmb3IgdyBpbiAoMCwgMSk6CiAgICAgICAgICAgICAgICBmMSA9IGludChpbXBsaWNhdGlvbih3LCB5KSA9PSBpbXBsaWNhdGlvbih6LCB4KSkKICAgICAgICAgICAgICAgIGYyID0gaW50KGltcGxpY2F0aW9uKHcsIHkpIGFuZCAobm90IHgpID09IHopCiAgICAgICAgICAgICAgICB0YWJsZS5hcHBlbmQoeyd4JzogeCwgJ3knOiB5LCAneic6IHosICd3JzogdywgJ2YxJzogZjEsICdmMic6IGYyfSkKCiMg0YTRgNCw0LPQvNC10L3RgiDQuNC3INC30LDQtNCw0L3QuNGPICgnPycgLSDQv9GD0YHRgtC+KQpyb3dzID0gWwogICAgWzAsICc/JywgMCwgMCwgMCwgMV0sCiAgICBbMCwgMCwgMCwgJz8nLCAwLCAnPyddLAogICAgWzAsIDEsIDEsICc/JywgJz8nLCAwXSwKXQoKIyDQv9C10YDQtdCx0LjRgNCw0LXQvCwg0LrQsNC60LDRjyDQv9C10YDQtdC80LXQvdC90LDRjyDQsiDQutCw0LrQvtC8INGB0YLQvtC70LHRhtC1CmZvciBhIGluICd4eXp3JzoKICAgIGZvciBiIGluICd4eXp3JzoKICAgICAgICBmb3IgYyBpbiAneHl6dyc6CiAgICAgICAgICAgIGZvciBkIGluICd4eXp3JzoKICAgICAgICAgICAgICAgIGlmIGxlbih7YSwgYiwgYywgZH0pIDwgNDoKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgY29scyA9IFthLCBiLCBjLCBkLCAnZjEnLCAnZjInXQogICAgICAgICAgICAgICAgb2sgPSBUcnVlCiAgICAgICAgICAgICAgICBmb3Igcm93IGluIHJvd3M6CiAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBGYWxzZQogICAgICAgICAgICAgICAgICAgIGZvciB0IGluIHRhYmxlOgogICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IFRydWUKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNik6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByb3dbaV0gIT0gJz8nIGFuZCByb3dbaV0gIT0gdFtjb2xzW2ldXToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IEZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1hdGNoOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCiAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZvdW5kOgogICAgICAgICAgICAgICAgICAgICAgICBvayA9IEZhbHNlCiAgICAgICAgICAgICAgICBpZiBvazoKICAgICAgICAgICAgICAgICAgICBwcmludChhICsgYiArIGMgKyBkKQ==