Una sestina es un formato de poema que sigue un patrón interesante que podemos generar. Tiene seis estrofas de seis líneas cada una, donde las últimas palabras de cada línea en la primera estrofa forman las terminaciones de línea en cada estrofa sucesiva, rotadas en un patrón establecido. (También hay una estrofa de tres líneas al final, pero no nos preocuparemos por eso). Eche un vistazo a las primeras tres estrofas de Sestina llamada creativamente por Elizabeth Bishop :
La lluvia de septiembre cae sobre la casa.
A la débil luz, la vieja abuela se
sienta en la cocina con el niño
al lado de la Pequeña Estufa Marvel,
leyendo los chistes del almanaque,
riendo y hablando para ocultar sus lágrimas.Ella piensa que sus lágrimas equinocciales
y la lluvia que azota el techo de la casa
fueron predichas por el almanaque,
pero solo las conoce una abuela.
La tetera de hierro canta en la estufa.
Ella corta un poco de pan y le dice al niño:Es hora de tomar el té ahora; pero el niño
observa cómo las pequeñas lágrimas duras de la tetera
bailan como locas en la estufa negra y caliente,
como la lluvia debe bailar en la casa.
Poniendo en orden, la abuela
cuelga el inteligente almanaque...
Observe cómo cada línea termina con una de las seis palabras "casa", "abuela", "niño", "estufa", "almanaque" o "lágrimas". No solo eso, sino que las palabras están ordenadas en el patrón 6–1—5–2—4–3, en relación con la estrofa anterior. Termina pareciendo una espiral:
Todavía estamos a unos pocos años de generar mediante programación una sestina completa, pero podemos crear una plantilla con las palabras finales de cada estrofa en el orden correcto. Escriba un programa o función que, dadas las seis palabras que terminan la línea, muestre el anteproyecto para una sestina, siguiendo estas reglas. Aquí está el resultado esperado para la entrada house grandmother child stove almanac tears
:
house
grandmother
child
stove
almanac
tears
tears
house
almanac
grandmother
stove
child
child
tears
stove
house
grandmother
almanac
almanac
child
grandmother
tears
house
stove
stove
almanac
house
child
tears
grandmother
grandmother
stove
tears
almanac
child
house
La primera estrofa son las palabras en orden original, la segunda estrofa está en el orden 6-1-5-2-4-3 de la primera. La tercera estrofa es ese orden relativo a la segunda, y así sucesivamente, hasta la estrofa 6.
Suponga que las palabras de entrada siempre serán solo letras, mayúsculas o minúsculas. Puede tomarlos como una matriz de cadenas o una sola cadena delimitada por un carácter que no sea letra (espacio, nueva línea, etc.). En la salida, las líneas están separadas por líneas nuevas ( 0x0A
) y las estrofas separadas por dos líneas nuevas. Una nueva línea final es aceptable.
Este es el código de golf , por lo que gana el código más corto en bytes. Dicho esto, puede ser más corto comprimir toda la estructura del poema, pero me gustaría ver algunas soluciones que basen cada estrofa en la anterior.
natural-language
etiqueta. El algoritmo es el mismo incluso si la entrada es seis cadenas de galimatías.