Normalement, nous décomposons un nombre en chiffres binaires en lui affectant des puissances de 2, avec un coefficient de
0ou1pour chaque terme:
25 = 1*16 + 1*8 + 0*4 + 0*2 + 1*1Le choix de
0et1n'est ... pas très binaire. Nous effectuerons la véritable expansion binaire en développant avec des puissances de 2, mais avec un coefficient de1ou à la-1place:
25 = 1*16 + 1*8 + 1*4 - 1*2 - 1*1Maintenant, 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]
0au lieu de -1l'é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-1sortie valide est-elle pour 25?