3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * Sabe-se que por trás de cada cometa há um OVNI. Esses OVNIs frequentemente buscam bons desenvolvedores aqui na Terra. Infelizmente só têm espaço para levar um grupo de devs por vez. Para a seleção, há um engenhoso esquema, da associação do nome do cometa ao nome do grupo, que possibilita a cada grupo saber se será levado ou não. * Os dois nomes, do grupo e do cometa, são convertidos em um número que representa o produto das letras do nome, onde "A" é 1 e "Z" é 26. Assim, o grupo "LARANJA" seria 12 * 1* 18 * 1 * 14 * 10 * 1 = 30240. Se o resto da divisão do número do grupo por 45 for igual ao resto da divisão do número do cometa por 45, então o grupo será levado. * Para os cometas e grupos abaixo, qual grupo NÃO será levado? * Cometa Grupo * Halley Amarelo * Encke Vermelho * Wolf Preto * Kushida Azul */ /** * Lista de cometas e grupos a serem verificados. */ $cometasGrupos = array( 'HALLEY' => 'AMARELO', 'ENCKE' => 'VERMELHO', 'ENCKE' => 'VERMELHO', 'WOLF' => 'PRETO', 'KUSHIDA' => 'AZUL' ); echo verificarCometas($cometasGrupos); /** * */ function verificarCometas($cometasGrupos) { $mensagem = ''; foreach ($cometasGrupos as $cometa => $grupo) { $somaCometa = somarLetras($cometa); $somaGrupo = somarLetras($grupo); if (! cometaSeraLevado($somaCometa, $somaGrupo)) { $mensagem .= "O grupo '{$grupo}' não será levado!" . PHP_EOL; } } return $mensagem; } /** * Realiza a soma das letras de uma palavra. * * @param String $palavra * @return String */ function somarLetras($palavra) { if (!$palavra) { return 0; } $palavra = str_split($palavra); $total = 0; foreach ($palavra as $letra) { $numero = ord(strtoupper($letra)) - 64; $total = $total ? $total * $numero : $numero; } return $total; } /** * Verifica se um cometá será levado ou não. * * @param Int $cometa, Int $grupo * @return Boolean */ function cometaSeraLevado($cometa, $grupo) { $divisor = 45; $divisaoCometa = $cometa % $divisor; $divisaoGrupo = $grupo % $divisor; $valido = false; if ($divisaoCometa == $divisaoGrupo) { $valido = true; } return $valido; }
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/ojHll
function name:  (null)
number of ops:  6
compiled vars:  !0 = $cometasGrupos
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   19     0  E >   ASSIGN                                                   !0, <array>
   27     1        INIT_FCALL_BY_NAME                                       'verificarCometas'
          2        SEND_VAR_EX                                              !0
          3        DO_FCALL                                      0  $2      
          4        ECHO                                                     $2
   89     5      > RETURN                                                   1

Function verificarcometas:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 3, Position 2 = 25
Branch analysis from position: 3
2 jumps found. (Code = 78) Position 1 = 4, Position 2 = 25
Branch analysis from position: 4
2 jumps found. (Code = 43) Position 1 = 19, Position 2 = 24
Branch analysis from position: 19
1 jumps found. (Code = 42) Position 1 = 3
Branch analysis from position: 3
Branch analysis from position: 24
Branch analysis from position: 25
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 25
filename:       /in/ojHll
function name:  verificarCometas
number of ops:  28
compiled vars:  !0 = $cometasGrupos, !1 = $mensagem, !2 = $grupo, !3 = $cometa, !4 = $somaCometa, !5 = $somaGrupo
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   32     0  E >   RECV                                             !0      
   34     1        ASSIGN                                                   !1, ''
   35     2      > FE_RESET_R                                       $7      !0, ->25
          3    > > FE_FETCH_R                                       ~8      $7, !2, ->25
          4    >   ASSIGN                                                   !3, ~8
   36     5        INIT_FCALL_BY_NAME                                       'somarLetras'
          6        SEND_VAR_EX                                              !3
          7        DO_FCALL                                      0  $10     
          8        ASSIGN                                                   !4, $10
   37     9        INIT_FCALL_BY_NAME                                       'somarLetras'
         10        SEND_VAR_EX                                              !2
         11        DO_FCALL                                      0  $12     
         12        ASSIGN                                                   !5, $12
   39    13        INIT_FCALL_BY_NAME                                       'cometaSeraLevado'
         14        SEND_VAR_EX                                              !4
         15        SEND_VAR_EX                                              !5
         16        DO_FCALL                                      0  $14     
         17        BOOL_NOT                                         ~15     $14
         18      > JMPZ                                                     ~15, ->24
   40    19    >   ROPE_INIT                                     3  ~17     'O+grupo+%27'
         20        ROPE_ADD                                      1  ~17     ~17, !2
         21        ROPE_END                                      2  ~16     ~17, '%27+n%C3%A3o+ser%C3%A1+levado%21'
         22        CONCAT                                           ~19     ~16, '%0A'
         23        ASSIGN_OP                                     8          !1, ~19
   35    24    > > JMP                                                      ->3
         25    >   FE_FREE                                                  $7
   44    26      > RETURN                                                   !1
   45    27*     > RETURN                                                   null

