Я пишу программу «Игра в жизнь» на языке mathematica, однако есть оговорка: мне нужно иметь возможность применять правила воспроизведения к некоторому проценту клеток, я хочу попробовать новый метод с использованием MapAt, но liveNeighbors не не работает поэлементно, и я не могу придумать способ исправить это, не выполнив точно то, что я делал раньше (много грязной индексации), у кого-нибудь есть какие-либо предложения? (Я предполагаю, что это будет более эффективным, чем старый метод, который приведен ниже, если нет, пожалуйста, дайте мне знать, я только начинающий!).
Что я пытаюсь сделать:
Map[ArrayPlot,FixedPointList[MapAt[update[#,liveNeighbors[#]]&,#,coords]&,Board, 1]]
Что я уже сделал:
LifeGame[ n_Integer?Positive, steps_] := Module [{Board, liveNeighbors, update},
Board = Table [Random [Integer], {n}, {n}];
liveNeighbors[ mat_] :=
Apply[Plus,Map[RotateRight[mat,#]&,{{-1,-1},{-1, 0},{-1,1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1}}]];
update[1, 2] := 1;
update[_, 3] := 1;
update[ _, _] := 0;
SetAttributes[update, Listable];
Seed = RandomVariate[ProbabilityDistribution[0.7 UnitStep[x] + 0.3 UnitStep[x - 1], {x, 0, 1, 1}], {n, n}];
FixedPointList[Table[If[Seed[[i, j]] == 1,update[#[[i, j]], liveNeighbors[#][[i, j]]],#[[i, j]]], {i, n}, {j, n}]&, Board, steps]]]
Спасибо!