RosettaCodeData/Task/Wireworld/EasyLang/wireworld.easy

86 lines
1.3 KiB
Text
Raw Permalink Normal View History

2024-10-16 18:07:41 -07:00
sysconf topleft
2024-03-06 22:25:12 -08:00
global m[] nc .
2025-06-11 20:16:52 -04:00
gbackground 777
2024-03-06 22:25:12 -08:00
#
2025-06-11 20:16:52 -04:00
proc show .
gclear
2024-03-06 22:25:12 -08:00
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
2025-06-11 20:16:52 -04:00
gcolor 000
2024-03-06 22:25:12 -08:00
elif m[i] = 1
2025-06-11 20:16:52 -04:00
gcolor 980
2024-03-06 22:25:12 -08:00
elif m[i] = 2
2025-06-11 20:16:52 -04:00
gcolor 338
2024-03-06 22:25:12 -08:00
else
2025-06-11 20:16:52 -04:00
gcolor 833
2024-03-06 22:25:12 -08:00
.
2025-06-11 20:16:52 -04:00
grect x * scale y * scale sz sz
2024-03-06 22:25:12 -08:00
.
.
2025-06-11 20:16:52 -04:00
proc read .
2024-03-06 22:25:12 -08:00
s$ = input
nc = len s$ + 2
2025-06-11 20:16:52 -04:00
for i to nc : m[] &= 0
2024-03-06 22:25:12 -08:00
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
.
.
2025-06-11 20:16:52 -04:00
for i to nc - len s$ - 1 : m[] &= 0
2024-03-06 22:25:12 -08:00
s$ = input
until s$ = ""
.
2025-06-11 20:16:52 -04:00
for i to nc : m[] &= 0
2024-03-06 22:25:12 -08:00
.
read
#
len mn[] len m[]
#
2025-06-11 20:16:52 -04:00
proc update .
2024-03-06 22:25:12 -08:00
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
2025-06-11 20:16:52 -04:00
for dx = -1 to 1 : for dy = -1 to 1
ix = i + dy * nc + dx
s += if m[ix] = 2
2024-03-06 22:25:12 -08:00
.
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.........
. .
...
. .
2025-06-11 20:16:52 -04:00
Ht.......