Xây dựng khung giải đấu


13

Đưa ra một danh sách đầu vào của các chuỗi không trống, xuất ra biểu diễn nghệ thuật ASCII của một giải đấu, dựa trên các quy tắc vẽ sau:

  • Số lượng chuỗi được đảm bảo là số lượng 2,4,8,16,etc.
  • Hai chuỗi đầu tiên chơi với nhau và hai chuỗi tiếp theo chơi với nhau, v.v. Đây là vòng đầu tiên.
  • Đối với mỗi trò chơi, chọn người chiến thắng ngẫu nhiên với xác suất bằng nhau.
  • Đối với vòng tiếp theo, người chiến thắng trong trò chơi đầu tiên đóng vai người chiến thắng trong trò chơi thứ hai, người chiến thắng trong trò chơi thứ ba đóng vai người chiến thắng trong trò chơi thứ tư, v.v. Các vòng tiếp theo theo mô hình.
  • Cuối cùng có một người chiến thắng tổng thể.
  • Đối với đầu ra đẹp (bắt buộc), tất cả các chuỗi phải được thêm vào trước và nối thêm dấu gạch dưới _.
  • Để các dấu ngoặc thẳng hàng một cách thích hợp, mỗi mục phải được đệm với _tất cả có cùng độ dài cho vòng đó.
  • Bạn có thể chọn liệu phần đệm được thêm vào trước hay được nối thêm, miễn là nó phù hợp.
  • Thay vào đó, bạn có thể chọn đệm trước tất cả các chuỗi có cùng độ dài, thay vì trên cơ sở mỗi vòng. Bất cứ ai là golfier cho mã của bạn.

Quy tắc khác

  • Các dòng mới hoặc dấu cách hàng đầu hoặc dấu trắng đều là tùy chọn, miễn là các ký tự tự xếp hàng chính xác.
  • Hoặc là một chương trình đầy đủ hoặc một chức năng được chấp nhận. Nếu một chức năng, bạn có thể trả lại đầu ra thay vì in nó.
  • Nếu có thể, vui lòng bao gồm một liên kết đến một môi trường thử nghiệm trực tuyến để người khác có thể thử mã của bạn!
  • Sơ hở tiêu chuẩn bị cấm.
  • Đây là vì vậy tất cả các quy tắc chơi gôn thông thường đều được áp dụng và mã ngắn nhất (tính bằng byte) sẽ thắng.

Ví dụ

Ví dụ với các thành phố ['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_____/

Ví dụ với ['Lions', 'Tigers', 'Bears', 'Oh My']:

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


Liệu lựa chọn của người chiến thắng phải là Mersenne Twister ngẫu nhiên, hay nó có thể là giả ngẫu nhiên?
Zach Gates

@ZachGates Miễn là có cơ hội 50-50 giữa hai "đội", bất kỳ phương pháp nào bạn muốn sử dụng đều ổn.
admBorkBork

Câu trả lời:


6

Than , 92 79 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Cần một dòng trống để đánh dấu kết thúc đầu vào. Giải trình:

A¹θ

Khởi tạo biến q. Cái này giữ kích thước của zig-zags tức là một nửa khoảng cách giữa các hàng.

WS⊞υ⪫__ι

Đọc các dòng đầu vào không trống vào mảng u. Các dòng được tự động bao quanh bởi _s khi chúng được đọc, mặc dù chúng chưa được đệm.

Wυ«

Vòng lặp trong khi vẫn còn các chuỗi.

A⌈EυLκε

Tính chiều rộng của chuỗi lớn nhất trong e.

A⁺θθδ

Tính khoảng cách giữa các hàng trong d.

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

Đối với mỗi đội, in phần đệm, in nhóm và sau đó chuyển xuống nhóm tiếp theo.

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

Đối với mọi đội khác, chọn ngẫu nhiên giữa đội đó hoặc đội trước. (Lưu ý rằng nếu chỉ còn một đội thì điều này sẽ tạo ra một danh sách trống.)

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

Nếu vẫn còn các đội, hãy vẽ các đường zích zắc nối chúng theo cặp.

Aδθ

Nhân đôi chiều dài của zigzags mỗi lần.


Bạn có nghĩ rằng sẽ có bất kỳ trường hợp nào trong đó một toán tử nhập danh sách sẽ là adcantageous không?
ASCII - chỉ

Chỉ có ASCII Vâng, tôi có thể đã sử dụng nó cho câu hỏi Sơ đồ Venn của ASCII ...
Neil

: | Bạn có nghĩ rằng nó đáng để thực hiện?
ASCII - chỉ

@ ASCII-chỉ tôi nghĩ bạn có thể làm ▷vShoặc một cái gì đó cho dù sao đi nữa.
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 ")

Hãy thử trực tuyến!


Bạn có thể thay thế thụt lề hai cấp của mình bằng một tab số ít và lưu ba byte.
Jonathan Frech


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.