Guest User

Untitled

a guest
Feb 21st, 2018
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.70 KB | None | 0 0
  1. class Life
  2. def initialize (a, b, c)
  3. #Matrizengrösse x und y
  4. @a = a
  5. @b = b
  6. #Startkonfiguration
  7. @c = c
  8. #Die erste Ziffer ist bedeutungslos die zweite ist die Distanz x+1
  9. #die dritte die Distanz y+1
  10. @Umgebung = [[1,0],[0,1],[-1,0],[0,-1],[1,1],[-1,-1],[1,-1],[-1,1]]
  11. #Prüfregel
  12. @eT1 = 23; @eT2 = 32; @eT3 = 11
  13. @r1 = 33; @r2 = 12; @r3 = 21
  14. #@Feld = Array.new(@a) { Array.new(@b) { Array.new(4,0) } }
  15. #Um die späteren Ausgabewerte einzutragen
  16. @k = Array.new(@a) { Array.new(@b) {0}}
  17. #Feld erstellen
  18. field
  19. testmain
  20. end
  21.  
  22. #erstelle Felder
  23. def field
  24. @Feld = Array.new(@a) do |x|
  25. Array.new(@b) do |y|
  26. r = [1, @c % 4, 0, 0 ]
  27. @c = (@c - @c%4)/4
  28. r
  29. end
  30. end
  31. end
  32. #def field
  33. #x = 0
  34. #y = 0
  35. #while (x < @a)
  36. #while (y < @b)
  37. #@Feld[x][y][1] = @c%4
  38. #@c= (@c - @c%4)/4
  39. #y= y+1
  40. #end
  41. #x= x+1
  42. #end
  43.  
  44. # Sortiere nach Kategorien und führe den Test durch
  45. def testWechsel(n,m)
  46. x1=0 ;x2=0; x3=0 ;x0=0
  47. x01=0; x02=0; x03=0
  48. x12=0; x13=0; x23=0
  49. x012=0; x013=0; x023=0
  50. x123=0
  51. testwert= true
  52. #führt Zyklizität der Regel ein
  53. @e1=(@eT1+@Ersatz[n][m][1])%3
  54. @e2=(@eT2+@Ersatz[n][m][1])%3
  55. @e3=(@eT3+@Ersatz[n][m][1])%3
  56. #@e1=@eT1 ; @e2=@eT2; @e3=@eT3
  57. #begin
  58. @Umgebung.each do |u|
  59. #einordnen, zählen wieviele von welchem typus
  60. case @Ersatz[(n+u[0])%@a][(m+u[1])%@b][1]
  61.  
  62. when @e1%10 && @e1/10 !=0
  63. case @Ersatz[(n+u[0])%@a][(m+u[1])%@b][2]
  64. when @e1%10
  65. case @Ersatz[(n+u[0])%@a][(m+u[1])%@b][3]
  66. when @e1%10 then x1=x1+1
  67. when @e2%10 && @e2/10!=0 then x12=x12+1
  68. when @e3%10 && @e3/10!=0 then x13=x13+1
  69. else x01=x01+1
  70. end
  71. when @e2%10 && @e2/10!=0
  72. case @Ersatz[(n+u[0])%@a][(m+u[1])%@b][3]
  73. when @e1%10 then return x12=x12+1
  74. when @e2%10 && @e2/10!=0 then x12=x12+1
  75. when @e3%10 && @e3/10!=0 then x123=x123+1
  76. else x012=x012+1
  77. end
  78. when @e3%10 && @e3%10!=0
  79. case @Ersatz[(n+u[0])%@a][(m+u[1])%@b][3]
  80. when @e1%10 then return x13=x13+1
  81. when @e2%10 && @e2/10!=0 then x123=x123+1
  82. when @e3%10 && @e3/10!=0 then x13=x13+1
  83. else x013=x013+1
  84. end
  85. else
  86. case @Ersatz[(n+u[0])%@a][(m+u[1])%@b][3]
  87. when @e1%10 then x01=x01+1
  88. when @e2%10 && @e2/10!=0 then x012=x012+1
  89. when @e3%10 && @e3/10!=0 then x013=x013+1
  90. else x01=x01+1
  91. end
  92. end
  93.  
  94. when @e2%10 && @e2/10!=0
  95. case@Ersatz[(n+u[0])%@a][(m+u[1])%@b][2]
  96. when @e1%10 && @e1/10!=0
  97. case @Ersatz[(n+u[0])%@a][(m+u[1])%@b][3]
  98. when @e1%10 && @e1/10!=0 then x12=x12+1
  99. when @e2%10 then x12=x12+1
  100. when @e3%10 && @e3/10!=0 then x123=x123+1
  101. else x012=x012+1
  102. end
  103. when @e2%10
  104. case @Ersatz[(n+u[0])%@a][(m+u[1])%@b][3]
  105. when @e1%10 && @e1/10!=0 then x12=x12+1
  106. when @e2%10 then x2=x2+1
  107. when @e3%10 && @e3/10!=0 then x23=x23+1
  108. else x02=x02+1
  109. end
  110. when @e3%10 && @e3%10!=0
  111. case @Ersatz[(n+u[0])%@a][(m+u[1])%@b][3]
  112. when @e1%10 && @e1/10!=0 then x123=x123+1
  113. when @e2%10 then x23=x23+1
  114. when @e3%10 && @e3/10!=0 then x23=x23+1
  115. else x023=x023+1
  116. end
  117. else
  118. case @Ersatz[(n+u[0])%@a][(m+u[1])%@b][3]
  119. when @e1%10 && @e1/10!=0 then x012=x012+1
  120. when @e2%10 then x02=x02+1
  121. when @e3%10 && @e3/10!=0 then x023=x023+1
  122. else x02=x02+1
  123. end
  124. end
  125.  
  126. when @e3%10 && @e3/10 !=0
  127. case @Ersatz[(n+u[0])%@a][(m+u[1])%@b][2]
  128. when @e1%10 && @e1/10!=0
  129. case @Ersatz[(n+u[0])%@a][(m+u[1])%b][3]
  130. when @e1%10 && @e1/10!=0 then x13=x13+1
  131. when @e2%10 && @e2/10!=0 then x123=x123+1
  132. when @e3%10 then x13=x13+1
  133. else x013=x013+1
  134. end
  135. when @e2%10 && @e2/10!=0
  136. case @Ersatz[(n+u[0])%@a][(m+u[1])%@b][3]
  137. when @e1%10 && @e1/10!=0 then x123=x123+1
  138. when @e2%10 && @e2/10!=0 then x23=x23+1
  139. when @e3%10 then x23=x23+1
  140. else x023=x023+1
  141. end
  142. when @e3%10
  143. case @Ersatz[(n+u[0])%@a][(m+u[1])%@b][3]
  144. when @e1%10 && @e3/10!=0 then x13=x13+1
  145. when @e2%10 && @e2/10!=0 then x23=x23+1
  146. when @e3%10 then x3=x3+1
  147. else x03=x03+1
  148. end
  149. else
  150. case @Ersatz[(n+u[0])%@a][(m+u[1])%@b][3]
  151. when @e1%10 && @e1/10!=0 then x013=x013+1
  152. when @e2%10 && @e2/10!=0 then x023=x023+1
  153. when @e3%10 then x03=x03+1
  154. else x03=x03+1
  155. end
  156. end
  157.  
  158. else
  159. case @Ersatz[(n+u[0])%@a][(m+u[1])%@b][2]
  160. when @e1%10 && @e1/10!=0
  161. case @Ersatz[(n+u[0])%@a][(n+u[1])%@b][3]
  162. when @e1%10 && @e1/10!=0 then x01=x01+1
  163. when @e2%10 && @e2/10!=0 then x012=x012+1
  164. when @e3%10 && @e3/10!=0 then x013=x013+1
  165. else x01=x01+1
  166. end
  167. when @e2%10 && @e2/10!=0
  168. case @Ersatz[(n+u[0])%@a][(m+u[1])%@b][3]
  169. when @e1%10 && @e1/10!=0 then x012=x012+1
  170. when @e2%10 && @e2/10!=0 then x02=x02+1
  171. when @e3%10 && @e3/10!=0 then x023=x023+1
  172. else x02=x02+1
  173. end
  174. when @e3%10 && @e3%10!=0
  175. case @Ersatz[(n+u[0])%@a][(m+u[1])%@b][3]
  176. when @e1%10 && @e1/10!=0 then x013=x013+1
  177. when @e2%10 && @e2/10!=0 then x023=x023+1
  178. when @e3%10 && @e3/10!=0 then x03=x03+1
  179. else x03=x03+1; break
  180. end
  181. else
  182. case @Ersatz[(n+u[0])%@a][(m+u[1])%@b][3]
  183. when @e1%10 && @e1/10!=0 then x01=x01+1
  184. when @e2%10 && @e2/10!=0 then x02=x02+1
  185. when @e3%10 && @e3/10!=0 then x03=x03+1
  186. else x0=x0+1
  187. end
  188. end
  189. end
  190. #rescue SyntaxError
  191. #end
  192. end
  193. #überbieten
  194. f1=@eT1/10; f2=@eT2/10; f3=@eT3/10
  195. f1=f1-x1; f2=f2-x2; f3=f3-x3
  196. k12=x12; k13=x13; k23=x23
  197. k123=x123
  198. if (k13-f1)>0
  199. f3=f3-(k13-f1); k13=f1
  200. end
  201.  
  202. if (x23-f2)>0
  203. f3=f3-(f23-f2); k23=f2
  204. end
  205.  
  206. if k12-(f1+f2-k13-k23)>0
  207. k12=k12-(f1+f2-k13-k23)
  208.  
  209. else
  210. k12=0
  211. k123=k123+k12-(f1+f2-k13-k23)
  212. end
  213.  
  214. if k13+k23>=k12+k123
  215. f3=f3-(k12+k123); k12=0; k123=0
  216. end
  217.  
  218. if f1>=0 && f2>=0 && f3>=0 && k12<=0 && k123<=0
  219. else
  220. testwert = false
  221. end
  222.  
  223. #unterbieten
  224. f1=@eT1/10; f2=@eT2/10; f3=@eT3/10
  225. f1=f1-x1-x01; f2=f2-x2-x02; f3=f3-x3-x03;
  226. k12=x12+x012; k13=x13+x013; k23=x23+x023
  227. k123=x123
  228.  
  229. if (k13-f1)>0
  230. f3=f3-(k13-f1); k13=f1
  231. end
  232.  
  233. if (x23-f2)>0
  234. f3=f3-(f23-f2); k23=f2
  235. end
  236.  
  237. if k12-(f1+f2-k13-k23)>0
  238. k12=k12-(f1+f2-k13-k23)
  239. else
  240. k12=0
  241. k123=k123+k12-(f1+f2-k13-k23)
  242. end
  243.  
  244. f3=f3-k123
  245.  
  246. if f3>0 && k13+k23>=f3 && k12>=f3
  247. k12=k12-f3
  248. f3=0
  249. end
  250.  
  251. if f1<=0 && f2<=0 && f3<=0 && k12>=0 && k123>=0
  252. else
  253. testwert = false
  254. end
  255. return testwert
  256. end
  257. end
  258. #Prüfe ob sich der Änderungswer-t ändert
  259. def testRegel(n,m)
  260. rr1=@r1; rr2=@r2; rr3=@r3
  261. @Umgebung.each do |u|
  262. if @Ersatz[(n+u[0])%@a][(m+u[1])%@b][1] == rr1%10
  263. rr1=rr1-1
  264. elsif @Ersatz[(n+u[0])%@a][(m+u[1])%@b][1] == rr2%10
  265. rr2=rr2-1
  266. elsif @Ersatz[(n+u[0])%@a][(m+u[1])%@b][1] == rr3%10
  267. rr3=rr3-1
  268. end
  269. end
  270. if rr1==0 && rr2==0 && rr3==0
  271. @Feld[n][m][0]=(@Feld[n][m][0]+1)%3+1
  272. end
  273. end
  274. #Starte den test
  275. def testmain
  276. @Ersatz=[] +@Feld
  277. @Ersatz.each_index do |n|
  278. @Ersatz[n].each_index do |m|
  279. testRegel(n,m)
  280. @Feld[n][m][3]=@Feld[n][m][2]
  281. @Feld[n][m][2]=@Ersatz[n][m][1]
  282. if testWechsel(n,m)
  283. else
  284. @Feld[n][m][1]=(@Feld[n][m][1]+@Feld[n][m][0])%4
  285. end
  286. @k[n][m]=@Feld[n][m][1]
  287. end
  288. end
  289. p @k
  290. sleep 2
  291. testmain
  292. end
  293. l = Life.new(4, 5, 417)
Add Comment
Please, Sign In to add comment