토너먼트 브래킷 구성


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에서 무작위로해야합니까, 아니면 의사 난수 일 수 있습니까?
Zach Gates

@ZachGates 두 "팀"사이에 50-50의 기회가있는 한, 어떤 방법을 사용하든 괜찮습니다.
AdmBorkBork

답변:


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-only 글쎄, 나는 그것을 ASCII 벤 다이어그램 질문에 사용할 수 있었다 ...
Neil

: | 구현할 가치가 있다고 생각하십니까?
ASCII 전용

@ ASCII-only ▷vS어쨌든 당신이 할 수있는 일 이나 뭔가를 생각합니다 .
Outgolfer Erik

2

파이썬 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 ")

온라인으로 사용해보십시오!


2 단계 들여 쓰기를 단일 탭으로 바꾸고 3 바이트를 절약 할 수 있습니다.
Jonathan Frech


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.