一千萬個為什麽

搜索

在3D中實現生命遊戲

挑戰是在3D中找到最短的生命遊戲實現(示例)。這些是規則:

只有1個或更少鄰居的細胞(在這種情況下,立方體)死亡,好像是孤獨的 如果正好5個細胞圍繞著一個空細胞,它們會繁殖並填充它 如果一個小區有8個或更多的鄰居,它就會因過度擁擠而死亡。

使其至少為10x10x10,其中各層單獨輸出,如下所示:

0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 X 0 0 X 0 0 0 0 0
0 0 X X X 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0

當然,也可以接受圖形3D模擬 起始位置可能是硬編碼的,但如果將其更改為任何起始位置,則必須起作用。它必須能夠計算任何數量的代,並且用戶必須能夠手動請求下一代。

角色中最短的代碼獲勝!

我為任何(立方體)大小制作了自己的實現: http://jensrenders.site88.net/ life3D.htm 您可以使用它來測試,並且您可以將代碼基於我的代碼,盡管我沒有對它進行評論。

最佳答案

Mathematica - 120個字節

g=CellularAutomaton[{([email protected]#;c=l[[14]];[email protected][l,{14}];Which[n<2||n>7,0,n==5||c==1,1,0<1,0])&,{},{1,1,1}},##]&

當然不是勝利的競爭者,但這不是我的意圖。此外,只需計算出規則編號,就可以大大降低這一點。我真的很想寫一個可視化(雖然我確實已經有很多了)。所以這裏我們去):

animateGol3d[size_, i_, n_] := 
  ListAnimate[
    Graphics3D[
      Cuboid /@ Position[#, 1], 
      PlotRange -> {{0, size}, {0, size}, {0, size}} + 1
    ] & /@ g[i, n]
  ];

在嘗試了一堆初始條件後,我得到了以下內容:

enter image description here

這是一個網格大小為 20x20x20 的網格。這花了幾秒鐘來模擬和渲染:

enter image description here

順便說一下,這假定了周期性邊界條件。

轉載註明原文: 在3D中實現生命遊戲