(relacionado: uno , dos , tres )
Un acróstico es un estilo de poema / escritura donde el carácter inicial de cada línea, cuando se lee verticalmente, también produce una palabra o mensaje. Por ejemplo,
Together
Everyone
Achieves
More
también deletrea la palabra TEAM
cuando la primera columna se lee verticalmente.
Los acrósticos son un subconjunto de s mesosticos , donde la palabra vertical puede estar en cualquier lugar de las palabras horizontales. Por ejemplo, el TEAM
anterior también podría escribirse como un mesostico de la siguiente manera
togeTher
everyonE
Achieves
More
junto con varias otras variaciones.
El desafío aquí será producir un acróstico o mesostico a partir de una lista dada de palabras de entrada.
Entrada
- Una lista de palabras en cualquier formato adecuado .
- La lista solo contendrá palabras en minúsculas
[a-z]
. - Se garantiza que la lista formará un acróstico o un mesostico (no es necesario manejar entradas falsas).
- Una de las palabras en la entrada formará la palabra vertical, mientras que el resto hace las palabras horizontales; parte del desafío aquí es encontrar la palabra vertical adecuada, para que no se pueda tomar por separado.
Salida
- El acróstico o mesostico del arte ASCII formado a partir de las palabras de entrada, escritas a STDOUT o devueltas, en cualquier formato razonable.
- La palabra vertical correspondiente debe estar en mayúscula (como en los ejemplos).
- Se requieren espacios iniciales para que la palabra vertical se alinee adecuadamente . Los espacios finales y las nuevas líneas iniciales / finales son opcionales. Los espacios iniciales adicionales también están bien, siempre que las palabras se alineen correctamente.
- Si ambos son posibles un acróstico y mesostic, salida única el acróstico.
- Si es posible más de un acróstico / mesostico, su código puede generar uno o todos ellos.
Reglas
- Un programa completo o una función son aceptables.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
Ejemplos
['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
Respuestas:
Pyth,
52494746 bytesPruébalo en línea.
Esto es probablemente muy golfable. Imprime un montón de espacios principales.
fuente
Brachylog , 145 bytes
Pruébalo en línea!
(Toma medio minuto, así que sea paciente).
fuente
JavaScript (ES6), 255
263 269 286Editar 17 bytes guardados ya que se permite un número arbitrario de espacios
iniciales Editar2 algunos barajados, 6 bytes guardados
Editar3 devolver una lista de cadenas en lugar de una sola cadena con nuevas líneas (comentario OP a la respuesta del feersum), 8 bytes más guardados
Para cada palabra en la lista de entrada, uso un DFS recursivo para encontrar todos los mesosticos / acrósticos posibles. Cada uno se almacena como una matriz con la palabra y la posición de la letra de destino dentro de la palabra. Cada resultado encontrado se guarda en la matriz de resultados global en la posición 1 (si es un acróstico) o 0 si es un mesostico.
Después del escaneo completo de todas las palabras, obtengo el resultado en la última posición en conjunto y construyo y devuelvo su representación de arte ascii.
Menos golf
Prueba
fuente
Perl6,
287277269 bytesfuente
Mathematica 10.0, 139 bytes
Una función sin nombre que devuelve una lista de líneas:
Ejemplo de uso:
Estoy buscando sugerencias sobre mejores formas de capitalizar.Encontré una función muy agradableMapAt
para poner en mayúscula la letra en la cadena.fuente
Haskell,
214206204202 bytesDevuelve una lista de cadenas rellenas de espacio, por ejemplo,
f ["late","ballroom","anvil","to","head"]
->[" baLlroom"," Anvil"," To"," hEad"]
o más para mostrar:f
selecciona las palabras que se escriben horizontalmente junto con una lista de desplazamientos.h
rellena cada palabra de acuerdo con el desplazamiento correspondiente e inserta la letra mayúscula. En detalle:fuente
Python, 249 bytes
Probablemente sigue siendo muy golfable
Toma y devuelve una lista de la lista de caracteres.
- por ejemplo
" bAllroom"
es[' ',' ',' ','b','A','l','l','r','o','o','m']
Solo devuelve el primer resultado y verifica en un orden tal que todos los acrósticos se verifiquen primero.
Vea todos los casos de prueba impresos en el formato de visualización en ideone
Aquí hay una forma funcional más legible que hace lo mismo (excepto que devuelve el primer resultado inmediatamente en lugar de evaluar y luego devolver el primer resultado):
fuente
Perl 6, 177 bytes
Solución de fuerza bruta.
Cómo funciona
Cada candidato se ve así:
La transposición de la lista de listas de candidatos es necesaria para garantizar que se encuentre un acróstico, si existe, antes de cualquier mesostico.
fuente