Побудова дужки турніру


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-тільки Ну, я міг би використати це для питання про діаграму Венна про ASCII ...
Ніл

: | ви вважаєте, що це варто реалізувати?
лише ASCII

@ ASCII - тільки я думаю, що ти можеш зробити ▷vSщось для цього в будь-якому випадку.
Erik the Outgolfer

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

Спробуйте в Інтернеті!


Ви можете замінити двоступеневі відступи на одній вкладці та зберегти три байти.
Джонатан Фрех


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.