Diberikan string s
, kembalikan substring bersebelahan terkecil yang dapat Anda hapus untuk membuat palindrome.
Contoh:
800233008 -> 2
racecarFOOL -> FOOL
abcdedcba -> (empty string)
ngryL Myrgn -> "L " (or " M")
123456789 -> 12345678 (or 23456789)
aabcdbaa -> c (or d)
[[]] -> [[ (or ]])
a -> (empty string)
Saran kasus uji dari pengguna (jika Anda menemukan kasus tepi tidak terdaftar, silakan kirim komentar):
aabaab -> b | Suggested by Zgarb, some returned "aa".
Aturan
- Hanya karakter ASCII yang dapat dicetak yang akan muncul di input (tidak ada baris baru, buat tetap sederhana).
- Tidak benar-benar aturan, tapi catatan
<>
,/\
,()
,[]
dan{}
tidak palindrom.
Ini adalah kode-golf , kemenangan byte-count terkecil.
+100 karunia telah diklaim oleh Adnan
code-golf
string
palindrome
Guci Gurita Ajaib
sumber
sumber
aabaab
[[]]
palindrome?]][[
. Anggap ituaabb
hal yang sama, hanya karakter yang berbeda.Jawaban:
Jelly , 16 byte
Cobalah online!
Bagaimana itu bekerja
sumber
J , 24 byte
Cobalah online!
Penjelasan
sumber
(;"e f)&>
sebagai kata kerja test harness?Bahasa Wolfram (Mathematica) ,
5351 byteHitungan byte mengasumsikan pengkodean CP-1252.
Cobalah online!
Menentukan operator unary
±
(atau fungsiPlusMinus
). Input dan output adalah daftar karakter. Test suite melakukan konversi dari dan ke string aktual untuk kenyamanan.sumber
Reverse
kemudian membandingkan yang terbalik dengan yang asli lebih pendek dari PalindromeQ? Saya tidak tahu Mathematica, jadi tidak tahu.Characters@#/.{a___,Shortest@b___,c___}/;PalindromeQ[a<>c]:>b~~""&
Reverse[x={a,c}]==x
lebih panjang dua byte. Saya tidak tahu apakah ada alternatif yang lebih pendek.Jelly , 20 byte
Cobalah online!
sumber
05AB1E , 18 byte
Menggunakan penyandian 05AB1E . Cobalah online!
sumber
ǝ
meskipun serius jenius.Python 3 , 97 byte
Cobalah online!
sumber
Python 2 , 116 byte
Cobalah online!
Menyimpan beberapa byte dengan bantuan dari Halvard Hummel !
sumber
Japt ,
2622 byteUji secara online! Mencoba mencari cara memetakan
false
sesuatu yang palsu dan string apa pun ke sesuatu yang benar dalam satu byte. Saat ini saya menggunakan+0
...sumber
Bash , 108 byte
Mengambil input sebagai argumen baris perintah.
Cobalah online! dengan kutipan dicetak di sekitar output untuk melihat spasi terdepan / tertinggal.
sumber
Prolog , 271 byte
Pada titik tertentu saya menyadari ini akan menjadi besar dengan standar kode-golf, jadi saya menyimpan beberapa ruang kosong tambahan untuk menjaga kemiripan dengan versi yang tidak dikaburkan. Tapi saya masih berpikir itu mungkin menarik karena ini pendekatan yang berbeda untuk masalah ini.
Versi yang tidak dikaburkan:
sumber
C ++,
254248246 byte-6 byte terima kasih kepada Zacharý -2 byte terima kasih kepada Toby Speight
Begitu...
T
definisi makro karena melakukanR""
sebagai efek lain pada string literal (ini adalah awalan yang digunakan untuk mendefinisikan literal string mentah, lihat cppreference untuk informasi lebih lanjut) yang tidak ada ketika saya melakukanT""
p(std::string)
untuk menguji apakah string adalah palindrome. Jika ya, ia mengembalikan1
yang dilemparkan ketrue
, yang lain mengembalikan0
, yang dilemparkan kefalse
the last index - number of erased char
. Jika ternyata menghapus sebagian adalah palindrom, maka, ia kembali. Misalnya, ketika meneruskan string"aabcdbaa"
sebagai parameter, keduanyac
dand
merupakan jawaban yang valid, tetapi kode ini akan kembalic
karena menghapusnya dan menguji apakah palindrom datang sebelum menguji jika menghapusd
dan menguji apakah itu palindromBerikut adalah kode untuk diuji:
sumber
using s=std::string;int p(s t){for(int i=0;i<t.S/2;++i)if(t[i]!=t[t.S-i-1])T 0;T 1;}s d(s e){if(!p(e))for(int i,w=1;w<e.S;++w)for(i=0;i<=e.S-w;++i){s t=e;t.erase(i,w);if(p(t))T e.substr(i,w);}T"";}
/2
dihilangkan? Berulang-ulang sepanjang hanya akan mengulangi tes yang telah kami lakukan, yang seharusnya tidak berbahaya. Anda mungkin ingin memperluas apa yang Anda maksud dengan "efek lain" dariR""
(yaitu itu diuraikan sebagai string string literal).Jelly , 33 byte
Cobalah online!
sumber
PHP 104 +1 byte
Jalankan sebagai pipa dengan
-nR
atau coba online .sumber
Haskell ,
109105 byteCobalah online!
EDIT: Terima kasih @ H.PWiz untuk melepas 4 byte! Saya perlu lebih baik dengan monad!
sumber
JavaScript, 90 byte
Cobalah online!
Tampilkan cuplikan kode
sumber
Perl 5, 72 +1 (-p) byte
Cobalah online
sumber
JavaScript (ES6),
9178 byteInput dan output adalah daftar karakter.
Secara rekursif menghilangkan irisan yang lebih besar dan lebih besar dari input sampai palindrom ditemukan.
Potongan:
Tampilkan cuplikan kode
sumber
TSQL (2016) 349B
Bukan solusi yang paling ringkas tetapi langsung:
sumber
@
sebagai variabel untuk beberapa byte. Dalam CTE Anda dapat menggunakan yangwhere''=value)
lain dan Anda tidak perlu mengembalikanC
hasilnya.Sekam , 18 byte
Cobalah online!
Penjelasan
sumber
Haskell ,
98948180 byteCobalah online! Contoh penggunaan:
""#0 $ "aabaab"
hasil"b"
.Sunting: -1 byte berkat Ørjan Johansen.
sumber
""
dengant
.C ++,
189186176167 byteSaya mulai dengan jawaban HatsuPointerKun , mengubah tes untuk hanya membandingkan kesetaraan dengan string terbalik; lalu saya mengubah cara kami menyebutkan string kandidat. Setelah ini, makro hanya digunakan satu atau dua kali masing-masing, dan lebih pendek untuk menyelaraskannya.
Penjelasan
Kode yang dapat dibaca setara:
Penghitungan calon dimulai dengan menginisialisasi string dengan
w
karakter pertama dihilangkan, dan kemudian menyalin karakter berturut-turut dari aslinya untuk memindahkan celah. Misalnya, dengan stringfoobar
danw
== 2:Pass pertama (dengan
w
== 0) adalah no-op, jadi string penuh akan dipertimbangkan berulang kali. Tidak apa-apa - efisiensi golf truf! Iterasi terakhir dari loop ini akan mengakses indeks one-past-the-end; Saya sepertinya lolos dengan GCC, tapi sebenarnya, itu Perilaku Tidak Terdefinisi.Program uji
Pengangkatan langsung dari jawaban HatsuPointerKun :
sumber
REXX, 132 byte
sumber
Ruby ,
8684 byteCobalah online!
sumber
z=s.size-l+1
.C (gcc) , 307 byte
Cobalah online!
sumber