Inspiriert von A014486 .
Herausforderung
Erstellen Sie bei einer Ganzzahleingabe in Basis 10 eine Darstellung für den Binärwald, der der Eingabe entspricht. Darstellungen umfassen, ohne darauf beschränkt zu sein, verschachtelte Arrays und Zeichenfolgen.
Wie?
Konvertieren Sie die Eingabe in eine Binärdatei. 1
s stehen für Zweige und 0
s für Blätter.
Zum besseren Verständnis verwenden 834
wir als Beispiel (1101000010 in binär).
Wir beginnen mit der ersten Ziffer. Die erste Ziffer ist a 1
, also zeichnen wir Zweige:
\ / 1
oder als Array, {{1}}
Die nächste Ziffer ist 1
, also zeichnen wir mehr Zweige (wir gehen von links nach rechts):
\ / 1 \ / 1
oder als Array, {{1, {1}}}
Die nächste Ziffer ist 0
, also platzieren wir ein Blatt:
0 \ / 1 \ / 1
oder als Array, {{1, {1, 0}}}
Die nächste Ziffer ist a 1
, also platzieren wir einen Zweig:
\ / 0 1 \ / 1 \ / 1
oder als Array, {{1, {1, 0, {1}}}}
Wenn wir den Vorgang wiederholen, erhalten wir nach der achten Ziffer den folgenden Baum:
0 0 \ / 0 1 \ / 1 0 \ / 1
oder als Array, {{1, {1, 0, {1, 0, 0}}, 0}}
Für die restlichen Ziffern zeichnen wir weitere Bäume:
Die 9. Ziffer ist a 0
, also platzieren wir ein Blatt (aww, es ist ein junger Trieb!)
0 0 \ / 0 1 \ / 1 0 \ / 1 0
oder als Array, {{1, {1, 0, {1, 0, 0}}, 0}, 0}
Wenn wir alle Ziffern verwenden, erhalten wir Folgendes:
0 0 \ / 0 1 \ / 100 \ / \ / 1 0 1
oder als Array, {{1, {1, 0, {1, 0, 0}}, 0}, 0, {1, 0}}
Das sieht komisch aus, also füllen wir eine Null auf, um den Baum zu vervollständigen:
0 0 \ / 0 1 \ / 1 0 0 0 \ / \ / 1 0 1
oder als Array, {{1, {1, 0, {1, 0, 0}}, 0}, 0, {1, 0, 0}}
Beachten Sie, dass die Abflachung des Arrays die ursprüngliche Zahl in binärer Form ergibt, jedoch mit einer aufgefüllten Null.
Kriterien
- Die Ausgabe muss deutlich die Trennung der Bäume und Zweige zeigen (wenn es sich nicht um ein verschachteltes Array handelt, erläutern Sie bitte Ihr Ausgabeformat).
- Das Extrahieren aller Ziffern aus der Ausgabe muss mit der binären Darstellung der Eingabe identisch sein (mit den aufgefüllten Nullen aus dem obigen Prozess).
Testfälle
Die Ausgabe kann unterschiedlich sein, solange sie die Kriterien erfüllt.
0 -> {0} 1 -> {{1, 0, 0}} 44 -> {{1, 0, {1, {1, 0, 0}, 0}}} 63 -> {{1, {1, {1, {1, {1, {1, 0, 0}, 0}, 0}, 0}, 0}, 0}} 404 -> {{1, {1, 0, 0}, {1, 0, {1, 0, 0}}} 1337 -> {{1, 0, {1, 0, 0}}, {1, {1, {1, 0, 0}, {1, 0, 0}}, 0}}
Wertung
Das ist Code-Golf , also gewinnt das niedrigste Byte!
quelle
Antworten:
JavaScript (ES6),
968980797473 ByteDefiniert eine Funktion
f
, die ein verschachteltes Array zurückgibt. Der HTML-Code dient nur zu Testzwecken.quelle
$&
macht man ohne.replace
?" : PBefunge,
138117104 BytesProbieren Sie es online!
Erläuterung
Zeile 1 liest eine Zahl aus stdin und Zeile 2 konvertiert diese Zahl in eine Binärsequenz, die in Zeile 10 im Spielfeld gespeichert wird. Die Zeilen 3 bis 5 durchlaufen dann diese Binärziffern und geben die entsprechende Baumdarstellung aus, wenn jede Ziffer verarbeitet wird. Der Befunge-Stapel wird verwendet, um die Tiefe des Baums und den auf jeder Ebene verbleibenden Blattraum zu verfolgen, damit wir wissen, wann ein neuer Zweig erstellt werden muss. In den Zeilen 6 und 7 wird die endgültige
0
Polsterung ausgeführt, um leere Blätter aufzufüllen.Um so viel wie möglich Golf zu spielen, entfernte ich die Kommas von der Ausgabe sowie die äußeren Klammern. Dies hat die Mathematica-Lösung immer noch nicht übertroffen, aber es hat Spaß gemacht, es zu versuchen.
Wenn Sie sehen wollen , wie es mit dem ursprünglichen ausführlichen Ausgabeformat sah, sparte ich eine frühere Version des Codes hier (131 Bytes).
quelle
Mathematica,
167161 BytesAnonyme Funktion. Nimmt eine Zahl als Eingabe und gibt eine willkürlich verschachtelte Liste von Zahlen als Ausgabe zurück. Zeilenumbrüche zur Verdeutlichung hinzugefügt. Benutzt einen Mechanismus mit Fortsetzungen, aber ich bin zu müde, um länger darüber nachzudenken.
quelle
#[[1]]
zu#&@@#
sollte ein Byte speichern.!#~FreeQ~1
anstatt auch#~MemberQ~1
ein Byte zu speichern.Mathematica,
11510910810498 BytesErzeugt Fehlermeldungen, die ignoriert werden können. Gibt eine binäre Gesamtstruktur aus. Es unterscheidet sich geringfügig von der Beispielausgabe, da
1
es sichHead
nicht um das erste Element einer Liste handelt. (zB1[0, 0]
statt{1, 0, 0}
)Fehlerfreie Version (104 Bytes)
Erläuterung
Konvertieren Sie die Eingabe in eine Basis-2-Liste. Speichern Sie es in
i
.SetDelay
f
Folgendes (wird immer dann ausgewertet, wennf
es aufgerufen wird):Switch
Aussage.Erstens, wenn
i
leer, wird ausgegeben0
. Wenn nicht, geben Sie das erste Element von ausi
und löschen Sie es aus der Liste. Verwenden Sie den Ausgang als Steuervariable.Wenn die Steuervariable ist
0
, wird ausgegeben0
. Wenn ja1
, Ausgabe1[f, f]
(rekursiv).Während
i
nicht leer ist, ruf weiter anf
. Ausgabe des Ergebnisses, verpackt mitList
.Beispiel
Alternative Lösung (120 Bytes)
Identisch mit meiner 104-Byte-Lösung, konvertiert aber die Ausgabe in das in der Frage angegebene Format.
quelle
Python 2,
133118117 BytesTeilweise rekursiv, teilweise iterativ. Ich habe versucht, eine Ganzzahl zu verwenden, aber der Baum beginnt mit den höchstwertigen Bits, daher denke ich, dass es sich nicht lohnt.
Probieren Sie es online aus
quelle
Java 8, 367 Bytes
Golf gespielt:
Ungolfed:
quelle
DUP , 84 Bytes (82 Zeichen)
Aus Golfgründen habe ich die äußeren geschweiften Klammern und die Kommas entfernt, da sie für die Rekonstruktion der Bäume nicht erforderlich sind.
Beispielausgaben:
Erläuterung:
Probieren Sie es mit dem Online- Javascript-DUP-Interpreter auf quirkster.com aus oder klonen Sie mein GitHub-Repository meines in Julia geschriebenen DUP-Interpreters.
quelle