Baue eine Turnierklammer

13

Wenn Sie eine Eingabeliste mit nicht leeren Zeichenfolgen angegeben haben, geben Sie eine ASCII-Grafikdarstellung eines Turniers basierend auf den folgenden Zeichenregeln aus:

  • Die Anzahl der Saiten ist garantiert quantitativ 2,4,8,16,etc.
  • Die ersten beiden Saiten spielen sich gegenseitig und die nächsten beiden Saiten spielen sich gegenseitig und so weiter. Dies ist die erste Runde.
  • Wählen Sie für jedes Spiel den Gewinner zufällig mit gleicher Wahrscheinlichkeit.
  • In der nächsten Runde spielt der Gewinner des ersten Spiels den Gewinner des zweiten Spiels, der Gewinner des dritten Spiels spielt den Gewinner des vierten Spiels und so weiter. Nachfolgende Runden folgen dem Muster.
  • Es gibt schließlich einen Gesamtsieger.
  • Für eine hübsche Ausgabe (erforderlich) müssen alle Zeichenfolgen vorangestellt und mit einem Unterstrich versehen werden _.
  • Damit die Klammern richtig ausgerichtet sind, muss jeder Eintrag mit _der gleichen Länge für diese Runde aufgefüllt werden.
  • Sie können wählen, ob die Auffüllung vorangestellt oder angehängt werden soll, solange sie konsistent ist.
  • Stattdessen können Sie festlegen, dass alle Zeichenfolgen vorab die gleiche Länge haben und nicht pro Runde. Was auch immer für Ihren Code Golfspieler ist.

Weitere Regeln

  • Führende oder nachfolgende Zeilenumbrüche oder Leerzeichen sind optional, sofern die Zeichen selbst korrekt ausgerichtet sind.
  • Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
  • Fügen Sie nach Möglichkeit einen Link zu einer Online-Testumgebung hinzu, damit andere Benutzer Ihren Code ausprobieren können!
  • Standardlücken sind verboten.
  • Dies ist daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.

Beispiele

Beispiel mit Städten ['Boston', 'New York', 'Charlotte', 'Atlanta', 'St. Paul', 'Chicago', 'Los Angeles', 'Phoenix']:

_Boston______
             \_New York____
_New York____/             \
                            \_New York_
_Charlotte___               /          \
             \_Charlotte___/            \
_Atlanta_____/                           \
                                          \_St. Paul_
_St. Paul____                             /
             \_St. Paul____              /
_Chicago_____/             \            /
                            \_St. Paul_/
_Los Angeles_               /
             \_Los Angeles_/
_Phoenix_____/

Beispiel mit ['Lions', 'Tigers', 'Bears', 'Oh My']:

_Lions__
        \_Tigers_
_Tigers_/        \
                  \_Tigers_
_Bears__          /
        \_Bears__/
_Oh My__/
AdmBorkBork
quelle
Verwandte .
Okx
Muss die Auswahl des Gewinners zufällig nach Mersenne Twister erfolgen oder kann sie pseudozufällig sein?
Zach Gates
@ZachGates Solange es sich um eine 50: 50-Chance zwischen den beiden "Teams" handelt, ist jede Methode, die Sie verwenden möchten, in Ordnung.
AdmBorkBork

Antworten:

6

Kohle , 92 79 Bytes

A¹θWS⊞υ⪫__ιWυ«A⌈EυLκεA⁺θθδFυ«P×_εPκMδ↓»AE✂υ¹Lυ²⎇‽²κ§υ⁺λλυMε→Fυ«Mδ↑↗θ←↖θ→»Mθ↘Aδθ

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Benötigt eine Leerzeile, um das Ende der Eingabe zu markieren. Erläuterung:

A¹θ

Initialisieren Sie die Variable q. Dies hält die Größe der Zick-Zack-Linien, dh die Hälfte der Lücke zwischen den Reihen.

WS⊞υ⪫__ι

Lesen Sie nicht leere Eingabezeilen in das Array u. Die Zeilen werden beim _Einlesen automatisch von s umgeben , obwohl sie noch nicht aufgefüllt sind.

Wυ«

Schleife solange noch Saiten übrig sind.

A⌈EυLκε

Berechnen Sie die Breite der größten Zeichenfolge in e.

A⁺θθδ

Berechnen Sie die Lücke zwischen den Zeilen in d.

Fυ«P×_εPκMδ↓»

Drucken Sie für jedes Team die Füllung aus, drucken Sie das Team aus, und fahren Sie dann mit dem nächsten Team fort.

AE✂υ¹Lυ²⎇‽²κ§υ⁺λλυ

Wählen Sie für jedes andere Team zufällig zwischen diesem Team oder dem vorherigen Team aus. (Wenn nur noch ein Team übrig ist, wird eine leere Liste erstellt.)

Mε→Fυ«Mδ↑↗θ←↖θ→»Mθ↘

Wenn noch Teams übrig sind, ziehe die Zickzacke, die sie paarweise verbinden.

Aδθ

Verdoppeln Sie die Länge der Zickzacklinien jedes Mal.

Neil
quelle
Glauben Sie, dass es einen Fall geben würde, in dem ein Listeneingabeoperator von Nachteil wäre?
Nur ASCII
@ Nur ASCII Nun, ich hätte es für die ASCII-Venn-Diagramm-Frage verwenden können ...
Neil
: | Denken Sie, dass es sich lohnt, dies umzusetzen?
Nur ASCII
@ ASCII-only Ich denke, du kannst ▷vSsowieso etwas dafür tun.
Erik der Outgolfer
2

Python 2 , 379 364 Bytes

exec r"""c=input();from random import*;R,L,d=range,len,0;u,s="_ ";r=[[""]*-~L(c)@R(2*L(c)-1)]
while c:
 W=2+max(map(L,c));j=1<<d;J=j/2;D=d+d;d+=1
 @r:l[D]=s*W;l[D-1]=s*J
 @R(L(c)):
	h=l*2*j+j-1;r[h][D]=(u+c[l]+u*W)[:W]
	@R(h-J,h+J):r[-~l][~-D]=("/\\"[l<h]+s*abs(h-l-(l<h))).rjust(J)
 c=[choice(l)@zip(c[::2],c[1::2])]
@r:print"".join(l)""".replace("@","for l in ")

Probieren Sie es online!

TFeld
quelle
Sie können Ihre zweistufigen Einrückungen durch eine einzelne Registerkarte ersetzen und drei Byte speichern.
Jonathan Frech
365 Bytes.
Jonathan Frech
364 Bytes.
Jonathan Frech