Треки
/
PHP
PHP
/
Вправи
/
Яйця Еліуда
Яйця Еліуда

Яйця Еліуда

Середня

Вступ

Наш друг Eliud успадкував ферму від своєї бабусі Tigist. Її бабуся була винахідницею і мала схильність будувати речі надто складно. У курятнику є цифровий дисплей, який показує закодоване число, що позначає позиції всіх яєць, які можна зібрати.

Eliud просить нас написати програму, яка показує справжню кількість яєць у курятнику.

Кодування інформації про позиції обчислюється так:

  1. Огляньмо потенційні місця для яєць і позначмо 1 там, де яйце вже є, або 0 там, де місце порожнє.
  2. Переведімо число з двійкової системи в десяткову.
  3. Покажімо результат на дисплеї.

Приклад 1

Сім окремих гнізд, розташованих у ряд, у першому, третьому, четвертому та сьомому з яких лежить по одному яйцю.

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

Отримане двійкове число

1011001

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

Десяткове число на дисплеї

89

Справжня кількість яєць у курятнику

4

Приклад 2

Сім окремих гнізд, розташованих у ряд, де лише в четвертому гнізді є яйце.

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

Отримане двійкове число

0001000

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

Десяткове число на дисплеї

8

Справжня кількість яєць у курятнику

1

Вказівки

Порахуйте кількість бітів зі значенням 1 у двійковому поданні числа.

Обмеження

Не чіпайте функцію підрахунку бітів, яку надає стандартна бібліотека! Натомість зробіть це самостійно, скориставшись іншими базовими інструментами.

Побітові оператори

У PHP є побітові оператори.

Наприклад, оператор «побітове І» (&) можна використати, щоб перевірити, чи визначено біт числа:

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

$isMask16 = ($number & $mask16) > 0; // 0b00010000 > 0 => TRUE
$isMask32 = ($number & $mask32) > 0; // 0b00000000 > 0 => FALSE
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
PHP Exercism

Час розпочати Яйця Еліуда?

Зареєструйтеся на Exercism, щоб вивчати й опановувати PHP, а також 11 концепцій122 вправи та справжнє наставництво від людей, і все це безкоштовно.