Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def ordn(cup):
- out = cup.replace("()", "O")
- return out
- def splt(expr):
- out = []
- expr = expr.split("+")
- for cup in expr:
- out.append(cup.replace(" ",""))
- return out
- def calccups(cup1, cup2):
- result = ""
- if cup1.startswith("(") and cup2.startswith("("):
- if cup1[-1] == ")" and cup2[-1] == ")":
- if cup1[-2] == ")":
- print "{DEBUG} - 1 ?)?"
- result = cup1[:-1] + cup2 + ")"
- elif cup2[:2] == "((":
- if cup1[:2] == "((":
- print "{DEBUG} - exception: no rule matched (addition)"
- result = cup1 + cup2
- else:
- print "{DEBUG} - 2 ((?"
- result = "(" + cup1 + cup2[1:]
- elif cup1[:2] == "((":
- print "{DEBUG} - 1 ((? ; 2 ??"
- result = cup1[:-1] + cup2 + ")"
- elif cup2[:2] == "((" and cup2[-2:] == "))":
- print "{DEBUG} - 2 ((?))"
- result = "("+ cup1 + cup2[1:]
- else:
- print "{DEBUG} - exception: no rule matched (addition)"
- result = cup1+cup2
- elif cup1[-1] == ")" and cup2.startswith("O"):
- print "{DEBUG} - 1 ?) ; 2 ()?"
- result = cup1[:-1] + cup2 + ")"
- elif cup1[-1] == "O" and cup2.startswith("O"):
- print "{DEBUG} - 1 ?() ; 2 ()?"
- result = cup1 + cup2
- elif cup1[-1] == "O" and cup2[0] == "O":
- print "{DEBUG} - 1 ?() ; 2 ()?"
- result = cup1 + cup2
- elif cup1[-1] == "O" and cup2[0] == "(":
- print "{DEBUG} - 1 ?() ; 2 (?"
- result = "(" + cup1 + cup2[1:]
- return result
- def uncupify(cup):
- return cup.replace("O", "()")
- def solve(expr):
- cups = [ordn(c) for c in splt(expr)]
- buffer = []
- while True:
- if len(cups) == 1:
- return uncupify(cups[0])
- elif len(cups) > 2:
- buffer.append(calccups(cups[0], cups[1]))
- for cup in cups[2:]:
- buffer.append(cup)
- cups = buffer
- buffer = []
- else:
- result = calccups(cups[0],cups[1])
- return uncupify(result)
- result = solve("((())()) + (()()) + ()()()")
- print "\n"+result
- # ((())())(()()()()())
- # ((())()(()())()()())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement