Normalmente, scomponiamo un numero in cifre binarie assegnandolo con potenze di 2, con un coefficiente di
0
o1
per ogni termine:
25 = 1*16 + 1*8 + 0*4 + 0*2 + 1*1
La scelta di
0
ed1
è ... non molto binaria. Eseguiremo la vera espansione binaria espandendola con potenze di 2, ma con un coefficiente di1
o-1
invece:
25 = 1*16 + 1*8 + 1*4 - 1*2 - 1*1
Ora questo sembra binario.
Dato un numero positivo, dovrebbe essere banale vedere che:
- Ogni numero dispari ha infinite espansioni binarie reali
- Ogni numero pari non ha espansioni binarie vere
Quindi, affinché una vera espansione binaria sia ben definita, abbiamo bisogno che l'espansione sia la minima , ovvero con la lunghezza più breve.
Dato un numero intero dispari positivo, n
restituisce la sua vera espansione binaria, dalla cifra più significativa alla cifra meno significativa (o in ordine inverso).
Regole:
- Dato che si tratta di code-golf , dovresti mirare a farlo nel minor numero di byte possibile. Sono ammessi i builtin.
- Qualsiasi output in grado di rappresentare ed elencare i coefficienti è accettabile: un array, una stringa di coefficienti con separatori, ecc ...
- Si applicano scappatoie da golf standard.
- Il tuo programma dovrebbe funzionare per valori all'interno della dimensione intera standard della tua lingua.
Casi 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
invece che -1
per lo stato di bassa tensione. Il chiamante che riceve i bit sa cosa significano. (È ancora un esercizio di manipolazione dei bit non banale, poiché una rotazione a destra funziona solo se ha 32 bit significativi. Ad esempio, un numero a 5 bit richiede una larghezza di rotazione di 5.)
111-1-1
un output valido per 25
?