塞斯蒂娜是一种诗歌格式,它遵循我们可以生成的有趣的模式。它有六节,每行六行,其中第一节中每一行的最后几个字构成每个连续节中的行尾,以一个固定的模式旋转。(最后还有三行诗,但我们不会担心这一点。)看看伊丽莎白·毕晓普创造性地命名为“塞斯蒂娜”的前三节:
九月的雨落在房子上。在昏暗的灯光下,老grandmother坐在厨房里,child在小惊奇炉旁,读着年鉴上的笑话,笑着说着隐藏她的眼泪。她认为她的秋分眼泪和house屋顶上的雨水都被年鉴预测了,但只有grandmother.知道铁壶在stove.上唱歌,她切了一些面包,对孩子说,现在是喝茶的时候了;但是孩子正在看茶壶的小硬质tears舞,就像在热黑炉子上疯狂一样,就像雨必须在house. Tidying上跳舞,老grandmother挂起聪明的年鉴.
请注意,每行的结尾都是“家”、“祖母”、“孩子”、“炉子”、“年鉴”或“眼泪”六个单词中的一个。不仅如此,相对于前一节,这些词都是按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顺序。第三节是相对于第二节的顺序,以此类推,一直到第六节。
假设输入的单词总是只有字母、大写或小写。您可以将它们看作字符串数组或由非字母字符(空格、换行符等)分隔的单个字符串。在输出中,行由换行符(0x0A)分隔,节由两个换行符分隔。尾随换行符是可以接受的。
这是密码-高尔夫,所以以字节为单位的最短代码将获胜。话虽如此,压缩整首诗的结构可能要短一些,但我希望看到一些解决办法,使每一节都建立在前一节的基础上。
发布于 2016-11-12 19:33:38
r=Riffle;""<>Flatten@r[NestList[RotateRight,#,5],""]~r~"\n"&这个未命名函数的核心是NestList[RotateRight,#,5],它接受长度为6的输入列表,并创建一个由6个列表组成的列表,每个列表以sestina方式旋转。实际上,如果字符串列表列表是可接受的输出,那么NestList[RotateRight,#,5]&将以26个字节完成任务。
然后,r[...,""]在6个列表中的每个列表之间插入一个空字符串;Flatten将整个事件转换为一个字符串列表;~r~"\n"然后在每个字符串之间插入一个换行符;""<>将整个事件连接到一个字符串中。因此,其他33个字节仅用于将结构化输出转换为单个字符串。
发布于 2016-11-12 19:48:28
@for %%w in (%*)do @if not .%%w==.%7 echo %%w
@echo(
@if not .%7==...... %0 %6 %1 %5 %2 %4 %3 .%7说明:将输入作为命令行参数.%0使其循环,在原来空的第7个参数中积累.s。额外的.是因为if不适用于空字符串。
发布于 2016-11-13 14:19:02
(let p((o(list l))(m 0))(if(> n m)(p(cons(map(λ(x)(list-ref(list-ref o 0)x))'(5 0 4 1 3 2))o)(+ 1 m))(reverse o)))未高尔夫球:
(define(f l n)
(let loop ((ol (list l))
(m 0))
(if (> n m)
(loop
(cons (map
(λ (x) (list-ref (list-ref ol 0) x))
'(5 0 4 1 3 2))
ol)
(add1 m))
(reverse ol))))测试:
(f (list "house" "grandmother" "child" "stove" "almanac" "tears") 6)输出:
'(("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")
("house" "grandmother" "child" "stove" "almanac" "tears"))https://codegolf.stackexchange.com/questions/99574
复制相似问题