/** * @param array $neighboursCount * @param string $cellSpecies * @return State */ private function getLiveCellNewState(array $neighboursCount, $cellSpecies) { $neighborSpeciesCount = isset($neighboursCount[$cellSpecies]) ? $neighboursCount[$cellSpecies] : 0; // If there are two or three organisms of the same type living in the elements // surrounding an organism of the same, type then it may survive. if ($neighborSpeciesCount == 2 || $neighborSpeciesCount == 3) { return State::letLive(); } // – If there are less than two organisms of one type surrounding one of the same type // then it will die due to isolation. // – If there are four or more organisms of one type surrounding one of the same type // then it will die due to overcrowding. return State::terminate(); }
/** * @return array */ public function getNeighboursCountForLiveCellProvider() { $data = []; // x, y, expected state $data[] = [0, 0, State::letLive()]; $data[] = [0, 1, State::letLive()]; $data[] = [1, 0, State::terminate()]; $data[] = [1, 1, State::terminate()]; $data[] = [1, 2, State::letLive()]; $data[] = [1, 3, State::letLive()]; $data[] = [2, 0, State::letLive()]; $data[] = [2, 2, State::letLive()]; $data[] = [2, 4, State::letLive()]; $data[] = [3, 3, State::letLive()]; $data[] = [3, 4, State::letLive()]; return $data; }