我正在用数学编写一个生命游戏程序但是有一个警告,我需要能够将复制规则应用于一定百分比的单元格,我想尝试使用 MapAt 的新方法,但 liveNeighbors 不起作用elementwise,如果不完全按照我之前所做的(很多混乱的索引),我想不出一种修复它的方法,有人有什么建议吗?(我假设这会比下面列出的旧方法更有效,如果不是请告诉我,我只是一个初学者!)。
我正在尝试做的事情:
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]]]
谢谢!