Abelian sandpile model: Difference between revisions
Content added Content deleted
m (→{{header|Phix}}: added syntax colouring the hard way) |
|||
Line 1,906: | Line 1,906: | ||
0 0 0 0 0 1 2 2 2 1 0 0 0 0 0 |
0 0 0 0 0 1 2 2 2 1 0 0 0 0 0 |
||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0</pre> |
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0</pre> |
||
=={{header|Mathematica}}/{{header|Wolfram Language}}== |
|||
<lang Mathematica>ClearAll[sp] |
|||
sp[s_List] + sp[n_Integer] ^:= sp[s] + sp[ConstantArray[n, Dimensions[s]]] |
|||
sp[s_List] + sp[t_List] ^:= Module[{dim, r, tmp, neighbours}, dim = Dimensions[s]; |
|||
r = s + t; |
|||
While[Max[r] > 3, r = ArrayPad[r, 1, 0]; |
|||
tmp = Quotient[r, 4]; |
|||
r -= 4 tmp; |
|||
r += RotateLeft[tmp, {0, 1}] + RotateLeft[tmp, {1, 0}] + |
|||
RotateLeft[tmp, {0, -1}] + RotateLeft[tmp, {-1, 0}]; |
|||
r = ArrayPad[r, -1];]; |
|||
sp[r] |
|||
] |
|||
u = sp[CenterArray[250, {15, 15}]]; |
|||
u += sp[0]; |
|||
StringRiffle[StringJoin /@ Map[ToString, u[[1]], {2}], "\n"]</lang> |
|||
{{out}} |
|||
<pre>000000000000000 |
|||
000001222100000 |
|||
000021020120000 |
|||
000233323332000 |
|||
002322222223200 |
|||
011322232223110 |
|||
020322030223020 |
|||
022223323322220 |
|||
020322030223020 |
|||
011322232223110 |
|||
002322222223200 |
|||
000233323332000 |
|||
000021020120000 |
|||
000001222100000 |
|||
000000000000000</pre> |
|||
=={{header|Nim}}== |
=={{header|Nim}}== |