Nas competições esportivas, muitas vezes acontece que os vencedores são apresentados nos pódios, com a pessoa em primeiro lugar na posição mais alta no meio, a pessoa em segundo lugar na altura do meio à esquerda e a pessoa em terceiro lugar na posição mais baixa e para a direita. Vamos recriar isso aqui com alguns ajustes especiais.
Os pódios são apresentados abaixo:
@---@
| @ |
@---@| | |
| @ || | |
| | || | |@---@
| | || | || @ |
Isso formará a base para esse desafio. O próximo passo é tornar os pódios suficientemente largos para acomodar as pessoas (cadeias de caracteres ASCII imprimíveis) que estão nelas. No entanto, queremos garantir a beleza estética (porque essa é uma oportunidade fantástica para fotos), para que cada pódio precise ter a mesma largura e a largura deve ser ímpar. Além disso, as pessoas (obviamente) querem ficar no centro do pódio, de modo que as cordas devem estar centralizadas da melhor maneira possível. (Você pode alinhar à esquerda ou à direita e não precisa ser consistente.) Os pódios acima são do tamanho mínimo e são considerados 3
amplos.
Por exemplo, dada a entrada que ["Tom", "Ann", "Sue"]
representa primeiro, segundo e terceiro lugar, respectivamente, produzimos os seguintes pódios:
Tom
@---@
Ann | @ |
@---@| | |
| @ || | | Sue
| | || | |@---@
| | || | || @ |
No entanto, se tivermos em Anne
vez de Ann
, precisaremos ir para o próximo tamanho 5
e centralizar as seqüências da melhor maneira possível. Aqui, estou alinhando para que a letra "extra" de Anne
fique à esquerda do centro, mas você pode escolher com que lado se alinhar.
Tom
@-----@
Anne | @ |
@-----@| | |
| @ || | | Sue
| | || | |@-----@
| | || | || @ |
Vamos para alguns nomes mais longos. Que tal ["William", "Brad", "Eugene"]
:
William
@-------@
Brad | @ |
@-------@| | |
| @ || | | Eugene
| | || | |@-------@
| | || | || @ |
Aqui podemos ver que Brad
tem muito espaço em branco, Eugene
menos e William
se encaixa perfeitamente.
Para um caso de teste mais longo, que tal ["A", "BC", "DEFGHIJKLMNOPQRSTUVWXYZ"]
:
A
@-----------------------@
BC | @ |
@-----------------------@| | |
| @ || | | DEFGHIJKLMNOPQRSTUVWXYZ
| | || | |@-----------------------@
| | || | || @ |
Finalmente, temos a menor entrada possível, algo como ["A", "B", "C"]
:
A
@---@
B | @ |
@---@| | |
| @ || | | C
| | || | |@---@
| | || | || @ |
- A entrada e a saída podem ser fornecidas por qualquer método conveniente .
- A entrada é garantida como não vazia (ou seja, você nunca receberá
""
como nome). - Você pode imprimi-lo em STDOUT ou retorná-lo como resultado de uma função.
- Um programa completo ou uma função são aceitáveis.
- Qualquer quantidade de espaço em branco estranho é aceitável, desde que os caracteres sejam alinhados adequadamente.
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
Respostas:
JavaScript (ES8), 196 bytes
Experimente online!
fonte
Groovy ,
187,176,156, 150 bytesExperimente online!
(observação: o intérprete tio groovy não conseguiu lidar com listas de indexação usando valores longos, mesmo que o groovy 2.5.6 possa. Portanto, a resposta tio está usando em
*.toShort()
vez de*.toLong()
adicionar um byte)Define um fechamento
f
que pode ser chamado via:onde
f
retorna uma string.Explicação:
Desfocando o código, temos:
f={n->
- defina o fechamento f com um parâmetron
m=n*.size().max()|1
- encontre o nome máximo len, binário ou para o número ímparh=' '*(m/2)
- h conterá espaços de piso (m / 2), usados posteriormentea=...
- cria uma lista de codificação com elementos:@---@
padrão, acolchoado para len| @ |
padrão, acolchoado para len| | |
padrão, acolchoado para'307...'*.toLong().sum{a[it]}
- use indicações na lista de codificação para criar o resultado..sum
usa o fato de que string + string no groovy é válida.'3073...'*.toLong()
usa o*.
operador spread para chamartoLong()
cada caractere, retornando uma lista de números.a
foi incorporada, nelines removidas etc.fonte
Tela , 45 bytes
Experimente aqui!
Explicação:
Abusos "e não precisam ser consistentes", tornando-o bastante ininteligível.
fonte
Python 2 ,
197190 bytesExperimente online!
-6 bytes, graças a Andrew Dunai
fonte
x,y,p='@| '
e usando emp
vez de' '
Python 2 , 157 bytes
Experimente online!
fonte
Carvão , 63 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Calcule o número de espaços em cada metade de um pódio.
Faça um loop sobre cada lugar. Observe que a entrada deve estar na ordem 2, 1, 3.
Posição para o início da linha que terá o texto.
Envie o texto com preenchimento esquerdo suficiente para centralizá-lo.
Obter a altura do pódio.
Desenhe o pódio.
Abordagem alternativa, também 63 bytes:
Experimente online! Link é a versão detalhada do código. Explicação:
Calcule o número de espaços em cada metade de um pódio.
Faça um loop sobre cada lugar. Observe que a entrada deve estar na ordem 2, 1, 3.
Posição para o início da linha que terá o texto.
Envie o texto com preenchimento esquerdo suficiente para centralizá-lo.
Também produza a parte superior do pódio inserindo
-
s entre os caracteres da corda@-@
para atingir a largura correta.Imprima o restante do pódio, espaçando os
|
s adequadamente, exceto que o caractere do meio é um@
na primeira linha.fonte
R $
308302299-6 bytes graças a @JAD
-3 bytes graças a @Guiseppe, agora tenho menos de 300
Provavelmente existe uma maneira melhor de criar o layout; Eu deveria tentar quais opções tenho para quadros de dados.
Experimente online
fonte
i=max(1,nchar(a)%/%2)
. Gerar ummatrix
e usarwrite
pode ser mais curto (em vez de adata.frame
). Sugiro usarformat
comj="c"
para justificar automaticamente as coisas e tambémstrrep
é útil nesse caso. Talvez tente a sala de bate - papo da golfR para trocar idéias?strrep
; Vou ter que investigar isso.Limpo , 209 bytes
Experimente online!
fonte
Python 2 , 188 bytes
Experimente online!
-5 graças a TFeld .
fonte
PHP, 147 bytes
tirei 93 bytes da minha ideia inicial, de forma direta
<?=
:recebe nomes dos argumentos da linha de comando. Corra com
-nr
ou experimente online .Requer PHP 7; gera avisos no PHP 7.2 (e mais tarde, presumivelmente). Veja o TiO para obter uma correção de +5 bytes.
mapeamento:
demolir:
O pré-incremento para
$i
me salva de todos os truques para as novas linhas.O espaço em branco para
6
também pode estar vazio; então eu fiz isso.Mas usar
$argv[0]
a corda da borda superior-
foi o melhor golfe de todos os tempos. (e salvou 9 bytes!)fonte
Go, 436 bytes
Ir é terrível para o golfe. Mas:
Quebrado:
fonte
Java 8,
399394373 BytesEsta solução é provavelmente muito longa, mas é uma solução :)
Economizou 5 bytes iterando diretamente na ordem (a = 1,0,2 em vez de q = 0,1,2; a = f (q))Guardado 21 Bytes graças a @KevinCruijssen:Como @KevinCruijssen sugeriu, também se poderia usar em
var
vez deString
Java 10+ e economizar alguns bytes extras. Eu não faço isso pela simples razão de que ainda não tenho o Java 10: D também, lambdas poderiam ser usadas. Mas isso só reduziria a quantidade de bytes se deixássemos de atribuí-lo a umaFunction<String[],String>
variável.Em forma expandida:
A entrada deve ser fornecida como uma
String
matriz de comprimento 3. Um exemplo é semelhante a este:Saída:
fonte
var
vez deString
; preencheu a matriz de comprimento com um loop para cada; alteradoif(m%2==0)m++;if(m==3)m=5;
param+=m%2<1?m==2?3:1:0
para o mesmo efeito; mudou tudo%nr==0
para%nr<1
; mudou o%(m-1)
para%~-m
; coloque tudo dentro do próprio loop para que os suportes{}
possam ser removidos.m-l[a]>>1
vez de(m-l[a])/2
e emi<k+2?" ":j%~-m<1?"|":j==m/2?i==k+2?"@":"|"
vez dei>=k+2?j%~-m<1?"|":j==m/2?i==k+2?"@":"|":" "
C (GCC)
302293292289287 bytes-6 bytes graças ao ceilingcat
Execute aqui
Sem explicação e explicado (tecnicamente você não pode ter comentários após barras invertidas nas macros, portanto isso não será executado)
Aqui está o código de chamada
e saída
fonte
for(;i--;memset(D+1,45,w))w=w<(L[i]=strlen(N[i]))?L[i]|1:w;
vez defor(;i--;)w=w<(L[i]=strlen(N[i]))?L[i]|1:w;memset(D+1,45,w);
PowerShell para Windows,
231223 bytesExperimente online!
Entrada é matriz
@('second','first','third')
. Versão desenrolada:fonte
Stax , 43 bytes
Execute e depure
fonte