Очне яблуко бінарних значень, надрукованих у вигляді овалів і паличок, не так просто ... Щоб допомогти у цьому, ви повинні написати функцію (або програму), яка друкує числа у власному бінарному поданні.
Тому я хочу взяти число, скажімо, 3 ( 00000011
) і вивести біти у визначеному користувачем форматі, наприклад, з розділеними пробілами парами:
00 00 00 11
або, скажімо, у зворотному порядку та з деякими декораторами, наприклад:
11_00_00_00
Крім того, повинна бути можливість відобразити "0" і "1" як власні символи, щоб їх краще розрізнити, наприклад:
XX oo oo oo
Таким чином, завдання полягає в тому, щоб написати код, який робить все це у наведеній нижче специфікації.
Специфікація
Функція приймає такий вхід: f (A, маска, нулі, ті)
Параметри:
А - вхідний номер - будь-яке (непідписане) ціле число в діапазоні 0-255.
маска - параметр рядка, який визначає побудову виводу.
нулі - рядок однакової довжини, визначає "нульові" гліфи для кожного вихідного слота.
ті - рядок однакової довжини, визначає "один" гліфів для кожного вихідного слота.
Правила побудови вихідних даних:
Подивіться на це зображення з прикладом уважно, щоб зрозуміти, як генерується результат:
Отже, лише однозначні цифри в масці аналізуються та замінюються відповідними бітами A, інші символи залишаються як є . Далі, якщо значення взятого біта дорівнює 1, воно відображається на кінцевому виході як "X", а якщо воно дорівнює 0, воно відображається як "o". У наведеному вище прикладі всі чотири взятих біта є "1", тому ми бачимо "X" у всіх слотах.
Якщо вхідне число було 128, то, логічно, вихід був би X foo bar ooo
. Символи в параметрах "нулі" та "одиниці": будь-які символи для друку ASCII, припустимо, вони завжди узгоджуються з маскою.
Примітки :
- Біти 0-індексовані: 0-й біт - це MSB.
- Припустимо, що цифри 8,9 не допускаються в рядку маски.
- Рядки введення містять будь-які символи ASCII для друку.
- "Нулі" та "ті" узгоджуються з маскою.
- Для спеціальних символів / модифікаторів у вашій мові: можна припустити, що вони не відображатимуться у рядку введення.
Для наочності див. Більше прикладів.
Введення -> Приклади виводу
Виведіть усі 8 біт у загальному порядку з роздільником пробілу, у загальних позначеннях овальної та паличної форми:
mask = "0123 4567"
zeros = "0000 0000"
ones = "1111 1111"
A=1 -> 0000 0001
Виведіть у зворотному порядку в тире-гліфних позначеннях:
mask = "| 7654 3210 |"
zeros= " ---- ---- "
ones = " ssss ssss "
A=1 -> | s--- ---- |
A=3 -> | ss-- ---- |
A=128-> | ---- ---s |
Різні позначення на одному виході, наприклад, для упакованих даних:
mask = "0 | 123 4567"
zeros= " --- ----"
ones = "X kkk ssss"
A= 15 -> | --- ssss
A= 16 -> | --k ----
A= 32 -> | -k- ----
A= 128 -> X | --- ----
A= 255 -> X | kkk ssss
Повторювані шаблони:
mask = "| 7 66 555 4444 |"
zeros= " . .. ... .... "
ones = " 0 00 000 0000 "
A= 0 -> | . .. ... .... |
A= 1 -> | 0 .. ... .... |
A= 2 -> | . 00 ... .... |
A= 3 -> | 0 00 ... .... |
A= 4 -> | . .. 000 .... |
Оновлення
Правила були дещо спрощені - програма повинна надрукувати лише одне число (а не масив / список номерів, як було запропоновано спочатку).
A
робить, оскільки це те саме у всіх тестових випадках