Eine Sestina ist ein Gedichtformat, das einem interessanten Muster folgt, das wir erzeugen können. Es verfügt über sechs Zeilengruppen mit jeweils sechs Zeilen, wobei die letzten Wörter jeder Zeile in der ersten Zeilengruppe die Zeilenenden in jeder aufeinander folgenden Zeilengruppe bilden, die in einem festgelegten Muster gedreht werden. (Es gibt auch eine dreizeilige Strophe am Ende, aber wir werden uns nicht darum kümmern.) Schauen Sie sich die ersten drei Strophen von Elizabeth Bishops kreativem Namen Sestina an :
September Regen fällt auf das Haus.
Im schwachen Licht
sitzt die alte Großmutter mit dem Kind
neben dem Little Marvel Stove in der Küche ,
liest die Witze aus dem Almanach,
lacht und redet, um ihre Tränen zu verbergen.Sie glaubt, dass ihre äquinoktialen Tränen
und der Regen, der auf dem Dach des Hauses schlägt,
beide vom Almanach vorhergesagt wurden,
aber nur einer Großmutter bekannt waren.
Der eiserne Wasserkocher singt auf dem Herd.
Sie schneidet etwas Brot und sagt zu dem Kind:Es ist jetzt Zeit für Tee; Aber das Kind
beobachtet, wie die kleinen harten Tränen des Teekessels
wie verrückt auf dem heißen schwarzen Herd tanzen, so wie
der Regen auf das Haus tanzen muss.
Die alte Großmutter räumt auf und
legt den cleveren Almanach auf...
Beachten Sie, wie jede Zeile mit einem der sechs Wörter "Haus", "Großmutter", "Kind", "Herd", "Almanach" oder "Tränen" endet. Darüber hinaus sind die Wörter in der Reihenfolge 6–1–5–2–4–3 in Bezug auf die vorherige Strophe angeordnet. Es sieht aus wie eine Spirale:
Wir sind noch ein paar Jahre davon entfernt, programmgesteuert eine vollständige Sestina zu generieren, aber wir können eine Vorlage mit den Endwörtern jeder Strophe in der richtigen Reihenfolge erstellen. Schreiben Sie ein Programm oder eine Funktion, die anhand der sechs Zeilenenden nach diesen Regeln den Entwurf für eine Sestina ausgibt. Hier ist das erwartete Ergebnis für die Eingabe 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
Die erste Strophe enthält die Wörter in der ursprünglichen Reihenfolge, die zweite Strophe in der Reihenfolge 6-1-5-2-4-3 von der ersten. Die dritte Strophe ist diese Reihenfolge relativ zur zweiten und so weiter bis zur Strophe 6.
Angenommen, die eingegebenen Wörter bestehen immer nur aus Buchstaben, Groß- oder Kleinbuchstaben. Sie können sie als ein Array von Zeichenfolgen oder als eine einzelne Zeichenfolge, die durch ein Nicht-Buchstaben-Zeichen (Leerzeichen, Zeilenumbruch usw.) getrennt ist, annehmen. In der Ausgabe werden Zeilen durch Zeilenumbrüche ( 0x0A
) und Zeilengruppen durch zwei Zeilenumbrüche getrennt. Ein abschließender Zeilenumbruch ist zulässig.
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes. Abgesehen davon mag es kürzer sein, die Struktur des gesamten Gedichts zu komprimieren, aber ich würde gerne einige Lösungen sehen, die jede Strophe auf der vorherigen aufbauen.
natural-language
Tag verdient . Der Algorithmus ist der gleiche, auch wenn die Eingabe aus sechs Kauderwelschsätzen besteht.