Implementation [of 2D cellular automata]
An n × n array of white squares with a single black square in the middle can be generated by
PadLeft[{{1}}, {n, n}, 0, Floor[{n, n}/2]]
For the 5-neighbor rules introduced on page 170 each step can be implemented by
CAStep[rule_, a_] := Map[rule〚10 - #〛 &, ListConvolve[{{0, 2, 0}, {2, 1, 2}, {0, 2, 0}}, a, 2], {2}]
where rule is obtained from the code number by IntegerDigits[code, 2, 10].
For the 9-neighbor rules introduced on page 177
CAStep[rule_, a_] := Map[rule〚18 - #〛 &, ListConvolve[{{2, 2, 2}, {2, 1, 2}, {2, 2, 2}}, a, 2], {2}]
where rule is given by IntegerDigits[code, 2, 18].
In d dimensions with k colors, 5-neighbor rules generalize to (2d + 1)-neighbor rules, with
CAStep[{rule_, d_}, a_] := Map[rule〚-1 - #〛 &, a + k AxesTotal[a, d], {d}]
AxesTotal[a_, d_] := Apply[Plus, Map[RotateLeft[a, #] + RotateRight[a, #]&, IdentityMatrix[d]]]
with rule given by IntegerDigits[code, k, k(2d(k - 1) + 1)].
9-neighbor rules generalize to 3d-neighbor rules, with
CAStep[{rule_, d_}, a_] := Map[rule〚-1 - #〛 &, a + k FullTotal[a, d], {d}]
FullTotal[a_, d_] := Array[RotateLeft[a, {##}] &, Table[3, {d}], -1, Plus] - a
with rule given by IntegerDigits[code, k, k((3d - 1)(k - 1) + 1)].
In 3 dimensions, the positions of black cells can conveniently be displayed using
Graphics3D[Map[Cuboid[-Reverse[#]] &, Position[a, 1]]]