Mükemmel Eşleşmeleri Algıla


25

Bir dizgeyi alan ve bitişik aynı karakterlerin tüm çiftlerini kaldıran bir işlevine sahip olalım . Örneğinf

f(abbbacc)=aba

İki çift çakıştığında bunlardan yalnızca birini çıkardığımızı unutmayın.

Tekrarlanan uygulama sonunda boş dize verirse mükemmel bir şekilde eşleştirilmiş bir dize arayacağız. Örneğin yukarıdaki dize uyguladığımız çünkü eğer mükemmel eşleştirilmemişse f tekrar biz hala olsun bir b a . Gibi Ancak bir dize e bir b b c c bir d d e biz uygulamak çünkü eğer mükemmel eşlenirse f üç kez biz boş bir dize almakabbbaccfabaeabbccaddef

f(eabbccadde)=eaae

f(eaae)=ee

f(ee)=


Göreviniz bir dizeyi (yazdırılabilir ASCII) alan ve mükemmel bir şekilde eşleştirilip eşleşmediğine karar veren mükemmel bir şekilde eşleştirilmiş bilgisayar kodu yazmaktır. Kaynağınızın bytestring kendisi mükemmel bir eşleştirilmiş dize olmalı , ancak kodunuzun yazdırılabilir ASCII ile sınırlı olması gerekmez.

İki farklı değer yazabilirsiniz: biri girişin mükemmel şekilde eşleştirildiği durum için, diğeri ise olmadığı durumlar için.

Bu bir sorusudur, bu yüzden cevaplar daha az byte daha iyi olacak şekilde kaynaklarının bayt cinsinden büyüklüğü ile puanlanacaktır.


Test Kılıfları

abbbaccFalseabcbaFalseababFalseabbbaabaccTrueeabbccaddeTruebbbbTrue


1
Şimdi değiştirmek için çok geç olsa da, yorumlara veya benzer "ölü" kodlara izin verirseniz, mücadelenin "bükülme" bölümünün neredeyse anlamsız kıldığını hissediyorum.
Geobits

11
@Geobitler Katılmıyorum. Birincisi, ölü kodun reddedilmesinin sadece belirsiz tanımlardan ibaret olduğunu ve yine de eğlenceli olamayacağını düşünüyorum. İki kişilik yorumlara izin vermenin giriş çubuğunu düşürdüğünü düşünüyorum. Üçüncüsü, yorumsuz kodun kaçınılmaz olarak yorum tam kodundan daha iyi puan alacağına inanıyorum. Belki büküm eğlenceli değildir, ancak cevapları belli bir şekilde yapması için değiştirilemez kısıtlamalar eklediğimde kesinlikle daha az eğlenceli olurdu.
Buğday Sihirbazı,

4
Unary, kaynak kısıtlama kuralınız hakkında hiçbir şey umursamıyor, mwahahahaha (cevabı, çift bayt olduğu sürece).
Arnauld

2
@Geobits Daha yaratıcı cevapları cesaretlendiren bir şey, boş dizgiye ulaşmak için atılacak adım sayısını puanlamaya koymaktır. Yorumların kullanılması bu sayının oldukça yüksek olmasına neden olur, çünkü yorumlar doğal olarak daha düşük bir puan olarak yuvalara girmenizi gerektirir. Açıkçası bu değişikliği yapmak için çok geç.
Buğday Sihirbazı

1
@dylnan Boş dize olabilir, sonsuza dek döngüde ancak geçerli çıktı değildir.
Buğday Sihirbazı,

Yanıtlar:


10

Haskell, 146 124 bayt

