Сестина это формат стихотворения , который следует интересный образец , который мы можем генерировать. Он имеет шесть строф по шесть строк в каждой, где последние слова каждой строки в первой строфе составляют окончания строк в каждой последующей строфе, повернутые по заданному шаблону. (В конце также есть строфа из трех строк, но мы не будем об этом беспокоиться.) Взгляните на первые три строфы творчески названной Сестиной Элизабет Бишоп :
Сентябрьский дождь падает на дом.
В тусклом свете старая бабушка
сидит на кухне с ребенком
рядом с печью Little Marvel,
читая анекдоты из альманаха,
смеясь и разговаривая, чтобы скрыть слезы.Она думает, что ее слезы равноденствия
и дождь, который бьется на крыше дома,
были предсказаны альманахом,
но известны только бабушке.
Железный чайник поет на плите.
Она нарезает хлеб и говорит ребенку:Время для чая сейчас; но ребенок
наблюдает, как маленькие
горячие слезы чайника танцуют, как сумасшедшие, на горячей черной плите,
как дождь должен танцевать в доме.
Приводя в порядок, старая бабушка
вешает умный альманах...
Обратите внимание, как каждая строка заканчивается одним из шести слов «дом», «бабушка», «ребенок», «плита», «альманах» или «слезы». Мало того, но слова упорядочены по схеме 6–1–5–2—4–3 относительно предыдущей строфы. Это выглядит как спираль:
У нас еще несколько лет до программной генерации полной сестины, но мы можем создать шаблон, содержащий конечные слова каждой строфы в правильном порядке. Напишите программу или функцию, которая, учитывая шесть слов в конце строки, выводит план для сестины, следуя этим правилам. Вот ожидаемый результат для ввода 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
тега. Алгоритм такой же, даже если на входе шесть строк бессмысленности.