Advertisement
Guest User

Untitled

a guest
Apr 28th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.24 KB | None | 0 0
  1. <?php
  2. echo "<pre>";
  3. $numeroDeCidades = 9;
  4. $rangeDasTorres = 2;
  5. $cidadesComTorres = [0, 1, 1, 1, 1, 0, 1, 0, 0];
  6. $cidades = [];
  7. $numeroDeMovimentacoesDasTorres = 0;
  8.  
  9.  
  10. for($i=0;$i<$numeroDeCidades;$i++){
  11.     $cidade = (new Cidade())->setIndex($i);
  12.     $cidadesComTorres[$i]===1 ? $cidade->setTorre(new Torre()) : null;
  13.     $cidades[] = $cidade;
  14. }
  15. list($cidades, $numeroDeMovimentacoesDasTorres) = colocarTorresNasCidadesDasExtremidades($cidades, $numeroDeMovimentacoesDasTorres);
  16. list($cidades, $numeroDeMovimentacoesDasTorres) = calcularMovimentacaoDasTorres($cidades, $rangeDasTorres, $numeroDeMovimentacoesDasTorres);
  17. debugCidades($cidades);
  18.  
  19.  
  20. class Cidade{
  21.  
  22.     private $index = null;
  23.     private $torre = null;
  24.  
  25.     public function getIndex(){
  26.         return $this->index;
  27.     }
  28.  
  29.     public function setIndex($index){
  30.         $this->index = $index;
  31.         return $this;
  32.     }
  33.  
  34.     public function getTorre(){
  35.         return $this->torre;
  36.     }
  37.  
  38.     public function setTorre(Torre $torre=null){
  39.         $this->torre = $torre;
  40.         return $this;
  41.     }
  42. }
  43.  
  44. class Torre{}
  45.  
  46. function colocarTorresNasCidadesDasExtremidades($cidades, $numeroDeMovimentacoesDeTorres){
  47.     print "\nNúmero de movimentações inicial: " . $numeroDeMovimentacoesDeTorres;
  48.     if(is_null($cidades[0]->getTorre())){
  49.         for($i=1;$i<count($cidades);$i++){
  50.             if(!is_null($cidades[$i]->getTorre())){
  51.                 $cidades[0]->setTorre($cidades[$i]->getTorre());
  52.                 $cidades[$i]->setTorre(null);
  53.                 $numeroDeMovimentacoesDeTorres++;
  54.                 break;
  55.             }
  56.         }
  57.     }
  58.     if(is_null($cidades[count($cidades)-1]->getTorre())){
  59.         for($i=count($cidades)-1;$i>0;$i--){
  60.             if(!is_null($cidades[$i]->getTorre())){
  61.                 $cidades[count($cidades)-1]->setTorre($cidades[$i]->getTorre());
  62.                 $cidades[$i]->setTorre(null);
  63.                 $numeroDeMovimentacoesDeTorres++;
  64.                 break;
  65.             }
  66.         }
  67.     }
  68.     print "\nNovo número de movimentações: " . $numeroDeMovimentacoesDeTorres;
  69.     return [$cidades, $numeroDeMovimentacoesDeTorres];
  70. }
  71.  
  72. function calcularMovimentacaoDasTorres($cidades, $rangeDasTorres, $numeroDeMovimentacaoDasTorres){
  73.     foreach($cidades as $key=>$cidade){
  74.         $precisaMovimentarTorre = false;
  75.         //Verificar se a cidade está energizada
  76.  
  77.         for($i=1;$i<=$rangeDasTorres*2;$i++){
  78.             if(is_null($cidade->getTorre())){
  79.                 if(
  80.                     isset($cidades[$key-$i]) AND is_null($cidades[$key-$i]->getTorre()) OR
  81.                     isset($cidades[$key+$i]) AND is_null($cidades[$key+$i]->getTorre())
  82.                 ){
  83.                     $precisaMovimentarTorre = true;
  84.                 } else {
  85.                     $precisaMovimentarTorre = false;
  86.                 }
  87.             }
  88.  
  89.         }
  90.         echo "\nIndex: " . $cidade->getIndex() . ' - ';
  91.         echo "Precisa movimentar: " . (int)$precisaMovimentarTorre;
  92.     }
  93.     return [$cidades, $numeroDeMovimentacaoDasTorres];
  94. }
  95.  
  96. function debugCidades($cidades){
  97.     foreach($cidades as $cidade){
  98.         echo "\nCidadeIndex: " . $cidade->getIndex();
  99.         echo "\nTorre: " . (string)!is_null($cidade->getTorre());
  100.     }
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement