RosettaCodeData/Task/Wireworld/EasyLang/wireworld.easy

86 lines
1.3 KiB
Plaintext

sysconf topleft
global m[] nc .
gbackground 777
#
proc show .
gclear
scale = 100 / nc
sz = scale * 0.95
for i to len m[]
x = (i - 1) mod nc
y = (i - 1) div nc
if m[i] = 0
gcolor 000
elif m[i] = 1
gcolor 980
elif m[i] = 2
gcolor 338
else
gcolor 833
.
grect x * scale y * scale sz sz
.
.
proc read .
s$ = input
nc = len s$ + 2
for i to nc : m[] &= 0
repeat
m[] &= 0
for c$ in strchars s$
if c$ = "."
m[] &= 1
elif c$ = "H"
m[] &= 2
elif c$ = "t"
m[] &= 3
else
m[] &= 0
.
.
for i to nc - len s$ - 1 : m[] &= 0
s$ = input
until s$ = ""
.
for i to nc : m[] &= 0
.
read
#
len mn[] len m[]
#
proc update .
for i to len m[]
if m[i] = 2
mn[i] = 3
elif m[i] = 3
mn[i] = 1
elif m[i] = 1
s = 0
for dx = -1 to 1 : for dy = -1 to 1
ix = i + dy * nc + dx
s += if m[ix] = 2
.
if s = 2 or s = 1
mn[i] = 2
else
mn[i] = 1
.
.
.
swap mn[] m[]
.
on timer
update
show
timer 0.5
.
show
timer 0.5
#
input_data
tH.........
. .
...
. .
Ht.......