Die heutige Herausforderung ist es, ein Unentschieden binären Baum so schön ascii-art wie in diesem Beispiel:
/\
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/\ /\
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/\ /\ /\ /\
/ \ / \ / \ / \
/ \ / \ / \ / \
/ \ / \ / \ / \
/\ /\ /\ /\ /\ /\ /\ /\
/ \ / \ / \ / \ / \ / \ / \ / \
/\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
Sie erhalten eine positive Ganzzahl als Eingabe. Diese Eingabe ist die Höhe des Baums . Das obige Beispiel hat eine Höhe von sechs.
Sie können entweder ein vollständiges Programm oder eine Funktion einreichen und Sie können eine unserer Standard-E / A-Methoden verwenden . Das Drucken des Baums, das Zurückgeben einer Zeichenfolge mit Zeilenumbrüchen, das Zurückgeben eines 2d-Zeichen-Arrays, das Speichern des Baums in einer Datei usw. ist beispielsweise zulässig.
Nachgestellte Leerzeichen in jeder Zeile sind zulässig.
Hier sind einige Beispiele für Eingaben und die entsprechenden Ausgaben:
1:
/\
2:
/\
/\/\
3:
/\
/ \
/\ /\
/\/\/\/\
4:
/\
/ \
/ \
/ \
/\ /\
/ \ / \
/\ /\ /\ /\
/\/\/\/\/\/\/\/\
5:
/\
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/\ /\
/ \ / \
/ \ / \
/ \ / \
/\ /\ /\ /\
/ \ / \ / \ / \
/\ /\ /\ /\ /\ /\ /\ /\
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
Leider wächst die Ausgabe exponentiell, so dass es schwierig ist, größere Beispiele zu zeigen. Hier ist ein Link zur Ausgabe für 8.
Wie üblich handelt es sich hierbei um eine Code-Golf- Herausforderung. Es gelten daher Standardlücken, und Sie sollten versuchen, das kürzestmögliche Programm in der von Ihnen gewählten Sprache zu schreiben.
Viel Spaß beim Golfen!
Antworten:
Python 2, 77 Bytes
Druckt mit nachgestellten Leerzeichen und wird mit einem Fehler beendet.
Ich habe diesen Code aus meiner Vorlage zu einer Herausforderung gemacht, die ich für Anarchy Golf gestellt habe , und eine Ein-Byte-Verbesserung, die von xsot gefunden wurde. Der fest codierte Wert von 128 wurde in geändert
2**input()
.Die Idee ist, dass jede Zeile der Ausgabe ein Segment ist, das ein oder mehrere Male kopiert wurde. Die Hälfte nach dem Eingabesplit enthält eine Kopie jedes Segments, das Viertel nach dem nächsten Split enthält zwei Kopien usw. bis zur letzten Zeile mit vielen Segmenten von
/\
.Jedes Segment hatte ein
/
und\
, mit Zwischenräumen, sowie an der Außenseite, um auf die richtige Länge zu polstern. Die Außenpolsterung erfolgt mitcenter
.Die Variable
s
verfolgt den aktuellen Wert für jedes Segment und die Anzahl der Segmente istS/s
so, dass die Gesamtbreite der Baumbreite entsprichtS
. Die Zeilennummeri
wird um 2 heruntergezählt, und wenn der Werts
die Hälfte davon beträgt, erfolgt eine Teilung, und die Segmentbreite halbiert sich. Dies geschieht über den Ausdrucks/=s/i
. Wenni
erreicht0
, gibt dies einen Fehler, der das Programm beendet.Da Anagolf nur Programmeinreichungen zulässt, habe ich die Möglichkeit einer rekursiven Funktion, die meiner Meinung nach wahrscheinlich kürzer ist, nicht untersucht.
quelle
V , 32 Bytes
Probieren Sie es online!
Hexdump:
quelle
Canvas , 11 Bytes
Probieren Sie es hier aus!
Erläuterung:
quelle
Haskell ,
140 138135 BytesProbieren Sie es online! Aufruf mit
b 5
, gibt eine Liste von Zeichenketten zurück.Hübsche Drucknutzung:
(einige) Erklärung:
e n
erzeugt eine Folge vonn
Leerzeichenn!f
füllt jede Zeichenfolge in der Liste der Zeichenfolgenf
mitn
Leerzeichen nach links und rechts auff n
Zeichnet einen "Peak" in einemn
durch2n
Rechteckb n
Zeichnet den Binärbaum, indem zwei kleinere Bäume verkettet werden, und zentriert einen neuen Peak über ihnenEdit: -3 Bytes dank Zgarb!
quelle
1!f(n-1)
undm!f m
sollte ein paar Bytes sparen.J ,
49 4342 BytesDies ergibt ein Verb, das eine Zahl annimmt und ein 2D-Zeichenarray zurückgibt. Probieren Sie es online!
Erläuterung
Ich konstruiere zuerst eine Matrix aus den Werten -1, 0 und 1 durch Iteration eines Hilfsverbs und ersetze dann die Zahlen durch Zeichen. Das Hilfsverb konstruiert die rechte Hälfte der nächsten Iteration und spiegelt sie dann horizontal, um den Rest zu erzeugen. In der folgenden Erläuterung werden
,
2D-Arrays vertikal und 1D-Arrays horizontal verkettet.quelle
JavaScript (ES6), 105 Byte
Baut das Ergebnis rekursiv aus dem Basisfall auf
/\
. Die untere Hälfte ist nur der vorherige Fall, wobei jede Zeile dupliziert wird. Die obere Hälfte war etwas kniffliger; Es sieht so aus, als ob Sie den vorherigen Fall übernehmen und nur die beiden Seiten behalten möchten, aber Sie müssen sich auch Gedanken über das Auffüllen der Saiten machen, um die Breite zu verdoppeln, also mache ich stattdessen etwas Regex-Magie. Indem ich die führenden Leerzeichen aus dem vorherigen Fall nehme und an jedem Punkt aufteile, kann ich die Leerzeichen vor und nach diesem Punkt berücksichtigen. Bei jedem Spiel erhöhen sich die Leerzeichen vor und nach dem Spiel verringern sich die Leerzeichen um 1; Dies kann dazu verwendet werden , die positionieren/
und\
an den richtigen Stellen. Die Zeilenumbrüche und die Polsterung werden hier ebenfalls hinzugefügt. Dies erledigt alle Auffüllungen mit Ausnahme eines nachgestellten Leerzeichens in jeder Zeile und eines führenden Leerzeichens in der ersten Zeile, die ich manuell hinzufügen muss. (Die führenden Leerzeichen in den nachfolgenden Zeilen stammen aus der übereinstimmenden Zeichenfolge.)quelle
Kohle , 12 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Die Zeilenlängen betragen 1, 1, 2, 4, 8 ... 2 ^ (N-2), daher die umständliche Berechnung.
quelle
Stax ,
20 bis19 BytesFühren Sie es aus und debuggen Sie es
quelle
Batch, 218 Bytes
Hinweis: Zeile 6 endet in einem Leerzeichen. Bewegen Sie die Zweige jedes Mal entsprechend nach links und rechts, außer in Zeilen, die 2 n vom Ende entfernt sind. In diesem Fall werden die Zweige stattdessen gegabelt.
quelle
Haxe, 181 Bytes
Oder mit einem optionalen Leerzeichen:
Ich habe eine Weile an einer Lösung gearbeitet, bei der zuerst eine Reihe von Leerzeichen der richtigen Größe erstellt und dann die gegabelten Pfade iterativ immer tiefer (und bei jeder Iteration dichter) gesetzt wurden. Es blieben jedoch mehr als 230 Bytes. Der Ansatz hier ist so ziemlich das, was der Haskell-Ansatz von @ Laikoni ist. Ich konnte nicht damit durchkommen, es nicht zu haben
:String
, weil Haxe nicht klug genug ist, um zu erkennen, dass der Rückgabetyp immer ein String sein wird.Dies ist nur eine Funktion, hier ist ein vollständiges Programm, um es zu testen:
Geben Sie das Obige ein
Main.hx
, kompilieren Sie mithaxe -main Main.hx -neko frac.n
und testen Sie es mitneko frac.n 4
(ersetzen Sie es4
durch die gewünschte Reihenfolge).quelle
PHP, 188 Bytes
Online Version
Erweitert
quelle