Advertisement
Guest User

Untitled

a guest
Jan 21st, 2020
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.02 KB | None | 0 0
  1. # dziala
  2. def delta(formula, stale):
  3. if 'a' not in stale:
  4. stale.append('a')
  5. stala = 'a'
  6. elif 'b' not in stale:
  7. stale.append('b')
  8. stala = 'b'
  9. elif 'c' not in stale:
  10. stale.append('c')
  11. stala = 'c'
  12. elif 'd' not in stale:
  13. stale.append('d')
  14. stala = 'd'
  15. elif 'e' not in stale:
  16. stale.append('e')
  17. stala = 'e'
  18. zmienna = formula[-1]
  19. del formula[-1]
  20. del formula[0]
  21. for indeksele in range(len(formula)):
  22. formula[indeksele] = list(formula[indeksele])
  23. for indeks in range(len(formula[indeksele])):
  24. if formula[indeksele][indeks] == zmienna:
  25. formula[indeksele][indeks] = stala
  26. formula[indeksele] = "".join(formula[indeksele])
  27. return formula
  28.  
  29.  
  30. def alfa(formula):
  31. print(formula)
  32. if formula[0] in ['NOT', '~', '¬']:
  33. del formula[0]
  34. operator = formula[0]
  35. del formula[0]
  36. print(formula)
  37. onp = list(reversed(formula))
  38. a1, a2 = [], []
  39. print("Operator:", operator)
  40. print("ONP:", onp)
  41. for element in onp:
  42. if not a1:
  43. a1.append(element)
  44. elif element in ['NOT', '~', '¬']:
  45. if not a2:
  46. a1.append('NOT')
  47. else:
  48. a2.append('NOT')
  49. elif element in ['AND', '&', '∧', 'OR', '|', '∨', 'IMPLIES', '→', 'IFF', '↔', 'XOR', '⊕']:
  50. a1 = a1 + a2
  51. a1.append(element)
  52. a2 = []
  53. elif not a2:
  54. a2.append(element)
  55. print("A1:", a1, "A2:", a2)
  56. if operator in ['NOT', '~', '¬']:
  57. return list(reversed(a1))
  58. # if formula[0] in ['NOT', '~', '¬'] and formula[1] in ['NOT', '~', '¬']:
  59. # return [formula[2:]]
  60. elif operator in ['AND', '&', '∧']:
  61. return [[list(reversed(a1)), list(reversed(a2))]]
  62. # elif formula[0] in ['AND', '&', '∧']:
  63. # return [[[formula[1]], [formula[2]]]]
  64. elif operator in ['OR', '|', '∨']:
  65. return [[list(reversed(['NOT']+a1)), list(reversed(['NOT']+a2))]]
  66. # elif formula[0] in ['NOT', '~', '¬'] and formula[1] in ['OR', '|', '∨']:
  67. # return [[['NOT', formula[2]], ['NOT', formula[3]]]]
  68. elif operator in ['IMPLIES', '→']:
  69. return [[list(reversed(a1)), list(reversed(['NOT']+a2))]]
  70. # elif formula[0] in ['NOT', '~', '¬'] and formula[1] in ['IMPLIES', '→']:
  71. # return [[[formula[2]], ['NOT', formula[3]]]]
  72. elif operator in ['IFF', '↔', 'XOR', '⊕']:
  73. return [[list(reversed(a1 + a2 + ['IMPLIES'])), list(reversed(a2 + a1 + ['IMPLIES']))]]
  74. # elif formula[0] in ['IFF', '↔']:
  75. # return [[['IMPLIES', formula[1], formula[2]], ['IMPLIES', formula[2], formula[1]]]]
  76. # elif formula[0] in ['NOT', '~', '¬'] and formula[1] in ['XOR', '⊕']:
  77. # return [[['IMPLIES', formula[2], formula[3]], ['IMPLIES', formula[3], formula[2]]]]
  78.  
  79. def beta(formula):
  80. #moze byc zle, nie bylo wcale testowane
  81. if formula[0] in ['NOT', '~', '¬'] and formula[1] in['AND', '&', '∧']:
  82. return [['NOT', formula[3]], ['NOT', formula[2]]]
  83. elif formula[0] in ['OR', '|', '∨']:
  84. return [[formula[2]], [formula[1]]]
  85. elif formula[0] in ['IMPLIES', '→']:
  86. return [['NOT', formula[2]], [formula[1]]]
  87. elif formula[0] in ['NOT', '~', '¬'] and formula[1] in ['IFF', '↔']:
  88. return [['NOT', 'IMPLIES', formula[3], formula[2]], ['NOT', 'IMPLIES', formula[2], formula[3]]]
  89. elif formula[0] in ['XOR', '⊕']:
  90. return [['NOT', 'IMPLIES', formula[1], formula[2]], ['NOT', 'IMPLIES', formula[2], formula[1]]]
  91.  
  92.  
  93.  
  94. stale = []
  95. pierwotna_formula = input().split()
  96. stack = []
  97. for wyrazenie in pierwotna_formula:
  98. if wyrazenie in 'abcdeABCDEFGHIJKLMNOPQRSTUVWXYZ':
  99. stack.append(wyrazenie)
  100. if wyrazenie in 'abcde':
  101. if wyrazenie not in stale:
  102. stale.append(wyrazenie)
  103. if wyrazenie[0] in 'fghijklmnpqrstuvwxyz':
  104. arguments = []
  105. for i in range(0, int(wyrazenie[2:])):
  106. arguments.append(stack.pop())
  107. joined_args = ', '.join(reversed(arguments))
  108. stack.append(wyrazenie[0] + ' ' + '(' + ' ' + joined_args + ' ' + ')')
  109. elif wyrazenie in ['NOT', '~', '¬', 'AND', '&', '∧', 'OR', '|', '∨', 'IMPLIES', '→', 'IFF', '↔', 'XOR', '⊕', 'FORALL', '∀', 'EXISTS', '∃']:
  110. stack.append(wyrazenie)
  111. pierwotna_formula = stack
  112. pierwotna_formula.reverse()
  113. print(pierwotna_formula)
  114. print(stale)
  115. bylo_not = False
  116. for element in pierwotna_formula:
  117. if element in ['NOT', '~', '¬']:
  118. if bylo_not:
  119. print("alfa")
  120. print(alfa(pierwotna_formula))
  121. bylo_not = False
  122. else:
  123. bylo_not = True
  124. elif element in ['AND', '&', '∧', 'OR', '|', '∨', 'IMPLIES', '→', 'IFF', '↔', 'XOR', '⊕', 'FORALL', '∀', 'EXISTS', '∃']:
  125. if element in ['AND', '&', '∧']:
  126. if bylo_not:
  127. print("BETA")
  128. print(beta(pierwotna_formula))
  129. bylo_not = False
  130. else:
  131. print("ALFA")
  132. print(alfa(pierwotna_formula))
  133. elif element in ['OR', '|', '∨']:
  134. if bylo_not:
  135. print("ALFA")
  136. print(alfa(pierwotna_formula))
  137. bylo_not = False
  138. else:
  139. print("BETA")
  140. print(beta(pierwotna_formula))
  141. elif element in ['IMPLIES', '→']:
  142. if bylo_not:
  143. print("ALFA")
  144. print(alfa(pierwotna_formula))
  145. bylo_not = False
  146. else:
  147. print("BETA")
  148. print(beta(pierwotna_formula))
  149. elif element in ['IMPLIES', '→']:
  150. if bylo_not:
  151. print("ALFA")
  152. print(alfa(pierwotna_formula))
  153. bylo_not = False
  154. else:
  155. print("BETA")
  156. print(beta(pierwotna_formula))
  157. elif element in ['IFF', '↔']:
  158. if bylo_not:
  159. print("BETA")
  160. print(beta(pierwotna_formula))
  161. bylo_not = False
  162. else:
  163. print("ALFA")
  164. print(alfa(pierwotna_formula))
  165. elif element in ['XOR', '⊕']:
  166. if bylo_not:
  167. print("ALFA")
  168. print(alfa(pierwotna_formula))
  169. bylo_not = False
  170. else:
  171. print("BETA")
  172. print(beta(pierwotna_formula))
  173. elif element in ['FORALL', '∀']:
  174. if bylo_not:
  175. print("DELTA")
  176. bylo_not = False
  177. else:
  178. print("GAMMA")
  179. elif element in ['EXISTS', '∃']:
  180. if bylo_not:
  181. print("GAMMA")
  182. bylo_not = False
  183. else:
  184. print("DELTA")
  185. print(pierwotna_formula, stale)
  186. delta(pierwotna_formula, stale)
  187. print(pierwotna_formula, stale)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement