(relacionado: um , dois , três )
Um acróstico é um estilo de poema / escrita em que o caractere inicial de cada linha, quando lido na vertical, também produz uma palavra ou mensagem. Por exemplo,
Together
Everyone
Achieves
More
também soletra a palavra TEAM
quando a primeira coluna é lida verticalmente.
Acrósticos são um subconjunto de mesósticos s, onde a palavra vertical pode estar em qualquer lugar nas palavras horizontais. Por exemplo, o exemplo TEAM
acima também pode ser escrito como um mesóstico da seguinte maneira
togeTher
everyonE
Achieves
More
junto com várias outras variações.
O desafio aqui será produzir um acróstico ou mesóstico a partir de uma determinada lista de palavras de entrada.
Entrada
- Uma lista de palavras em qualquer formato adequado .
- A lista conterá apenas palavras feitas com letras minúsculas
[a-z]
. - A lista é garantida para formar um acróstico ou um mesóstico (não há necessidade de lidar com dados falsos).
- Uma das palavras na entrada formará a palavra vertical, enquanto as demais formarão as palavras horizontais - parte do desafio aqui é encontrar a palavra vertical apropriada, para que não possa ser usada separadamente.
Saída
- O acróstico ou mesóstico da arte ASCII formado a partir das palavras de entrada, gravadas em STDOUT ou retornadas, em qualquer formato razoável.
- A palavra vertical correspondente deve ser maiúscula (como nos exemplos).
- Espaços iniciais para alinhar a palavra vertical são necessários . Os espaços à direita e as novas linhas à esquerda / à direita são opcionais. Espaços iniciais extras também são bons, desde que as palavras estejam alinhadas corretamente.
- Se tanto um acróstico e mesóstico são possíveis, saída única o acróstico.
- Se mais de um acróstico / mesóstico for possível, seu código poderá gerar um ou todos eles.
Regras
- Um programa completo ou uma função são aceitáveis.
- 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.
Exemplos
['together', 'team', 'everyone', 'achieves', 'more']
Together
Everyone
Achieves
More
['aaa', 'aaa', 'aaa', 'aaa']
Aaa
Aaa
Aaa
# One output, or multiple (of the same) output is allowed
['aaa', 'aaa', 'aab', 'baa']
Aaa
Aaa
Baa
# This is the only allowed output, since others would be mesostic, which are lower priority
['live', 'every', 'love', 'very', 'ohio']
Live
Ohio
Very
Every
# Note that 'live' couldn't be the vertical word since then it would be a mesostic, which is lower priority output
['cow', 'of', 'fox']
cOw
Fox
# A shorter mesostic test case
['late', 'ballroom', 'anvil', 'to', 'head']
anviL
bAllroom
To
hEad
Respostas:
Pitão,
52494746 bytesExperimente online.
Provavelmente isso é muito jogável. Imprime vários espaços principais.
fonte
Braquilog , 145 bytes
Experimente online!
(Leva meio minuto, então seja paciente.)
fonte
JavaScript (ES6), 255
263 269 286Editar 17 bytes salvos como número arbitrário de espaços à esquerda é permitido
Edit2 alguns embaralhar, 6 bytes salvos
Edit3 retornar uma lista de cadeia em vez de uma única corda com novas linhas (comentário OP a resposta de feersum), 8 mais bytes salvos
Para cada palavra na lista de entrada, eu uso um DFS recursivo para encontrar todos os possíveis mesósticos / acrósticos. Cada um é armazenado como uma matriz com a palavra e a posição da letra alvo dentro da palavra. Todos os resultados encontrados são salvos na matriz de resultados global na posição 1 (se for um acróstico) ou 0 se for um mesóstico.
Após a verificação completa de todas as palavras, obtenho o resultado na última posição na matriz e construo e retorno sua representação ascii art.
Menos golfe
Teste
fonte
Perl6,
287277269 bytesfonte
Mathematica 10.0, 139 bytes
Uma função sem nome retornando uma lista de linhas:
Exemplo de uso:
Estou procurando sugestões de melhores maneiras de capitalizar.Encontrei uma função muito boaMapAt
para colocar a letra em maiúscula na string.fonte
Haskell,
214206204202 bytesRetorna uma lista de cadeias de espaço preenchidas, por exemplo,
f ["late","ballroom","anvil","to","head"]
->[" baLlroom"," Anvil"," To"," hEad"]
ou mais compatíveis com a exibição:f
seleciona as palavras que são escritas horizontalmente junto com uma lista de compensações.h
preenche cada palavra de acordo com o deslocamento correspondente e insere a letra maiúscula. Em detalhe:fonte
Python, 249 bytes
Provavelmente ainda é muito jogável
Pega e retorna uma lista de lista de caracteres.
- por exemplo,
" bAllroom"
é[' ',' ',' ','b','A','l','l','r','o','o','m']
Sempre retorna o primeiro resultado e verifica em uma ordem em que todos os acrósticos são verificados primeiro.
Veja todos os casos de teste impressos no formato de exibição em ideone
Aqui está uma forma funcional mais legível que faz o mesmo (exceto que retorna o primeiro resultado imediatamente, em vez de avaliar e depois retornar o primeiro resultado):
fonte
Perl 6, 177 bytes
Solução de força bruta.
Como funciona
Cada candidato se parece com:
A transposição da lista de listas de candidatos é necessária para garantir que um acróstico, se existir, seja encontrado antes de qualquer mesóstico.
fonte