Прежде чем я сделаю лучший ответ, вы должны понять, что ваш вопрос странно сформулирован. Правила обновления вашего сотового автомата определяются вами, поэтому я не знаю, есть ли у вас дополнительные условия, которые необходимо выполнить.
Я думаю, что вы спрашиваете, каков наилучший способ выбора района, и вы можете сделать это с помощью Part:
(* We abbreviate 'nbhd' for neighborhood *)
getNbhd[A_, i_Integer?Positive, j_Integer?Positive] :=
A[[i - 1 ;; i + 1, j - 1 ;; j + 1]];
Это выберет соответствующий район Мура, включая дополнительную центральную ячейку, которую вы можете отфильтровать при вызове функции обновления.
В частности, для выполнения шага обновления сотового автомата необходимо обновить все ячейки одновременно. В реальном мире это означает создание отдельного массива и размещение там обновленных значений, а затем удаление исходного массива.
Подробнее см. В моем блоге Cellular Automata , в котором содержится реализация игры Конвея «Жизнь в Mathematica».