Construire un support de tournoi

13

Étant donné une liste d'entrée de chaînes non vides, affichez une représentation artistique ASCII d'un tournoi, basée sur les règles de dessin suivantes:

  • Le nombre de cordes est garanti en quantité 2,4,8,16,etc.
  • Les deux premières cordes se jouent et les deux suivantes se jouent, etc. Ceci est le premier tour.
  • Pour chaque jeu, choisissez le gagnant au hasard avec une probabilité égale.
  • Pour le tour suivant, le vainqueur du premier match joue le vainqueur du deuxième match, le vainqueur du troisième match joue le vainqueur du quatrième match, etc. Les tours suivants suivent le modèle.
  • Il y a finalement un gagnant général.
  • Pour une jolie sortie (obligatoire), les chaînes doivent toutes être ajoutées et ajoutées avec un trait de soulignement _.
  • Pour que les supports s'alignent correctement, chaque entrée doit être rembourrée _pour avoir tous la même longueur pour ce tour.
  • Vous pouvez choisir si le rembourrage est ajouté ou ajouté, tant qu'il est cohérent.
  • Au lieu de cela, vous pouvez choisir de pré-rembourrer toutes les cordes pour qu'elles aient la même longueur, plutôt que par tour. Quel que soit le golfeur pour votre code.

Règles supplémentaires

  • Les sauts de ligne ou les espaces de début ou de fin sont tous facultatifs, tant que les caractères eux-mêmes s'alignent correctement.
  • Un programme complet ou une fonction sont acceptables. S'il s'agit d'une fonction, vous pouvez renvoyer la sortie plutôt que de l'imprimer.
  • Si possible, veuillez inclure un lien vers un environnement de test en ligne afin que d'autres personnes puissent essayer votre code!
  • Les failles standard sont interdites.
  • Il s'agit de donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.

Exemples

Exemple avec les villes ['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_____/

Exemple avec ['Lions', 'Tigers', 'Bears', 'Oh My']:

_Lions__
        \_Tigers_
_Tigers_/        \
                  \_Tigers_
_Bears__          /
        \_Bears__/
_Oh My__/
AdmBorkBork
la source
Connexes .
Okx
La sélection du gagnant doit-elle être aléatoire Mersenne Twister, ou peut-elle être pseudo-aléatoire?
Zach Gates
@ZachGates Tant que c'est une chance de 50-50 entre les deux "équipes", quelle que soit la méthode que vous souhaitez utiliser est très bien.
AdmBorkBork

Réponses:

6

Fusain , 92 79 octets

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

Essayez-le en ligne! Le lien est vers la version détaillée du code. Nécessite une ligne vierge pour marquer la fin de l'entrée. Explication:

A¹θ

Initialisez la variable q. Cela tient la taille des zigzags, c'est-à-dire la moitié de l'écart entre les rangées.

WS⊞υ⪫__ι

Lisez les lignes d'entrée non vides dans le tableau u. Les lignes sont automatiquement entourées de _s lors de leur lecture, bien qu'elles ne soient pas encore remplies.

Wυ«

Boucle tant qu'il reste des chaînes.

A⌈EυLκε

Calculez la largeur de la plus grande chaîne de e.

A⁺θθδ

Calculez l'écart entre les rangées d.

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

Pour chaque équipe, imprimez le rembourrage, imprimez l'équipe, puis passez à l'équipe suivante.

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

Pour chaque autre équipe, choisissez au hasard entre cette équipe ou l'équipe précédente. (Notez que s'il ne reste qu'une seule équipe, cela produit une liste vide.)

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

S'il reste des équipes, dessinez les zigzags qui les rejoignent par paires.

Aδθ

Doublez la longueur des zigzags à chaque fois.

Neil
la source
Pensez-vous qu'il y aurait un cas où un opérateur de saisie de liste serait avantageux?
ASCII uniquement
@ ASCII uniquement Eh bien, j'aurais pu l'utiliser pour la question du diagramme ASCII Venn ...
Neil
: | pensez-vous que cela vaut la peine d'être mis en œuvre?
ASCII uniquement
@ ASCII uniquement, je pense que vous pouvez faire ▷vSquoi que ce soit de toute façon.
Erik the Outgolfer du
2

Python 2 , 379 364 octets

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

Essayez-le en ligne!

TFeld
la source
Vous pouvez remplacer vos retraits à deux niveaux par un onglet unique et enregistrer trois octets.
Jonathan Frech
365 octets.
Jonathan Frech
364 octets.
Jonathan Frech