Dalam tantangan ini, Anda akan diberikan string alfabet sebagai input. Kami akan mendefinisikan "anti-string" dari input yang diberikan menjadi string dengan huruf semua huruf terbalik. Sebagai contoh
AaBbbUy -> aAbBBuY
Anda harus menulis sebuah program yang mengambil string sebagai input dan mencari substring bersebelahan terpanjang yang anti-stringnya juga substring yang berdekatan. Dua substring tidak harus tumpang tindih.
Sebagai contoh jika Anda diberi string
fAbbAcGfaBBagF
Bagian yang dicetak tebal akan menjadi pasangan string anti-string terpanjang.
Program Anda harus, setelah menemukan pasangan, pisahkan mereka masing-masing menjadi satu karakter. Ini harus dilakukan dengan menghapus semua kecuali karakter pertama dari setiap substring. Misalnya string di atas
fAbbAcGfaBBagF
akan menjadi
fAcGfagF
Program Anda kemudian harus mengulangi proses tersebut hingga pasangan string anti-string terpanjang adalah satu karakter atau lebih pendek.
Misalnya bekerja dengan string yang sama, pasangan terpanjang baru setelah keruntuhan
fAcGfagF
Jadi kami kembali menutup string
fAcGag
Sekarang string tidak dapat diciutkan lebih lanjut sehingga kita harus menampilkannya.
Dalam kasus ikatan antara pasangan kandidat (contoh AvaVA
) Anda dapat melakukan pengurangan ( AaA
atau AvV
, tetapi tidak Aa
).
Ini adalah kode-golf sehingga jawaban akan dicetak dalam byte dengan lebih sedikit byte yang lebih baik.
Uji Kasus
fAbbAcGfaBBagF -> fAcGag
AvaVA -> AaA / AvV
QQQQQQQ -> QQQQQQQ
fAbbAcQQQQaBBacqqqqA -> fAbcQBcq
gaq -> gaq
fAbbAcGfaBBagFaBBa -> fcGaBBag
Motivasi
Sementara masalah ini mungkin tampak sewenang-wenang itu sebenarnya masalah yang saya temui saat membuat kode untuk memproses poligon mendasar. Proses ini dapat digunakan untuk mengurangi poligon dasar menjadi n- gon yang lebih kecil . Setelah saya mencobanya saya pikir itu akan membuat golf kecil yang menyenangkan.
sumber
aaaAAAaaa -> aAaaa
?Jawaban:
Perl,
6461 byteTermasuk
+1
untukp
sumber
JavaScript (ES6), 200 byte
Menggunakan array karakter untuk I / O.
Cobalah online!
sumber
Retina , 119 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Gandakan input dan balikkan kasus salinan pertama.
Jika tidak ada anti-string sama sekali maka hapus duplikat terbalik.
Daftar semua kemungkinan anti-string yang diciutkan.
Urutkan sesuai urutan panjangnya, ambil yang terpendek (yaitu anti-string terpanjang), dan ulangi sampai semua anti-string telah runtuh.
sumber
Python 3 ,
189181 bytePenghargaan untuk Jonathan Frech karena membuatnya murni satu garis.
Cobalah online!
Versi saya sendiri, sekarang sudah usang (189 byte):
Cobalah online!
any()
untuk memecahkan loop bersarang lebih awal, danset()
untuk objek global yang dapat berubah dapat digunakan dalam pemahaman. Sisanya hanyalah implementasi langsung dari persyaratan menggunakanstr.swapcase
.Python 2 , 160 byte
Cobalah online!
Ternyata bahwa nested reguler untuk loop dengan menerobos lebih awal
return
jauh lebih pendek daripada trik "pintar"any
.sumber
set
sebagai fungsi default tidak akan bertabrakan dengan panggilan lebih lanjut, karena saya pikir kode Anda sepenuhnya muncul set menjadi kosong.x
akan ditinggalkan karena tidak kosong. Seperti yang Anda miliki, saya pikir itu sesuai.C (gcc) ,
240238227225222216 bytesebelastiga belas byte; golfedb|=S[p+m]!=S[q+m]+32-(S[q+m]>90)*64
untukb|=abs(S[p+m]-S[q+m])-32
keb|=32-S[p+m]+S[q+m]&63
.for(...;...;p++)S[p+1]=S[p+L];
untukfor(...;...;S[++p]=S[p+L]);
.Cobalah online!
sumber
Python 2 , 180 byte
Cobalah online!
sumber
Stax , 30 byte
Jalankan dan debug itu
Representasi ascii yang sesuai dari program yang sama adalah ini.
Itu menggunakan pendekatan regex. Itu berulang kali regex penggantian string. Itu membangun ini dari setiap substring yang berdekatan dari nilai saat ini. Misalnya untuk input
fAbbAcGfaBBagF
, salah satu substring adalahAbbA
, dalam hal ini regexAbbA(.*)aBBa
akan digantiA$1a
.sumber
Bahasa Wolfram (Mathematica) , 148 byte
Cobalah online!
sumber
Japt
-h
, 33 byteCobalah
sumber