构建比赛支架


13

给定一个非空字符串的输入列表,请根据以下绘制规则输出比赛的ASCII艺术表示形式:

  • 字符串数保证为数量 2,4,8,16,etc.
  • 前两个字符串互相演奏,后两个字符串互相演奏,依此类推。这是第一轮。
  • 对于每个游戏,均等概率随机选择获胜者。
  • 对于下一轮,第一场比赛的获胜者扮演第二场比赛的胜者,第三场比赛的胜者扮演第四场比赛的胜者,依此类推。随后的回合遵循该模式。
  • 最终有一个总冠军。
  • 为了获得漂亮的输出(必需),必须在所有字符串之前加上一个下划线_
  • 为了使方括号正确对齐,必须在每个条目中填充每个条目_的长度相同。
  • 您可以选择填充是预先添加还是附加,只要一致即可。
  • 取而代之的是,您可以选择将所有字符串预填充为相同的长度,而不是每回合一次。以您的代码为准。

进一步规则

  • 前导或尾随的换行符或空格都是可选的,只要字符本身正确对齐即可。
  • 完整的程序或功能都是可以接受的。如果是函数,则可以返回输出而不是打印输出。
  • 如果可能,请提供一个在线测试环境的链接,以便其他人可以尝试您的代码!
  • 禁止出现标准漏洞
  • 这是因此所有常用的高尔夫规则都适用,并且最短的代码(以字节为单位)获胜。

例子

城市示例['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_____/

范例['Lions', 'Tigers', 'Bears', 'Oh My']

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


获胜者的选择必须是Mersenne Twister随机的,还是伪随机的?
扎克·盖茨

@ZachGates只要两个“团队”之间有50-50的机会,您想使用的任何方法都可以。
AdmBorkBork

Answers:


6

木炭92 79字节

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

在线尝试!链接是详细版本的代码。需要空白行来标记输入的结尾。说明:

A¹θ

初始化变量q。这保持了锯齿形的大小,即行之间的间隙的一半。

WS⊞υ⪫__ι

将非空白的输入行读入数组u。这些行在_读入时会自动被s 包围,尽管尚未填充。

Wυ«

循环时还剩下字符串。

A⌈EυLκε

计算中最大字符串的宽度e

A⁺θθδ

计算中的行之间的间隔d

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

对于每个团队,打印填充,打印团队,然后向下移动到下一个团队。

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

对于其他每个团队,请在该团队或上一个团队之间随机选择。(请注意,如果只剩下一个团队,那么将产生一个空列表。)

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

如果还剩下团队,请绘制成对的锯齿形。

Aδθ

每次将锯齿形的长度加倍。


您是否认为在任何情况下列表输入运算符都是有益的?
ASCII码,仅ASCII,2007年

@only ASCII好吧,我本可以将其用于ASCII Venn Diagram问题……
Neil

:| 您认为值得实施吗?
ASCII码,仅ASCII,2007年

@@ only我认为您还是可以做到的▷vS
暴民埃里克(Erik the Outgolfer)'17年

2

Python 2中379个 364字节

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

在线尝试!


您可以用单个制表符替换两级缩进并保存三个字节。
乔纳森·弗雷希


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.