Una sestina è un formato di poesia che segue uno schema interessante che possiamo generare. Ha sei stanze di sei linee ciascuna, in cui le ultime parole di ogni linea nella prima stanza compongono le terminazioni di linea in ogni stanza successiva, ruotate secondo uno schema prestabilito. (C'è anche una strofa a tre righe alla fine, ma non ci preoccuperemo per questo.) Dai un'occhiata alle prime tre stanze della creativamente chiamata Elizabeth Sestina :
La pioggia di settembre cade sulla casa.
Nella luce fioca, la vecchia nonna è
seduta in cucina con il bambino
accanto alla Stufa della Piccola Marvel,
leggendo le battute dell'almanacco,
ridendo e parlando per nascondere le sue lacrime.Pensa che le sue lacrime equinoziali
e la pioggia che batte sul tetto della casa siano
state entrambe predette dall'almanacco,
ma solo conosciute da una nonna.
Il bollitore di ferro canta sul fornello.
Taglia un po 'di pane e dice al bambino,Adesso è il momento del tè; ma il bambino
sta guardando le piccole lacrime dure del teiera
danzare come matti sulla calda stufa nera,
come la pioggia deve danzare sulla casa.
Riordinando, la vecchia nonna
riattacca il sapiente almanacco...
Nota come ogni riga termina con una delle sei parole "casa", "nonna", "bambino", "stufa", "almanacco" o "lacrime". Non solo, ma le parole sono ordinate nello schema 6–1—5–2—4–3, rispetto alla strofa precedente. Finisce per sembrare una spirale:
Mancano ancora pochi anni alla generazione programmatica di una sestina completa, ma possiamo creare un modello che mostri le parole finali di ogni strofa nell'ordine corretto. Scrivi un programma o una funzione che, date le parole che terminano con sei righe, genera il modello per una sestina, seguendo queste regole. Ecco il risultato atteso per l'input 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 prima strofa sono le parole nell'ordine originale, la seconda strofa è nell'ordine 6-1-5-2-4-3 dalla prima. La terza strofa è quell'ordine relativo alla seconda, e così via, fino alla strofa 6.
Supponiamo che le parole di input siano sempre solo lettere, maiuscole o minuscole. Puoi prenderli come una matrice di stringhe o una singola stringa delimitata da un carattere non lettera (spazio, newline, ecc.). Nell'output, le linee sono separate da newline ( 0x0A
) e le stanze sono separate da due newline. Una nuova riga finale è accettabile.
Questo è code-golf , quindi vince il codice più breve in byte. Detto questo, potrebbe essere più breve comprimere l'intera struttura della poesia, ma mi piacerebbe vedere alcune soluzioni che basano ciascuna strofa sulla precedente.
natural-language
tag. L'algoritmo è lo stesso anche se l'input è di sei stringhe di incomprensibili.