<?php
/**
* Problema:
*
* 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
*/
/**
* Verifica um array contendo os cometas e grupos que serão levados.
*
* @param Array $cometasGrupos
* @return String
*/
function verificarCometas($cometasGrupos)
{
$mensagem = '';
foreach ($cometasGrupos as $cometa => $grupo) {
$somaCometa = somarLetras($cometa);
$somaGrupo = somarLetras($grupo);
if (! validarDivisao($somaCometa, $somaGrupo)) {
$mensagem .= "{$grupo}" . 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 a divisão do cometa e grupo e retorna se ele é valido ou não.
*
* @param Int $cometa, Int $grupo
* @return Boolean
*/
function validarDivisao($cometa, $grupo)
{
$divisor = 45;
$divisaoCometa = $cometa % $divisor;
$divisaoGrupo = $grupo % $divisor;
$valido = false;
if ($divisaoCometa == $divisaoGrupo) {
$valido = true;
}
return $valido;
}
/**
* Lista de cometas e grupos a serem verificados.
*/
$cometasGrupos = array(
'HALLEY' => 'AMARELO',
'ENCKE' => 'VERMELHO',
'WOLF' => 'PRETO',
'KUSHIDA' => 'AZUL'
);
echo verificarCometas($cometasGrupos);