43 lines
1.0 KiB
Plaintext
43 lines
1.0 KiB
Plaintext
function surround2D(b, i, j)
|
|
h, w = size(b)
|
|
[b[x,y] for x in i-1:i+1, y in j-1:j+1 if (0 < x <= h && 0 < y <= w)]
|
|
end
|
|
|
|
surroundhas1or2(b, i, j) = 0 < sum(map(x->Char(x)=='H', surround2D(b, i, j))) <= 2 ? 'H' : '.'
|
|
|
|
function boardstep!(currentboard, nextboard)
|
|
x, y = size(currentboard)
|
|
for j in 1:y, i in 1:x
|
|
ch = Char(currentboard[i, j])
|
|
if ch == ' '
|
|
continue
|
|
else
|
|
nextboard[i, j] = (ch == 'H') ? 't' : (ch == 't' ? '.' :
|
|
surroundhas1or2(currentboard, i, j))
|
|
end
|
|
end
|
|
end
|
|
|
|
const b1 = " " *
|
|
" tH " *
|
|
" . .... " *
|
|
" .. " *
|
|
" "
|
|
const mat = reshape(map(x->UInt8(x[1]), split(b1, "")), (9, 5))'
|
|
const mat2 = copy(mat)
|
|
|
|
function printboard(mat)
|
|
for i in 1:size(mat)[1]
|
|
println("\t", join([Char(c) for c in mat[i,:]], ""))
|
|
end
|
|
end
|
|
|
|
println("Starting Wireworld board:")
|
|
printboard(mat)
|
|
for step in 1:8
|
|
boardstep!(mat, mat2)
|
|
println(" Step $step:")
|
|
printboard(mat2)
|
|
mat .= mat2
|
|
end
|