Skip to content

Instantly share code, notes, and snippets.

@koniiiik
Created October 21, 2013 07:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save koniiiik/7080146 to your computer and use it in GitHub Desktop.
Save koniiiik/7080146 to your computer and use it in GitHub Desktop.
#INCLUDE "hostio.inc"
#USE "hostio.lib"
#USE "snglmath.lib"
VAL INT NUM.CELLS IS 47:
VAL INT OUTPUT.FIELD.WIDTH IS 3:
INT32, INT32 FUNCTION Random.bit(VAL INT32 seed)
-- Generates pseudo-random numbers. Returns an INT32 with a value of 0 or 1.
INT32 new.seed, result:
REAL32 number:
VALOF
SEQ
number, new.seed := RAN(seed)
IF
number < 0.5
result := 0
TRUE
result := 1
RESULT result, new.seed
:
PROC life.cell (CHAN OF INT n0.in, n0.out, n1.in, n1.out, collector,
VAL INT initial.state)
INT state:
SEQ
state := initial.state
WHILE TRUE
INT st0, st1:
SEQ
collector ! state
PAR
n0.in ? st0
n1.in ? st1
n0.out ! state
n1.out ! state
CASE (state + st0) + st1
2, 3
state := 1
ELSE
state := 0
:
PROC life.printer ([]CHAN OF INT states.input, CHAN OF SP fs, ts)
WHILE TRUE
INT state:
SEQ
SEQ i = 0 FOR NUM.CELLS
SEQ
states.input[i] ? state
so.write.int (fs, ts, state, OUTPUT.FIELD.WIDTH)
so.write.nl (fs, ts)
:
PROC life.main (CHAN OF SP fs, ts)
INT32 random.number, random.state:
[NUM.CELLS]CHAN OF INT forward, backward, collectors:
[NUM.CELLS]INT initial.states:
SEQ
so.time (fs, ts, random.state, random.number)
SEQ i = 0 FOR NUM.CELLS
SEQ
random.number, random.state := Random.bit (random.state)
initial.states[i] := INT(random.number)
PAR
life.printer (collectors, fs, ts)
PAR i = 0 FOR NUM.CELLS
life.cell (forward[i],
backward[i],
backward[(i + 1) \ NUM.CELLS],
forward[(i + 1) \ NUM.CELLS],
collectors[i],
initial.states[i])
:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment