Normalerweise zerlegen wir eine Zahl in Binärziffern, indem wir sie mit Zweierpotenzen mit einem Koeffizienten von
0oder1für jeden Term zuweisen :
25 = 1*16 + 1*8 + 0*4 + 0*2 + 1*1Die Wahl von
0und1ist ... nicht sehr binär. Wir werden die wahre binäre Expansion durchführen, indem wir mit Potenzen von 2 expandieren, aber mit einem Koeffizienten von1oder-1stattdessen:
25 = 1*16 + 1*8 + 1*4 - 1*2 - 1*1Das 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 nihre 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]
0anstelle des -1Niederspannungszustands 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?