September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
|
|
@ -7,7 +7,7 @@ enum cProb = 0.01; // Tree creation probability.
|
|||
enum Cell : char { empty=' ', tree='T', fire='#' }
|
||||
alias World = Cell[][];
|
||||
|
||||
bool hasBurningNeighbours(in World world, in int r, in int c)
|
||||
bool hasBurningNeighbours(in World world, in ulong r, in ulong c)
|
||||
pure nothrow @safe @nogc {
|
||||
foreach (immutable rowShift; -1 .. 2)
|
||||
foreach (immutable colShift; -1 .. 2)
|
||||
|
|
@ -19,8 +19,8 @@ pure nothrow @safe @nogc {
|
|||
}
|
||||
|
||||
void nextState(in World world, World nextWorld) /*nothrow*/ @safe /*@nogc*/ {
|
||||
foreach (immutable r, const row; world)
|
||||
foreach (immutable c, immutable elem; row)
|
||||
foreach (r, row; world)
|
||||
foreach (c, elem; row)
|
||||
final switch (elem) with (Cell) {
|
||||
case empty:
|
||||
nextWorld[r][c]= (uniform01 < cProb) ? tree : empty;
|
||||
|
|
|
|||
|
|
@ -1,77 +0,0 @@
|
|||
#chance of empty->tree
|
||||
set :p 0.004
|
||||
#chance of spontaneous tree combustion
|
||||
set :f 0.001
|
||||
#chance of tree in initial state
|
||||
set :s 0.5
|
||||
#height of world
|
||||
set :H 10
|
||||
#width of world
|
||||
set :W 20
|
||||
|
||||
has-burning-neigbour state pos:
|
||||
for i range -- swap ++ dup &< pos:
|
||||
for j range -- swap ++ dup &> pos:
|
||||
& i j
|
||||
try:
|
||||
state!
|
||||
catch value-error:
|
||||
:empty
|
||||
if = :burning:
|
||||
return true
|
||||
false
|
||||
|
||||
evolve state pos:
|
||||
state! pos
|
||||
if = :tree dup:
|
||||
if has-burning-neigbour state pos:
|
||||
:burning drop
|
||||
elseif chance f:
|
||||
:burning drop
|
||||
elseif = :burning:
|
||||
:empty
|
||||
else:
|
||||
if chance p:
|
||||
:tree
|
||||
else:
|
||||
:empty
|
||||
|
||||
step state:
|
||||
local :next {}
|
||||
for k in keys state:
|
||||
set-to next k evolve state k
|
||||
next
|
||||
|
||||
local :(c) { :tree "T" :burning "B" :empty "." }
|
||||
print-state state:
|
||||
for j range 0 H:
|
||||
for i range 0 W:
|
||||
print\ (c)! state! & i j
|
||||
print ""
|
||||
|
||||
init-state:
|
||||
local :first {}
|
||||
for j range 0 H:
|
||||
for i range 0 W:
|
||||
if chance s:
|
||||
:tree
|
||||
else:
|
||||
:empty
|
||||
set-to first & i j
|
||||
first
|
||||
|
||||
run:
|
||||
init-state
|
||||
while true:
|
||||
print-state dup
|
||||
print ""
|
||||
step
|
||||
|
||||
run-slowly:
|
||||
init-state
|
||||
while true:
|
||||
print-state dup
|
||||
drop input
|
||||
step
|
||||
|
||||
run
|
||||
Loading…
Add table
Add a link
Reference in a new issue