Sebuah akrostik adalah gaya puisi / menulis di mana karakter awal setiap baris, ketika membaca secara vertikal, juga menghasilkan sebuah kata atau pesan. Sebagai contoh,
Together
Everyone
Achieves
More
juga menjabarkan kata TEAM
saat kolom pertama dibaca secara vertikal.
Akrostik adalah himpunan bagian dari mesostik , di mana kata vertikal dapat berada di mana saja dalam kata-kata horisontal. Sebagai contoh, yang di TEAM
atas juga bisa ditulis sebagai mesostik sebagai berikut
togeTher
everyonE
Achieves
More
bersama dengan beberapa variasi lainnya.
Tantangannya di sini adalah menghasilkan akrostik atau mesostik dari daftar kata input yang diberikan.
Memasukkan
- Daftar kata-kata dalam format apa pun yang sesuai .
- Daftar ini hanya akan berisi kata-kata yang dibuat dari huruf kecil
[a-z]
. - Daftar dijamin untuk membentuk akrostik atau mesostik (tidak perlu menangani input palsu).
- Salah satu kata dalam input akan membentuk kata vertikal, sedangkan sisanya membuat kata horizontal - bagian dari tantangan di sini adalah menemukan kata vertikal yang sesuai, sehingga tidak dapat diambil secara terpisah.
Keluaran
- ASCII-art akrostik atau mesostik terbentuk dari kata-kata input, ditulis ke STDOUT atau dikembalikan, dalam format apa pun yang masuk akal.
- Kata vertikal yang sesuai harus ditulis dengan huruf besar (seperti dalam contoh).
- Memimpin ruang untuk mendapatkan kata vertikal untuk berbaris tepat yang diperlukan . Ruang tertinggal, dan garis depan utama / belakang opsional. Ekstra ruang terkemuka baik-baik saja juga, asalkan kata-kata menyelaraskan dengan benar.
- Jika kedua akrostik dan mesostic yang mungkin, keluaran hanya akrostik.
- Jika lebih dari satu akrostik / mesostik dimungkinkan, kode Anda dapat menampilkan salah satu atau semuanya.
Aturan
- Program lengkap atau fungsi dapat diterima.
- Celah standar dilarang.
- Ini adalah kode-golf sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
Contohnya
['together', 'team', 'everyone', 'achieves', 'more']
Together
Everyone
Achieves
More
['aaa', 'aaa', 'aaa', 'aaa']
Aaa
Aaa
Aaa
# One output, or multiple (of the same) output is allowed
['aaa', 'aaa', 'aab', 'baa']
Aaa
Aaa
Baa
# This is the only allowed output, since others would be mesostic, which are lower priority
['live', 'every', 'love', 'very', 'ohio']
Live
Ohio
Very
Every
# Note that 'live' couldn't be the vertical word since then it would be a mesostic, which is lower priority output
['cow', 'of', 'fox']
cOw
Fox
# A shorter mesostic test case
['late', 'ballroom', 'anvil', 'to', 'head']
anviL
bAllroom
To
hEad
Jawaban:
Pyth,
52494746 byteCobalah online.
Ini mungkin sangat golf. Ini mencetak banyak ruang terkemuka.
sumber
Brachylog , 145 byte
Cobalah online!
(Butuh setengah menit, jadi bersabarlah.)
sumber
JavaScript (ES6), 255
263 269 286Edit 17 byte yang disimpan sebagai jumlah arbitrase dari ruang utama diperbolehkan
Edit2 beberapa pengocokan, 6 byte yang disimpan
Edit3 mengembalikan daftar string, bukan string tunggal dengan baris baru (komentar OP untuk jawaban feersum), 8 byte lebih tersimpan
Untuk setiap kata dalam daftar input, saya menggunakan DFS rekursif untuk menemukan semua kemungkinan mesostik / akrostik. Masing-masing disimpan sebagai array dengan kata dan posisi surat target di dalam kata. Setiap hasil yang ditemukan disimpan dalam array hasil global di posisi 1 (jika itu akrostik) atau 0 jika itu mesostik.
Setelah pemindaian lengkap untuk semua kata, saya mendapatkan hasilnya pada posisi terakhir dalam array dan membangun dan mengembalikan representasi seni ascii-nya.
Kurang golf
Uji
sumber
Perl6,
287277269 bytesumber
Mathematica 10.0, 139 bytes
Fungsi yang tidak disebutkan namanya mengembalikan daftar baris:
Contoh penggunaan:
Saya mencari saran tentang cara yang lebih baik untuk melakukan kapitalisasi.Saya menemukan fungsi yang sangat bagusMapAt
untuk huruf besar dalam string.sumber
Haskell,
214206204202 byteMengembalikan daftar string ruang-empuk, mis.
f ["late","ballroom","anvil","to","head"]
->[" baLlroom"," Anvil"," To"," hEad"]
atau lebih ramah layar:f
memilih kata-kata yang ditulis secara horizontal bersama dengan daftar offset.h
membalut setiap kata sesuai dengan offset yang sesuai dan menyisipkan huruf besar. Secara terperinci:sumber
Python, 249 byte
Mungkin masih sangat golf
Mengambil dan mengembalikan daftar karakter.
- misalnya
" bAllroom"
adalah[' ',' ',' ','b','A','l','l','r','o','o','m']
Hanya pernah mengembalikan hasil pertama dan memeriksa dalam urutan sedemikian rupa sehingga semua akrostik diperiksa terlebih dahulu.
Lihat semua test case yang dicetak dalam format tampilan pada ideone
Berikut ini adalah bentuk fungsional yang lebih mudah dibaca yang melakukan hal yang sama (kecuali ia mengembalikan hasil pertama segera daripada mengevaluasi dan kemudian mengembalikan hasil pertama):
sumber
Perl 6, 177 byte
Solusi brute-force.
Bagaimana itu bekerja
Setiap kandidat terlihat seperti:
Transposing daftar daftar kandidat diperlukan untuk memastikan bahwa akrostik, jika ada, ditemukan sebelum mesostik.
sumber