O jornal Folha de São Paulo propôs um teste para seleção de programadores 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
Para se candidatar, você deve enviar a solução do problema .....
Exemplo: AMARELO.
Eis minha solução (não me candidatei):
<?php
$dados = array ();
$dados ["Halley"] = "Amarelo";
$dados ["Encke"] = "Vermelho";
$dados ["Wolf"] = "Preto";
$dados ["Kushida"] = "Azul";
foreach ($dados as $cometa => $grupo)
{
$valorCometa = calcularValor ($cometa);
$valorGrupo = calcularValor ($grupo);
if ($valorCometa !== $valorGrupo)
{
echo $grupo;
break; //se há um só para que continuar?
}
}
Nota: seria bem melhor inicializar o array com os nomes já em maíusculo, para evitar o strtoupper na função calcularValor, mas deixei assim para ser fiel ao problema original. Em calcularValor poderia ter usado while (isset ($string [$index])), obviamente incrementando $index a cada ciclo, mas preferi o str_split (acho o foreach mais elegante). Note ainda que usar a função ord me livrou de criar um array com o valor de cada letra ($valor ["A"] = 1; $valor ["B"] = 2, e assim por diante).
E, por último, poderia ter feito
if (calcularValor ($cometa) !== calcularValor ($grupo)) die ($grupo);
mas acho extremista demais; prefiro código compreensível.
Pergunta
marmion
O jornal Folha de São Paulo propôs um teste para seleção de programadores 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
Para se candidatar, você deve enviar a solução do problema .....
Exemplo: AMARELO.Eis minha solução (não me candidatei):
<?php
$dados = array ();
$dados ["Halley"] = "Amarelo";
$dados ["Encke"] = "Vermelho";
$dados ["Wolf"] = "Preto";
$dados ["Kushida"] = "Azul";
foreach ($dados as $cometa => $grupo)
{
$valorCometa = calcularValor ($cometa);
$valorGrupo = calcularValor ($grupo);
if ($valorCometa !== $valorGrupo)
{
echo $grupo;
break; //se há um só para que continuar?
}
}
function calcularValor ($string)
{
$letras = str_split (strtoupper($string));
$valor = 1;
foreach ($letras as $letra) $valor = $valor * (ord ($letra) - 64);
return $valor % 45;
}
?>
Nota: seria bem melhor inicializar o array com os nomes já em maíusculo, para evitar o strtoupper na função calcularValor, mas deixei assim para ser fiel ao problema original. Em calcularValor poderia ter usado while (isset ($string [$index])), obviamente incrementando $index a cada ciclo, mas preferi o str_split (acho o foreach mais elegante). Note ainda que usar a função ord me livrou de criar um array com o valor de cada letra ($valor ["A"] = 1; $valor ["B"] = 2, e assim por diante).
E, por último, poderia ter feito
if (calcularValor ($cometa) !== calcularValor ($grupo)) die ($grupo);
mas acho extremista demais; prefiro código compreensível.
Editado por marmionLink para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.