Percursos
/
PHP
PHP
/
Exercícios
/
Os Ovos de Eliud
Os Ovos de Eliud

Os Ovos de Eliud

Médio

Introdução

A tua amiga Eliud herdou uma quinta da avó, a Tigist. A avó era inventora e tinha tendência para construir as coisas de forma demasiado complicada. O galinheiro tem um ecrã digital que mostra um número codificado, o qual representa as posições de todos os ovos que podem ser recolhidos.

A Eliud pede-te para escreveres um programa que mostre o número real de ovos no galinheiro.

A codificação da informação das posições calcula-se da seguinte forma:

  1. Percorre os possíveis locais de postura e assinala com 1 os que têm um ovo e com 0 os que estão vazios.
  2. Converte o número de binário para decimal.
  3. Mostra o resultado no ecrã.

Exemplo 1

Sete ninhos individuais dispostos numa fila, em que o primeiro, o terceiro, o quarto e o sétimo têm cada um um único ovo.

 _ _ _ _ _ _ _
|E| |E|E| | |E|

Binário resultante

1011001

 _ _ _ _ _ _ _
|1|0|1|1|0|0|1|

Número decimal no ecrã

89

Ovos reais no galinheiro

4

Exemplo 2

Sete ninhos individuais dispostos numa fila, em que só o quarto ninho tem um ovo.

 _ _ _ _ _ _ _
| | | |E| | | |

Binário resultante

0001000

 _ _ _ _ _ _ _
|0|0|0|1|0|0|0|

Número decimal no ecrã

8

Ovos reais no galinheiro

1

Instruções

A tua tarefa é contar o número de bits iguais a 1 na representação binária de um número.

Restrições

Não mexas nessa funcionalidade de contagem de bits fornecida pela tua biblioteca padrão! Resolve isto sozinho, recorrendo antes a outras ferramentas básicas.

Operadores bit a bit

No PHP existem operadores bit a bit.

Por exemplo, podes usar o operador "E bit a bit" (&) para verificar se um bit de um número está definido:

$number = 89; // 0b01011001
$mask16 = 16; // 0b00010000
$mask32 = 32; // 0b00100000

$isMask16 = ($number & $mask16) > 0; // 0b00010000 > 0 => TRUE
$isMask32 = ($number & $mask32) > 0; // 0b00000000 > 0 => FALSE
Editar via GitHub A ligação abre numa nova janela ou separador
PHP Exercism

Estás pronto para começar Os Ovos de Eliud?

Inscreve-te no Exercism para aprenderes e dominares PHP com 11 conceitos122 exercícios, e mentoria humana real, tudo grátis.