corridors.lua
local primitives = require('forma.primitives')
local automata = require('forma.automata')
local subpattern = require('forma.subpattern')
local neighbourhood = require('forma.neighbourhood')
local domain = primitives.square(80,20)
local ca = subpattern.random(domain, 1)
local moore = automata.rule(neighbourhood.moore(), "B12/S012345678")
local diag = automata.rule(neighbourhood.diagonal_2(), "B01/S01234")
local vn = automata.rule(neighbourhood.von_neumann(),"B12/S01234")
local ruleset = {vn, moore, diag}
repeat
local converged
ca, converged = automata.async_iterate(ca, domain, ruleset)
until converged
local nbh = neighbourhood.von_neumann()
local segments = subpattern.neighbourhood_categories(ca, nbh)
subpattern.print_patterns(domain, segments, nbh:category_label())