Mari kita memiliki fungsi yang mengambil string dan menghapus semua pasangan karakter identik yang berdekatan. Sebagai contoh
Perhatikan bahwa ketika dua pasangan tumpang tindih, kami hanya menghapus salah satunya.
Kami akan memanggil string yang dipasangkan secara sempurna jika aplikasi berulang pada akhirnya menghasilkan string kosong. Misalnya string di atas tidak dipasangkan dengan sempurna karena jika kita menerapkan lagi kita masih mendapatkan . Namun string seperti sempurna dipasangkan karena jika kita menerapkan tiga kali kita mendapatkan string kosongf a b a e a b b c c a d d e f
Tugas Anda adalah menulis kode komputer yang dipasangkan dengan sempurna yang mengambil string (dari ASCII yang dapat dicetak) dan memutuskan apakah dipasangkan dengan sempurna. Bytestring dari sumber Anda harus berupa string yang dipasangkan dengan sempurna , meskipun kode Anda tidak harus terbatas pada ASCII yang dapat dicetak.
Anda dapat menampilkan dua nilai berbeda: satu untuk kasus di mana input dipasangkan dengan sempurna, dan satu lagi untuk kasus di mana tidak.
Ini adalah pertanyaan kode-golf sehingga jawaban akan dinilai berdasarkan ukuran dalam byte dari sumbernya dengan lebih sedikit byte yang lebih baik.
Uji Kasus
sumber
Jawaban:
Haskell,
146124 byteTidak ada komentar. Mengembalikan salah satu
True
atauFalse
.Cobalah online!
Sunting: -22 bytes berkat @Cat Wizard
sumber
Python 2 , 94 byte
Cobalah online!
Seluruh langkah pembaruan
ss=[cc+ss,ss[1:]][cc==ss[:1]]
dibatalkan menjadi adil=[+,[
.sumber
05AB1E ,
26 24 22 2018 byte-2 bytes terima kasih kepada ovs . Output 0 jika string dipasangkan dengan sempurna, 1 sebaliknya.
Cobalah online!
Versi sebelumnya
Yang ini murni bergantung pada perilaku yang tidak terdefinisi (jadi tidak ada "kode mati"), dan menghasilkan [['0']] untuk string yang berpasangan sempurna dan [['1']] untuk string yang tidak cocok:
Dan versi 22-byte, menjelaskan, yang hanya di atas tetapi tidak menyalahgunakan UB, dan menghasilkan nilai-nilai waras .
sumber
Cubix , 54 byte
Tidak menghasilkan apa-apa jika string dipasangkan dengan sempurna dan
1
sebaliknya.Coba di sini
Kubus
Penjelasan
Sebagian besar karakter adalah pengisi yang diperlukan untuk memasangkan kode dengan sempurna. Mengganti mereka dengan
.
(tanpa op), kita dapatkanIni dapat dibagi menjadi tiga langkah:
i
dan?
).sumber
V ,
20, 18 byteCobalah online!
Hexdump:
Output 0 untuk truey, 1 untuk falsy. Terima kasih kepada nmjcman101 karena secara tidak langsung menghemat 2 byte.
sumber
^$
dengan.
dan mengembalikan 0 untuk jujur, apa pun yang lain untuk palsu? Saya agak berkabut pada aturan setelah tidak melakukan ini untuk sementara waktu.R ,
142126 byteLogika yang lebih kencang dan beberapa byte komentar yang diputar oleh @Giuseppe
Cobalah online!
Asli:
Cobalah online!
Fungsi detektor rekursif diikuti oleh komentar dengan semua karakter dalam fungsi dalam urutan terbalik.
sumber
APL (Dyalog) , 38 byte
Cobalah online!
sumber
Retina ,
2826 byteCobalah online!
Keluaran
`C1\).(`+0`C1\).(`+
untuk kasus palsu dan`C1\).(`+1`C1\).(`+
kebenaran.sumber
Brain-Flak ,
228200 byteCobalah online!
Ini sedikit bukti konsep. Mungkin bisa lebih pendek. Namun tidak menggunakan komentar apa pun.
Output
0,0
jika input dipasangkan dengan sempurna dan0,1
jika input tidak.sumber
sed 4.2.2 , 34 byte
Cobalah online!
String berpasangan memberikan output kosong, yang tidak berpasangan memberikan
ct:
Versi palindromik sepele adalah 32
:;ss(.)\1ss;t;/./cc/./;t;1\).(;:
. Solusi lama tadinya:;ss((..??\??))\1ss1;t;;/./cc/./t:
(diubah karena yang sekarangc
lebih sedikit dilecehkan , edit: yay sekarang hanya ada 1 karakter setelahc
: D)(perhatikan itu
;
adalah pemisah pernyataan):
mendeklarasikan label kosong:t
mendeklarasikan labelt
ss((..??\??))\1ss1
adalah substitusi, sed Anda dapat mengubah pembatas menjadi substitusi, dan ini adalah apa yang saya lakukan dengan mengubahnyas
, jadi apa yang dilakukannya adalah mengganti yang pertama (seperti yang ditunjukkan oleh1
di akhir)cocok dengan
((..??\??))\1
.
karakter apa saja.??
diikuti oleh karakter opsional opsional\??
dan opsional?
tanpa apa-apa
Sekarang substitusi ini dipasangkan dengan dirinya sendiri, jadi
;
sebelum dan sesudahnya dibatalkan jugat
dan kembali ke label sampai tidak ada lagi pengganti yang berhasil/..?/
jika.
(wildcard) diikuti oleh.?
karakter opsional dicocokkancc
ubah buffer kec
sumber
Brain-Flak ,
112 110108 byteCobalah online!
Ini berdasarkan jawaban saya dari Apakah kurung cocok? .
Mencoba untuk tidak menggunakan komentar, tetapi macet mencoba membuat pop nilads (
{}
) berpasangan. Masalahnya terletak pada cara termudah untuk memasangkan sepasang tanda kurung adalah dengan mengelilinginya di pasangan lain dari jenis yang sama. Meskipun ini mudah untuk nilad lainnya,{...}
monad membuat loop. Untuk keluar dari loop, Anda harus menekan 0, tetapi begitu Anda keluar dari loop, Anda harus pop 0, yang memperparah masalah.Solusi pra-pasangan 66 byte adalah:
Cobalah online!
Keluaran
1
atau1,0
jika input adalah pasangan sempurna,0,0
jika tidak.Tidak ada versi komentar, 156 byte
Cobalah online!
Seperti yang ditunjukkan oleh Cat Wizard, jawaban pertama tidak berfungsi untuk semua penerjemah, karena tidak semua menangani
#
komentar. Versi ini tidak mengandung komentar.sumber
Japt,
2422 byteKeluaran
false
untuk kebenaran dantrue
falsey.Cobalah
sumber
«e"(.)%1
bekerja«
.Brain-Flak , 96 byte
Cobalah online!
Tidak menghasilkan apa-apa jika input dipasangkan dengan sempurna, dan
0
sebaliknya.Versi (asli) yang tidak dipasangkan dengan sempurna:
Cobalah online!
sumber
Haskell , 66 byte
Cobalah online!
Cat Wizard menyimpan 6 byte.
sumber
Tambahkan ++ , 146 byte
Cobalah online!
Fakta menyenangkan: Ini adalah 272 byte jauh sebelum penjelasan dimulai, sekarang mengalahkan Java.
Output
True
untuk string seimbang sempurna, danFalse
sebaliknyaUntuk kepuasan saya, ini mengalahkan versi palindromize yang membosankan sebanyak 2 byte, untuk mencegah hasil yang dicetak dua kali. Saya juga bertujuan untuk memiliki kode mati sesedikit mungkin, namun masih ada beberapa bagian berkomentar, dan kode keluar dengan kode kesalahan 1 , setelah mencetak nilai yang benar.
NB : Bug dengan
BF
perintah diperbaiki ketika jawaban ini sedang dikembangkan.Bagaimana itu bekerja
*
BF
^
D,ff,@^^,
;;
€
{...}
{...}
yang lebih panjang 4 byte.
`
xx:?
aa:1
Lalu kita masukkan loop while kita:
Loop sementara adalah konstruk di Add ++: ia beroperasi langsung pada kode, bukan variabel. Constructs mengambil serangkaian pernyataan kode, dipisahkan dengan
,
mana mereka beroperasi. Sementara dan jika pernyataan juga mengambil kondisi langsung sebelum yang pertama,
yang terdiri dari pernyataan tunggal yang valid, seperti perintah infix dengan variabel. Satu hal yang perlu diperhatikan: variabel aktif tidak dapat dihilangkan dari kondisi.aa*bb
Salah satu kelemahan terbesar Add ++ adalah kurangnya pernyataan majemuk, yang mengharuskan memiliki variabel loop kedua. Kami menetapkan dua variabel kami:
Dengan kodenya
|
B
xx:yy
Kami kemudian mencapai pernyataan akhir kami:
sumber
JavaScript (ES6), 76 byte
Mengembalikan boolean.
Cobalah online!
Disarankan oleh @Shaggy: 58 byte dengan mengembalikan string kosong untuk dipasangkan dengan sempurna atau melemparkan kesalahan.
sumber
Bahasa Wolfram (Mathematica) ,
7064 byteCobalah online!
Tanpa komentar, 92 byte
Cobalah online!
sumber
Lua , 178 byte
Cobalah online!
Meskipun ini adalah solusi yang sangat panjang, ini membuat cukup banyak penggunaan kebiasaan khusus Lua. Ini sebenarnya adalah algoritma stack brute force yang diperkecil. Program ini diperumit oleh fakta bahwa pola Lua tidak memungkinkan penggantian pasangan dan regex tidak dibangun.
Penjelasan:
sumber
Gol> <> , 30 byte
Cobalah online!
Semuanya setelah yang pertama
B
adalah kode berlebih dan tidak dieksekusi. Fungsi yang mengembalikan bagian atas tumpukan seolah-1
olah input adalah pasangan sempurna,0
jika tidak.Penjelasan:
sumber
Cubix , 30 byte
Cobalah online!
Output
1
jika string dipasangkan dengan sempurna dan tidak ada yang sebaliknya.Kubus
Disederhanakan
Logika dan struktur umum sama dengan jawaban Mnemonic, tetapi tanpa pemeriksaan eksplisit untuk string kosong.
sumber
Haskell , 92 byte
Cobalah online!
Jawaban @ nimi cukup keren, tidak menggunakan komentar apa pun. Yang ini lebih pendek tetapi tidak menggunakan komentar.
Jawaban xnor juga cukup keren, tidak menggunakan komentar dan lebih pendek dari yang ini
sumber
Python 2 , 114 byte
Cobalah online!
Kembali
True
untuk string sempurna berpasangan,False
jika tidak.(Sebenarnya gagal memverifikasi sendiri, karena
(.)
tidak akan cocok dengan baris baru dalam kode! Tapi @Cat Wizard mengatakan ini tidak apa-apa, karena baris baru tidak dapat dicetak karakter ASCII, jadi program saya tidak perlu menanganinya.)Ini adalah versi yang dipasangkan dengan sempurna:
di mana penyempurnaan "malas"
code + '##' + f(code[::-1])
akan menghasilkan 120 byte. (Yaitu, mengubah nama variabel, dll. Untuk memperkenalkan lebih banyak pasangan yang diciutkan di dalam setengah komentar dari kode yang disimpan 6 byte.)sumber
Jelly ,
26 2422 byteCobalah online!
Anehnya tampaknya bekerja tanpa memindahkan kode mundur ke tautan yang tidak digunakan.
Mengembalikan 0 jika input dipasangkan dengan sempurna, 1 sebaliknya.
Kode aktif:
sumber
Attache , 82 byte
Cobalah online!
Tidak ada yang luar biasa di sini.
Fixpoint
sebuah fungsi yang menghilangkan pasangan berurutan.sumber
Java 8,
158156154 byteMengembalikan boolean (
true
/false
).-2 byte terima kasih kepada @raznagul .
Cobalah online.
Penjelasan:
sumber
s
menjadin
dan menambahkan spasi kedua kereturn s.isEmpty
Anda dapat menghapuss n
dari komentar, menghemat total 2 byte.