Просматривать двоичные значения, напечатанные в виде овалов и палочек, не так просто ... Чтобы помочь с этим, вы должны написать функцию (или программу), которая печатает числа в пользовательском двоичном представлении.
Поэтому я хочу взять число, скажем 3 ( 00000011
), и вывести биты в определенном пользователем формате, например, с разделенными пробелом парами:
00 00 00 11
или, скажем, в обратном порядке и с некоторыми декораторами, например:
11_00_00_00
Кроме того, должна быть возможность показывать «0» и «1» в качестве пользовательских символов, чтобы лучше их различать, например:
XX oo oo oo
Поэтому задача состоит в том, чтобы написать код, который делает все это в соответствии со следующей спецификацией.
Спецификация
Функция принимает входные данные следующим образом: f (A, маска, нули, единицы)
Параметры:
A - номер входа - любое (без знака) целое число в диапазоне 0-255.
маска - строковый параметр, который определяет структуру вывода.
нули - строка одинаковой длины, определяющая «нулевые» глифы для каждого выходного слота.
ones - строка одинаковой длины, определяющая символы «один» для каждого выходного слота.
Правила оформления выхода:
Посмотрите на это изображение с примером внимательно, чтобы понять, как генерируется вывод:
Таким образом, только отдельные цифры в маске анализируются и заменяются соответствующими битами 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
делает, так как это одинаково во всех тестовых случаях