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__/


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.


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!


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


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.