function laser($inimigos) { if (empty($inimigos)) { return 0; } $linhas = $colunas = array(); foreach ($inimigos as $inimigo) { if (!isset($linhas[$inimigo->x])) { $linhas[$inimigo->x] = 0; } if (!isset($colunas[$inimigo->y])) { $colunas[$inimigo->y] = 0; } $linhas[$inimigo->x]++; $colunas[$inimigo->y]++; } // Escolhe qual linha ou coluna atirar if (count($linhas) < count($colunas)) { $maiorLinha = array_search(max($linhas), $linhas); $maiorColuna = false; } else { $maiorColuna = array_search(max($colunas), $colunas); $maiorLinha = false; } // Remove os inimigos da linha/coluna escolhida foreach ($inimigos as $key => $inimigo) { if ($inimigo->x === $maiorLinha or $inimigo->y === $maiorColuna) { unset($inimigos[$key]); } } return 1 + laser($inimigos); }
function test_tabuleiro_x() { $tabuleiro = array(new Inimigo(0, 1), new Inimigo(1, 0), new Inimigo(1, 1), new Inimigo(1, 2), new Inimigo(2, 2), new Inimigo(3, 0), new Inimigo(1, 0), new Inimigo(0, 1), new Inimigo(1, 1), new Inimigo(2, 1), new Inimigo(2, 2), new Inimigo(0, 3)); $this->assertSame(3, laser($tabuleiro)); }