Dada uma seqüência de caracteres não vazia s, com comprimento par e um número inteiro positivo n, representando sua altura, componha uma pirâmide usando as seguintes regras:
A pirâmide deve conter n linhas não vazias; novas linhas finais são permitidas. Para cada 1 <= i <= n, a i-ésima linha deve conter a sequência com cada caractere individual repetido no local i vezes; abcd repetido 3 vezes, como tal, torna-se aaabbbcccddd. Cada linha deve ser centralizada com espaços de preenchimento para que o meio de cada linha fique alinhado verticalmente. Espaços à direita no final de cada linha são permitidos. Você também pode ter até uma nova linha de frente, mas nenhum outro espaço em branco antes da primeira linha.
Não é garantido que a sequência de entrada seja um palíndromo.
Caso de teste
s = 'o-o o-o', n = 10:
o-o o-o
oo--oo oo--oo
ooo---ooo ooo---ooo
oooo----oooo oooo----oooo
ooooo-----ooooo ooooo-----ooooo
oooooo------oooooo oooooo------oooooo
ooooooo-------ooooooo ooooooo-------ooooooo
oooooooo--------oooooooo oooooooo--------oooooooo
ooooooooo---------ooooooooo ooooooooo---------ooooooooo
oooooooooo----------oooooooooo oooooooooo----------oooooooooo
Respostas:
05AB1E , 9 bytes
Experimente online!
γ
foi, em pouco tempo, inspirado pela resposta de Adnan; masS
também funcionaria.fonte
05AB1E , 11 bytes
Usa a codificação 05AB1E . Experimente online!
fonte
»
une as matrizes internas por espaços. Substituí-lo porJ
deve funcionar (e acho que você deve postar isso como uma resposta diferente).Geléia ,
1413 bytesExperimente online!
Como funciona
fonte
C # (.NET Core) ,
139 137 136130 bytesExperimente online!
Retorna uma enumeração de
string
s com as linhas do desenho. Uma vez ingressado, o resultado é o seguinte:fonte
(n-i-1)*s.Length/2
. E eu gosto dos seus casos de teste. +1 :)ಠ_ಠ
intensifica~i
é equivalente a-i-1
", para que você possa salvar um byte, alterando(n-i-1)
para(n+~i)
.s=>n=>...
por mais um bytenew string(' '...
com"".PadLeft(...
Queijo Cheddar ,
7164 bytesGuardado 7 bytes graças a @ValueInk
Experimente online! Vou adicionar uma explicação daqui a pouco
Explicação
fonte
center
função que você pode usar como eu tenho na minha resposta Ruby, porque isso poderia potencialmente salvar bytes também.Ruby , 58 bytes
Experimente online!
fonte
Java 8,
188186185183181173 bytes-2 bytes (185 → 183) devido a uma correção de bug (estava produzindo
n+1
linhas em vez den
). Não acontece frequentemente que uma correção de bug salva bytes. :)-2 bytes (183 → 181) graças a @ OlivierGrégoire
Explicação:
Experimente aqui.
fonte
r="",q=s.format("%"+x+"s",r)
salvar 2 bytes. Muita movimentação por apenas dois bytes :(s.format("%"+x+"s",r)
diretamente, pude salvar mais 8 bytes após o seu golfe. :)JavaScript (ES6), 85 bytes
Recebe entrada na sintaxe de currying
(string)(height)
. Inclui uma nova linha líder.Demo
Mostrar snippet de código
fonte
Carvão , 19 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Precisamos de linhas repetidas
1..n
vezes. A maneira mais fácil de conseguir isso é fazer um loop de 0 a n, pois o loop 0 é basicamente um no-op.Posicione o cursor para que a linha resultante seja centralizada.
E é assim que é simples a impressão de cada caractere repetido
i
vezes.fonte
Python 2 ,
7577 bytesExperimente online!
fonte
center
embutido? Às vezes, eu realmente preciso ler os documentos: Pn-1
linhas.9
linhas de pirâmide quando a entrada é10
...SOGL V0.12 , 14 bytes
Experimente aqui!
fonte
∫dI
.Javascript, 105 bytes
Depois de alguns anos de folga, o Stretch Maniac está de volta, esperançosamente um pouco mais educado dessa vez.
fonte
s=>n=>[...Array(x=n)].reduce(a=>a+'\n'.padEnd(--x*s.length/2+1)+s.replace(/./g,c=>c.repeat(n-x)),'')
- você precisará substituir os'
s por backticks e\n
por uma nova linha literal.Haskell ,
797369 bytesExperimente online!
fonte
..
, você pode soltar odiv
:(' '<$[1,3..(n-m)*length s])
.APL (Dyalog) ,
3331 bytes2 bytes de golfe graças a @ZacharyT removendo parênteses desnecessários
Experimente online!
Explicação
O argumento da direita
⍵
é a string e o argumento da esquerda⍺
é o número.fonte
⍺-⊢
?Prolog SWI, 398 bytes
Não é a solução mais compacta (talvez em algum lugar reinventando a roda em vez de usar procedimentos internos), mas é conveniente trabalhar.
Teste:
Explicação:
w e s escreve quantidade adequada de espaços à esquerda:
d gere a "duplicação" de caracteres e e é de instalação recursiva:
a e l acrescentamos ao resultado (talvez exista um procedimento interno?):
o cria a saída:
e finalmente ep é o método principal :
fonte
Japt ,
20 + 1 = 2119 + 1 = 2014 bytesProduz uma matriz de linhas - adicione 2 bytes se isso não for permitido.
Teste-o
Explicação
fonte
SpUl
a ... espera, deixa pra lá :( Você pode salvar um byte embora substituindo(V-X
comXnV
, se não me engano.n
; obrigado @ETHproductions.PHP, 113 bytes:
Execute
php -nr '<code>' '<string>' <N>
ou teste on-line .demolir
fonte
CJam , 36 bytes
Experimente online!
fonte
T-SQL, 223 bytes
A entrada é via tabela preexistente t com colunas s e n , de acordo com nossos padrões de IO .
Não há muito a explicar, é um loop aninhado bastante simples, que utiliza
@i
as linhas e@j
percorre os caracteres da string que sãoREPLICATED
@i
times:fonte
R ,
125bytes 95Experimente online!
Explicação:
É bem simples, dividir a string e repetir os elementos
i
vezes cadarep(s,e=i)
(e
é a abreviação deeach
) enquanto fazemos o loop. A parte complicada érep('',(n-i)/2*length(s)+1)
. Esta é a corda do preenchimento, mas é um monte de cordas vazias. Preciso adicionar 1 porque, caso contrário, o resultado serácharacter(0)
um vetor de comprimento zero ecat
, que por padrão separa seus elementos com espaços, desalinha a linha final.fonte
Mathematica, 97 bytes
entrada
fonte
Tcl,
143142141138 bytesTeste:
Observação: o "cd" no final do procedimento impede que o resultado do tempo seja impresso abaixo da pirâmide, mas altera o diretório atual - um efeito colateral que não é explicitamente proibido.
Obrigado ao sergiol por uma dica para salvar um byte .... e outra para salvar mais um byte.
Graças ao aspecto (no chat tcl) por mais 3 bytes salvos!
fonte
Rápido, 232 bytes
Provavelmente poderia ser melhor, mas não tenho muito tempo para refatorar.
Esta resposta usa o Swift 4, portanto, não pode ser executado online no momento.
fonte
LOGO,
9795 bytesExperimente o código no interpretador FMSLogo.
Defina uma função
f
que aceite duas entradas:s
e:n
, em seguida, imprima o resultado.fonte
Java 8,
164148 bytesExplicação:
fonte
Ferrugem, 107 bytes
cercadinho
Define uma função anônima que recebe uma fatia e um número de sequência, imprimindo o padrão desejado na saída padrão. Ele pressupõe que a fatia de cadeia contenha apenas caracteres ASCII, mas o desafio nunca especifica que o suporte total a Unicode é necessário. Para estar correto também para o Unicode, seria necessário 117 bytes:
A explicação é bastante simples:
fonte
SOGL V0.12 , 8 bytes
Experimente aqui!
Explicação:
Não estava com vontade de atualizar minha resposta antiga aqui, pois usa um método diferente e usa um novo recurso (mais que o desafio) -
╚
fonte
Python 2 ,
7977 bytesExperimente online!
Edit: -2 bytes de cortesia @FlipTack
fonte
[i*(n-m)for i in s]
, como.join
é capaz de levar um gerador, que deve ter dois bytes.Excel VBA, 98 bytes
Função de janela imediata VBE anônima que recebe entrada como string de
[A1]
e int a partir de[B1]
então, para a janela imediata VBEfonte