Advertisement
Guest User

Untitled

a guest
Dec 15th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.31 KB | None | 0 0
  1. def ordn(cup):
  2. out = cup.replace("()", "O")
  3. return out
  4.  
  5. def splt(expr):
  6. out = []
  7. expr = expr.split("+")
  8. for cup in expr:
  9. out.append(cup.replace(" ",""))
  10. return out
  11.  
  12. def calccups(cup1, cup2):
  13. result = ""
  14. if cup1.startswith("(") and cup2.startswith("("):
  15. if cup1[-1] == ")" and cup2[-1] == ")":
  16. if cup1[-2] == ")":
  17. print "{DEBUG} - 1 ?)?"
  18. result = cup1[:-1] + cup2 + ")"
  19. elif cup2[:2] == "((":
  20. if cup1[:2] == "((":
  21. print "{DEBUG} - exception: no rule matched (addition)"
  22. result = cup1 + cup2
  23. else:
  24. print "{DEBUG} - 2 ((?"
  25. result = "(" + cup1 + cup2[1:]
  26. elif cup1[:2] == "((":
  27. print "{DEBUG} - 1 ((? ; 2 ??"
  28. result = cup1[:-1] + cup2 + ")"
  29. elif cup2[:2] == "((" and cup2[-2:] == "))":
  30. print "{DEBUG} - 2 ((?))"
  31. result = "("+ cup1 + cup2[1:]
  32. else:
  33. print "{DEBUG} - exception: no rule matched (addition)"
  34. result = cup1+cup2
  35. elif cup1[-1] == ")" and cup2.startswith("O"):
  36. print "{DEBUG} - 1 ?) ; 2 ()?"
  37. result = cup1[:-1] + cup2 + ")"
  38. elif cup1[-1] == "O" and cup2.startswith("O"):
  39. print "{DEBUG} - 1 ?() ; 2 ()?"
  40. result = cup1 + cup2
  41. elif cup1[-1] == "O" and cup2[0] == "O":
  42. print "{DEBUG} - 1 ?() ; 2 ()?"
  43. result = cup1 + cup2
  44. elif cup1[-1] == "O" and cup2[0] == "(":
  45. print "{DEBUG} - 1 ?() ; 2 (?"
  46. result = "(" + cup1 + cup2[1:]
  47. return result
  48.  
  49. def uncupify(cup):
  50. return cup.replace("O", "()")
  51. def solve(expr):
  52. cups = [ordn(c) for c in splt(expr)]
  53. buffer = []
  54. while True:
  55. if len(cups) == 1:
  56. return uncupify(cups[0])
  57. elif len(cups) > 2:
  58. buffer.append(calccups(cups[0], cups[1]))
  59. for cup in cups[2:]:
  60. buffer.append(cup)
  61. cups = buffer
  62. buffer = []
  63. else:
  64. result = calccups(cups[0],cups[1])
  65. return uncupify(result)
  66.  
  67.  
  68. result = solve("((())()) + (()()) + ()()()")
  69. print "\n"+result
  70. # ((())())(()()()()())
  71. # ((())()(()())()()())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement