Masalah
Katakanlah sebuah kata hampir merupakan palindrom jika memungkinkan untuk menghapus salah satu hurufnya sehingga kata tersebut menjadi palindrom. Tugas Anda adalah menulis program yang untuk kata tertentu menentukan huruf mana yang harus dihapus untuk mendapatkan palindrom.
Kode terpendek untuk melakukan ini dalam bahasa pemrograman apa pun yang menang.
Memasukkan
Input terdiri dari kata huruf besar dari 2 hingga 1000 karakter.
Keluaran
Keluarkan posisi 1-diindeks (huruf paling kiri memiliki posisi 1, yang berikutnya memiliki posisi 2 dan seterusnya) dari surat yang harus dihapus. Jika ada pilihan yang memungkinkan yang mengarah ke palindrome, output salah satu dari posisi itu. Perhatikan bahwa Anda diharuskan untuk menghapus surat meskipun kata yang diberikan sudah palindrom. Jika kata yang diberikan hampir tidak merupakan palindrom, output -1.
Contoh
Input:
racercar
mungkin menghasilkan output:
5
karena mengeluarkan 5
huruf th menghasilkan racecar
, yang merupakan palindrome.
Juga, input
racecar
masih bisa menghasilkan output
4
karena menghapus 4
huruf ke-menghasilkan raccar
masih palindrome.
Jawaban:
J -
3125 charSebagian besar tarif standar untuk J, jadi saya hanya akan menunjukkan bit keren.
Kata keterangan
\.
disebut Outfix .x u\. y
menghapus setiap infiks panjangx
dariy
dan berlakuu
untuk hasil setiap penghapusan. Di sini,x
adalah 1,y
adalah string input, danu
merupakan(-:|.)
, tes untuk apakah string cocok dengan kebalikannya. Oleh karena itu hasil dari aplikasi ini\.
adalah daftar boolean, 1 di tempat masing-masing karakter yang penghapusannya membuat input menjadi palindrom.I.
membuat daftar semua indeks (0-asal) dari atas di mana ada 1. Menambahkan 1 dengan1+
membuat indeks 1-asal ini. Jika tidak ada indeks 1, daftar kosong. Sekarang, kami mencoba mengambil elemen terakhir_1{
. (Kami diizinkan untuk mengeluarkan huruf yang bisa dilepas!) Jika ini berhasil, kami kembali. Namun, jika daftar itu kosong, tidak ada elemen sama sekali, jadi{
melempar kesalahan domain yang kami tangkap::
dan mengembalikan -1 dengan[
.Penggunaan (ingat
NB.
untuk komentar):sumber
Bukan-PHPPython (73):Di mana a adalah string yang ingin Anda periksa.
Ini, bagaimanapun, melempar kesalahan jika Anda tidak dapat mengubahnya dalam palindrome. Sebaliknya, Anda bisa menggunakannyaEDIT: Tidak, tunggu, itu berhasil!Terima kasih, ini memang meningkatkan isi php skrip ini sekitar 25% (itu yang Anda inginkan, kan?)
sumber
1>0
alih-alihTrue
dan dengan menghapus spasi di antara]
danfor
di...[::-1] for g...
1
sajaTrue
.1 == True
, Lagipula.Mathematica,
106988791 karakterSaya kira saya sedikit cacat oleh nama fungsi yang panjang, tetapi masalah seperti ini cukup menyenangkan di Mathematica:
Itu melempar beberapa peringatan, karena
l_
polanya juga cocok dengan semua karakter di dalamnya, yangReverse
tidak dapat beroperasi. Tapi hei, itu berhasil!Agak tidak terserang:
sumber
GolfScript,
2826 karakterTerima kasih kepada Peter untuk menyingkat 2 karakter. Coba test case online :
sumber
RACECAR
masih palindrome dengan E. Apakah perlu menentukan karakter untuk dihapus, ketika kata yang dimasukkan sudah merupakan palindrom?-2]$-1=)
? Pada awal blok itu Anda memiliki paling banyak satu item di tumpukan, sehingga Anda dapat dengan mudah menyingkatnya menjadi-2]0=)
. (Atau untuk panjang yang sama]-2or)
,. Saya telah belajar untuk mencintaior
kasus-kasus khusus).Rebol (81)
Contoh penggunaan di konsol Rebol:
Di atas indeks pengembalian palindrom terakhir ditemukan. Solusi alternatif (85 karakter) yang mengembalikan setiap palindrom yang ditemukan adalah:
Jadi untuk
"racercar"
ini akan mengembalikan daftar[4 5]
.sumber
C #, 134 Karakter
Saya tahu saya kehilangan :( tapi itu tetap menyenangkan : D
Versi yang dapat dibaca:
sumber
R
didefinisikan dan digunakan?Stax ,
810 byteJalankan dan debug itu
Program ini menunjukkan semua indeks berbasis 1 yang dapat dihapus dari string untuk membentuk palindrome. Dan jika tidak ada, itu menunjukkan -1.
sumber
aaabb
keluaran5
alih-alih-1
).Ruby (61):
Di sini, ada solusi ruby. Ini akan mengembalikan posisi karakter untuk dihapus atau -1 jika tidak dapat dilakukan.
Saya tidak dapat membantu tetapi merasa ada perbaikan yang harus dilakukan dengan bagian dup dan slice, tetapi Ruby tampaknya tidak memiliki metode String yang akan menghapus karakter pada indeks tertentu dan mengembalikan string baru -__-.
Diedit sesuai komentar, ty!
sumber
-1
jika tidak ada palindrome yang ditemukan.-1
, terima kasih. Namun, tidak yakin apa yang ada dalam pikiran Anda tentang mengeluarkannya, saya akan memikirkannya.05AB1E , 10 byte
Cobalah secara online atau verifikasi beberapa kasus uji lagi .
Penjelasan:
sumber
Bukan PythonPHP ,858381 byteCobalah online!
Rekursif yang tidak perlu:
PHP , 96 byte
Cobalah online!
sumber
Haskell, 107 karakter:
Sebagai fungsi ( 85 karakter ):
versi ungolfed asli:
sumber
C # (184 karakter)
Saya akui ini bukan bahasa terbaik untuk melakukan kode-golf ...
Diformat dan dikomentari:
sumber
C # (84 Karakter)
Pernyataan LINQpad mengharapkan variabel
i
berisi string input. Output disimpan dalamo
variabel.sumber
Haskell, 80
Disebut seperti ini:
sumber
Japt , 8 byte
Cobalah
sumber
Haskell, 118C
Tidak Disatukan:
sumber
Jelly ,
1714 byteCobalah online!
Karena saya mengubah pendekatan saya dengan cukup cepat sehingga versi lama tidak muncul di edit history, itu adalah ini:
ŒPṚḊŒḂ€TṂ©’<La®o-
sumber
Brachylog , 24 byte
Cobalah online!
Terasa terlalu lama.
Bisa jadi dua byte lebih pendek jika outputnya bisa diindeks 2 :
Dua iterasi sebelumnya dan bahkan lebih buruk:
Penggunaan variabel global yang terakhir memerlukan header pengujian yang berbeda .
sumber
Python 3 , 71 byte
Cobalah online!
Mengembalikan karakter 1-diindeks jika operasi dapat dilakukan dan
-1
sebaliknya.sumber
Bahasa Wolfram (Mathematica) , 56 byte
Cobalah online!
Mengambil input sebagai daftar karakter. Untuk input string, tambahkan
@*Characters
.PalindromeQ
diperkenalkan pada tahun 2015. Biaya alternatif +4 byte .sumber
Perl 5
-p
,5652 byteCobalah online!
sumber
C (gcc) ,
180168159157140139 byteCobalah online!
21617 bytes mencukur berkat ceilingcat! Dan 3 byte lagi karena aturan menyatakan panjang minimum input adalah 2 karakter, jadi tidak perlu memeriksa string kosong.Tidak Disatukan:
sumber
&&!++p
is just devious to explain :)Python, 84
This does not check is the input (string s) is almost palindrome, but is time efficient and readable.
sumber
s[-(i+1)]
can be shortened tos[-i-1]
. Also, I'm not sure but you may be able to replace theif...else...
withreturn i+1 if ... else len(s)-1
s = "abcde"
, it should return -1.My first code-golf.
Java. ~1200 characters in the main (and sub) functions. Yeah baby.
Class top and usage:
The main function:
Sub-functions:
Full class:
sumber