Sie erhalten eine Nummer x
, wo 0 <= x <= 2^32 - 1
.
Nach der rekursiven Aufteilung im Binärformat sollten Sie eine Liste von Zahlen in Dezimalform ausgeben.
Beispiele:
Beispiel 1:
255 -> 255 15 15 3 3 3 3 1 1 1 1 1 1 1 1
Die aktuelle Liste ist nur 255
.
Die binäre Darstellung von 255
ist 1111 1111
. Wenn wir es aufteilen, bekommen wir 1111
und 1111
, welche in Dezimalzahlen 15
und sind 15
.
Wir fügen diese der Liste hinzu, also werden wir haben 255 15 15
.
Nun dienen die Nummern 15
und 15
als Eingaben und diese Nummern sollen aufgeteilt werden.
Es wieder tun, erhalten wir ( 3 3
von beiden 15
n): 255 15 15 3 3 3 3
.
Fortsetzung der Logik, wird die endgültige Liste sein 255 15 15 3 3 3 3 1 1 1 1 1 1 1 1
. Und da 1
nicht mehr geteilt werden kann, stoppt die Ausgabe.
Beispiel 2:
225 -> 225 14 1 3 2 1 1 1 0
Die Startliste ist 225
.
Die binäre Darstellung von 225
ist 1110 0001
. Wenn wir es aufteilen, bekommen wir 1110
und 0001
, welche in Dezimalzahlen 14
und sind 1
.
Wenn wir diese zur Liste hinzufügen, erhalten wir 225 14 1
.
Nun dienen die Nummern 14
und 1
als Eingaben und diese Nummern sollen aufgeteilt werden.
Da 1
es keine Aufteilung gibt, wird die Ausgabe sein 225 14 1 3 2
.
Beispiel 3:
32 -> 32 4 0 1 0
Bedingungen :
- Wenn die Anzahl der Binärziffern ungerade ist, enthält die erste Zahl eine Binärziffer weniger als die nächste. Beispiel
20 (10100)
wird als10
und geteilt100
, wobei die Dezimalausgabe2
und ist4
. - Es gelten Standard-Regelungslücken.
0
s und1
s vermehren sich nicht weiter.- Ein Programmabsturz, wenn versucht wird, zu viele Zahlen anzuzeigen, ist eine gültige Beendigungsbedingung.
quelle
0
s aufgefüllten Binärziffern, wenn die Länge ungerade ist?0
s.Antworten:
Pyth, 18 Bytes
Testsuite
Dieser Code macht etwas sehr
u
Kniffliges und Kluges mit Pyths Festpunktoperator.Der Funktionskörper, der alles andere als der ist
u
, ist ziemlich einfach:Dieser Code entfernt 0s und 1s, teilt jede Zahl und fügt die Eingabe vor.
u
Diese Funktion wird mit dem vorherigen Ergebnis der Funktion ausgeführt, bis sich das Ergebnis nicht mehr ändert.Welcher Anfangswert wird
u
verwendet? Das ist der clevere Teil: Der Code gibt nicht an, welcher Wert verwendet werden soll, daher wird standardmäßig die Eingabe verwendet. Die Eingabe ist jedoch keine Liste von Zahlen, sondern eine Zahl. Pyth zwingt implizit die Zahl auf der ersten Zeit durch die Schleife in den Bereich der Zahl -[0, 1, ..., Q-1]
. Das sieht nicht so aus wie die Ausgabe, die wir bekommen wollen. Glücklicherweiseu
wird das richtige Ergebnis gefunden, unabhängig davon, was die anfängliche Eingabe ist - die gewünschte Ausgabe ist der einzige feste Punkt der Funktion, und die wiederholte Anwendung wird es immer erreichen.Schauen wir uns die Zwischenwerte des Programms mit der Eingabe an
7
. Ich habe das Präfix des Ergebnisses hervorgehoben, das unabhängig von der anfänglichen Eingabe garantiert korrekt ist:7
(Implizit[0, 1, 2, 3, 4, 5, 6]
)[7,
1, 0, 1, 1, 1, 0, 1, 1, 1, 2]
[7, 1, 3,
1, 0]
[7, 1, 3, 1, 1]
Welches ist der Ausgang.
Gepackter Pyth, 16 Bytes
Beachten Sie, dass Pyth nur den 0-127-Bereich von ASCII verwendet und daher mit einer 7-Bit-Codierung anstelle einer 8-Bit-Codierung komprimiert werden kann. Somit kann das obige Programm in 16 Bytes gepackt werden. Das resultierende Programm ist:
Hexdump:
Der Dolmetscher wird gefunden hier zu finden . Geben Sie die Eingabe als Befehlszeilenargument ein.
Die Codepage dieser Sprache (Packed Pyth) ist der 0-127-Bereich von ASCII, und jedes Zeichen wird mit 7 Bits dargestellt, die am Ende aufgefüllt sind. Somit stellt der obige nicht lesbare Hexdump dar:
Aber in 16 Bytes.
quelle
05AB1E ,
21201817 BytesProbieren Sie es online!
Erläuterung
quelle
ʒ
- Diese neue Codepage ... Seit wann ist 05AB1E Jelly? Mir gefällt es.JavaScript (ES6), 99 Byte
Das sieht ein bisschen zu lang aus. Möglicherweise gibt es einen besseren Weg, um die richtige Reihenfolge zu erhalten.
Demo
Code-Snippet anzeigen
quelle
Gelee ,
21 bis20 Bytes-1 Byte durch Entfernen einer monadischen Kette und anschließendes Behandeln der Konsequenz, dass eine leere Liste aus einer Binärdatei konvertiert wird und später 0 ergibt.
Ein monadischer Link, der eine Nummer aufnimmt und die angegebene Liste zurückgibt.
Probieren Sie es online!
Wie?
quelle
Java 7, 541 Bytes
Die ursprüngliche Bestellung beizubehalten, hat mich über den Haufen geworfen, sonst wäre es nur eine einfache Schleife und ein rekursives Aufrufprinzip. Trotzdem ist es eine lustige Herausforderung, dies herauszufinden, während die Reihenfolge beibehalten wird.
Erläuterung:
Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
Python 2 , 110 Bytes
Probieren Sie es online!
quelle
Netzhaut , 142 Bytes
Probieren Sie es online!
quelle
PHP, 132 Bytes
Probieren Sie es online!
quelle
Array( [0] => 225 [1] => 14 [2] => 1 [3] => 3 [4] => 2 [5] => 1 [6] => 1 [7] => 1 [8] => 0 )
wenn nicht = 255 15 15 3 3 3 1 1 1 1 1 1 1 1$argn
Diese Variable ist verfügbar, wenn Sie PHP über die Befehlszeile mit der-R
Option ausführen. Hier ist ein Beispiel für die Eingabe von 255 Versuchen Sie es online!Ruby , 102 Bytes
Probieren Sie es online!
quelle
Ruby , 98 Bytes
Probieren Sie es online!
Einfach eine grundlegende Optimierung der Antwort von Value Ink : Verwenden Sie flat_map anstelle von map ... flatten, und verwenden Sie
a==[]?a
Anstatt vona==[]?[]
quelle