Skip to content
Snippets Groups Projects
20.py 2.78 KiB
Newer Older
hacker717's avatar
hacker717 committed
from itertools import product


def make_brackets(eq):

    opers = ["<=", "!=", "or", "and"][::-1]
    for op in opers:
        if op in eq:
            parts = eq.split(op)
        else:
            continue
        for i in range(len(parts) - 1):
            if parts[i][-2] in alph:
                parts[i] = parts[i][:-2] + "(" + parts[i][-2:]
            else:
                c = 1
                for j in range(len(parts[i]) - 3, -1, -1):
                    if parts[i][j] == ")":
                        c += 1
                    elif parts[i][j] == "(":
                        c -= 1
                    if not c:
                        if j >= 4:
                            if parts[i][j - 4:j] == "not ":
                                parts[i] = parts[i][:j - 4] + "(" + parts[i][j - 4:]        
                        else:
                            parts[i] = parts[i][:j] + "(" + parts[i][j:]
                        break
                
            if parts[i + 1][1] in alph:
                parts[i + 1] = parts[i + 1][:2] + ")" + parts[i + 1][2:]
                
            else:
                if parts[i + 1][1] == "(":
                    c = 1
                    for j in range(2, len(parts[i + 1])):
                        if parts[i + 1][j] == "(":
                            c += 1
                        elif parts[i + 1][j] == ")":
                            c -= 1
                        if not c:
                            parts[i + 1] = parts[i + 1][:j] + ")" + parts[i + 1][j:]
                            break
                    
                elif parts[i + 1][1] == "n":
                    if parts[i + 1][5] == "(":
                        for j in range(6, len(parts[i + 1])):
                            if parts[i + 1][j] == "(":
                                c += 1
                            elif parts[i + 1][j] == ")":
                                c -= 1
                            if not c:
                                parts[i + 1] = parts[i + 1][:j] + ")" + parts[i + 1][j:]
                                break
                    else:
                        parts[i + 1] = parts[i + 1][:6] + ")" + parts[i + 1][6:]
                    
        eq = op.join(parts)
    return eq


alph = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
state = input().replace("->", "<=").replace("^", "!=").replace("~", "==")
arr = []

for let in alph:
    if let in state:
        arr.append(let)

print(*arr, "F")

for elem in product((0, 1), repeat=len(arr)):
    m = []
    buff = arr
    c = 0
    for let in alph:
        if let in buff:
            m.append(elem[c])
            buff = buff[1:]
            c += 1  
        else:
            m.append(0)

    dict = {alph[i].lower(): m[i] for i in range(len(alph))}
    print(*elem, int(eval(make_brackets(state).lower(), {}, dict)))