Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- n = 60; q = Table[0, {i, 1, 3 n}, {j, 1, 3 n}]; p =
- Table[Mod[i - 1, 3] + 1, {i, 1, 3 n}, {j, 1, 3 n}];
- q[[2 n - 1, 1]] = q[[2 n - 1, 2]] = 1;
- RandomVariate[GeometricDistribution[1/3], 20];
- For[j = 3, j < 2 n - 1, j++,
- For[i = 2, i < 3 n - 2, i++,
- If[q[[i + 2, j - 2]] == 1 || q[[i - 1, j - 2]] == 1, q[[i, j]] = 1,
- 0]]];
- For[j = 2 n - 1, j < 2 n + 2, j++,
- For[i = 1, i < 3 n + 1, i++,
- If[Mod[i, 3] == 1, q[[i, j]] = 1, 0]]];
- For[j = 2 n + 2, j < 3 n + 1, j++,
- For[i = 3, i < 3 n - 2, i++,
- If[q[[i - 2, j - 1]] == 1 && q[[i + 1, j - 1]] == 1, q[[i, j]] = 1,
- 0]]];
- For[j = 1, j < 3 n + 1, j++,
- For[i = 2, i < 3 n + 1, i++,
- If[q[[i - 1, j]] == 1, q[[i, j]] = 2, 0]]];
- For[j = 1, j < 3 n + 1, j++,
- For[i = 3, i < 3 n + 1, i++,
- If[q[[i - 2, j]] == 1, q[[i, j]] = 3, 0]]];
- For[j = 1, j < 3 n + 1, j++,
- For[i = 1, i < 3 n + 1, i++,
- If[Mod[q[[i, j]], 3] != 1, q[[i, j]] = 0]]];
- q = Import["out.dat", "Table"]
- flip1[i_, j_] := (
- If[q[[i, j]] == 1 && q[[i, j + 1]] == 1, q[[i, j + 1]] = 3;
- q[[i + 2, j]] = 4; q[[i, j]] = 0,
- If[q[[i, j + 1]] == 3 && q[[i + 2, j]] == 4, q[[i, j]] = 1;
- q[[i, j + 1]] = 1; q[[i + 2, j]] = 0]])
- flip2[i_, j_] := (
- If[q[[i, j]] == 2 && q[[i + 1, j]] == 2, q[[i + 1, j]] = 4;
- q[[i, j + 2]] = 3; q[[i, j]] = 0,
- If[q[[i + 1, j]] == 4 && q[[i, j + 2]] == 3, q[[i, j]] = 2;
- q[[i + 1, j]] = 2; q[[i, j + 2]] = 0]])
- flip3[i_, j_] := (
- If[q[[i, j]] == 1 && q[[i + 1, j + 1]] == 1, q[[i + 1, j]] = 4;
- q[[i + 2, j + 1]] = 3; q[[i, j]] = 0; q[[i + 1, j + 1]] = 0,
- If[q[[i + 1, j]] == 4 && q[[i + 2, j + 1]] == 3, q[[i, j]] = 1;
- q[[i + 1, j + 1]] = 1; q[[i + 1, j]] = 0;
- q[[i + 2, j + 1]] = 0]])
- flip4[i_, j_] := (
- If[q[[i, j]] == 2 && q[[i + 1, j + 1]] == 2, q[[i, j + 1]] = 3;
- q[[i + 1, j + 2]] = 4; q[[i, j]] = 0; q[[i + 1, j + 1]] = 0,
- If[q[[i, j + 1]] == 3 && q[[i + 1, j + 2]] == 4, q[[i, j]] = 2;
- q[[i + 1, j + 1]] = 2; q[[i, j + 1]] = 0;
- q[[i + 1, j + 2]] = 0]])
- flip5[i_, j_] := (
- If[q[[i, j]] == 2 && q[[i + 1, j + 2]] == 3, q[[i, j + 2]] = 1;
- q[[i, j + 1]] = 3; q[[i, j]] = 0; q[[i + 1, j + 2]] = 0,
- If[q[[i, j + 2]] == 1 && q[[i, j + 1]] == 3, q[[i, j]] = 2;
- q[[i + 1, j + 2]] = 3; q[[i, j + 2]] = 0; q[[i, j + 1]] = 0]])
- flip6[i_, j_] := (
- If[q[[i, j]] == 1 && q[[i + 2, j + 1]] == 4, q[[i + 1, j]] = 4;
- q[[i + 2, j]] = 2; q[[i, j]] = 0; q[[i + 2, j + 1]] = 0,
- If[q[[i + 1, j]] == 4 && q[[i + 2, j]] == 2, q[[i, j]] = 1;
- q[[i + 2, j + 1]] = 4; q[[i + 1, j]] = 0; q[[i + 2, j]] = 0]])
- test[i_, j_] := (q[[i, j]] == 1 &&
- q[[i, j + 1]] == 1) || (q[[i, j + 1]] == 3 &&
- q[[i + 2, j]] == 4) || (q[[i, j]] == 2 &&
- q[[i + 1, j]] == 2) || (q[[i + 1, j]] == 4 &&
- q[[i, j + 2]] == 3) || (q[[i, j]] == 1 &&
- q[[i + 1, j + 1]] == 1) || (q[[i + 1, j]] == 4 &&
- q[[i + 2, j + 1]] == 3) || (q[[i, j]] == 2 &&
- q[[i + 1, j + 1]] == 2) || (q[[i, j + 1]] == 3 &&
- q[[i + 1, j + 2]] == 4) || (q[[i, j]] == 2 &&
- q[[i + 1, j + 2]] == 3) || (q[[i, j + 2]] == 1 &&
- q[[i, j + 1]] == 3) || (q[[i, j]] == 1 &&
- q[[i + 2, j + 1]] == 4) || (q[[i + 1, j]] == 4 &&
- q[[i + 2, j]] == 2)
- movematrix = Table[False, {i, 1, 3 n}, {j, 1, 3 n}];
- For[j = 1, j < 3 n - 1, j++,
- For[i = 2, i < 3 n - 1, i++, movematrix[[i, j]] = test[i, j]]];
- movable = Position[movematrix, True];
- movable[[1]][[2]]
- (*s\occuper d ajouter les elements bougeables a la list*)
- flip[] := {movable = Position[movematrix, True];
- k = Random[Integer, {1, Length[movable]}];
- Block[{i = movable[[k]][[1]], j = movable[[k]][[2]]}, flip1[i, j];
- flip2[i, j]; flip3[i, j]; flip4[i, j]; flip5[i, j]; flip6[i, j];
- For[a = -2, a < 3, a++,
- For[b = -2, b < 3, b++,
- movematrix[[Mod[i + a, 3 n - 3] + 1, Mod[j + b, 3 n - 3] + 1]] =
- test[Mod[i + a, 3 n - 3] + 1, Mod[j + b, 3 n - 3] + 1]]]]}
- lp1[] := Rotate[Show[
- Graphics[
- Flatten[Table[
- If[i <= (3 n) && j <= (3 n + 1),
- If[p[[i, j]] == 1,
- If[Mod[i + j, 3] == 2, {Yellow,
- Rectangle[{i, j}, {i + 3, j + 1}], Black,
- Line[{{i, j}, {i + 3, j}, {i + 3, j + 1}, {i, j + 1}, {i,
- j}}]}, Line[{{i, j}, {i + 3, j}, {i + 3, j + 1}, {i,
- j + 1}, {i, j}}]],
- If[p[[i, j]] == 4,
- If[Mod[i + j, 3] == 2, {Pink,
- Rectangle[{i, j}, {i + 1, j + 3}], Black,
- Line[{{i, j}, {i + 1, j}, {i + 1, j + 3}, {i, j + 3}, {i,
- j}}]}, {Blue, Rectangle[{i, j}, {i + 1, j + 3}], Black,
- Line[{{i, j}, {i + 1, j}, {i + 1, j + 3}, {i, j + 3}, {i,
- j}}]}], Point[{1, 1}], {}], {}], {}], {i, 1, 3 n}, {j,
- 1, 3 n}]]]], -Pi/2]
- lp1[] := Rotate[Show[
- Graphics[
- Flatten[Table[
- If[i <= (3 n) && j <= (3 n + 1),
- If[p[[i, j]] == 1,
- If[Mod[i + j, 3] == 2, {Yellow,
- Rectangle[{i, j}, {i + 3, j + 1}], Black,
- Line[{{i, j}, {i + 3, j}, {i + 3, j + 1}, {i, j + 1}, {i,
- j}}]}, Line[{{i, j}, {i + 3, j}, {i + 3, j + 1}, {i,
- j + 1}, {i, j}}]],
- If[p[[i, j]] == 4,
- If[Mod[i + j, 3] == 2, {Pink,
- Rectangle[{i, j}, {i + 1, j + 3}], Black,
- Line[{{i, j}, {i + 1, j}, {i + 1, j + 3}, {i, j + 3}, {i,
- j}}]}, {Blue, Rectangle[{i, j}, {i + 1, j + 3}], Black,
- Line[{{i, j}, {i + 1, j}, {i + 1, j + 3}, {i, j + 3}, {i,
- j}}]}], Point[{1, 1}], {}], {}], {}], {i, 1, 3 n}, {j,
- 1, 3 n}]]]], -Pi/2]
- lp2[] := Rotate[Show[
- Graphics[
- Flatten[Table[
- If[i <= (3 n) && j <= (3 n + 1),
- If[q[[i, j]] == 1,
- If[Mod[i + j, 3] == 2, {Yellow,
- Rectangle[{i, j}, {i + 3, j + 1}], Black,
- Line[{{i, j}, {i + 3, j}, {i + 3, j + 1}, {i, j + 1}, {i,
- j}}]}, Line[{{i, j}, {i + 3, j}, {i + 3, j + 1}, {i,
- j + 1}, {i, j}}]],
- If[q[[i, j]] == 4,
- If[Mod[i + j, 3] == 2, {Pink,
- Rectangle[{i, j}, {i + 1, j + 3}], Black,
- Line[{{i, j}, {i + 1, j}, {i + 1, j + 3}, {i, j + 3}, {i,
- j}}]}, {Blue, Rectangle[{i, j}, {i + 1, j + 3}], Black,
- Line[{{i, j}, {i + 1, j}, {i + 1, j + 3}, {i, j + 3}, {i,
- j}}]}], Point[{1, 1}], {}], {}], {}], {i, 1, 3 n}, {j,
- 1, 3 n}]]]], -Pi/2]
- temp[x_, y_, i_, j_] :=
- Which[x == 1, {Blue, Line[{{i - 1/2, j - 1/2}, {i + 3/2, j - 1/2}}],
- Red, Line[{{i - 1/2, j - 1/2}, {i - 1/2, j + 3/2}}]},
- x == 4 && y == 1, {Red,
- Line[{{i - 1/2, j - 1/2}, {i + 3/2, j - 1/2}}], Blue,
- Line[{{i - 1/2, j - 1/2}, {i - 1/2, j + 3/2}}]},
- x == 1 && y != 1 && y != 4, {Blue,
- Line[{{i - 1/2, j - 1/2}, {i + 3/2, j - 1/2}}]},
- y == 1 && x != 1, {Red,
- Line[{{i - 1/2, j - 1/2}, {i + 3/2, j - 1/2}}]},
- x == 4 && y != 4 && x != 1, {Blue,
- Line[{{i - 1/2, j - 1/2}, {i - 1/2, j + 3/2}}]},
- y == 4 && x != 4, {Red,
- Line[{{i - 1/2, j - 1/2}, {i - 1/2, j + 3/2}}]}];
- temp2[x_, i_, j_] :=
- Which[x == 1, {Black,
- Line[{{i, j}, {i + 3, j}, {i + 3, j + 1}, {i, j + 1}, {i, j}}]},
- x == 2, {Black,
- Line[{{i, j}, {i, j + 3}, {i + 1, j + 3}, {i + 1, j}, {i, j}}]},
- x == 3, {Black,
- Line[{{i, j}, {i, j + 1}, {i + 2, j + 1}, {i + 2, j}, {i + 1,
- j}, {i + 1, j - 1}, {i, j - 1}, {i, j}}]},
- x == 4, {Black,
- Line[{{i, j}, {i - 1, j}, {i - 1, j + 1}, {i, j + 1}, {i,
- j + 2}, {i + 1, j + 2}, {i + 1, j}, {i, j}}]}];
- lp3[] := Rotate[Show[
- Graphics[
- Flatten[Table[
- temp[p[[i, j]], q[[i, j]], i, j], {i, 1, 3 n}, {j, 1,
- 3 n}]]]], -Pi/2]
- lp[] := Rotate[Show[
- Graphics[
- Flatten[Table[
- temp2[q[[i, j]], i, j], {i, 1, 3 n}, {j, 1, 3 n}]]]], -Pi/2]
- Table[flip[], {1000000}];
- MatrixForm[q]
- lp[]
- Export["out.dat", q]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement