Deteksi Pairing Sempurna

25

Mari kita memiliki fungsi yang mengambil string dan menghapus semua pasangan karakter identik yang berdekatan. Sebagai contohf

f(SebuahbbbSebuahcc)=SebuahbSebuah

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 fSebuahbbbSebuahccfSebuahbSebuaheSebuahbbccSebuahddef

f(eSebuahbbccSebuahdde)=eSebuahSebuahe

f(eSebuahSebuahe)=ee

f(ee)=


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 sehingga jawaban akan dinilai berdasarkan ukuran dalam byte dari sumbernya dengan lebih sedikit byte yang lebih baik.


Uji Kasus

SebuahbbbSebuahccFSebuahlseSebuahbcbSebuahFSebuahlseSebuahbSebuahbFSebuahlseSebuahbbbSebuahSebuahbSebuahccTrkamueeSebuahbbccSebuahddeTrkamuebbbbTrkamue

Wisaya Gandum
sumber
1
Walaupun mungkin sudah terlambat untuk mengubahnya sekarang, saya merasa seperti bagian "twist" dari tantangan yang diberikan hampir tidak ada gunanya jika Anda mengizinkan komentar atau kode "mati" yang serupa.
Geobits
11
@ Geobits saya tidak setuju. Untuk satu saya berpikir bahwa menolak kode mati hanyalah lumpur definisi yang kabur dan tidak pernah ternyata menyenangkan. Untuk dua orang, saya pikir membiarkan komentar menurunkan bilah masuk. Untuk tiga saya percaya bahwa kode komentar-kurang pasti akan menjadi skor yang lebih baik daripada kode komentar-lengkap. Mungkin twist tidak menyenangkan tetapi pasti akan kurang menyenangkan jika saya menambahkan pembatasan yang tidak dapat dilakukan untuk membuat jawaban melakukannya dengan cara tertentu.
Wheat Wizard
4
Unary tidak peduli tentang aturan pembatasan sumber Anda, mwahahahaha (yaitu ... selama jawabannya memiliki jumlah genap genap).
Arnauld
2
@ Geobits Satu hal yang mungkin mendorong jawaban yang lebih kreatif adalah faktor jumlah langkah untuk sampai ke string kosong ke dalam penilaian. Menggunakan komentar cenderung menyebabkan angka ini menjadi cukup tinggi karena komentar secara alami bersarang di mana sebagai skor yang lebih rendah mengharuskan Anda untuk menjalin pasangan cukup sedikit. Jelas sudah terlambat untuk melakukan perubahan itu.
Wheat Wizard
1
@dylnan String kosong bisa, perulangan selamanya namun bukan output yang valid.
Wheat Wizard

Jawaban:

10

Haskell, 146 124 byte

((""##))
a===bb=bb==a
((aa:bb))##((cc:dd))|aa===cc=bb##dd|1==1=((cc:aa:bb))##dd
a##""=""===a
""##cc=((cc!!00:cc!!00:""))##cc

Tidak ada komentar. Mengembalikan salah satu Trueatau False.

Cobalah online!

Sunting: -22 bytes berkat @Cat Wizard

nimi
sumber
2
Ini adalah haskell paling tidak seperti haskell yang pernah saya lihat
Cubic
5

Python 2 , 94 byte

ss=''

for cc in input():ss=[cc+ss,ss[1:]][cc==ss[:1]]

print''==ss##tnirp[,+[=:)(tupni nirof=

Cobalah online!

Seluruh langkah pembaruan ss=[cc+ss,ss[1:]][cc==ss[:1]]dibatalkan menjadi adil =[+,[.

Tidak
sumber
5

05AB1E , 26 24 22 20 18 byte

-2 bytes terima kasih kepada ovs . Output 0 jika string dipasangkan dengan sempurna, 1 sebaliknya.

ΔγʒgÉ}JJ}ĀqqĀÉgʒγΔ

Cobalah online!

ΔγʒgÉ} JJ} ĀqqĀÉgʒγΔ - Program lengkap.
Δ} - Hingga hasilnya tidak lagi berubah:
 γʒ} - Membagi string menjadi potongan karakter yang sama dan memfilter menurut:
   gÉ - Apakah panjangnya aneh?
      JJ - Dan setelah pemfilteran, gabungkan bagian-bagiannya kembali menjadi satu, tetapi lakukan ini
                     dua kali untuk menghemat 2 byte, seperti pada versi sebelumnya.
         Ā - Periksa apakah hasilnya kosong
          q - Menghentikan (keluar) eksekusi. Sisa kode diabaikan.
           qĀÉgʒγΔ - Cermin bagian yang tidak cocok untuk membantu dengan tata letak sumber.

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:

ΔγεDgÉ£}JJ}ĀĀ£ÉgDεγΔ 

Dan versi 22-byte, menjelaskan, yang hanya di atas tetapi tidak menyalahgunakan UB, dan menghasilkan nilai-nilai waras .

ΔγεDgÉ£}JJ}ĀqqĀ£ÉgDεγΔ – Full program.
Δ         }            – Until fixed point is reached (starting from the input value):
 γε    }                 – Group equal adjacent values, and for each chunk,
   DgÉ                     – Duplicate, get its length mod by 2.
      £                    – And get the first ^ characters of it. This yields the
                             first char of the chunk or "" respectively for odd-length
                             and even-length chunks respectively.
         JJ                – Join the result to a string, but do this twice to help
                             us with the source layout, saving 2 bytes.
            Ā           – Check if the result is an empty string.
             q          – Terminate the execution. Any other commands are ignored.
              qĀ£ÉgDεγΔ – Mirror the part of the program that isn't otherwise removed
                          anyways. This part forgoes }JJ} because that substring will
                          always be trimmed by the algorithm anyway.
Tuan Xcoder
sumber
5

Cubix , 54 byte

U#;[email protected]>??>i..??O.@1^^...u--u.u!ww;..#..U..;..;!^^!

Tidak menghasilkan apa-apa jika string dipasangkan dengan sempurna dan 1sebaliknya.
Coba di sini

Kubus

      U # ;
      ! u 1
      @ . O
i > ? ? > i . . ? ? O .
@ 1 ^ ^ . . . u - - u .
u ! w w ; . . # . . U .
      . ; .
      . ; !
      ^ ^ !

Penjelasan

Sebagian besar karakter adalah pengisi yang diperlukan untuk memasangkan kode dengan sempurna. Mengganti mereka dengan .(tanpa op), kita dapatkan

      U # ;
      ! u 1
      @ . O
i . ? . > i . . ? . . .
. . ^ . . . . u - . . .
. . . w ; . . . . . . .
      . ; .
      . ; !
      ^ ^ !

Ini dapat dibagi menjadi tiga langkah:

  • Periksa terhadap string kosong (kiri idan ?).
  • Ulangi, melempar karakter ke tumpukan dan muncul duplikat (semua yang ada di bagian bawah dan kanan).
  • Periksa apakah tumpukan kosong (barang-barang di atas).

sumber
4

V , 20 , 18 byte

òóˆ±òø‚

::‚øò±ˆóò

Cobalah online!

Hexdump:

00000000: f2f3 88b1 f2f8 820a 0a3a 3a82 f8f2 b188  .........::.....
00000010: f3f2                                     ..                   ....

Output 0 untuk truey, 1 untuk falsy. Terima kasih kepada nmjcman101 karena secara tidak langsung menghemat 2 byte.

ò        ò        " Recursively...
 ó                "   Remove...
  <0x88>          "     Any printable ASCII character
        ±         "     Followed by itself
          ø       " Count...
           <0x82> "   The number of non-empty strings

::<0x82>øò±<0x88>óò      " NOP to ensure that the code is paired
DJMcMayhem
sumber
Anda bisa mengganti ^$dengan .dan mengembalikan 0 untuk jujur, apa pun yang lain untuk palsu? Saya agak berkabut pada aturan setelah tidak melakukan ini untuk sementara waktu.
nmjcman101
Saya pikir itu akan berfungsi kecuali bahwa aturan mengatakan Anda dapat menampilkan dua nilai berbeda satu untuk kasus di mana input dipasangkan dengan sempurna dan satu untuk sebaliknya. . Itu memang memberi saya ide meskipun ...
DJMcMayhem
3

R , 142 126 byte

Logika yang lebih kencang dan beberapa byte komentar yang diputar oleh @Giuseppe

f=function(x,p="(.)\\1")"if"(grepl(p,x),f(sub(p,"",x)),!nchar(x))##x(rahcn!,x,,p(bus(f,)x,p(lperg("fi")"1\\).("=p,x(noitcnuf=f

Cobalah online!

f=function(x,p="(.)\\1")"if"(nchar(x),"if"(grepl(p,x),f(sub(p,"",x)),0),1)##)1,)0,xp(bus(f,)x,p(lperg("fi",)x(rahcn("fi")"1).("=p,x(noitcnuf=f

Asli:

Cobalah online!

Fungsi detektor rekursif diikuti oleh komentar dengan semua karakter dalam fungsi dalam urutan terbalik.

ngm
sumber
Kode Anda saat ini melempar kesalahan. Berikut adalah versi yang berfungsi pada 142 byte.
Ovs
Terima kasih. Pasti kecelakaan potong-dan-tempel.
ngm
126 byte - Anda mungkin dapat mengompresi komentar lagi juga ...
Giuseppe
Saya bertanya-tanya apakah `\\ ˋ akan menyederhanakan atau perlu digandakan dalam komentar.
JayCe
@JayCe Anda akan berpikir itu tidak perlu ada di komentar, tapi coba ini dan sepertinya tidak berhasil. Saya tidak tahu kenapa.
ngm
2

Retina , 28 26 byte

+`(.)\1

C`^$

$^`C1\).(`+

Cobalah online!

Keluaran `C1\).(`+0`C1\).(`+untuk kasus palsu dan `C1\).(`+1`C1\).(`+kebenaran.

ovs
sumber
2

Brain-Flak , 228 200 byte

(()){{{}([]<<{{(({}<<>>)<<>>[({})]){{{{}(<<<<>>()>>)((<<>>))}}}{}{}<<>>{}<<>>}}{}<<>>>>[[]])}}{}(<<({{(())(<<()>>)}}<<>>)>>){{{{}{}}((){{}{}{}{}{}}(()())())[[]((){{}{}}())[]]((){{}{}}[[][]]()){{}{}}}}

Cobalah online!

Ini sedikit bukti konsep. Mungkin bisa lebih pendek. Namun tidak menggunakan komentar apa pun.

Output 0,0jika input dipasangkan dengan sempurna dan 0,1jika input tidak.

Wisaya Gandum
sumber
2

sed 4.2.2 , 34 byte

:;:t;ss((..??\??))\1ss1;t;/..??/cc

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 sekarang clebih sedikit dilecehkan , edit: yay sekarang hanya ada 1 karakter setelah c: D)

(perhatikan itu ;adalah pemisah pernyataan)

: mendeklarasikan label kosong

:t mendeklarasikan label t

ss((..??\??))\1ss1adalah substitusi, sed Anda dapat mengubah pembatas menjadi substitusi, dan ini adalah apa yang saya lakukan dengan mengubahnya s, jadi apa yang dilakukannya adalah mengganti yang pertama (seperti yang ditunjukkan oleh 1di akhir)

  • cocok dengan ((..??\??))\1

    • . karakter apa saja
    • .?? diikuti oleh karakter opsional opsional
    • \?? dan opsional ?
    • diikuti oleh hal yang sama tepat di sampingnya
  • tanpa apa-apa

Sekarang substitusi ini dipasangkan dengan dirinya sendiri, jadi ;sebelum dan sesudahnya dibatalkan juga

t dan kembali ke label sampai tidak ada lagi pengganti yang berhasil

/..?/jika .(wildcard) diikuti oleh .?karakter opsional dicocokkan

  • cc ubah buffer ke c
Kritixi Lithos
sumber
2

Brain-Flak , 112 110 108 byte

(()){{}({<<(({}<<>>)<<>>[({})]){{((<<>>)<<>>)}}{}{##{

}<<>>>>{}<<>>}<<>>)}{}((){{<<>>[[]]}})##}{}])}{([)}(}

Cobalah 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 1atau 1,0jika input adalah pasangan sempurna, 0,0jika 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.

Jo King
sumber
Perhatikan bahwa ini hanya bekerja pada interpreter ruby ​​brainflak dan karenanya bukan jawaban brainflak murni
Wheat Wizard
@CatWizard Apakah ada penerjemah kanon Brain-Flak? Sejauh yang saya tahu, Rain-Flak (Ruby) adalah penerjemah asli. (Juga, saya sedang mengerjakan solusi tanpa komentar)
Jo King
Tidak juga. Rain-Flak adalah penerjemah asli tetapi sintaks komentarnya unik untuk itu. Kami menulis standar Brain-Flak beberapa waktu lalu, saya tidak ingat di mana akhirnya.
Wheat Wizard
@CatWizard Menyelesaikan versi no comment
Jo King
2

Japt, 24 22 byte

Keluaran falseuntuk kebenaran dan truefalsey.

&&!!e"(.)%1"PP"1%).("e

Cobalah

Shaggy
sumber
Akan «e"(.)%1bekerja
Oliver
@Liver, itulah yang awalnya saya miliki sebelum pembatasan sumber dibawa ke perhatian saya. Namun, masih berusaha mencari cara untuk membuatnya bekerja «.
Shaggy
@Oliver, itu tidak berhasil , sayangnya.
Shaggy
Saya menduga Anda mungkin telah melewatkan bagian sumber terbatas / sumber-tata letak tantangan, @Oliver.
Shaggy
Saya lakukan ... salah saya.
Oliver
2

Brain-Flak , 96 byte

{<<>>(({})<<>>[(([{}<<>>]))]){((<<[[]]>>))}{}{}{}{}<<>>}<<>>{{{}{}{}{}{}}((<<>>){{}{}}){{{}}}}{}

Cobalah online!

Tidak menghasilkan apa-apa jika input dipasangkan dengan sempurna, dan 0sebaliknya.

Versi (asli) yang tidak dipasangkan dengan sempurna:

{<>(({})<>[({}<>)]){((<()>))}{}{}{}<>}<>{((<>))}{}

Cobalah online!

Nitrodon
sumber
2

Haskell , 66 byte

null.foldr((%))"";;cc%((r:t))|cc==r=t;;t%s=t:s--s:t=s%=r|t:dlof.un

Cobalah online!

Cat Wizard menyimpan 6 byte.

Tidak
sumber
1
66 bytes
Wheat Wizard
@CatWizard Itu beberapa kehancuran jarak jauh yang mengesankan.
xnor
62 bytes
Wheat Wizard
2

Tambahkan ++ , 146 byte

D,g,@~~,L2_|*;;*|_2L,@,g,D
D,ff,@^^,BG€gBF;;FBg€GB,@D1:?:

xx:?

aa:1
`bb
Bxx;;B
Waa*bb,`yy,$ff>xx,`aa,xx|yy,`bb,Byy,xx:yy

O;;O:,B,`,|,`,>$,`,*W`

Cobalah online!

Fakta menyenangkan: Ini adalah 272 byte jauh sebelum penjelasan dimulai, sekarang mengalahkan Java.

Output Trueuntuk string seimbang sempurna, dan Falsesebaliknya

Untuk 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 BFperintah diperbaiki ketika jawaban ini sedang dikembangkan.

Bagaimana itu bekerja

ffgffffgSff(S)S

SSebuahbbbSebuahSebuahbSebuahcc[[Sebuah],[bbb],[SebuahSebuah],[b],[Sebuah],[cc]]g, dan ganti sublist dengan hasil fungsi.

g2x[Sebuah][bb][ccc]

[Sebuah][Sebuah,1]
[bb][b,b,0]
[ccc][c,c,c,1]

xx>2x-2x*

g(s)sBF^D,ff,@^^,grr;;

ffgff

  • xxff
  • yyff
  • SebuahSebuah
  • bbyy

gxySebuahbg

Sebuahbc{...}g{...}ggffg

D,gg,@~~,L2_|*;;*|_2L,@D             (NB: -2 bytes)
D,ff,@^^,BG€{gg}BF;;FB}gg{€GB,@D?:   (NB: +6 bytes)

yang lebih panjang 4 byte.

x=5x=15

x+10 ; Explicit argument
+10  ; Implicit argument, as x is active

x`

ffgxxxx:?xxSebuahSebuahaa:11xxbb

`bb
Bxx

bbxxSebuahSebuah: =1bb: =¬¬xx

Lalu kita masukkan loop while kita:

Waa*bb,`yy,$ff>xx,`aa,xx|yy,`bb,Byy,xx:yy

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*bbSebuahSebuahbbyyff(x)

`yy,$ff>xx

SebuahSebuah

  • 1) Nilai baru tidak sama dengan nilai lama (loop while unique)
  • 2) Nilai baru bukan string kosong

Salah satu kelemahan terbesar Add ++ adalah kurangnya pernyataan majemuk, yang mengharuskan memiliki variabel loop kedua. Kami menetapkan dua variabel kami:

SebuahSebuah: =xxyy
bb: =¬¬(yy)

Dengan kodenya

`aa,xx|yy,`bb,Byy

|B xxyyxx:yy

ffSebuahSebuahbb

SebuahSebuahx=ySebuahSebuahyybbSebuahSebuah

Kami kemudian mencapai pernyataan akhir kami:

O

bb

  • SebuahSebuah=1bb=FSebuahlseFSebuahlse
  • SebuahSebuah=Trkamuebb=FSebuahlseFSebuahlse
  • SebuahSebuah=FSebuahlsebb=TrkamueTrkamue

bbbbTrkamueFSebuahlse

Komunitas
sumber
1

JavaScript (ES6), 76 byte

Mengembalikan boolean.

ff=ss=>ss==(ss=ss.replace(/(.)\1/,''))?!ss:ff(ss)//)(:!?,/1\).(/(ecalper.=(>

Cobalah online!

Disarankan oleh @Shaggy: 58 byte dengan mengembalikan string kosong untuk dipasangkan dengan sempurna atau melemparkan kesalahan.

Arnauld
sumber
1
Jika salah satu dari "nilai pengembalian" bisa menjadi kesalahan (menunggu konfirmasi untuk itu) maka ini bisa menjadi 66 byte .
Shaggy
Program dapat secara default output melalui kode keluar . Dalam kasus khusus jawaban ini, keluaran yang mungkin adalah kode keluar 0 untuk string berpasangan sempurna dan kode keluar 1 untuk string tidak berpasangan sempurna, yang merupakan dua nilai berbeda karena itu memenuhi kriteria; jadi byter 58 harus benar-benar valid.
Tn. Xcoder
1

Lua , 178 byte

p=...S={}for a in p:gmatch"."do E=S[#S]~=a;S[E and#S+1 or#S]=E and a or X end;print(#S==0)--)0S#(tnirp;dne X ro a dna E=]S#ro 1+S#dna E[S;a=~]S#[S=E od"."hctamg:p ni a rof}{=S.=p

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:

p=... -- command-line argument
S={} -- the stack
for c in p:gmatch"." do -- shorter than "for i=1,#p do ..."
    E=S[#S]~=c -- check whether we have the right letter on top of stack
    -- could've saved some bytes by doing == instead of ~=
    -- but the double negation is necessary for ternary operator
    -- to work with nil values
    S[E and #S+1 or #S]=E and c or X -- Lua's awesome "ternary operator"
end
-- i'm sure there is a better way to output this (table indexing?)
print(#S==0)
PhilipRoman
sumber
1

Gol> <> , 30 byte

1ll1**F:}}:{=Q{~~||lzBBzl{Q={F

Cobalah online!

Semuanya setelah yang pertama Badalah kode berlebih dan tidak dieksekusi. Fungsi yang mengembalikan bagian atas tumpukan seolah- 1olah input adalah pasangan sempurna, 0jika tidak.

Penjelasan:

1       Push 1 as the end string marker
 ll1**  Push n, where n (len+1)*(len+2), 
        This is larger than the amount of steps needed to determine pairing
      F           |  Repeat that many times
       :}}:{=        Compare the first two characters of the string
             Q   |   If they are equal
              {~~    Pop both of them
        String is also rotated by 1
        If the string becomes empty, the 1 is compared to itself and removed.
                   lzB   Return whether the length of the stack is 0
                      Bzl{Q={F  Excess code to match unpaired symbols
Jo King
sumber
1

Cubix , 30 byte

1O@;??;@ii??O;>>;;;..1Wcc1??1W

Cobalah online!

Output 1jika string dipasangkan dengan sempurna dan tidak ada yang sebaliknya.

Kubus

      1 O @
      ; ? ?
      ; @ i
i ? ? O ; > > ; ; ; . .
1 W c c 1 ? ? 1 W . . .
. . . . . . . . . . . .
      . . .
      . . .
      . . .

Disederhanakan

      1 O @
      ; ? .
      . @ .
i ? . . . . > ; ; ; . .
. W c . . . ? 1 W . . .
. . . . . . . . . . . .
      . . .
      . . .
      . . .

Logika dan struktur umum sama dengan jawaban Mnemonic, tetapi tanpa pemeriksaan eksplisit untuk string kosong.

Nitrodon
sumber
1

Haskell , 92 byte

gg""

gg((aa:cc:bb))dd|aa==cc=gg bb dd

gg  aa""=""==aa

gg  aa((bb:c))=gg((bb:aa))c--c:=c:|

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

Wisaya Gandum
sumber
0

Python 2 , 114 byte

import re

e=lambda i,nn=1:e(*re.subn('(.)\\1','',i))if nn else''==i##ieslef'1).('(nbus.er*(e:1=,i adbmal=r tropmi

Cobalah online!

Kembali Trueuntuk string sempurna berpasangan, Falsejika 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:

import re;p=lambda s,n=1:p(*re.subn('(.)\\1','',s))if n else''==i

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.)


re.subnadalah varian yang sedikit diketahui re.subyang mengembalikan tuple (new_string, number_of_substitutions_made). Ini cukup bagus untuk menemukan fixpoint substitusi regex!

Lynn
sumber
0

Jelly , 26 24 22 byte

ẠƬµF€ḂLḣgŒŒgḣLḂ$$€FµƬẠ

Cobalah online!

Anehnya tampaknya bekerja tanpa memindahkan kode mundur ke tautan yang tidak digunakan.

Mengembalikan 0 jika input dipasangkan dengan sempurna, 1 sebaliknya.

Kode aktif:

ŒgḣLḂ$$€FµƬẠ
Œg            Group runs 'abbbcc'->['a','bbb','cc']
       €      For each of these strings:
      $       Monad{
     $            Monad{
   L                  Find the length...
    Ḃ                 ...mod 2. 
                      } -> [1, 1, 0] in this example.
  ḣ               Take this many characters from the string.
                  } -> [['a'], ['b'], []]
        F     Flatten -> ['a', 'b']
          Ƭ   Repeat...
         µ    The last monadic chain until a fixed point is reached.
           Ạ  All. If it is not a perfectly paired string, all elements in the 
              result of Ƭ will be nonempty and 1 is returned.
              If it is perfectly paired, the last element is [] which is falsy
              and 0 is returned.
dylnan
sumber
0

Attache , 82 byte

{0=#Fixpoint[{Replace[_,/"(.)\\1",""]},_]}??}]_,}],"1).("/,_[ecalpeR{[tniopxiF#=0{

Cobalah online!

Tidak ada yang luar biasa di sini. Fixpointsebuah fungsi yang menghilangkan pasangan berurutan.

Conor O'Brien
sumber
0

Java 8, 158 156 154 byte

n->{for(;n.matches(".*(.)\\1.*");n=n.replaceAll("(.)\\1",""));return  n.isEmpty();}//};)(ytpmEsi.ruter;,"1).("(Aecalper.n=n;)"*.1).(*."(sehctam.n;(rof{>-n

Mengembalikan boolean ( true/ false).

-2 byte terima kasih kepada @raznagul .

Cobalah online.

Penjelasan:

n->{                              // Method with String parameter and boolean return-type
  for(;n.matches(".*(.)\\1.*");   //  Loop as long as the String still contains pairs
    n=n.replaceAll("(.)\\1","")); //   Remove all pairs
  return  n.isEmpty();}           //  Return whether the String is empty now
//};)(ytpmEsi.ruter;,"1).("(Aecalper.n=n;)"*.1).(*."(sehctam.n;(rof{>-n
                                  // Comment reversed of the source code,
                                  // minus the pairs: '\\';'ll';'\\';'""))';'n  n';'//'
Kevin Cruijssen
sumber
1
Dengan mengubah nama smenjadi ndan menambahkan spasi kedua ke return s.isEmptyAnda dapat menghapus s ndari komentar, menghemat total 2 byte.
raznagul