Dans les compétitions sportives, il arrive souvent que les gagnants soient présentés sur les podiums, avec la première place au plus haut au milieu, la deuxième place à la hauteur moyenne à gauche, et la troisième place au plus bas et à droite. Nous allons recréer cela ici avec quelques ajustements spéciaux.
Les podiums sont présentés ci-dessous:
@---@
| @ |
@---@| | |
| @ || | |
| | || | |@---@
| | || | || @ |
Cela constituera la base de ce défi. L'étape suivante consiste à rendre les podiums suffisamment larges pour s'adapter aux personnes (chaînes ASCII imprimables) qui s'y trouvent. Cependant, nous voulons garantir la beauté esthétique (car c'est une fantastique opportunité de photo), donc chaque podium doit avoir la même largeur, et la largeur doit être impaire. De plus, les gens voudront (évidemment) se tenir au centre du podium, donc les cordes doivent être centrées le mieux possible. (Vous pouvez vous aligner à gauche ou à droite, et cela n'a pas besoin d'être cohérent.) Les podiums ci-dessus sont de la taille minimale et sont considérés comme 3
larges.
Par exemple, étant donné l'entrée ["Tom", "Ann", "Sue"]
représentant respectivement la première, la deuxième et la troisième place, sortez les podiums suivants:
Tom
@---@
Ann | @ |
@---@| | |
| @ || | | Sue
| | || | |@---@
| | || | || @ |
Cependant, si nous en avons Anne
au lieu de Ann
, nous devrons passer à la taille suivante 5
et centrer les cordes le mieux possible. Ici, je m'aligne de sorte que la lettre "supplémentaire" Anne
soit à gauche du centre, mais vous pouvez choisir de quel côté vous aligner.
Tom
@-----@
Anne | @ |
@-----@| | |
| @ || | | Sue
| | || | |@-----@
| | || | || @ |
Allons-y pour des noms plus longs. Que diriez-vous ["William", "Brad", "Eugene"]
:
William
@-------@
Brad | @ |
@-------@| | |
| @ || | | Eugene
| | || | |@-------@
| | || | || @ |
Ici, nous pouvons voir qu'il y Brad
a beaucoup d'espace, Eugene
moins, et qu'il William
convient parfaitement.
Pour un scénario de test plus long, que diriez-vous ["A", "BC", "DEFGHIJKLMNOPQRSTUVWXYZ"]
:
A
@-----------------------@
BC | @ |
@-----------------------@| | |
| @ || | | DEFGHIJKLMNOPQRSTUVWXYZ
| | || | |@-----------------------@
| | || | || @ |
Enfin, nous avons la plus petite entrée possible, quelque chose comme ["A", "B", "C"]
:
A
@---@
B | @ |
@---@| | |
| @ || | | C
| | || | |@---@
| | || | || @ |
- L'entrée et la sortie peuvent être fournies par n'importe quelle méthode pratique .
- L'entrée est garantie non vide (c'est-à-dire que vous ne recevrez jamais
""
de nom). - Vous pouvez l'imprimer sur STDOUT ou le renvoyer en tant que résultat de fonction.
- Un programme complet ou une fonction sont acceptables.
- N'importe quelle quantité d'espace blanc étranger est acceptable, tant que les caractères s'alignent correctement.
- Les failles standard sont interdites.
- Il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
Réponses:
JavaScript (ES8), 196 octets
Essayez-le en ligne!
la source
Groovy ,
187,176,156, 150 octetsEssayez-le en ligne!
(Remarque: l'interpréteur groove tio ne peut pas gérer les listes d'indexation en utilisant des valeurs longues même si groovy 2.5.6 le peut. Ainsi, la réponse tio utilise
*.toShort()
au lieu de*.toLong()
laquelle ajoute un octet)Définit une fermeture
f
qui peut être appelée via:où
f
renvoie une chaîne.Explication:
Dégageant le code, nous avons:
f={n->
- définir la fermeture f avec un in-paramn
m=n*.size().max()|1
- trouver le nom max len, binaire ou un nombre impairh=' '*(m/2)
- h contiendra des espaces au sol (m / 2), utilisés plus tarda=...
- crée une liste d'encodage avec des éléments:@---@
motif, rembourré à len| @ |
motif, rembourré à len| | |
motif, rembourré à len'307...'*.toLong().sum{a[it]}
- utilisez des indices dans la liste d'encodage pour construire le résultat..sum
utilise le fait que string + string dans groovy est valide.'3073...'*.toLong()
utilise l'*.
opérateur d'étalement pour appelertoLong()
chaque caractère, renvoyant une liste de nombres.a
a été insérée, les lignes de repère supprimées, etc.la source
Toile , 45 octets
Essayez-le ici!
Explication:
Les abus "et cela n'a pas besoin d'être cohérent", ce qui le rend assez inintelligible.
la source
Python 2 ,
197190 octetsEssayez-le en ligne!
-6 octets, merci à Andrew Dunai
la source
x,y,p='@| '
et en utilisantp
au lieu de' '
Python 2 , 157 octets
Essayez-le en ligne!
la source
Fusain , 63 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Calculez le nombre d'espaces dans chaque moitié d'un podium.
Faites une boucle sur chaque endroit. Notez que l'entrée devrait être dans l'ordre 2e, 1er, 3e.
Position au début de la ligne qui contiendra le texte.
Sortez le texte avec suffisamment de remplissage gauche pour le centrer.
Obtenez la hauteur du podium.
Dessinez le podium.
Approche alternative, également 63 octets:
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Calculez le nombre d'espaces dans chaque moitié d'un podium.
Faites une boucle sur chaque endroit. Notez que l'entrée devrait être dans l'ordre 2e, 1er, 3e.
Position au début de la ligne qui contiendra le texte.
Sortez le texte avec suffisamment de remplissage gauche pour le centrer.
Sortez également le haut du podium en insérant des
-
s entre les caractères de la chaîne@-@
pour atteindre la bonne largeur.Imprimez le reste du podium en espaçant le
|
s de manière appropriée, sauf que le caractère du milieu est un@
sur la première ligne.la source
R
308302299-6 octets grâce à @JAD
-3 octets grâce à @Guiseppe, maintenant j'ai moins de 300
Il existe probablement un meilleur moyen de créer la mise en page; Je devrais essayer quelles options j'ai pour les trames de données.
Essayez-le en ligne
la source
i=max(1,nchar(a)%/%2)
. La génération d'unmatrix
et l'utilisationwrite
peuvent être plus courtes (plutôt qu'undata.frame
). Je suggère d'utiliserformat
avecj="c"
pour justifier automatiquement les choses, etstrrep
est également utile dans ce cas. Peut-être essayez le salon de discussion golfR pour faire rebondir vos idées?strrep
; Je vais devoir examiner cela.Nettoyer , 209 octets
Essayez-le en ligne!
la source
Python 2 , 188 octets
Essayez-le en ligne!
-5 grâce à TFeld .
la source
PHP, 147 octets
joué 93 octets de mon idée initiale, un simple
<?=
:prend les noms des arguments de ligne de commande. Courez avec
-nr
ou essayez-le en ligne .Nécessite PHP 7; renvoie des avertissements en PHP 7.2 (et plus tard, probablement). Voir TiO pour un correctif de +5 octets.
cartographie:
panne:
Le pré-incrément pour
$i
me sauve de toutes les astuces pour les nouvelles lignes.L'
6
espace pour peut également être vide; donc je l'ai fait.Mais utiliser
$argv[0]
pour la chaîne de bordure supérieure-
était le plus beau golf de tous les temps. (et économisé 9 octets!)la source
Go, 436 octets
Aller est terrible pour le golf. Mais:
En panne:
la source
Java 8,
399394373 octetsCette solution est probablement beaucoup trop longue, mais c'est une solution :)
5 octets enregistrés en itérant directement dans l'ordre (a = 1,0,2 au lieu de q = 0,1,2; a = f (q))21 octets enregistrés grâce à @KevinCruijssen:Comme l'a suggéré @KevinCruijssen, on pourrait également utiliser à la
var
place deString
Java 10+ et enregistrer quelques octets supplémentaires. Je ne le fais pas pour la simple raison que je n'ai pas encore Java 10: D aussi, des lambdas pourraient être utilisés. Mais cela ne réduirait la quantité d'octets que si nous omettions de l'affecter à uneFunction<String[],String>
variable.Sous forme développée:
L'entrée doit être donnée sous la
String
forme d'un tableau de longueur 3. Un exemple ressemble à ceci:Sortie:
la source
var
au lieu deString
; rempli le tableau de longueurs avec une boucle pour chaque; changéif(m%2==0)m++;if(m==3)m=5;
pourm+=m%2<1?m==2?3:1:0
le même effet; changé tout%nr==0
en%nr<1
; changé le%(m-1)
en%~-m
; mettez tout à l'intérieur de la boucle elle-même afin que les supports{}
puissent être retirés.m-l[a]>>1
au lieu de(m-l[a])/2
eti<k+2?" ":j%~-m<1?"|":j==m/2?i==k+2?"@":"|"
au lieu dei>=k+2?j%~-m<1?"|":j==m/2?i==k+2?"@":"|":" "
C (GCC)
302293292289287 octets-6 octets grâce au plafond
Exécutez-le ici
Non golfé et expliqué (techniquement, vous ne pouvez pas avoir de commentaires après les barres obliques inverses dans les macros, donc cela ne fonctionnera pas)
Voici le code d'appel
et sortie
la source
for(;i--;memset(D+1,45,w))w=w<(L[i]=strlen(N[i]))?L[i]|1:w;
place defor(;i--;)w=w<(L[i]=strlen(N[i]))?L[i]|1:w;memset(D+1,45,w);
PowerShell pour Windows,
231223 octetsEssayez-le en ligne!
L'entrée est un tableau
@('second','first','third')
. Version déroulée:la source
Stax , 43 octets
Exécuter et déboguer
la source