Advertisement
Guest User

Untitled

a guest
Feb 8th, 2016
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.61 KB | None | 0 0
  1. n = 60; q = Table[0, {i, 1, 3 n}, {j, 1, 3 n}]; p =
  2. Table[Mod[i - 1, 3] + 1, {i, 1, 3 n}, {j, 1, 3 n}];
  3. q[[2 n - 1, 1]] = q[[2 n - 1, 2]] = 1;
  4. RandomVariate[GeometricDistribution[1/3], 20];
  5. For[j = 3, j < 2 n - 1, j++,
  6. For[i = 2, i < 3 n - 2, i++,
  7. If[q[[i + 2, j - 2]] == 1 || q[[i - 1, j - 2]] == 1, q[[i, j]] = 1,
  8. 0]]];
  9. For[j = 2 n - 1, j < 2 n + 2, j++,
  10. For[i = 1, i < 3 n + 1, i++,
  11. If[Mod[i, 3] == 1, q[[i, j]] = 1, 0]]];
  12. For[j = 2 n + 2, j < 3 n + 1, j++,
  13. For[i = 3, i < 3 n - 2, i++,
  14. If[q[[i - 2, j - 1]] == 1 && q[[i + 1, j - 1]] == 1, q[[i, j]] = 1,
  15. 0]]];
  16. For[j = 1, j < 3 n + 1, j++,
  17. For[i = 2, i < 3 n + 1, i++,
  18. If[q[[i - 1, j]] == 1, q[[i, j]] = 2, 0]]];
  19. For[j = 1, j < 3 n + 1, j++,
  20. For[i = 3, i < 3 n + 1, i++,
  21. If[q[[i - 2, j]] == 1, q[[i, j]] = 3, 0]]];
  22. For[j = 1, j < 3 n + 1, j++,
  23. For[i = 1, i < 3 n + 1, i++,
  24. If[Mod[q[[i, j]], 3] != 1, q[[i, j]] = 0]]];
  25. q = Import["out.dat", "Table"]
  26.  
  27. flip1[i_, j_] := (
  28. If[q[[i, j]] == 1 && q[[i, j + 1]] == 1, q[[i, j + 1]] = 3;
  29. q[[i + 2, j]] = 4; q[[i, j]] = 0,
  30. If[q[[i, j + 1]] == 3 && q[[i + 2, j]] == 4, q[[i, j]] = 1;
  31. q[[i, j + 1]] = 1; q[[i + 2, j]] = 0]])
  32. flip2[i_, j_] := (
  33. If[q[[i, j]] == 2 && q[[i + 1, j]] == 2, q[[i + 1, j]] = 4;
  34. q[[i, j + 2]] = 3; q[[i, j]] = 0,
  35. If[q[[i + 1, j]] == 4 && q[[i, j + 2]] == 3, q[[i, j]] = 2;
  36. q[[i + 1, j]] = 2; q[[i, j + 2]] = 0]])
  37. flip3[i_, j_] := (
  38. If[q[[i, j]] == 1 && q[[i + 1, j + 1]] == 1, q[[i + 1, j]] = 4;
  39. q[[i + 2, j + 1]] = 3; q[[i, j]] = 0; q[[i + 1, j + 1]] = 0,
  40. If[q[[i + 1, j]] == 4 && q[[i + 2, j + 1]] == 3, q[[i, j]] = 1;
  41. q[[i + 1, j + 1]] = 1; q[[i + 1, j]] = 0;
  42. q[[i + 2, j + 1]] = 0]])
  43. flip4[i_, j_] := (
  44. If[q[[i, j]] == 2 && q[[i + 1, j + 1]] == 2, q[[i, j + 1]] = 3;
  45. q[[i + 1, j + 2]] = 4; q[[i, j]] = 0; q[[i + 1, j + 1]] = 0,
  46. If[q[[i, j + 1]] == 3 && q[[i + 1, j + 2]] == 4, q[[i, j]] = 2;
  47. q[[i + 1, j + 1]] = 2; q[[i, j + 1]] = 0;
  48. q[[i + 1, j + 2]] = 0]])
  49. flip5[i_, j_] := (
  50. If[q[[i, j]] == 2 && q[[i + 1, j + 2]] == 3, q[[i, j + 2]] = 1;
  51. q[[i, j + 1]] = 3; q[[i, j]] = 0; q[[i + 1, j + 2]] = 0,
  52. If[q[[i, j + 2]] == 1 && q[[i, j + 1]] == 3, q[[i, j]] = 2;
  53. q[[i + 1, j + 2]] = 3; q[[i, j + 2]] = 0; q[[i, j + 1]] = 0]])
  54. flip6[i_, j_] := (
  55. If[q[[i, j]] == 1 && q[[i + 2, j + 1]] == 4, q[[i + 1, j]] = 4;
  56. q[[i + 2, j]] = 2; q[[i, j]] = 0; q[[i + 2, j + 1]] = 0,
  57. If[q[[i + 1, j]] == 4 && q[[i + 2, j]] == 2, q[[i, j]] = 1;
  58. q[[i + 2, j + 1]] = 4; q[[i + 1, j]] = 0; q[[i + 2, j]] = 0]])
  59.  
  60. test[i_, j_] := (q[[i, j]] == 1 &&
  61. q[[i, j + 1]] == 1) || (q[[i, j + 1]] == 3 &&
  62. q[[i + 2, j]] == 4) || (q[[i, j]] == 2 &&
  63. q[[i + 1, j]] == 2) || (q[[i + 1, j]] == 4 &&
  64. q[[i, j + 2]] == 3) || (q[[i, j]] == 1 &&
  65. q[[i + 1, j + 1]] == 1) || (q[[i + 1, j]] == 4 &&
  66. q[[i + 2, j + 1]] == 3) || (q[[i, j]] == 2 &&
  67. q[[i + 1, j + 1]] == 2) || (q[[i, j + 1]] == 3 &&
  68. q[[i + 1, j + 2]] == 4) || (q[[i, j]] == 2 &&
  69. q[[i + 1, j + 2]] == 3) || (q[[i, j + 2]] == 1 &&
  70. q[[i, j + 1]] == 3) || (q[[i, j]] == 1 &&
  71. q[[i + 2, j + 1]] == 4) || (q[[i + 1, j]] == 4 &&
  72. q[[i + 2, j]] == 2)
  73.  
  74. movematrix = Table[False, {i, 1, 3 n}, {j, 1, 3 n}];
  75. For[j = 1, j < 3 n - 1, j++,
  76. For[i = 2, i < 3 n - 1, i++, movematrix[[i, j]] = test[i, j]]];
  77. movable = Position[movematrix, True];
  78. movable[[1]][[2]]
  79.  
  80. (*s\occuper d ajouter les elements bougeables a la list*)
  81.  
  82. flip[] := {movable = Position[movematrix, True];
  83. k = Random[Integer, {1, Length[movable]}];
  84. Block[{i = movable[[k]][[1]], j = movable[[k]][[2]]}, flip1[i, j];
  85. flip2[i, j]; flip3[i, j]; flip4[i, j]; flip5[i, j]; flip6[i, j];
  86. For[a = -2, a < 3, a++,
  87. For[b = -2, b < 3, b++,
  88. movematrix[[Mod[i + a, 3 n - 3] + 1, Mod[j + b, 3 n - 3] + 1]] =
  89. test[Mod[i + a, 3 n - 3] + 1, Mod[j + b, 3 n - 3] + 1]]]]}
  90.  
  91. lp1[] := Rotate[Show[
  92. Graphics[
  93. Flatten[Table[
  94. If[i <= (3 n) && j <= (3 n + 1),
  95. If[p[[i, j]] == 1,
  96. If[Mod[i + j, 3] == 2, {Yellow,
  97. Rectangle[{i, j}, {i + 3, j + 1}], Black,
  98. Line[{{i, j}, {i + 3, j}, {i + 3, j + 1}, {i, j + 1}, {i,
  99. j}}]}, Line[{{i, j}, {i + 3, j}, {i + 3, j + 1}, {i,
  100. j + 1}, {i, j}}]],
  101. If[p[[i, j]] == 4,
  102. If[Mod[i + j, 3] == 2, {Pink,
  103. Rectangle[{i, j}, {i + 1, j + 3}], Black,
  104. Line[{{i, j}, {i + 1, j}, {i + 1, j + 3}, {i, j + 3}, {i,
  105. j}}]}, {Blue, Rectangle[{i, j}, {i + 1, j + 3}], Black,
  106. Line[{{i, j}, {i + 1, j}, {i + 1, j + 3}, {i, j + 3}, {i,
  107. j}}]}], Point[{1, 1}], {}], {}], {}], {i, 1, 3 n}, {j,
  108. 1, 3 n}]]]], -Pi/2]
  109.  
  110.  
  111. lp1[] := Rotate[Show[
  112. Graphics[
  113. Flatten[Table[
  114. If[i <= (3 n) && j <= (3 n + 1),
  115. If[p[[i, j]] == 1,
  116. If[Mod[i + j, 3] == 2, {Yellow,
  117. Rectangle[{i, j}, {i + 3, j + 1}], Black,
  118. Line[{{i, j}, {i + 3, j}, {i + 3, j + 1}, {i, j + 1}, {i,
  119. j}}]}, Line[{{i, j}, {i + 3, j}, {i + 3, j + 1}, {i,
  120. j + 1}, {i, j}}]],
  121. If[p[[i, j]] == 4,
  122. If[Mod[i + j, 3] == 2, {Pink,
  123. Rectangle[{i, j}, {i + 1, j + 3}], Black,
  124. Line[{{i, j}, {i + 1, j}, {i + 1, j + 3}, {i, j + 3}, {i,
  125. j}}]}, {Blue, Rectangle[{i, j}, {i + 1, j + 3}], Black,
  126. Line[{{i, j}, {i + 1, j}, {i + 1, j + 3}, {i, j + 3}, {i,
  127. j}}]}], Point[{1, 1}], {}], {}], {}], {i, 1, 3 n}, {j,
  128. 1, 3 n}]]]], -Pi/2]
  129.  
  130. lp2[] := Rotate[Show[
  131. Graphics[
  132. Flatten[Table[
  133. If[i <= (3 n) && j <= (3 n + 1),
  134. If[q[[i, j]] == 1,
  135. If[Mod[i + j, 3] == 2, {Yellow,
  136. Rectangle[{i, j}, {i + 3, j + 1}], Black,
  137. Line[{{i, j}, {i + 3, j}, {i + 3, j + 1}, {i, j + 1}, {i,
  138. j}}]}, Line[{{i, j}, {i + 3, j}, {i + 3, j + 1}, {i,
  139. j + 1}, {i, j}}]],
  140. If[q[[i, j]] == 4,
  141. If[Mod[i + j, 3] == 2, {Pink,
  142. Rectangle[{i, j}, {i + 1, j + 3}], Black,
  143. Line[{{i, j}, {i + 1, j}, {i + 1, j + 3}, {i, j + 3}, {i,
  144. j}}]}, {Blue, Rectangle[{i, j}, {i + 1, j + 3}], Black,
  145. Line[{{i, j}, {i + 1, j}, {i + 1, j + 3}, {i, j + 3}, {i,
  146. j}}]}], Point[{1, 1}], {}], {}], {}], {i, 1, 3 n}, {j,
  147. 1, 3 n}]]]], -Pi/2]
  148.  
  149.  
  150. temp[x_, y_, i_, j_] :=
  151. Which[x == 1, {Blue, Line[{{i - 1/2, j - 1/2}, {i + 3/2, j - 1/2}}],
  152. Red, Line[{{i - 1/2, j - 1/2}, {i - 1/2, j + 3/2}}]},
  153. x == 4 && y == 1, {Red,
  154. Line[{{i - 1/2, j - 1/2}, {i + 3/2, j - 1/2}}], Blue,
  155. Line[{{i - 1/2, j - 1/2}, {i - 1/2, j + 3/2}}]},
  156. x == 1 && y != 1 && y != 4, {Blue,
  157. Line[{{i - 1/2, j - 1/2}, {i + 3/2, j - 1/2}}]},
  158. y == 1 && x != 1, {Red,
  159. Line[{{i - 1/2, j - 1/2}, {i + 3/2, j - 1/2}}]},
  160. x == 4 && y != 4 && x != 1, {Blue,
  161. Line[{{i - 1/2, j - 1/2}, {i - 1/2, j + 3/2}}]},
  162. y == 4 && x != 4, {Red,
  163. Line[{{i - 1/2, j - 1/2}, {i - 1/2, j + 3/2}}]}];
  164.  
  165.  
  166. temp2[x_, i_, j_] :=
  167. Which[x == 1, {Black,
  168. Line[{{i, j}, {i + 3, j}, {i + 3, j + 1}, {i, j + 1}, {i, j}}]},
  169. x == 2, {Black,
  170. Line[{{i, j}, {i, j + 3}, {i + 1, j + 3}, {i + 1, j}, {i, j}}]},
  171. x == 3, {Black,
  172. Line[{{i, j}, {i, j + 1}, {i + 2, j + 1}, {i + 2, j}, {i + 1,
  173. j}, {i + 1, j - 1}, {i, j - 1}, {i, j}}]},
  174. x == 4, {Black,
  175. Line[{{i, j}, {i - 1, j}, {i - 1, j + 1}, {i, j + 1}, {i,
  176. j + 2}, {i + 1, j + 2}, {i + 1, j}, {i, j}}]}];
  177.  
  178. lp3[] := Rotate[Show[
  179. Graphics[
  180. Flatten[Table[
  181. temp[p[[i, j]], q[[i, j]], i, j], {i, 1, 3 n}, {j, 1,
  182. 3 n}]]]], -Pi/2]
  183.  
  184. lp[] := Rotate[Show[
  185. Graphics[
  186. Flatten[Table[
  187. temp2[q[[i, j]], i, j], {i, 1, 3 n}, {j, 1, 3 n}]]]], -Pi/2]
  188.  
  189.  
  190. Table[flip[], {1000000}];
  191. MatrixForm[q]
  192. lp[]
  193. Export["out.dat", q]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement