Jump to content

Abelian sandpile model/Identity: Difference between revisions

→‎{{header|Lua}}: added Lua solution
No edit summary
(→‎{{header|Lua}}: added Lua solution)
Line 890:
2 1 2
</pre>
=={{header|Lua}}==
Uses Abelian sandpile model [[Abelian_sandpile_model#Lua|here]], then extends..
<lang Lua>sandpile.__index = sandpile
sandpile.new = function(self, vals)
local inst = setmetatable({},sandpile)
inst.cell, inst.dim = {}, #vals
for r = 1, inst.dim do
inst.cell[r] = {}
for c = 1, inst.dim do
inst.cell[r][c] = vals[r][c]
end
end
return inst
end
sandpile.add = function(self, other)
local vals = {}
for r = 1, self.dim do
vals[r] = {}
for c = 1, self.dim do
vals[r][c] = self.cell[r][c] + other.cell[r][c]
end
end
local inst = sandpile:new(vals)
inst:iter()
return inst
end
 
local s1 = sandpile:new{{1,2,0},{2,1,1},{0,1,3}}
local s2 = sandpile:new{{2,1,3},{1,0,1},{0,1,0}}
print("s1 =") s1:draw()
print("\ns2 =") s2:draw()
local s1ps2 = s1:add(s2)
print("\ns1 + s2 =") s1ps2:draw()
local s2ps1 = s2:add(s1)
print("\ns2 + s1 =") s2ps1:draw()
local topple = sandpile:new{{4,3,3},{3,1,2},{0,2,3}}
print("\ntopple, before =") topple:draw()
topple:iter()
print("\ntopple, after =") topple:draw()
local s3 = sandpile:new{{3,3,3},{3,3,3},{3,3,3}}
print("\ns3 =") s3:draw()
local s3_id = sandpile:new{{2,1,2},{1,0,1},{2,1,2}}
print("\ns3_id =") s3_id:draw()
local s3ps3_id = s3:add(s3_id)
print("\ns3 + s3_id =") s3ps3_id:draw()
local s3_idps3_id = s3_id:add(s3_id)
print("\ns3_id + s3_id =") s3_idps3_id:draw()</lang>
{{out}}
<pre>s1 =
1 2 0
2 1 1
0 1 3
 
s2 =
2 1 3
1 0 1
0 1 0
 
s1 + s2 =
3 3 3
3 1 2
0 2 3
 
s2 + s1 =
3 3 3
3 1 2
0 2 3
 
topple, before =
4 3 3
3 1 2
0 2 3
 
topple, after =
2 1 0
0 3 3
1 2 3
 
s3 =
3 3 3
3 3 3
3 3 3
 
s3_id =
2 1 2
1 0 1
2 1 2
 
s3 + s3_id =
3 3 3
3 3 3
3 3 3
 
s3_id + s3_id =
2 1 2
1 0 1
2 1 2</pre>
 
=={{header|Nim}}==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.