Normalmente, descomponemos un número en dígitos binarios asignándolo con potencias de 2, con un coeficiente de
0
o1
para cada término:
25 = 1*16 + 1*8 + 0*4 + 0*2 + 1*1
La elección de
0
y1
es ... no muy binaria. Realizaremos la verdadera expansión binaria expandiéndonos con potencias de 2, pero con un coeficiente de1
o en su-1
lugar:
25 = 1*16 + 1*8 + 1*4 - 1*2 - 1*1
Ahora esto parece binario.
Dado cualquier número positivo, debería ser trivial ver que:
- Cada número impar tiene infinitas expansiones binarias verdaderas
- Cada número par no tiene expansiones binarias verdaderas
Por lo tanto, para que una verdadera expansión binaria esté bien definida, requerimos que la expansión sea la menor , es decir, con la longitud más corta.
Dado cualquier número entero positivo e impar n
, devuelve su verdadera expansión binaria, del dígito más significativo al dígito menos significativo (o en orden inverso).
Reglas:
- Como se trata de código de golf , debe intentar hacerlo en el menor recuento de bytes posible. Las construcciones están permitidas.
- Cualquier salida que pueda representar y enumerar los coeficientes es aceptable: una matriz, una cadena de coeficientes con separadores, etc.
- Se aplican lagunas de golf estándar.
- Su programa debería funcionar para valores dentro del tamaño entero estándar de su idioma.
Casos de prueba
25 -> [1,1,1,-1,-1]
47 -> [1,1,-1,1,1,1]
1 -> [1]
3 -> [1,1]
1234567 -> [1,1,-1,-1,1,-1,1,1,-1,1,-1,1,1,-1,1,-1,-1,-1,-1,1,1]
0
lugar del estado -1
de bajo voltaje. La persona que llama que recibe los bits sabe lo que significan. (Todavía es un ejercicio de manipulación de bits no trivial, ya que una rotación hacia la derecha solo funciona si tiene 32 bits significativos. Por ejemplo, un número de 5 bits necesita un ancho de rotación de 5)
111-1-1
una salida válida para 25
?