((""##))
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

Yorum yok. TrueVeya birini döndürür False.

Çevrimiçi deneyin!

Düzenleme: -Cat Sihirbazı sayesinde -22 bayt


2
Bu şimdiye kadar gördüğüm haskell gibi en az haskell
Cubic

5

Python 2 , 94 bayt

ss=''

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

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

Çevrimiçi deneyin!

Tüm güncelleme adımı ss=[cc+ss,ss[1:]][cc==ss[:1]]sadece iptal eder =[+,[.


5

05AB1E , 26 24 22 20 18 bayt

Ovs sayesinde -2 bayt . Çıkışlar 0 dize mükemmel eşleştirilmiş ise, 1 aksi.

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

Çevrimiçi deneyin!

}GÉ} JJ} ĀqqĀÉgʒγΔ - Tam program.
Δ} - Sonuç artık değişinceye kadar:
 γʒ} - Dizgiyi eşit karakterdeki parçalara ayırın ve şunlara göre filtreleyin
   gÉ - Uzunluk tuhaf mı?
      JJ - Filtrelemeden sonra parçaları bir araya getirin, ama bunu yapın
                     önceki sürümlerde olduğu gibi 2 bayt kaydetmek için iki kez basın.
         The - Sonucun boş olup olmadığını kontrol edin
          q - İşlemi sonlandır (bırak). Kodun geri kalanı göz ardı edilir.
           qĀÉgʒγΔ - Kaynak düzenine yardımcı olması için eşleşmeyen kısmı yansıtın.

Önceki sürümler

Bu tamamen tanımsız davranışa dayanır (bu nedenle "ölü kod" yoktur) ve mükemmel eşleştirilmiş dizeler için [['0']] ve mükemmel eşleşmeyen dizeler için [['1']] çıkışlarını yapar :

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

Ve 22 baytlık versiyon açıkladı ki bu sadece UB'yi kötüye kullanmıyor, aklı başında değil ve aklı başında değerler veriyor .

Δγε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.

5

Cubix , 54 bayt

U#;!u1@.Oi>??>i..??O.@1^^...u--u.u!ww;..#..U..;..;!^^!

Dize tamamen eşleştirildiyse ve 1başka bir şey yapılmadıysa hiçbir şey çıkarmaz .
Burada dene

Cubified

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

açıklama

Karakterlerin çoğu, kodu mükemmel şekilde eşleştirmek için gerekli olan doldurucudur. Bunları .(no-op) ile değiştirirsek ,

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

Bu üç adıma bölünebilir:

  • Boş dizgiye karşı kontrol edin (sol ive ?).
  • Döngü, yığına karakter atma ve yinelenen çiftler (alt ve sağdaki her şey).
  • Yığının boş olup olmadığını kontrol edin (üst kısımdakiler).

4

V , 20 , 18 bayt

òóˆ±òø‚

::‚øò±ˆóò

Çevrimiçi deneyin!

HexDump:

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

Gerçek için 0, sahte için 1 çıktı. Dolaylı olarak 2 bayt tasarruf için nmjcman101'e teşekkürler.

ò        ò        " 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

Truthy için 0'la değiştirebilirsin ^$, .sahte için başka bir şey? Bunu bir süre yapmadıktan sonra kurallara biraz sisliyim.
nmjcman101

O kurallar söyledi haricinde işe yarar mı Şunları çıkış iki farklı değerleri giriş mükemmel eşleştirilmiş durumunda diğeri başka türlü için. . Bu bana bir fikir veriyor ...
DJMcMayhem

3

R , 142 126 bayt

Daha mantık ve bazı yorumlar bayt @Giuseppe tarafından golf oynadı

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

Çevrimiçi deneyin!

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

Orijinal:

Çevrimiçi deneyin!

Özyinelemeli dedektör işlevi, ardından işlevdeki tüm karakterler ters sırayla yorumlanır.


Kodunuz şu anda bir hata veriyor. İşte 142 byte çalışan bir sürümü.
ovs

Teşekkür ederim. Kes ve yapıştır bir uyumsuz olmalı.
ngm

126 bayt - yorumu daha da
Giuseppe

Merak ediyorum, yorumlarda basitleştirilip basitleştirilmeyeceğini veya çoğaltılması gerekip gerekmediğini merak ediyorum.
JayCe

@JayCe yorumlarda olması gerekmeyeceğini düşünürsünüz, ama bunu deneyin ve işe yaramadı. Neden bilmiyorum.
ngm



2

Brain-Flak , 228 200 bayt

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

Çevrimiçi deneyin!

Bu biraz kavram kanıtı. Muhtemelen daha kısa olabilirdi. Ancak herhangi bir yorum kullanmıyor.

Çıkışlar 0,0giriş mükemmel eşleştirilmiş ise ve 0,1giriş değilse.


2

sed 4.2.2 , 34 bayt

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

Çevrimiçi deneyin!

Eşleştirilmiş dizeler boş çıktı verir, eşleşmemiş olanlar verir ct:

Önemsiz palindromik versiyonu 32 :;ss(.)\1ss;t;/./cc/./;t;1\).(;:. Eski çözüm :;ss((..??\??))\1ss1;t;;/./cc/./t:(şu anki davranışın cdaha az kötüye kullanılması nedeniyle değiştirildi , düzeltildi: yay şimdi sadece 1 karakterden sonra c: D)

( ;bu ifadenin ayırıcı olduğunu unutmayın )

: boş bir etiket bildirir

:t etiketi bildirir t

ss((..??\??))\1ss1bir sübstitüsyondur, sed'de sınırlayıcıyı bir sübstitüsyona değiştirebilir ve bunu değiştirerek yaptığım şey budur s, yani bunun yaptığı şey ( 1sonunda belirtildiği gibi ) ilk

  • eşleşmesi ((..??\??))\1

    • . herhangi bir karakter
    • .?? ardından isteğe bağlı isteğe bağlı bir karakter
    • \?? ve isteğe bağlı ?
    • hemen yanında aynı şeyi izledi
  • hiçbir şey ile

Şimdi, bu oyuncu değişikliği kendisi ile eşleştirildi, bu yüzden ;önce ve sonra da iptal edildi

t ve başarılı bir alternatif olmadıkça etikete geri dönün

/..?/if .(joker karakter) ardından .?isteğe bağlı bir karakter eşleşirse

  • cc arabellek değiştir c

2

Brain-Flak , 112 110 108 bayt

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

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

Çevrimiçi deneyin!

Bu dayanmaktadır cevabım gelen parantez eşleşti musunuz? .

Yorumları kullanmamaya çalıştım, ancak pop nilads ( {}) ile eşleşmeye çalışırken sıkışıp kaldım . Sorun, bir çift braketi eşleştirmenin en kolay yolunda aynı türden başka bir çiftle çevrelemektir. Diğer niladlar için bu kolay olsa da, {...}monad döngüler yaratır. Döngüden çıkmak için 0'a basmanız gerekir, ancak döngüden çıktıktan sonra, sorunu oluşturan bileşik 0'ı açmanız gerekir.

66 bayt önceden eşleştirilmiş çözüm:

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

Çevrimiçi deneyin!

Çıktılar 1veya 1,0eğer girdi değilse mükemmel bir eşleşme 0,0ise.

Yorum yok, 156 bayt

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

Çevrimiçi deneyin!

Cat Wizard'ın da belirttiği gibi, ilk cevap tüm yorumlayıcılar gibi tüm tercümanlar için işe yaramıyor #. Bu sürüm yorum içermiyor.


Bunun yalnızca yakut brainflak yorumlayıcısında işe yaradığını ve bu nedenle saf bir brainflak yanıtı olmadığını unutmayın
Wheat Wizard

@CatWizard Bir canon Brain-Flak tercümanı var mı? Bildiğim kadarıyla, Rain-Flak (Ruby) ilk tercüman. (Ayrıca, yorum yapmadan bir çözüm üzerinde çalışıyorum)
Jo King

Pek sayılmaz. Rain-Flak orijinal tercümandır, ancak yorum sözdizimi kendine özgüdür. Bir süre önce bir Brain-Flak standardı yazdık, nerede olduğunu bilemiyorum.
Buğday Sihirbazı

@CatWizard Yorum yok sürümünü tamamladı
Jo King

2

Japt, 24 22 bayt

falseTruthy ve falsey trueiçin çıktılar .

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

Dene


Çalışır «e"(.)%1mı?
Oliver,

@Oliver, kaynak kısıtlamaları dikkatimi çekmeden önce orijinal olarak sahip olduğum şeydi. Yine de çalışmanın bir yolunu bulmaya çalışıyorum «.
Shaggy,

@Oliver, ne yazık ki çalışmıyor .
Shaggy

Sanırım meydan okumanın kısıtlı kaynak / kaynak düzeni bölümünü kaçırmış olabilirsiniz , @Oliver.
Shaggy,

Ben yaptım ... benim kötü.
Oliver,

2

Brain-Flak , 96 bayt

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

Çevrimiçi deneyin!

Giriş tamamen eşleştirilmişse hiçbir şey çıkarmaz ve 0 aksi takdirde.

Mükemmel şekilde eşleştirilmemiş (orijinal) sürüm:

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

Çevrimiçi deneyin!



2

++ , 146 bayt ekle

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`

Çevrimiçi deneyin!

Eğlenceli gerçek: Bu açıklama başlamadan çok önce 272 bayttır, şimdi Java'yı yener.

TrueMükemmel dengelenmiş dizgiler için çıktılar , Falseaksi takdirde

Benim büyük memnuniyet için, bu sıkıcı yener palindromize versiyonunu tarafından 2 kez basılmış olan sonuç önlemek için, bayt. Ayrıca, mümkün olduğunca az ölü kodun olmasını da hedefledim, yine de bazı yorumlanmış bölümler var ve kod doğru değeri yazdırdıktan sonra 1 hata koduyla çıkıyor .

Not : BFKomutlarla ilgili bir hata düzeltildi Bu cevap geliştirilirken .

Nasıl çalışır

ffgffffgSff(S)S

Sabbbaabacc[[a],[bbb],[aa],[b],[a],[cc]]g, ve işlevlerin sonucu alt listeleri değiştirin.

g2x[a][bb][ccc]

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

xx>2x2x* ve fonksiyon doğal yığının üst eleman verir: tekrar dizisi.

g(s)sBF^D,ff,@^^,grr;; bir yorum yorumdur ve bu nedenle dikkate alınmaz.

ffgff

  • xxff
  • yyff
  • aa
  • bbyy

gxyabg

abc{...}g{...}ggffg

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

4 bayt daha uzun.

x=5x=15

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

x`

ffgxxxx:?xxaaaa:11xxbb

`bb
Bxx

bbxxaa:=1bb:=¬¬xx

Sonra biz while döngüsüne giriyoruz:

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

While döngüsü Add ++ ' da bir yapıdır : değişkenler yerine doğrudan kod üzerinde çalışır. Yapılar, ,üzerinde çalıştıkları bir dizi kod ifadesi alırlar. While ve if ifadeleri ,, değişkenlerden önce bir infix komutu gibi tek bir geçerli ifadeden oluşan ilkinden önce doğrudan bir koşul alır . Unutulmaması gereken bir şey: aktif değişken durumdan çıkarılamaz.

aa*bbaabbyyff(x)

`yy,$ff>xx

aa

  • 1) Yeni değer eski değere eşit değil (benzersiz iken döngü)
  • 2) Yeni değer boş dize değil

