Šestina jest formatem poematu, który następuje ciekawy wzór, który możemy wygenerować. Ma sześć zwrotek po sześć wierszy każda, przy czym ostatnie słowa każdego wiersza w pierwszej zwrotce tworzą zakończenia linii w każdej kolejnej zwrotce, obrócone w ustalonym wzorze. (Na końcu jest też trzywierszowa zwrotka, ale nie będziemy się tym przejmować.) Spójrz na pierwsze trzy zwrotki twórczo nazwanej Sestina Elizabeth Bishop :
Wrześniowy deszcz pada na dom.
W słabnącym świetle stara babcia
siedzi w kuchni z dzieckiem
obok Małego Pieca Marvela,
czytając dowcipy z almanachu,
śmiejąc się i rozmawiając, by ukryć łzy.Sądzi, że jej równonocne łzy
i deszcz bijący na dach domu
zostały przepowiedziane przez almanach,
ale znane tylko babci.
Żelazny czajnik śpiewa na kuchence.
Kroi chleb i mówi dziecku:Czas na herbatę; ale dziecko
patrzy, jak małe, twarde łzy czajnika
tańczą jak szalone na gorącym czarnym piecu,
tak jak deszcz musi tańczyć w domu.
Stara babcia
sprząta sprytnego almanachu...
Zwróć uwagę, jak każda linia kończy się jednym z sześciu słów: „dom”, „babcia”, „dziecko”, „piec”, „almanach” lub „łzy”. Nie tylko to, ale słowa są uporządkowane według wzoru 6–1–5–2–4–3 w stosunku do poprzedniej zwrotki. Wygląda to jak spirala:
Jeszcze kilka lat dzieli nas od programowego wygenerowania pełnej sestiny, ale możemy stworzyć szablon zawierający słowa końcowe każdej zwrotki w odpowiedniej kolejności. Napisz program lub funkcję, która biorąc pod uwagę sześć końcowych słów, generuje plan sestiny, zgodnie z tymi zasadami. Oto oczekiwany wynik dla danych wejściowych 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
Pierwsza zwrotka to słowa w oryginalnej kolejności, druga zwrotka jest w kolejności 6-1-5-2-4-3 od pierwszej. Trzecia zwrotka to kolejność względem drugiej itd., Aż do zwrotki 6.
Załóżmy, że wprowadzane słowa zawsze będą składały się wyłącznie z liter, wielkich lub małych liter. Możesz wziąć je jako tablicę ciągów lub pojedynczy ciąg rozdzielony znakiem innym niż litera (spacja, znak nowej linii itp.). W wyniku wiersze są oddzielone znakami nowej linii ( 0x0A
), a zwrotki oddzielone dwoma znakami nowej linii. Końcowy znak nowej linii jest dopuszczalny.
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach. To powiedziawszy, może być krótsze, aby skompresować całą strukturę wiersza, ale chciałbym zobaczyć niektóre rozwiązania, które opierają każdą zwrotkę na poprzednim.
natural-language
tag. Algorytm jest taki sam, nawet jeśli na wejściu jest sześć ciągów bełkotu.