Para os propósitos do desafio atual de "delinear" uma palavra significa cercá-la sucessivamente com suas próprias letras, começando pela última e, finalmente, substituir a palavra original no centro por espaços:
oooooo
onnnno
on -> on no
onnnno
oooooo
Tarefa:
Dada uma lista de palavras, consistindo apenas de letras inglesas em minúsculas e / ou maiúsculas, delineie cada palavra e exiba todos os blocos resultantes próximos um do outro horizontalmente, separados por uma coluna de espaço único, alinhada verticalmente no centro dos blocos.
Você pode escrever um programa completo ou uma função.
Entrada:
Uma lista de palavras, ou se você preferir - uma sequência delimitada por espaço ou outro símbolo
Resultado:
A representação ASCII dos blocos para as palavras descritas. Espaços em branco à esquerda / à direita são permitidos.
Casos de teste:
Input 1: ["code", "golf"] (or "code golf")
Output 1:
cccccccccccc gggggggggggg
cooooooooooc goooooooooog
coddddddddoc gollllllllog
codeeeeeedoc golfffffflog
code edoc golf flog
codeeeeeedoc golfffffflog
coddddddddoc gollllllllog
cooooooooooc goooooooooog
cccccccccccc gggggggggggg
Input 2: ["I", "am", "just", "a", "man"] (or "I am just a man")
Output 2:
jjjjjjjjjjjj
juuuuuuuuuuj mmmmmmmmm
aaaaaa jussssssssuj maaaaaaam
III ammmma justtttttsuj aaa mannnnnam
I I am ma just tsuj a a man nam
III ammmma justtttttsuj aaa mannnnnam
aaaaaa jussssssssuj maaaaaaam
juuuuuuuuuuj mmmmmmmmm
jjjjjjjjjjjj
Critérios de vitória:
O código mais curto em bytes em cada idioma vence. Eu aprecio muito se você comentar / explicar seu código e abordagem.
Respostas:
Tela ,
2220 bytesExperimente aqui!
Explicação:
fonte
Carvão , 35 bytes
Experimente online!Link é a versão detalhada do código. Explicação:
Passe pela lista de entrada.
Obtenha o comprimento da palavra atual.
Mova para o canto superior esquerdo do contorno resultante.
Faça um loop uma vez para cada personagem.
Desenhe uma caixa com a altura, largura e caracteres adequados.
Vá para o canto superior esquerdo da próxima caixa.
Vá para o próximo esboço.
fonte
Haskell ,
188183174171167 bytes-9-13 bytes graças a Laikoni .Experimente online!
fonte
\a->and[p a>=p x|x<-f<$>w]
pode ser\a->all((p a>=).p)$f<$>w
ek c=(++[c]).(c:)
pode serk c s=c:s++[c]
.Pitão,
3433 bytesExperimente online.
Despeja um monte de espaço em branco extra, mas isso é permitido pelo desafio.
Explicação
m
…Q
Faz o seguinte para cada palavrad
na entradaQ
:m\ d
mapeia a palavra comx => " "
, essencialmente criando a lista[" ", ..., " "]
com tantos itens quanto a palavra tem letras..idd
intercala a palavra consigo mesma, repetindo as letras da palavra duas vezes._
inverte essa sequência.word
torna-seddrrooww
.u
começa comG
= a matriz de espaços e aplica o seguinte a cada letra na sequência intercalada emH
:*2H
repete o personagem duas vezes.jR
…G
Coloca cada stringG
entre o par de caracteres.C
troca linhas e colunas. Quando essas três etapas são executadas duas vezes com o mesmo caractereH
, isso descreve as linhasG
desse caractere.d
.+;
precede uma coluna de espaço.s
achata a matriz de colunas para cada palavra, eJ
armazena-o na variávelJ
.m
...J
Faz o seguinte para cada coluna da saída:.[lJd;
preenche os dois lados da coluna com espaços para que o comprimento da coluna seja igual ao número de colunas. Isso sempre é preenchimento suficiente para alinhar as colunas verticalmente.C
transforma as colunas em linhas ej
une as linhas com novas linhas.Solução alternativa, 33 bytes
Experimente online.
Observe que há um espaço à direita. Principalmente o mesmo algoritmo, exceto apenas as colunas na parte superior e depois transpõe com preenchimento de espaço.
fonte
R , 189 bytes
Experimente online!
Uma colaboração entre digEmAll e eu no chat .
fonte
APL (Dyalog Classic) ,
575150 bytesExperimente online!
fonte
Stax ,
2625 bytesExecute e depure
fonte
05AB1E , 46 bytes
Não estou muito feliz com isso, mas estou feliz que esteja funcionando.
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte