Normalement, nous décomposons un nombre en chiffres binaires en lui affectant des puissances de 2, avec un coefficient de
0
ou1
pour chaque terme:
25 = 1*16 + 1*8 + 0*4 + 0*2 + 1*1
Le choix de
0
et1
n'est ... pas très binaire. Nous effectuerons la véritable expansion binaire en développant avec des puissances de 2, mais avec un coefficient de1
ou à la-1
place:
25 = 1*16 + 1*8 + 1*4 - 1*2 - 1*1
Maintenant, cela semble binaire.
Étant donné un nombre positif, il devrait être trivial de voir que:
- Chaque nombre impair a une infinité de véritables extensions binaires
- Chaque nombre pair n'a pas de véritables extensions binaires
Par conséquent, pour qu'une véritable expansion binaire soit bien définie, nous avons besoin que l'expansion soit la plus petite , c'est-à-dire avec la plus courte longueur.
Étant donné un entier positif et impair n
, retournez sa véritable expansion binaire, du chiffre le plus significatif au chiffre le moins significatif (ou dans l'ordre inverse).
Règles:
- Comme il s'agit de code-golf , vous devez viser à le faire dans le nombre d'octets le plus court possible. Les Builtins sont autorisés.
- Toute sortie pouvant représenter et lister les coefficients est acceptable: un tableau, une chaîne de coefficients avec séparateurs, etc ...
- Des échappatoires de golf standard s'appliquent.
- Votre programme devrait fonctionner pour les valeurs comprises dans la taille entière standard de votre langue.
Cas de test
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
au lieu de -1
l'état basse tension. L'appelant qui reçoit les bits sait ce qu'ils signifient. (C'est toujours un exercice de manipulation de bits non trivial, car une rotation à droite ne fonctionne que si elle a 32 bits significatifs. Par exemple, un nombre à 5 bits a besoin d'une largeur de rotation de 5.)
111-1-1
sortie valide est-elle pour 25
?