Normalmente, scomponiamo un numero in cifre binarie assegnandolo con potenze di 2, con un coefficiente di
0o1per ogni termine:
25 = 1*16 + 1*8 + 0*4 + 0*2 + 1*1La scelta di
0ed1è ... non molto binaria. Eseguiremo la vera espansione binaria espandendola con potenze di 2, ma con un coefficiente di1o-1invece:
25 = 1*16 + 1*8 + 1*4 - 1*2 - 1*1Ora 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, nrestituisce 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]
0invece che -1per 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-1un output valido per 25?