Add ++ 'nın en büyük dezavantajlarından biri, ikinci bir döngü değişkenine sahip olmayı gerektiren bileşik ifadelerin eksikliğidir. İki değişkenimizi atadık:

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

Kod ile

`aa,xx|yy,`bb,Byy

|B xxyyxx:yy

ffaabb

aax=yaayybbaa

Daha sonra son ifademize ulaşıyoruz:

O

bb

  • aa=1bb=FalseFalse
  • aa=Truebb=FalseFalse
  • aa=Falsebb=TrueTrue

bbbbTrueFalse


1

JavaScript (ES6), 76 bayt

Bir boole döndürür.

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

Çevrimiçi deneyin!

@Shaggy tarafından önerildi: Mükemmel bir şekilde eşleştirilmesi için boş bir dize döndürerek veya başka bir hatayı atarak 58 bayt .


1
"Dönüş değerlerinden" biri bir hata olabilirse (bunun için onay bekliyor), bu 66 bayt olabilir .
Shaggy

Programlar, çıkış kodu ile varsayılan olarak çıkış yapabilir . Bu cevabın özel durumunda, olası çıktılar mükemmel eşleştirilmiş dizeler için çıkış kodu 0 ve mükemmel eşleştirilmemiş dizeler için çıkış kodu 1 , bu nedenle iki ayrı değerdir; bu yüzden 58 baytın tamamen geçerli olması gerekir.
Bay Xcoder


1

Lua , 178 bayt

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

Çevrimiçi deneyin!

Son derece uzun bir çözüm olsa da, bu Lua'ya özgü tuhaflıklardan oldukça fazla yararlanıyor. Bu aslında küçültülmüş bir kaba kuvvet yığını algoritmasıdır. Program, Lua'nın modellerinin çiftlerin değiştirilmesine izin vermediği ve regex'in yerleşik olmadığı gerçeğiyle karmaşıklaşıyor.

Açıklama:

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)

1

Gol> <> , 30 bayt

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

Çevrimiçi deneyin!

İlk olandan sonraki her şey Başırı koddur ve yürütülmez. Aksi halde 1girişin üstünü mükemmel bir eşleştirmemiş gibi yığının tepesine döndüren bir fonksiyon0

Açıklama:

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

1

Cubix , 30 bayt

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

Çevrimiçi deneyin!

1Dize tamamen eşleştirilmişse ve başka bir şey yoksa, çıktılar .

Cubified

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

Basitleştirilmiş

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

Mantık ve genel yapı, Mnemonic'in cevabındakiyle aynıdır, ancak boş dize için açık bir kontrol olmadan.



0

Python 2 , 114 bayt

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

Çevrimiçi deneyin!

Aksi takdirde Truemükemmel eşleştirilmiş dizeler için döndürür False.

(Aslında kendini doğrulayamıyor, çünkü (.)koddaki yeni satırlarla eşleşmiyor!


Bu mükemmel eşleştirilmiş bir versiyonudur:

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

bunun için bir “lazier” mükemmelleştirmesi code + '##' + f(code[::-1])120 bayt verirdi. (Yani, 6 bayt kaydedilen kodun yorum yarısı içinde daha fazla daraltılmış çift eklemek için değişkenleri vb. Yeniden adlandırın .)


re.subnre.subbir demet döndüren az bilinen bir çeşittir (new_string, number_of_substitutions_made). Regex ikame fixpoints bulmak için oldukça iyi!


0

Jöle , 26 24 22 bayt

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

Çevrimiçi deneyin!

Garip bir şekilde, geriye dönük kodu kullanılmayan bir bağlantıya taşımadan çalışıyor gibi görünüyor.

İade 0 girdi mükemmel eşleştirilmiş ise, 1 aksi.

Aktif kod:

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


0

Java 8, 158 156 154 bayt

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

Bir boole döndürür ( true/ false).

@Raznagul sayesinde -2 bayt .

Çevrimiçi deneyin.

Açıklama:

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';'//'

1
Yeniden adlandırarak siçin nve ikinci bir alan ekleyerek return s.isEmptykaldırabilir size s ntoplamda 2 bayt tasarruf yorumun.
raznagul
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.