pengantar
Bagi mereka yang tidak tahu, palindrome adalah ketika string sama dengan string mundur (dengan pengecualian untuk interpungsi, spasi, dll.). Contoh palindrome adalah:
abcdcba
Jika Anda membalikkan ini, Anda akan berakhir dengan:
abcdcba
Itu sama saja. Karena itu, kami menyebutnya palindrome. Untuk melakukan palindromize, mari kita lihat contoh string:
adbcb
Ini bukan palindrome. Untuk membuat palindromisasi ini, kita perlu menggabungkan string terbalik ke string awal di sebelah kanan string awal , meninggalkan kedua versi utuh. Semakin pendek, semakin baik.
Hal pertama yang bisa kita coba adalah sebagai berikut:
adbcb
bcbda
^^ ^^
Tidak semua karakter cocok, jadi ini bukan posisi yang tepat untuk string yang terbalik. Kami melangkah satu langkah ke kanan:
adbcb
bcbda
^^^^
Ini juga tidak cocok dengan semua karakter. Kami melangkah ke kanan:
adbcb
bcbda
Kali ini, semua karakter cocok . Kita dapat menggabungkan kedua string agar tetap utuh . Hasil akhirnya adalah:
adbcbda
Ini adalah string palindromized .
Tugas
Diberikan string (dengan setidaknya satu karakter) yang hanya berisi huruf kecil (atau huruf besar, jika itu lebih baik), mengeluarkan string palindromized .
Uji kasus
Input Output
abcb abcba
hello hellolleh
bonobo bonobonob
radar radar
hex hexeh
Ini adalah kode-golf , jadi pengiriman dengan jumlah byte paling sedikit menang!
sumber
obonobo
akan menjadi solusi yang lebih baik untuk test case.bono b o nob
ini adalah kalimat yang lengkap. Apa perbedaan antara Tuhan dan Bono? Tuhan tidak berkeliaran di sekitar Dublin dengan berpura-pura menjadi Bono ;-)Jawaban:
Jelly,
1110 byteCobalah online!
Bagaimana itu bekerja
sumber
Pyth (melakukan b93a874), 11 byte
Suite uji
Kode ini mengeksploitasi bug dalam versi Pyth saat ini, melakukan b93a874 . Bugnya adalah yang
_IJ+zb
diurai seolah-olah ituq_J+zbJ+zb
, yang setara dengan_I+zb+zb
, ketika seharusnya (dengan maksud desain Pyth) diurai sepertiq_J+zbJ
, yang setara dengan_I+zb
. Ini memungkinkan saya untuk menyimpan byte - setelah bug diperbaiki, kode yang benar adalah.VkI_IJ+zbJB
. Saya akan menjelaskan kode itu sebagai gantinya.Pada dasarnya, kode brute memaksa semua string yang mungkin sampai menemukan string terpendek yang dapat ditambahkan ke input untuk membentuk palindrome, dan menghasilkan string gabungan.
sumber
Python, 46 byte
Jika string adalah palindrom, kembalikan. Jika tidak, masukkan huruf pertama di sekitar hasil rekursif untuk sisa string.
Contoh pemecahan:
sumber
s!=s[::-1]
)Haskell, 36 byte
Lebih mudah dibaca:
Jika string adalah palindrom, kembalikan. Kalau tidak, sandarkan huruf pertama di sekitar hasil rekursif untuk ekor string.
Tali
s
dipecah menjadih:t
di penjaga kedua, menghindarkan pengisi1>0
untuk kasus ini. Ini lebih pendek daripada melakukans@(h:t)
input.sumber
Pyth -
1612 byte4 byte disimpan berkat @FryAmTheEggman.
FGITW, banyak bermain golf mungkin.
Test Suite .
sumber
Brachylog ,
1665 byte (Tidak bersaing)Cobalah online!
Ketika saya memposting jawaban awal saya, itu masih pada implementasi lama di Jawa Karena saya telah memprogram ulang semuanya dalam Prolog, sekarang ia berfungsi sebagaimana mestinya.
Penjelasan
Backpropagation membuatnya sehingga nilai valid pertama yang
A
akan ditemukan akan menjadi yang terpendek yang dapat Anda gabungkan ke Input untuk menjadikannya palindrome.Solusi alternatif, 5 byte
Ini kira-kira sama dengan jawaban di atas, kecuali bahwa alih-alih menyatakan "Output adalah gabungan dari Input dengan string
A
", kami menyatakan bahwa "Output adalah string yang Inputnya merupakan awalan dari Output".sumber
JavaScript (ES6), 92 byte
Menghitung dan memotong tumpang tindih antara string asli dan pembalikannya.
sumber
Retina,
2925Cobalah online!
Terima kasih banyak untuk Martin selama 11 byte yang disimpan!
Ini hanya membuat salinan string yang terbalik dan membuat mereka menjadi satu. Satu-satunya bagian yang sangat mewah dari ini adalah metode pembalikan:,
O^#r`.\G
yang dilakukan dengan menggunakan mode pengurutan. Kami mengurutkan huruf-huruf dari string kedua (yang bukan baris baru dan berturut-turut dari akhir string, terima kasih kepada\G
) dengan nilai numeriknya, yang, karena tidak ada angka, adalah 0. Kemudian kami membalikkan urutan hasil sortir stabil ini dengan^
opsi. Semua kredit untuk penggunaan mewah\G
milik Martin :)sumber
CJam, 18
Cobalah online
Penjelasan:
sumber
Lua,
8988 BytesSaya mengalahkan Javascript! \ o / Disimpan 1 byte berkat @LeakyNun ^^
Ini adalah program lengkap, mengambil inputnya sebagai argumen baris perintah.
ungolfed
sumber
while
dapat dihapus?i=i+1end
?1end
sebagai angka heksadesimal. Secara umum, Anda tidak dapat menggunakan[abcdef]
langsung setelah nomor tanpa dianggap sebagai heksadesimal. Ada satu lagi pengecualian0x
.Prolog, 43 byte
Ini mengharapkan string kode sebagai input, misalnya pada SWI-Prolog 7:
a(`hello`).
Penjelasan
Ini pada dasarnya adalah port dari jawaban Brachylog saya.
sumber
Oktaf,
7875 byteDisimpan 3 byte berkat Eʀɪᴋ ᴛʜᴇ Gᴏʟғᴇʀ!
ideone masih gagal untuk fungsi-fungsi yang disebutkan, tetapi di sini ada uji coba kode sebagai sebuah program.
sumber
Perl, 37 byte
Berdasarkan jawaban xnor.
Termasuk +2 untuk
-lp
Jalankan dengan input pada STDIN, mis
palindromize.pl
:sumber
05AB1E , 18 byte
Kode:
Menggunakan pengodean CP-1252 . Cobalah online!
sumber
Pyke, 15 byte
Coba di sini!
sumber
J, 20 byte
Ini adalah kata kerja monadik. Coba di sini. Pemakaian:
Penjelasan
Saya menggunakan fakta bahwa palindromisasi S adalah S + reverse (P) , di mana P adalah awalan terpendek dari S yang penghapusannya menghasilkan palindrome. Dalam J, sedikit kikuk untuk melakukan pencarian elemen pertama dari array yang memenuhi predikat; karenanya pengindeksan.
sumber
Haskell, 68 byte
Contoh penggunaan:
f "abcb"
->"abcba"
.Cari melalui
inits
inputi
(misalnyainits "abcb"
->["", "a", "ab", "abc", "abcb"]
) sampai Anda menemukan satu di mana itu terbalik ditambahkan untuki
membangun palindrome.sumber
r=reverse
harus pergi sebelumf i=
...?MATL ,
1716 byteTerinspirasi secara longgar dalam jawaban CJam @ aditsu .
Cobalah online!
Penjelasan
sumber
Ruby, 44 byte
Jawaban ini didasarkan pada solusi Python dan Haskell xnor .
sumber
==s?s:
??
antara?:
untuk ternary dan?x == 'x'
substitusi yang digunakan sejak Ruby 1.9Oracle SQL 11.2, 195 byte
Tidak bermain golf
sumber
Serius, 34 byte
Karakter terakhir adalah ruang tanpa putus (ASCII 127 atau
0x7F
).Cobalah online!
Penjelasan:
sumber
C #, 202 byte
Saya mencoba.
Tidak Disatukan:
Adakah yang bisa memberi saya ide untuk mengelompokkan dua panggilan .Reverse (). ToArray ()? Metode terpisah lebih banyak byte.
sumber
QBIC , 41 byte
Penjelasan:
sumber
Haskell, 46 byte
Saya ingin tahu apakah ada cara untuk menghapus tanda kurung di
(f$tail l)++[l!!0]
...sumber