Sebuah sestina adalah format puisi yang mengikuti pola yang menarik yang bisa kita hasilkan. Ini memiliki enam bait dari enam baris masing-masing, di mana kata-kata terakhir dari setiap baris dalam bait pertama membentuk akhir baris di setiap bait berturut-turut, diputar dalam pola yang ditetapkan. (Ada juga bait tiga baris di akhir, tetapi kita tidak akan khawatir tentang itu.) Lihatlah tiga bait pertama dari Sestina bernama Elizabeth Bishop yang kreatif bernama :
September hujan turun di rumah.
Dalam cahaya yang hilang, nenek tua itu
duduk di dapur bersama anak
di samping Kompor Marvel Kecil,
membaca lelucon dari almanak,
tertawa dan berbicara untuk menyembunyikan air matanya.Dia berpikir bahwa air mata yang sama
dan hujan yang berdetak di atap rumah
keduanya dinubuatkan oleh almanak,
tetapi hanya diketahui oleh seorang nenek.
Ketel besi bernyanyi di atas kompor.
Dia memotong roti dan berkata kepada anak itu,Sekarang waktunya minum teh; tetapi anak
itu menyaksikan air mata kecil teko itu
menari-nari seperti orang gila di atas tungku hitam panas,
seperti hujan yang harus menari di rumah.
Merapikan, nenek tua
menutup almanak pintar...
Perhatikan bagaimana setiap baris diakhiri dengan salah satu dari enam kata "rumah," "nenek," "anak," "kompor," "almanak," atau "air mata." Bukan hanya itu, tetapi kata-kata tersebut diurutkan dalam pola 6–1—5–2—4–3, relatif terhadap bait sebelumnya. Itu akhirnya tampak seperti spiral:
Kami masih beberapa tahun lagi dari pemrograman menghasilkan sestina penuh, tetapi kami dapat membuat template yang menampilkan kata-kata akhir dari setiap bait dalam urutan yang tepat. Tulis sebuah program atau fungsi yang, mengingat kata-kata yang berakhir enam baris, mengeluarkan cetak biru untuk sestina, mengikuti aturan-aturan ini. Inilah hasil yang diharapkan untuk 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
Bait pertama adalah kata-kata dalam urutan asli, bait kedua dalam urutan 6-1-5-2-4-3 dari yang pertama. Bait ketiga adalah urutan itu relatif terhadap bait kedua, dan seterusnya, sampai bait 6.
Asumsikan bahwa kata-kata input akan selalu hanya berupa huruf, huruf besar atau kecil. Anda bisa menganggapnya sebagai larik string atau string tunggal yang dibatasi oleh karakter non-huruf (spasi, baris baru, dll.). Dalam output, baris dipisahkan oleh baris baru ( 0x0A
), dan bait dipisahkan oleh dua baris baru. Newline tambahan dapat diterima.
Ini adalah kode-golf , jadi kode terpendek dalam byte menang. Yang sedang berkata, mungkin lebih pendek untuk mengompresi seluruh struktur puisi, tetapi saya ingin melihat beberapa solusi yang mendasari setiap bait pada sebelumnya.
natural-language
tag. Algoritmanya sama walaupun inputnya enam string omong kosong.Jawaban:
Jelly ,
1514 byteTryItOnline!
Bagaimana?
Yey, penggunaan salah satu tambahan saya untuk Jelly! (
œ?
)sumber
Python,
7264 byteMengambil input melalui STDIN sebagai array yang dipisahkan koma dari 6 string dan output ke STDOUT dalam format yang dijelaskan dalam posting dengan tambahan baris baru.
Cobalah secara Online! (Ideone)
Juga, saya tidak yakin apakah ini boleh dilakukan, tetapi di sini ada jawaban yang lebih pendek dalam bentuk fungsi lambda anonim pada 59 byte yang mengambil input dalam format yang sama dengan jawaban di atas, dan mengeluarkan program yang diperlukan untuk menghasilkan output yang benar:
Karena itu harus dipanggil dalam format
exec(<Function Name>(<Array>))
. Sekali lagi, saya tidak yakin apakah ini boleh dilakukan, jadi saya menambahkan ini sebagai jawaban ekstra, terpisah, dan tidak bersaing sampai seseorang (mungkin bahkan OP) mudah-mudahan dapat mengklarifikasi apakah ini boleh atau tidak, yang saya akan sangat menghargai .sumber
pop
triknya!MATL ,
1817 byteInput adalah array sel string, dalam format
Cobalah online!
Penjelasan
sumber
Mathematica, 59 byte
Inti dari fungsi tanpa nama ini adalah
NestList[RotateRight,#,5]
, yang mengambil daftar input dengan panjang 6 dan membuat daftar 6 daftar, masing-masing diputar dengan cara sestina. Memang, jika daftar list-of-string adalah output yang dapat diterima, makaNestList[RotateRight,#,5]&
melakukan pekerjaan dalam 26 byte .Kemudian,
r[...,""]
masukkan string kosong di antara masing-masing 6 daftar;Flatten
mengubah semuanya menjadi satu daftar string;~r~"\n"
kemudian menyisipkan baris baru di antara masing-masing string; dan""<>
menyatukan semuanya menjadi satu string. Jadi 33 byte lainnya hanya untuk mengubah output terstruktur menjadi string tunggal.sumber
Batch, 99 byte
Penjelasan: Mengambil input sebagai parameter baris perintah. The
%0
menyebabkan ia lingkaran di sekitar, mengumpulkan.
s di awalnya mengosongkan parameter-7. Ekstra.
ini karenaif
tidak berfungsi pada string kosong.sumber
Ruby, 51 byte
Alih-alih mengulangi angka-angka
0..5
seperti di bawah ini, kami mengulangi 6 kali dengan mengulangi elemenz
. Dalam penggunaan normal seperti(0..5).map{|i|puts i}
kode{}
membaca elemen berulang. Dalam hal ini permutasi yang dilakukan oleh kode di dalam{}
tidak membaca elemen yang diulangi, sehingga kita dapat mengulangi elemen-elemenz
tanpa mengganggu permutasi.Ruby, 56 byte
Mengambil 6 elemen array sebagai parameter
versi alternatif mengambil 6 parameter
Dengan setiap iterasi
map
kami permutasiz
. Versi asli ditambah a""
untuk mewakili jeda antara bait menjadi output darimap
(elemen array ketujuh ini tidak diperlukan oleh penugasan jadi diabaikan).*$/
mengubah array menjadi string, menggabungkan semuanya bersama dengan baris baru.sumber
Racket 115 byte
Tidak Disatukan:
Pengujian:
Keluaran:
sumber