Advertisement
Guest User

Untitled

a guest
Oct 16th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.47 KB | None | 0 0
  1. def gen_input(str):
  2. out = []
  3. for n in str:
  4. if n != " ":
  5. out.append(INP(n == "1"))
  6. return out
  7.  
  8. def to_digit(state):
  9. return "1" if state else "0"
  10.  
  11. class NONE:
  12. def get_state(self):
  13. return False
  14.  
  15. def set_state(self, state):
  16. pass
  17.  
  18. def __add__(self, c):
  19. return OR(self, c)
  20.  
  21. def __mul__(self, c):
  22. return AND(self, c)
  23.  
  24. def __neg__(self):
  25. return NOT(self)
  26.  
  27. def __call__(self, *args):
  28. return self.get_state(*(args))
  29.  
  30. class NOT(NONE):
  31. def __init__(self, i0):
  32. self.i0 = i0
  33.  
  34. def get_state(self):
  35. return not self.i0.get_state()
  36.  
  37. class AND(NONE):
  38. def __init__(self, i0, i1):
  39. self.i0, self.i1 = i0, i1
  40.  
  41. def get_state(self):
  42. return self.i0.get_state() and self.i1.get_state()
  43.  
  44. class OR(NONE):
  45. def __init__(self, i0, i1):
  46. self.i0, self.i1 = i0, i1
  47.  
  48. def get_state(self):
  49. return self.i0.get_state() or self.i1.get_state()
  50.  
  51. class INP(NONE):
  52. def __init__(self, state=False):
  53. self.state = state
  54.  
  55. def get_state(self):
  56. return self.state
  57.  
  58. def set_state(self, state):
  59. self.state = state
  60.  
  61. class XOR(NONE):
  62. def __init__(self, i0, i1):
  63. self.i0, self.i1 = i0, i1
  64.  
  65. def get_state(self):
  66. a, b = self.i0(), self.i1()
  67. return (not a or not b) and (a or b)
  68.  
  69. class FADD(NONE):
  70. def __init__(self, i0, i1, c0):
  71. s1 = XOR(i0, i1)
  72. c1 = (i0 * i1) + (s1 * c0)
  73. self.o = [XOR(s1, c0), c1]
  74.  
  75. def get_state(self, i=0):
  76. return self.o[i]()
  77.  
  78. class FSUB(NONE):
  79. def __init__(self, i0, i1, c0):
  80. s1 = XOR(i0, i1)
  81. c1 = (c0 * -s1) + (-i0 * i1)
  82. self.o = [XOR(s1, c0), c1]
  83.  
  84. def get_state(self, i=0):
  85. return self.o[i]()
  86.  
  87. class MEM(NONE):
  88. def __init__(self, i0, i1):
  89. self.state = False
  90. self.i0, self.i1 = i0, i1
  91.  
  92. def get_state(self):
  93. if self.i0(): self.state = True
  94. elif self.i1(): self.state = False
  95.  
  96. return self.state
  97.  
  98. # ============= #
  99.  
  100. class AND4(NONE):
  101. def __init__(self, i0, i1, i2, i3, i4, i5, i6, i7):
  102. self.o = [
  103. i0 * i4,
  104. i1 * i5,
  105. i2 * i6,
  106. i3 * i7
  107. ]
  108.  
  109. def get_state(self, i=0):
  110. return self.o[i]()
  111.  
  112. class OR4(NONE):
  113. def __init__(self, i0, i1, i2, i3, i4, i5, i6, i7):
  114. self.o = [
  115. i0 + i4,
  116. i1 + i5,
  117. i2 + i6,
  118. i3 + i7
  119. ]
  120.  
  121. def get_state(self, i=0):
  122. return self.o[i]()
  123.  
  124. class ADD445(NONE):
  125. def __init__(self, i0, i1, i2, i3, i4, i5, i6, i7, c0):
  126. f0 = FADD(i3, i7, c0)
  127. f1 = FADD(i2, i6, f0.o[1])
  128. f2 = FADD(i1, i5, f1.o[1])
  129. f3 = FADD(i0, i4, f2.o[1])
  130. self.o = [f0, f1, f2, f3, f3.o[1]]
  131.  
  132. def get_state(self, i=0):
  133. return self.o[i]()
  134.  
  135. class INC45(NONE):
  136. def __init__(self, i0, i1, i2, i3):
  137. f0 = FADD(i3, INP(False), INP(True))
  138. f1 = FADD(i2, INP(False), f0.o[1])
  139. f2 = FADD(i1, INP(False), f1.o[1])
  140. f3 = FADD(i0, INP(False), f2.o[1])
  141. self.o = [f0, f1, f2, f3, f3.o[1]]
  142.  
  143. def get_state(self, i=0):
  144. return self.o[i]()
  145.  
  146. class SUB445(NONE):
  147. def __init__(self, i0, i1, i2, i3, i4, i5, i6, i7, c0):
  148. f0 = FSUB(i3, i7, c0)
  149. f1 = FSUB(i2, i6, f0.o[1])
  150. f2 = FSUB(i1, i5, f1.o[1])
  151. f3 = FSUB(i0, i4, f2.o[1])
  152. self.o = [f0, f1, f2, f3, f3.o[1]]
  153.  
  154. def get_state(self, i=0):
  155. return self.o[i]()
  156.  
  157. class MEM4(NONE):
  158. def __init__(self, i0, i1, i2, i3, s0, r0):
  159. f0 = MEM(i3 * s0, r0)
  160. f1 = MEM(i2 * s0, r0)
  161. f2 = MEM(i1 * s0, r0)
  162. f3 = MEM(i0 * s0, r0)
  163. self.o = [f0, f1, f2, f3]
  164.  
  165. def get_state(self, i=0):
  166. return self.o[i]()
  167.  
  168. # ============= #
  169.  
  170. # simple program counter
  171. class PCOUNT:
  172. def __init__(self, i0, i1, i2, i3, s0, n0, r0):
  173. # r0 reset
  174. # s0 set value
  175. self.n0 = n0 # next
  176.  
  177. sum = INC45(i0, i1, i2, i3)
  178. self.o = MEM4(i0, i1, i2, i3, s0, r0)
  179.  
  180. def get_status(self, i=0):
  181.  
  182.  
  183. return 0
  184.  
  185.  
  186. def main():
  187. pass
  188.  
  189.  
  190. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement