new tasks
This commit is contained in:
parent
2a4d27cea0
commit
80737d5a6a
1194 changed files with 15353 additions and 1 deletions
83
Task/Forest_fire/Python/forest_fire.py
Normal file
83
Task/Forest_fire/Python/forest_fire.py
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
'''
|
||||
Forest-Fire Cellular automation
|
||||
See: http://en.wikipedia.org/wiki/Forest-fire_model
|
||||
'''
|
||||
|
||||
L = 15
|
||||
# d = 2 # Fixed
|
||||
initial_trees = 0.55
|
||||
p = 0.01
|
||||
f = 0.001
|
||||
|
||||
try:
|
||||
raw_input
|
||||
except:
|
||||
raw_input = input
|
||||
|
||||
import random
|
||||
|
||||
|
||||
tree, burning, space = 'TB.'
|
||||
hood = ((-1,-1), (-1,0), (-1,1),
|
||||
(0,-1), (0, 1),
|
||||
(1,-1), (1,0), (1,1))
|
||||
|
||||
def initialise():
|
||||
grid = {(x,y): (tree if random.random()<= initial_trees else space)
|
||||
for x in range(L)
|
||||
for y in range(L) }
|
||||
return grid
|
||||
|
||||
def gprint(grid):
|
||||
txt = '\n'.join(''.join(grid[(x,y)] for x in range(L))
|
||||
for y in range(L))
|
||||
print(txt)
|
||||
|
||||
def quickprint(grid):
|
||||
t = b = 0
|
||||
ll = L * L
|
||||
for x in range(L):
|
||||
for y in range(L):
|
||||
if grid[(x,y)] in (tree, burning):
|
||||
t += 1
|
||||
if grid[(x,y)] == burning:
|
||||
b += 1
|
||||
print(('Of %6i cells, %6i are trees of which %6i are currently burning.'
|
||||
+ ' (%6.3f%%, %6.3f%%)')
|
||||
% (ll, t, b, 100. * t / ll, 100. * b / ll))
|
||||
|
||||
|
||||
def gnew(grid):
|
||||
newgrid = {}
|
||||
for x in range(L):
|
||||
for y in range(L):
|
||||
if grid[(x,y)] == burning:
|
||||
newgrid[(x,y)] = space
|
||||
elif grid[(x,y)] == space:
|
||||
newgrid[(x,y)] = tree if random.random()<= p else space
|
||||
elif grid[(x,y)] == tree:
|
||||
newgrid[(x,y)] = (burning
|
||||
if any(grid.get((x+dx,y+dy),space) == burning
|
||||
for dx,dy in hood)
|
||||
or random.random()<= f
|
||||
else tree)
|
||||
return newgrid
|
||||
|
||||
if __name__ == '__main__':
|
||||
grid = initialise()
|
||||
iter = 0
|
||||
while True:
|
||||
quickprint(grid)
|
||||
inp = raw_input('Print/Quit/<int>/<return> %6i: ' % iter).lower().strip()
|
||||
if inp:
|
||||
if inp[0] == 'p':
|
||||
gprint(grid)
|
||||
elif inp.isdigit():
|
||||
for i in range(int(inp)):
|
||||
iter +=1
|
||||
grid = gnew(grid)
|
||||
quickprint(grid)
|
||||
elif inp[0] == 'q':
|
||||
break
|
||||
grid = gnew(grid)
|
||||
iter +=1
|
||||
Loading…
Add table
Add a link
Reference in a new issue