/**
  * @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;
 }