Abelian sandpile model: Difference between revisions
Content added Content deleted
Alextretyak (talk | contribs) (→{{header|11l}}: Write PPM) |
(Added XPL0 example.) |
||
Line 3,500: | Line 3,500: | ||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 1 0 0 0 |
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 1 0 0 0 |
||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
||
</pre> |
|||
=={{header|XPL0}}== |
|||
<lang XPL0>def Size = 200; |
|||
char Pile1(Size*Size), Pile2(Size*Size); |
|||
int Spigot, I, X, Y; |
|||
[SetVid($13); \VGA 320x200x8 |
|||
FillMem(Pile1, 0, Size*Size); |
|||
FillMem(Pile2, 0, Size*Size); |
|||
Spigot:= 400_000; |
|||
repeat I:= 0; |
|||
for Y:= 0 to Size-1 do |
|||
for X:= 0 to Size-1 do |
|||
[if X=Size/2 & Y=Size/2 then |
|||
[Spigot:= Spigot-4; |
|||
Pile1(I):= Pile1(I)+4; |
|||
]; |
|||
if Pile1(I) >= 4 then |
|||
[Pile1(I):= Pile1(I)-4; |
|||
Pile2(I-1):= Pile2(I-1)+1; |
|||
Pile2(I+1):= Pile2(I+1)+1; |
|||
Pile2(I-Size):= Pile2(I-Size)+1; |
|||
Pile2(I+Size):= Pile2(I+Size)+1; |
|||
]; |
|||
Point(X, Y, Pile1(I)*2); |
|||
I:= I+1; |
|||
]; |
|||
I:= Pile1; Pile1:= Pile2; Pile2:= I; |
|||
until Spigot < 4; |
|||
]</lang> |
|||
{{out}} |
|||
<pre> |
|||
[http://www.xpl0.org/rpi/sand.gif] |
|||
</pre> |
</pre> |