Bangun braket turnamen

13

Diberikan daftar input string yang tidak kosong, menampilkan representasi seni ASCII dari turnamen, berdasarkan aturan gambar berikut:

  • Jumlah string dijamin dari kuantitas 2,4,8,16,etc.
  • Dua dawai pertama saling bermain, dan dua dawai berikutnya saling bermain, dan seterusnya. Ini babak pertama.
  • Untuk setiap game, pilih pemenang secara acak dengan probabilitas yang sama.
  • Untuk babak selanjutnya, pemenang game pertama memainkan pemenang game kedua, pemenang game ketiga memainkan pemenang game keempat, dan seterusnya. Putaran selanjutnya mengikuti pola.
  • Akhirnya ada satu pemenang keseluruhan.
  • Untuk output yang cantik (wajib), string-string tersebut harus di-prepended dan ditambahkan dengan garis bawah _.
  • Agar tanda kurung sejajar dengan tepat, setiap entri harus diisi dengan _panjang yang sama untuk putaran itu.
  • Anda dapat memilih apakah padding didahulukan atau ditambahkan, asalkan konsisten.
  • Sebagai gantinya, Anda dapat memilih untuk melakukan pra-pad semua string dengan panjang yang sama, daripada setiap putaran. Yang mana pun pemain golf untuk kode Anda.

Aturan selanjutnya

  • Leading atau trailing newlines atau whitespace semuanya opsional, asalkan karakter itu sendiri berbaris dengan benar.
  • Program lengkap atau fungsi dapat diterima. Jika suatu fungsi, Anda dapat mengembalikan output daripada mencetaknya.
  • Jika memungkinkan, harap sertakan tautan ke lingkungan pengujian online sehingga orang lain dapat mencoba kode Anda!
  • Celah standar dilarang.
  • Ini adalah sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.

Contohnya

Contoh dengan kota ['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_____/

Contoh dengan ['Lions', 'Tigers', 'Bears', 'Oh My']:

_Lions__
        \_Tigers_
_Tigers_/        \
                  \_Tigers_
_Bears__          /
        \_Bears__/
_Oh My__/
AdmBorkBork
sumber
Terkait .
Okx
Apakah pemilihan pemenang harus Mersenne Twister acak, atau bisakah pseudo-acak?
Zach Gates
@ZachGates Sejauh ini merupakan peluang 50-50 antara kedua "tim", metode apa pun yang ingin Anda gunakan baik-baik saja.
AdmBorkBork

Jawaban:

6

Arang , 92 79 byte

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

Cobalah online!Tautan adalah untuk mengucapkan versi kode. Membutuhkan baris kosong untuk menandai akhir input. Penjelasan:

A¹θ

Inisialisasi variabel q . Ini memegang ukuran zig-zag yaitu setengah celah antara baris.

WS⊞υ⪫__ι

Baca jalur input nonblank ke dalam array u . Garis-garis secara otomatis dikelilingi oleh _s ketika mereka dibaca, meskipun mereka belum diisi.

Wυ«

Loop sementara masih ada string yang tersisa.

A⌈EυLκε

Hitung lebar string terbesar di e .

A⁺θθδ

Hitung jarak antar baris d .

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

Untuk setiap tim, cetak padding, cetak tim, dan kemudian pindah ke tim berikutnya.

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

Untuk setiap tim lain, pilih secara acak antara tim itu atau tim sebelumnya. (Perhatikan bahwa jika hanya ada satu tim yang tersisa maka ini menghasilkan daftar kosong.)

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

Jika masih ada tim yang tersisa, buat zig-zag bergabung dengan mereka berpasangan.

Aδθ

Gandakan panjang zig-zag setiap kali.

Neil
sumber
Apakah Anda pikir akan ada kasus di mana operator input daftar akan menguntungkan?
ASCII
@ ASCII-only Yah, saya bisa menggunakannya untuk pertanyaan ASCII Venn Diagram ...
Neil
: | apakah Anda pikir itu layak diterapkan?
ASCII
@ ASCII-saja saya pikir Anda bisa melakukan ▷vSsesuatu untuk itu.
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 ")

Cobalah online!

TFeld
sumber
Anda dapat mengganti indentasi dua tingkat dengan tab tunggal dan menyimpan tiga byte.
Jonathan Frech
365 byte.
Jonathan Frech
364 byte.
Jonathan Frech