Normalerweise zerlegen wir eine Zahl in Binärziffern, indem wir sie mit Zweierpotenzen mit einem Koeffizienten von
0
oder1
für jeden Term zuweisen :
25 = 1*16 + 1*8 + 0*4 + 0*2 + 1*1
Die Wahl von
0
und1
ist ... nicht sehr binär. Wir werden die wahre binäre Expansion durchführen, indem wir mit Potenzen von 2 expandieren, aber mit einem Koeffizienten von1
oder-1
stattdessen:
25 = 1*16 + 1*8 + 1*4 - 1*2 - 1*1
Das sieht jetzt binär aus.
Bei jeder positiven Zahl sollte es trivial sein, Folgendes zu sehen:
- Jede ungerade Zahl hat unendlich viele echte binäre Erweiterungen
- Jede gerade Zahl hat keine echten binären Erweiterungen
Damit eine echte binäre Erweiterung genau definiert werden kann, muss die Erweiterung am geringsten sein , dh mit der kürzesten Länge.
Geben Sie bei jeder positiven, ungeraden Ganzzahl n
ihre wahre binäre Erweiterung von der höchstwertigen Ziffer zur niedrigstwertigen Ziffer (oder in umgekehrter Reihenfolge) zurück.
Regeln:
- Da dies Code-Golf ist , sollten Sie versuchen, dies in kürzester Zeit zu tun . Builtins sind erlaubt.
- Jede Ausgabe, die die Koeffizienten darstellen und auflisten kann, ist akzeptabel: ein Array, eine Folge von Koeffizienten mit Trennzeichen usw.
- Es gelten Standard-Golfschlupflöcher.
- Ihr Programm sollte für Werte innerhalb der Standardgröße Ihrer Sprache arbeiten.
Testfälle
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
anstelle des -1
Niederspannungszustands drucken . Der Anrufer, der die Bits empfängt, weiß, was sie bedeuten. (Es ist immer noch eine nicht triviale Bitmanipulationsübung, da ein Rechtsdrehen nur funktioniert, wenn es 32 signifikante Bits hat. Beispielsweise benötigt eine 5-Bit-Zahl eine Drehbreite von 5.)
111-1-1
eine gültige Ausgabe für 25
?