Costruisci una parentesi di torneo


13

Dato un elenco di input di stringhe non vuote, genera una rappresentazione artistica ASCII di un torneo, in base alle seguenti regole di disegno:

  • Il numero di stringhe è garantito per essere quantitativo 2,4,8,16,etc.
  • Le prime due corde si suonano a vicenda, le successive due si suonano a vicenda e così via. Questo è il primo round.
  • Per ogni gioco, scegli il vincitore in modo casuale con uguale probabilità.
  • Per il turno successivo, il vincitore del primo gioco gioca il vincitore del secondo gioco, il vincitore del terzo gioco gioca il vincitore del quarto gioco e così via. I round successivi seguono il modello.
  • Alla fine c'è un vincitore assoluto.
  • Per un output grazioso (richiesto), le stringhe devono essere tutte anteposte e aggiunte con un trattino basso _.
  • Affinché le parentesi si allineino correttamente, ogni voce deve essere imbottita con _la stessa lunghezza per quel round.
  • Puoi scegliere se il riempimento è anteposto o aggiunto, purché coerente.
  • Invece, puoi scegliere di pre-padare tutte le stringhe per avere la stessa lunghezza, piuttosto che su una base per round. Qualunque sia il più golfista per il tuo codice.

Ulteriori regole

  • Le nuove linee iniziali o finali o gli spazi bianchi sono tutti opzionali, purché i personaggi stessi si allineino correttamente.
  • È accettabile un programma completo o una funzione. Se una funzione, è possibile restituire l'output anziché stamparlo.
  • Se possibile, includi un collegamento a un ambiente di test online in modo che altre persone possano provare il tuo codice!
  • Sono vietate le scappatoie standard .
  • Si tratta di quindi si applicano tutte le normali regole del golf e vince il codice più breve (in byte).

Esempi

Esempio con le città ['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_____/

Esempio con ['Lions', 'Tigers', 'Bears', 'Oh My']:

_Lions__
        \_Tigers_
_Tigers_/        \
                  \_Tigers_
_Bears__          /
        \_Bears__/
_Oh My__/


La selezione del vincitore deve essere casuale di Mersenne Twister o può essere pseudo-casuale?
Zach Gates,

@ZachGates Finché c'è una probabilità del 50-50 tra i due "team", qualunque metodo tu voglia usare va bene.
AdmBorkBork,

Risposte:


6

Carbone di legna , 92 79 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. È necessaria una riga vuota per contrassegnare la fine dell'input. Spiegazione:

A¹θ

Inizializza la variabile q. Questo contiene le dimensioni degli zig-zag, ovvero metà dello spazio tra le file.

WS⊞υ⪫__ι

Leggere le righe di input non vuote nell'array u. Le righe vengono automaticamente racchiuse tra _loro quando vengono lette, anche se non sono ancora riempite.

Wυ«

Ripeti ciclicamente mentre ci sono ancora stringhe rimaste.

A⌈EυLκε

Calcola la larghezza della stringa più grande in e.

A⁺θθδ

Calcola il divario tra le righe in d.

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

Per ogni squadra, stampa l'imbottitura, stampa la squadra, quindi passa alla squadra successiva.

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

Per ogni altra squadra, scegli casualmente tra quella squadra o la squadra precedente. (Si noti che se è rimasta solo una squadra, questo produce un elenco vuoto.)

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

Se ci sono ancora squadre rimaste, disegna gli zigzag unendoli a coppie.

Aδθ

Raddoppia la lunghezza degli zigzag ogni volta.


Pensi che ci sarebbe un caso in cui un operatore di input di lista sarebbe incantatore?
ASCII il

@ ASCII-only Beh, avrei potuto usarlo per la domanda ASCII Venn Diagram ...
Neil

: | pensi che valga la pena implementarlo?
ASCII il

@ Solo ASCII penso che tu possa fare ▷vSo qualcosa del genere comunque.
Erik the Outgolfer,

2

Python 2 , 379 364 byte

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 ")

Provalo online!


Puoi sostituire i rientri a due livelli con una scheda singolare e salvare tre byte.
Jonathan Frech,


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.