Ini adalah cermin: |
. Saya baru tahu bahwa Anda dapat menempelkan cermin di tengah-tengah tali jika tali itu dapat dicerminkan pada dirinya sendiri! Misalnya, string abccba
. Jika Anda memotongnya menjadi dua bagian adalah gambar cermin satu sama lain:
abc <--> cba
Jadi, kita bisa menempelkan cermin di tengah-tengah string, dan string baru kita adalah abc|cba
. Terkadang, hanya sebagian dari string yang dapat dicerminkan dengan sendirinya. Misalnya, string "mirror". Dua r dicerminkan, tetapi sisa string tidak. Tidak apa-apa, kami hanya akan menghapus bagian-bagian dari string yang tidak saling mencerminkan, dan kami mendapatkan string berikut:
r|r
Beberapa string dapat dicerminkan di banyak tempat. Misalnya, "Hello World, xyzzyx". Saya suka memiliki banyak teks yang terpantul di cermin saya, jadi Anda perlu menemukan tempat terbaik untuk meletakkan cermin saya. Dalam hal ini, Anda harus mengeluarkan string cermin yang lebih panjang dan seperti contoh terakhir kami, hapus yang lainnya. String ini menjadi:
xyz|zyx
Beberapa string terlihat seperti mereka dapat dicerminkan, tetapi sebenarnya tidak bisa. Jika string tidak dapat dicerminkan di mana pun, Anda seharusnya tidak menghasilkan apa-apa.
Tantangan:
Diberikan string yang hanya berisi ascii yang dapat dicetak, temukan tempat terbaik untuk meletakkan cermin saya. Dengan kata lain,
Temukan substring palindromic panjang rata-rata terbesar, lalu output dengan karakter pipa '|' di tengah-tengahnya.
Panjang input akan 1-50 karakter.
Anda dapat mengasumsikan bahwa input tidak akan mengandung mirror |
atau baris baru. Selain itu, semua karakter cetak-ascii adalah permainan yang adil. Jika substring cermin terpanjang diikat di antara dua substring, Anda dapat memilih mana yang akan diproduksi. Misalnya, untuk string "abba ollo", Anda harus menampilkan "ab | ba" atau "ol | lo", tetapi tidak masalah yang mana yang Anda output. String peka huruf besar-kecil, misalnya "ABba" tidak boleh menampilkan "AB | ba", itu harus menampilkan string kosong.
Sampel IO:
"Hello World" --> "l|l"
"Programming Puzzles and Code-Golf" --> Either "m|m" or "z|z"
"abcba" --> ""
"Hulluh" --> "ul|lu"
"abcdefggfedcba" --> "abcdefg|gfedcba"
"abcdefggfabc" --> "fg|gf"
"AbbA" --> "Ab|bA"
"This input is a lot like the last one, but with more characters that don't change the output. AbbA" --> "Ab|bA"
Seperti biasa, ini adalah kode-golf, sehingga celah standar berlaku, dan jawaban terpendek dalam byte menang!
sumber
Jawaban:
Pyth -
19171513 byteTerima kasih kepada @FryAmTheEggman karena telah menyelamatkan saya dua byte.
ARRGH kasus khusus tanpa jawaban.Selesaikan itu!Test Suite .
sumber
:Q)
= Bignose05AB1E ,
191714 byteKode:
Penjelasan:
Menggunakan pengkodean CP-1252 . Cobalah online! .
sumber
Python 2,
10297 byteAgak lambat dan tidak efisien ... Verifikasi kasus uji yang lebih kecil di Ideone .
sumber
JavaScript,
10099 byteatau
sumber
eval
?eval
untuk menghindarireturn
for
bukan ekspresi, jadi itu biasanya membutuhkan kawat gigi dan areturn
Lua, 133 byte
Verifikasi semua testcases di Ideone.com .
sumber
t==t:reverse()
untuk menyimpan byte :)Retina , 66 byte
Hitungan byte mengasumsikan penyandian ISO 8859-1.
Cobalah online! (Baris pertama memungkinkan pengujian beberapa test case yang dipisahkan linefeed sekaligus.)
Hmmm, lebih lama dari yang saya inginkan ...
sumber
JavaScript (ES6), 91
Kurang golf
Uji
sumber
Perl 5,
10510098 + 1 =10610199 byteSaya hanya ingin memberikan regex rekursif. Membutuhkan
-p
opsi. Sunting: Disimpan (dicoret 4) 7 byte berkat @ msh210. (Bita yang hilang disebabkan oleh penghematan yang digantikan oleh penghematan terbaru @ msh210.)sumber
@_=(@_,$1)
bisapush@_,$1
. (2) Abaikan baris baru dan final;
. (3) Saya menduga ada kondisi semacam pendek Anda dapat menggunakan (jika tidak ada yang lain maka setidaknya --- mungkin --- pengganti-
untuk<=>
)-
dan tidak berhasil (mungkin perlu parens untuk diutamakan yang mengalahkan penghematan).y...c>>1
atauy...c/2
bukanlength>>1
. (Belum diuji.)Python 2, 91 byte
Ganti
\x7f
dengan karakter aktual DEL, yaitu ASCII 127 (kredit ke Dennis).Ini mengikuti strategi yang mirip dengan jawaban Dennis tentang penggunaan
max
dan percabangan rekursif untuk menemukan interval palindrom terpanjang. Tetapi, sebaliknya, ia menemukan bagian kiri, memeriksa bahwa bagian kanan yang sesuai dicerminkan datang setelahnya dengan permulaan buatan sendiri .Fungsi menebak apakah karakter pertama di bagian kiri cermin. Jika tidak, itu hanya menjatuhkannya dan berulang pada sisanya. Jika ya, itu ditambahkan ke tumpukan
p
karakter yang terbalik. Jika string pernah dimulai dengan tumpukan, string cermin dihasilkan dan dianggap sebagai cermin terpanjang yang mungkin. Untuk menghindarinya|
sebagai output, hanya tumpukan yang tidak kosong yang dipertimbangkan.sumber
Jelly , 17 byte
Cobalah online!
Dilakukan dengan bantuan dari Mr. Xcoder dan DJMcMayhem dalam obrolan
Bagaimana itu bekerja
sumber
Haskell,
126111 bytesumber
TSQL
227223 byteSaya hardcoded panjangnya hingga maks 99 byte, ini disimpan byte tetapi membuatnya lebih lambat. Ini masih memiliki kinerja yang baik.
Golf:
Tidak Disatukan:
Biola
sumber
Python 2, 149 byte
Cobalah online
Program ini menemukan bagian pertama dari substring palindromik terbesar dengan panjang genap, dan mencetak string itu, diikuti oleh
|
, diikuti oleh string yang dibalik. Jika tidak ada string yang cocok,t
akan menjadi string kosong, dan'|'*(L(t)>0)
akan mengevaluasi ke string kosong.sumber
Java 8,
294283232 bytePenjelasan:
Coba di sini.
sumber