Bir turnuva konsolu oluşturun


13

Boş olmayan dizelerin giriş listesi verildiğinde, aşağıdaki çizim kurallarına dayanarak bir turnuvanın ASCII sanat temsilini çıktılayın:

  • Dize sayısının miktar olarak garanti edilmesi 2,4,8,16,etc.
  • İlk iki dize birbirini çalar ve sonraki iki dize birbirini çalar, vb. Bu ilk tur.
  • Her oyun için kazananı eşit olasılıkla rastgele seçin.
  • Bir sonraki turda, ilk oyunun galibi ikinci oyunun galibi, üçüncü oyunun galibi dördüncü oyunun galibi olur vb. Sonraki mermiler paterni takip eder.
  • Sonunda bir genel kazanan var.
  • Güzel çıktı (zorunlu) için, dizelerin hepsinin başına bir alt çizgi eklenmeli ve eklenmelidir _.
  • Köşeli parantezlerin uygun şekilde hizalanması için, her girişin _o tur için aynı uzunlukta olması gerekir .
  • Dolgunun tutarlı olduğu sürece ekli veya ekli olup olmadığını seçebilirsiniz.
  • Bunun yerine, tüm dizeleri her turda değil, aynı uzunlukta olacak şekilde önceden doldurmayı seçebilirsiniz. Kodunuz için hangisi daha golfçüdür.

Diğer Kurallar

  • Karakterlerin kendileri doğru bir şekilde sıralandığı sürece, öndeki satır veya boşluk satırları isteğe bağlıdır.
  • Tam bir program veya bir işlev kabul edilebilir. Bir işlev varsa, çıktıyı yazdırmak yerine döndürebilirsiniz.
  • Mümkünse, diğer kişilerin kodunuzu deneyebilmesi için lütfen bir çevrimiçi test ortamına bağlantı ekleyin!
  • Standart boşluklar yasaktır.
  • Bu bu nedenle her zamanki golf kuralları geçerlidir ve en kısa kod (bayt cinsinden) kazanır.

Örnekler

Şehirlere örnek ['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_____/

İle örnek ['Lions', 'Tigers', 'Bears', 'Oh My']:

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


Kazanan seçimi Mersenne Twister rasgele mi olmalı yoksa sahte rasgele olabilir mi?
Zach Gates

@ZachGates İki "takım" arasında 50-50 şans olduğu sürece, hangi yöntemi kullanmak isterseniz kullanın.
AdmBorkBork

Yanıtlar:


6

Kömür , 92 79 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Girişin sonunu işaretlemek için boş bir satıra ihtiyaç duyar. Açıklama:

A¹θ

Değişkeni başlatın q. Bu, zig-zag'ların büyüklüğünü, yani satırlar arasındaki boşluğun yarısını tutar.

WS⊞υ⪫__ι

Diziye boş olmayan girdi satırlarını okuyun u. Çizgiler, _henüz doldurulmamış olmalarına rağmen, okundukları anda otomatik olarak s ile çevrelenir .

Wυ«

Hala karakter dizisi varken döngü.

A⌈EυLκε

İçindeki en büyük dizenin genişliğini hesaplayın e.

A⁺θθδ

İçindeki satırlar arasındaki boşluğu hesaplayın d.

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

Her takım için dolguyu yazdırın, takımı yazdırın ve ardından bir sonraki takıma geçin.

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

Diğer tüm takımlar için, o takım veya bir önceki takım arasında rastgele seçim yapın. (Yalnızca bir takım kaldıysa, bunun boş bir liste oluşturduğunu unutmayın.)

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

Hala takımlar kaldıysa, zikzakları çift olarak birleştirin.

Aδθ

Her seferinde zikzakların uzunluğunu ikiye katlayın.


Bir liste girdi operatörünün eksi olacağı herhangi bir durum olacağını düşünüyor musunuz?
Sadece ASCII

@ Sadece ASCII Sadece ASCII Venn Diyagramı sorusu için kullanabilirdim ...
Neil

: | Uygulamaya değer mi sizce?
Sadece ASCII

@ ASCII-sadece düşünüyorum ▷vSya da bunun için bir şey zaten.
Outgolfer Erik

2

Python 2 , 379364 bayt

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

Çevrimiçi deneyin!


İki düzeyli girintilerinizi tekil bir sekme ile değiştirebilir ve üç bayt kaydedebilirsiniz.
Jonathan Frech


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.