Une sestina est un format de poème qui suit un modèle intéressant que nous pouvons générer. Il comporte six strophes de six lignes chacune, où les derniers mots de chaque ligne de la première strophe constituent les terminaisons de ligne de chaque strophe successive, tournés selon un modèle défini. (Il y a aussi une strophe de trois lignes à la fin, mais nous ne nous en inquiéterons pas.) Jetez un coup d'œil aux trois premières strophes d'Elizabeth Bishop, créatives, nommées Sestina :
La pluie de septembre tombe sur la maison.
Dans la lumière défaillante, la vieille grand-mère est
assise dans la cuisine avec l'enfant à
côté du Little Marvel Stove,
lisant les blagues de l'almanach,
riant et parlant pour cacher ses larmes.Elle pense que ses larmes équinoxiales
et la pluie qui bat sur le toit de la maison
ont été annoncées par l'almanach,
mais seulement connues d'une grand-mère.
La bouilloire en fer chante sur la cuisinière.
Elle coupe du pain et dit à l'enfant:Il est temps pour le thé maintenant; mais l'enfant
regarde les petites larmes dures de la bouilloire
danser comme un fou sur le poêle noir et chaud,
comme la pluie doit danser sur la maison.
Rangement, la vieille grand-mère
raccroche l'almanach intelligent...
Notez comment chaque ligne se termine par l'un des six mots «maison», «grand-mère», «enfant», «poêle», «almanach» ou «larmes». Non seulement cela, mais les mots sont ordonnés dans le motif 6–1—5–2—4–3, par rapport à la strophe précédente. Cela finit par ressembler à une spirale:
Il nous reste encore quelques années avant de générer par programme une sestina complète, mais nous pouvons créer un modèle contenant les derniers mots de chaque strophe dans le bon ordre. Écrivez un programme ou une fonction qui, compte tenu des six mots de fin de ligne, génère le plan pour une sestina, en suivant ces règles. Voici le résultat attendu pour l'entrée 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 première strophe est constituée des mots dans l'ordre d'origine, la deuxième strophe est dans l'ordre 6-1-5-2-4-3 du premier. La troisième strophe est cet ordre par rapport à la seconde, et ainsi de suite, jusqu'à la strophe 6.
Supposons que les mots saisis seront toujours uniquement des lettres, majuscules ou minuscules. Vous pouvez les prendre comme un tableau de chaînes ou une chaîne unique délimitée par un caractère non-lettre (espace, nouvelle ligne, etc.). Dans la sortie, les lignes sont séparées par des sauts de ligne ( 0x0A
) et les strophes sont séparées par deux sauts de ligne. Une nouvelle ligne de fin est acceptable.
C'est le code-golf , donc le code le plus court en octets gagne. Cela étant dit, il peut être plus court de compresser toute la structure du poème, mais j'aimerais voir des solutions qui basent chaque strophe sur la précédente.
natural-language
tag. L'algorithme est le même même si l'entrée est de six chaînes de charabia.