Geben Sie bei einem möglicherweise verschachtelten, nicht leeren Array von positiven einstelligen Ganzzahlen (nicht garantiert eindeutig) die ASCII-Art-Darstellung als Baum aus, und verwenden Sie dabei die Zeichen in der Box ┌ ┴ ┐ ─ │ ┬ ┼
. (Diese wurden aus Codepage 437 kopiert, Sie können jedoch eine beliebige entsprechende Darstellung verwenden.)
Jede Ganzzahl des Arrays sollte ein Blatt des Baums sein. Elemente der gleichen Ebene tief im Array sollten auf der gleichen Ebene der Struktur vorhanden sein. Alle Elemente sollten durch genügend Leerzeichen voneinander getrennt sein (Sie können bestimmen, wie breit mindestens ein Leerzeichen dazwischen sein muss).
Geben Sie beispielsweise für ein bestimmtes Array [[1, [2]], [3, [4, 5]]]
den folgenden Baum aus
┌─┴─┐
┌┴┐ ┌┴─┐
1 │ 3 ┌┴┐
2 4 5
Für array könnte [1, 2, 3]
der Baum so aussehen
┌─┼─┐
1 2 3
Aber das Array [[1, 2, 3]]
würde so aussehen
│
┌─┼─┐
1 2 3
Während das Array [1, [1, [1, [1]]]]
aussehen könnte
┌─┴┐
1 ┌┴─┐
1 ┌┴┐
1 │
1
Als komplizierteres Beispiel [1, [[[2, 3], 4], 5]]
könnte es sein
┌┴───┐
1 ┌─┴┐
┌─┴┐ 5
┌┴┐ 4
2 3
oder mehrere andere Variationen.
- Die Ein- und Ausgabe kann auf jede bequeme Weise erfolgen .
- Sie können es an STDOUT drucken oder als Funktionsergebnis zurückgeben.
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig.
- Beliebige Leerzeichen sind zulässig, sofern die Zeichen richtig ausgerichtet sind.
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
quelle
[1,[[[2,3],4],5]]
Dies könnte ein interessanter Testfall sein, da die Wurzel künstlich erweitert werden muss, damit der rechte Teilbaum nicht mit dem linken Teilbaum kollidiert.1
eine Anordnung von 3 Artikel ist:[2,3]
,4
, und5
. Aber 4 und 5 sind nicht benachbart.[1, [[[2, 3]], [4], 5]]
für mich so aus.Antworten:
Python 3 ,
400393390 BytesGibt eine Liste von Zeichenfolgen von oben nach unten zurück.
BEARBEITEN 1: 7 Bytes gekürzt, indem Duplikationen vermieden
┴┼
( Nettoersparnis von 2 Bytes), 0 aus der einen Zeichenfolge herausgeschnitten, die Auswahl der Zeichnungszeichen geändert┬┌┐
(Verwendung<
statt==
) und einL(z)
fehlendes ersetzt wurdene
EDIT 2: -2 Bytes dank Ovs und -1 Bytes dank Kevin Cruijssen
Probieren Sie es online!
Ungolfed
Baut einen Baum aus den Blättern, eine Schicht nach der anderen.
quelle
S,*K=' ┴┼│123456789'
.e==1
kann seine<2
, ein Byte zu speichern (ich glaube nicht, dass es jemals 0 sein kann, da die Abfrage angibt, dass die Eingabe nicht leer ist - und leere Eingabenmax(map(L,z))
in diesem Fall ohnehin schon fehlgeschlagen wären.)Sauber ,
544506 BytesEscapes werden verwendet, um ungültiges UTF-8 unter SE / TIO zu vermeiden, werden jedoch als ein Byte gezählt, da sie gültige Literale sind
Probieren Sie es online!
Übernimmt Eingaben im Format
L[I 3, L[I 4, I 5], I 2]..
Verbindet die Bäume von links nach rechts von unten nach oben und passt dann die Abstände von rechts nach links an.
Prettified, Art von:
quelle
Kohle ,
127123 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Ändern Sie die Standardzeichnungsrichtung in "Hoch", da wir nichts nach rechts zeichnen.
Der erste Schritt besteht darin, die verschachtelte Array-Darstellung in eine Index-Darstellung umzuwandeln, die eine Liste aller Einträge zusammen mit den Indizes der Subarrays darstellt, z. B. für die Eingabe
q=[1, [[[2, 3]], [4], 5]]
das5
istq[1][2]
und damit die gewünschte Liste1, 2
. Wir beginnen mit einem einzelnen zu verarbeitenden Eintrag, der eine Liste enthält, die die aktuellen Indizes (dh bisher keine) und die ursprüngliche Eingabe enthält.Durchlaufen Sie die Arrays, während wir sie verarbeiten. (Günstigerweise durchläuft Charcoal weiterhin eine Liste, wenn Sie diese während der Iteration aufrufen.)
Holen Sie sich das nächste zu verarbeitende Array.
Ist das eigentlich eher ein Skalar als ein Array?
Wenn ja, dann gehört die Liste, die wir hatten, tatsächlich auf die endgültige Liste der Indexlisten.
Andernfalls durchlaufen Sie jedes Element in diesem Array ...
... und speichern Sie es mit seiner neuen Indexliste zur weiteren Bearbeitung. Der maximale Index des Arrays wird ebenfalls gespeichert, um den Sonderfall des letzten Elements des Arrays zu definieren.
Jetzt können wir die Liste der Indexlisten durchlaufen. Die Liste ist jedoch nicht lexikografisch geordnet, sodass wir sie nicht direkt durchlaufen können.
Finden Sie das nächste Element in lexikografischer Reihenfolge.
Entfernen Sie es aus der Liste.
Springe zur Position des Skalars in der Ausgabe. Wir können dies berechnen, indem wir die Anzahl der von uns ausgegebenen Skalare zählen und die Anzahl der Einträge in der Indexliste kennen.
Tatsächlich drucken Sie den Skalar.
Durchlaufen Sie die Einträge in der Indexliste. Auch dies ist keine einfache Iteration, da die Einträge paarweise erfolgen und wir auch in der Lage sein müssen, aus der Schleife auszubrechen.
Extrahieren Sie den nächsten Index aus der Liste.
Wenn dies nicht das erste Element in der Liste ist ...
... dann drucken
┐
oder┬
je nachdem, ob dies das letzte Element in der Liste ist ...... und drucke genug
─
s, um den vorherigen Eintrag auf dieser Ebene zu füllen ...... und lösche die Variable, um aus der Schleife auszubrechen, da wir hier fertig sind.
Andernfalls, wenn dies (das erste Element von) einer Liste mit mehreren Elementen ist, drucken Sie die aus
┌┴
, und lassen Sie den Cursor über der Liste , um die┴
übergeordnete Ebene dieser Ebene zu behandeln.Andernfalls, wenn es sich um eine 1-Element-Liste handelt, drucken Sie einfach ein
│
und bewegen Sie sich eine Zeile nach oben, um sich mit dem übergeordneten Element dieser Ebene zu befassen.quelle