A sestina é um formato de poema que segue um padrão interessante que podemos gerar. Ele tem seis estrofes de seis linhas cada, onde as últimas palavras de cada linha na primeira estrofe compõem as terminações de cada estrofe sucessiva, giradas em um padrão definido. (Há também uma estrofe de três linhas no final, mas não vamos nos preocupar com isso.) Dê uma olhada nas três primeiras estrofes da criativamente chamada Sestina, de Elizabeth Bishop :
A chuva de setembro cai sobre a casa.
À luz fraca, a velha avó
senta-se na cozinha com a criança
ao lado do Fogão da Pequena Marvel,
lendo as piadas do almanaque,
rindo e conversando para esconder as lágrimas.Ela acha que suas lágrimas equinociais
e a chuva que bate no telhado da casa
foram preditas pelo almanaque,
mas são conhecidas apenas por uma avó.
A chaleira de ferro canta no fogão.
Ela corta um pouco de pão e diz à criança:Está na hora do chá agora; mas a criança
está assistindo as pequenas lágrimas duras da chaleira
dançarem como loucas no fogão quente e preto,
do jeito que a chuva deve dançar na casa.
Arrumando, a velha avó
desliga o almanaque inteligente...
Observe como cada linha termina com uma das seis palavras "casa", "avó", "criança", "fogão", "almanaque" ou "lágrimas". Não apenas isso, mas as palavras são ordenadas no padrão 6–1—5–2–4–3, em relação à estrofe anterior. Acaba parecendo uma espiral:
Ainda estamos a alguns anos de gerar programaticamente uma sestina completa, mas podemos criar um modelo com as palavras finais de cada estrofe na ordem correta. Escreva um programa ou função que, dadas as seis palavras finais de linha, produza o plano para uma sestina, seguindo estas regras. Aqui está o resultado esperado para a 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
A primeira estrofe são as palavras na ordem original, a segunda estrofe está na ordem 6-1-5-2-4-3 da primeira. A terceira estrofe é a ordem em relação à segunda e assim por diante, até a estrofe 6.
Suponha que as palavras de entrada sempre sejam apenas letras, maiúsculas ou minúsculas. Você pode tomá-los como uma matriz de cadeias ou uma única cadeia delimitada por um caractere não-letra (espaço, nova linha etc.). Na saída, as linhas são separadas por novas linhas ( 0x0A
) e as estrofes separadas por duas novas linhas. Uma nova linha à direita é aceitável.
Isso é código-golfe , então o código mais curto em bytes vence. Dito isto, pode ser mais curto compactar toda a estrutura do poema, mas eu gostaria de ver algumas soluções que baseiam cada estrofe na anterior.
natural-language
tag. O algoritmo é o mesmo, mesmo que a entrada tenha seis strings de rabiscos.