Observar los valores binarios impresos como óvalos y barras no es tan fácil ... Para ayudar con eso, debe escribir una función (o un programa) que imprima números en una representación binaria personalizada.
Así que quiero tomar un número, digamos 3 ( 00000011
) y generar los bits en formato definido por el usuario, por ejemplo con pares separados por espacios:
00 00 00 11
o, por ejemplo, en orden inverso y con algunos decoradores, por ejemplo:
11_00_00_00
Además, debe existir la posibilidad de mostrar '0' y '1' como caracteres personalizados para distinguirlos mejor, por ejemplo:
XX oo oo oo
Entonces, el desafío es escribir el código que lo hace todo dentro de la siguiente especificación.
Especificación
La función toma datos como este: f (A, máscara, ceros, unos)
Parámetros:
A - número de entrada - cualquier número entero (sin signo) en el rango 0-255.
máscara : un parámetro de cadena que define la construcción de la salida.
ceros : una cadena de la misma longitud, define glifos 'cero' para cada ranura de salida.
ones : una cadena de la misma longitud, define 'uno' glifos para cada ranura de salida.
Reglas para la construcción de salida:
Mire esta imagen con un ejemplo de cerca para comprender cómo se genera la salida:
Por lo tanto, solo los dígitos individuales de la máscara se analizan y reemplazan por los bits correspondientes de A, los demás caracteres se dejan como están . Además, si el valor del bit tomado es 1, aparece en la salida final como "X" y si es 0, aparece como "o". En el ejemplo anterior, los cuatro bits tomados son "1", por lo que vemos "X" en todas las ranuras.
Si el número de entrada fuera 128, entonces, lógicamente, la salida sería X foo bar ooo
. Caracteres en los parámetros "ceros" y "unos": cualquier carácter ASCII imprimible, suponga que siempre están alineados con la máscara.
Notas :
- Los bits están indexados a 0: el bit 0 es el MSB.
- Suponga que los dígitos 8,9 no están permitidos en la cadena de máscara.
- Las cadenas de entrada incluyen caracteres ASCII imprimibles.
- 'Ceros' y 'unos' están alineados con la máscara.
- Para caracteres / modificadores especiales en su idioma: podemos suponer que no aparecerán en la cadena de entrada.
Para mayor claridad, vea más ejemplos.
Entrada -> Ejemplos de salida
Imprima los 8 bits en orden común con un delimitador de espacio, en notación común de óvalo y barra:
mask = "0123 4567"
zeros = "0000 0000"
ones = "1111 1111"
A=1 -> 0000 0001
Salida en orden inverso, en notación guión y glifo:
mask = "| 7654 3210 |"
zeros= " ---- ---- "
ones = " ssss ssss "
A=1 -> | s--- ---- |
A=3 -> | ss-- ---- |
A=128-> | ---- ---s |
Diversas anotaciones en una salida, por ejemplo, para datos empaquetados:
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
Patrones repetitivos:
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 .... |
Actualizar
Las reglas se han simplificado ligeramente: el programa debe imprimir solo un número (no una matriz / lista de números como se propuso inicialmente).
A
hace, ya que es lo mismo en todos los casos de prueba