End of function verificarcometas

Function somarletras:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 3, Position 2 = 4
Branch analysis from position: 3
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 4
2 jumps found. (Code = 77) Position 1 = 10, Position 2 = 26
Branch analysis from position: 10
2 jumps found. (Code = 78) Position 1 = 11, Position 2 = 26
Branch analysis from position: 11
2 jumps found. (Code = 43) Position 1 = 20, Position 2 = 23
Branch analysis from position: 20
1 jumps found. (Code = 42) Position 1 = 24
Branch analysis from position: 24
1 jumps found. (Code = 42) Position 1 = 10
Branch analysis from position: 10
Branch analysis from position: 23
1 jumps found. (Code = 42) Position 1 = 10
Branch analysis from position: 10
Branch analysis from position: 26
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 26
filename:       /in/ojHll
function name:  somarLetras
number of ops:  29
compiled vars:  !0 = $palavra, !1 = $total, !2 = $letra, !3 = $numero
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   53     0  E >   RECV                                             !0      
   55     1        BOOL_NOT                                         ~4      !0
          2      > JMPZ                                                     ~4, ->4
   56     3    > > RETURN                                                   0
   59     4    >   INIT_FCALL                                               'str_split'
          5        SEND_VAR                                                 !0
          6        DO_ICALL                                         $5      
          7        ASSIGN                                                   !0, $5
   61     8        ASSIGN                                                   !1, 0
   62     9      > FE_RESET_R                                       $8      !0, ->26
         10    > > FE_FETCH_R                                               $8, !2, ->26
   63    11    >   INIT_FCALL                                               'ord'
         12        INIT_FCALL                                               'strtoupper'
         13        SEND_VAR                                                 !2
         14        DO_ICALL                                         $9      
         15        SEND_VAR                                                 $9
         16        DO_ICALL                                         $10     
         17        SUB                                              ~11     $10, 64
         18        ASSIGN                                                   !3, ~11
   64    19      > JMPZ                                                     !1, ->23
         20    >   MUL                                              ~13     !1, !3
         21        QM_ASSIGN                                        ~14     ~13
         22      > JMP                                                      ->24
         23    >   QM_ASSIGN                                        ~14     !3
         24    >   ASSIGN                                                   !1, ~14
   62    25      > JMP                                                      ->10
         26    >   FE_FREE                                                  $8
   67    27      > RETURN                                                   !1
   68    28*     > RETURN                                                   null

End of function somarletras

Function cometaseralevado:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 10, Position 2 = 11
Branch analysis from position: 10
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 11
filename:       /in/ojHll
function name:  cometaSeraLevado
number of ops:  13
compiled vars:  !0 = $cometa, !1 = $grupo, !2 = $divisor, !3 = $divisaoCometa, !4 = $divisaoGrupo, !5 = $valido
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   76     0  E >   RECV                                             !0      
          1        RECV                                             !1      
   78     2        ASSIGN                                                   !2, 45
   80     3        MOD                                              ~7      !0, !2
          4        ASSIGN                                                   !3, ~7
   81     5        MOD                                              ~9      !1, !2
          6        ASSIGN                                                   !4, ~9
   83     7        ASSIGN                                                   !5, <false>
   84     8        IS_EQUAL                                                 !3, !4
          9      > JMPZ                                                     ~12, ->11
   85    10    >   ASSIGN                                                   !5, <true>
   88    11    > > RETURN                                                   !5
   89    12*     > RETURN                                                   null

End of function cometaseralevado

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
174.52 ms | 1396 KiB | 19 Q