pengantar
Penutupan palindromik dari string input adalah palindrom terpendek yang dapat dibangun dari string input di mana palindrom akhir dimulai dengan string input.
Untuk tantangan ini, kami akan mempertimbangkan penutupan palindromik dua arah sedemikian rupa
- Kiri Palindromic Penutupan dari string input adalah palindrom terpendek yang dimulai dengan string input.
- Penutupan Palindromik Kanan dari string input adalah palindrom terpendek yang mungkin berakhir dengan string input.
- Penutupan Palindromik Dua Arah dari string input adalah yang lebih pendek baik dari Penutupan Palindromik Kiri atau Kanan dari string input.
Tugas
Tugas Anda sederhana. Diberikan string (hanya terdiri dari ASCII yang dapat dicetak, garis baru, dan spasi putih), menghasilkan penutupan palindromik dua arah dari string itu. Dalam hal pengikatan, salah satu dari penutupan palindromik kiri atau kanan adalah output yang valid.
Anda dapat menulis sebuah program atau fungsi, mengambil input melalui STDIN (atau alternatif terdekat), argumen baris perintah atau argumen fungsi, dan mencetak hasilnya ke STDOUT (atau alternatif terdekat) atau mengembalikannya sebagai string.
Anda dapat mengasumsikan bahwa input tidak akan pernah menjadi string kosong.
Beberapa contoh:
<Input> -> <Output>
"abcdef" -> "abcdefedcba" (or "fedcbabcdef")
"abcba" -> "abcba"
"abcb" -> "abcba"
"cbca" -> "acbca"
Penghargaan Ide Awal diberikan kepada VisualMelon, ide terakhir dengan bantuan dari Martin dan Zgarb
Istilah penutupan palindromik, penutupan pallindromik kiri dan penutupan palindromik kanan pertama kali digunakan dan didefinisikan oleh makalah ini .
sumber
Jawaban:
Pyth,
2219Cobalah online .
Penjelasan
Penutupan palindromik dua arah adalah baik dari bentuk
AX
atauXA
, di manaX
adalah string input danA
merupakan substring dariX
. Saya sebenarnya harus menjadi substring yang berdekatanX
, sebuah awalan untuk satu bentuk, akhiran untuk bentuk lainnya. Tapi saya tidak peduli dengan kegagalan ini. Substring (bersebelahan atau tidak) adalah semua yang saya butuhkan dalam Pyth.Edit
Versi lama memesan string setelah disaring berdasarkan panjangnya
.olN...
. Baru sadar, ituy
mengembalikan panjang substring yang dipesan. Jadi palindrom ini sudah diurutkan.sumber
Klip , 40
Contoh
Penjelasan
sumber
CJam, 30 byte
Benar-benar berharap untuk melihat jawaban CJam sekarang .. Jadi begini: P
Saya benar-benar benci
{,}$
blok itu di sana, tapi saya mendapatkan daftar kemungkinan palindrom karena algoritma generasi yang saya gunakan.Penjelasan kode
Cobalah online di sini
sumber
{,}$
blok itu di sana juga! Hanya bercanda, saya tidak tahu apa yang dilakukan CJam.Python 2,
11511310910596 byteSemoga bisa bermain golf lebih jauh. Bit yang mungkin patut diperhatikan:
sumber
a
.Mathematica, 96 byte
Pasti ada cara yang lebih elegan dari ini ...
Ini mendefinisikan fungsi tanpa nama yang mengambil string dan mengembalikan hasilnya.
Ide dasarnya adalah untuk
Characters
.Gunakan pencocokan pola untuk menemukan palindromik yang tepat dari masing-masing:
Perhatikan bahwa ini sebenarnya tidak mengembalikan daftar datar. Misalnya untuk
{a,b,c}
AndaUrutkan kedua hasil berdasarkan panjangnya.
""<>#&@@
.sumber
abacaba
ketika inputabac
. Jawaban yang benar adalahcabac
. Saya pikir Anda harus meratakannya sebelum menyortir menurut panjangnya.Brachylog (2), 6 byte, tantangan tanggal bahasa
Cobalah online!
Seperti biasa untuk Brachylog, ini adalah fungsi, bukan program lengkap.
Penjelasan
Sejauh yang saya tahu (itu bukan bahasa saya, tapi sepertinya tidak mungkin),
a
tidak ditambahkan ke Brachylog untuk tantangan ini, tetapi sangat berguna di sini. Kami menggunakan metode "mundur, dan menyatakan itu tidak berubah" untuk menyatakan bahwa nilai yang kami temukan adalah palindrome.Adapun mengapa ini menghasilkan palindrome terpendek , urutan evaluasi Prolog (dan karenanya Brachylog) sangat dipengaruhi oleh hal pertama yang dievaluasi. Dalam hal ini, itu adalah perintah "terbalik", dan (seperti kebanyakan operasi daftar) itu menetapkan urutan evaluasi yang bertujuan untuk meminimalkan ukuran daftar yang dihasilkan. Karena itu sama dengan ukuran output, program dengan senang hati akhirnya meminimalkan hal yang benar secara kebetulan, artinya saya tidak perlu menambahkan petunjuk eksplisit.
sumber
a
- Adfix tidak ditambahkan untuk tantangan ini. Saya tidak memiliki simbol yang tersedia dengan mnemonik yang baik untuk awalan dan sufiks, oleh karena itu saya menggabungkan keduanya menjadi adfix yang dapat mengambil subskrip untuk memilih awalan atau sufiks hanya jika diperlukan.Ruby, 76 + 2 = 78
Dengan flag-command-line
-pl
(l
mungkin tidak diperlukan tergantung pada bagaimana Anda melakukan input), jalankanDiberikan string 'abaa', menghasilkan string 'cbca 0 acbc' dan 'acbc 0 cbca', di mana 0 adalah karakter yang tidak patut dengan kode ascii 0. Kemudian menghapus satu salinan dari string berulang yang diulang framing 0 yang ditemukan di masing-masing, 'A' di yang pertama dan 'cbc' di yang kedua, untuk mendapatkan dua penutupan. Ini kemudian menampilkan hasil terpendek.
Satu-satunya hal yang sangat aneh tentang kode golf adalah bahwa ia memperpendek string di tempat sambil menyortirnya, yang dapat kita hindari karena
min_by
hanya mengeksekusi blok sekali per elemen dibandingkan (keduanya karena itu adalah transformasi Schwartzian dan karena hanya ada dua elemen untuk dibandingkan).sumber
Python 3, 107 byte
Untuk menguji:
sumber
Haskell, 107 byte
Uji:
sumber
J,
6662 byteCukup mudah. Dua trik yang saya gunakan:
Penutupan palindromik kanan adalah penutupan palindromik kiri dari string yang terbalik.
Menemukan panjang string dengan panjang minimum dan palindromity dengan ekspresi min (is_palindrome / length).
Cobalah online di sini.
sumber