一个sestina是诗的格式遵循一个有趣的模式,我们可以生成。它有六个节,每个节有六行,其中第一个节中每行的最后一个单词组成每个相继节中以设置模式旋转的行结尾。(最后还有一个三行节,但我们不必担心。)看一下Elizabeth Bishop创造性地命名为Sestina的前三个节:
九月的雨落在房子上。
在失败的曙光中,老祖母
和孩子
坐在小奇迹炉子旁边,坐在厨房里,
读着历书中的笑话,
笑着说着掩饰眼泪。她认为,历经的泪水
和房屋屋顶上刮起的大雨
都是历书所预言的,
但只有祖母才知道。
铁水壶在炉子上唱歌。
她切了一些面包,对孩子说,现在该喝茶了;但是孩子
却看着茶壶的细小的硬泪
在疯狂的黑火炉上疯狂地跳舞,就像
雨在房子上跳舞一样。
整理时,老祖母
挂上了聪明的年历...
请注意,每一行的结尾是六个单词“房子”,“祖母”,“孩子”,“火炉”,“年鉴”或“眼泪”之一。不仅如此,相对于先前的节,单词的排列方式为6–1–5–2–4–3。最终看起来像螺旋形:
距离以编程方式生成完整的sestina尚有几年的时间,但是我们可以创建一个模板,以适当的顺序包含每个节的结尾词。编写一个程序或函数,给定六个行结束词,并遵循以下规则输出sestina的设计图。这是输入的预期结果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
第一个节是原始顺序的单词,第二个节是第一个节的6-1-5-2-4-3顺序。第三个节是相对于第二个节的顺序,依此类推,一直到第6节。
假设输入单词将始终仅是字母,大写或小写。您可以将它们视为字符串数组或由非字母字符(空格,换行符等)分隔的单个字符串。在输出中,行用换行符(0x0A
)分隔,节用两条换行符分隔。尾随换行符是可以接受的。
这是代码高尔夫球,因此以字节为单位的最短代码获胜。话虽如此,压缩整首诗的结构可能要短一些,但我希望看到一些将每个节都基于前一句的解决方案。
natural-language
。即使输入是六个乱码,该算法也是相同的。