威康生命遊戲 in PHP
威康生命遊戲 in PHP 生命遊戲,無論在程式、哲學、生命探討上都十分有趣,在生命遊戲中甚至出現永動機。而在 Codewars 中也有生命遊戲的 題目,規則也十分簡單,以下為維基百科的內容: 1. 每個細胞有兩種狀態 - 存活或死亡,每個細胞與以自身為中心的周圍八格細胞產生互動(如圖,黑色為存活,白色為死亡) 2. 當前細胞為存活狀態時,當周圍的存活細胞低於2個時(不包含2個),該細胞變成死亡狀態。(模擬生命數量稀少) 3. 當前細胞為存活狀態時,當周圍有2個或3個存活細胞時,該細胞保持原樣。 4. 當前細胞為存活狀態時,當周圍有超過3個存活細胞時,該細胞變成死亡狀態。(模擬生命數量過多) 5. 當前細胞為死亡狀態時,當周圍有3個存活細胞時,該細胞變成存活狀態。(模擬繁殖) 若想知道關於更多可以觀看上方由混亂博物館出品的影片,此篇就針對這 4kyu 的題目進行探討解法。首先題目中指出這個宇宙的 x,y 軸都是無限大的,所以生成高斯帕機槍且迭代過多次可能造成記憶體使用過量。 迭代 首先題目給定一個二維矩陣以及迭代次數(世代),而需取得過了該迭代次數後的情形。 function get_generation(array $cells, int $generations): array { if($cells == []) return [[]]; $w = count($cells); $h = count($cells[0]) for ($index = 0; $index < $generations; $index++) { $cells = getNextGen($cells, $w, $h); $sum = 0; foreach ($cells as $row) { $sum += array_sum($row); } if ($sum == 0) { return [[]]; } } return $cells; } 於是可以建立一個方法 getNextGen 來獲取下個世代的結果...