Dağlık mı?


29

Meydan okuma

Bu meydan okuma için, dağlık bir sicim, M: x(Mx)*her x prodüksiyonunda, tüm x'lerin aynı karakterde olduğu dilbilgisi kuralına uyan bir teldir . Girintili olduğunda, dağlık bir dize şöyle görünebilir:

A
 B
  C
   D
  C
   E
    F
   E
  C
 B
A

Gördüğünüz gibi, yandan bir dağa benziyor.

Resmi tanımlama

  • Herhangi bir tek karakter adağlıktır.
  • Eğer Sdağlık dizedir ve abir karakterdir ardından aSayan yana dize birleştirme temsil eder, dağlıktır.
  • Eğer aSave aTadağlık tellerse, o zaman aSaTadağlık bir tel. Bu kuralın, bu kalıbın herhangi bir sayıda tekrar için geçerli olduğunu ima ettiğini unutmayın. (yani aSaTaUa, aSaTaUaVa, aSaTaUaVaWa... hepsi dağlık değildir.)

Örnekler

Tüm tuhaf uzunluktaki palindromlar dağlıktır, örneğin:

t
 a
  c
   o
  c
 a
t

qwertytrasdfdgdsarewqjklkjq daha az önemsiz bir örnek:

q
 w
  e
   r
    t
     y
    t
   r
    a
     s
      d
       f
      d
       g
      d
     s
    a
   r
  e
 w
q
 j
  k
   l
  k
 j
q

Örnek Çıktılar

a                           ==> true
aaa                         ==> true
mom                         ==> true
tacocat                     ==> true
qwertytrasdfdgdsarewqjklkjq ==> true
wasitacaroraratisaw         ==> true
abcbcbcbcba                 ==> true
aaaaabcbbba                 ==> true

<empty string>              ==> false
aa                          ==> false
pie                         ==> false
toohottohoot                ==> false
asdfdghgfdsa                ==> false
myhovercraftisfullofeels    ==> false

kurallar

  • Bu bir karar problemidir; bu nedenle, doğru veya yanlışın herhangi bir temsili, doğru, tutarlı, belirgin olduğu ve programın sınırlı bir süre içinde sona erdiği sürece geçerli çıktıdır. Çıkış sözleşmenizi çözümünüzle belirttiğinizden emin olun.
    • Girdi dizesinin ne olduğunu bilmek zorunda kalmadan çıkışın doğru mu yanlış mı olduğunu belirlemek önemsiz olmalıdır. Bunun, asal ya da sahte çıktıların sabit olması gerektiği anlamına gelmediğine dikkat edin, ancak "ipin dağlıksa dağlık ve dağlık değilse dağlık olmayan bir ipin basılması" konvansiyonel nedenlerle yasaklanmış bir boşluktur.
    • Öte yandan, "yanlış için bir istisna atar ve sessizce gerçek için çıkar."
  • Bu kod golf, bu yüzden en kısa program kazanır.
  • Standart boşluklar yasaklandı.

4
Gibi bir test durumu aaaiyi olurdu, aynı karakter birden çok düzeyde kullanılması gerekiyor.
Martin Ender

Bundan emin wasitacaroraratisawmisin? Bana komik görünüyor
Ton Hospel

wasitacaroraratisawgerçekten dağlık AFAICT olduğunu
ETHproductions

İşte bu. Sanırım sadece bir 'neredeyse palindrom' bulmaya çalışıyordum, ama kazayla dağlık bir ip buldum.
Beefster

2
Dizeyi ilk karakterine bölerek çözmenin kolay olacağını düşünmüştüm, ancak aaabunun gibi durumlar işe yaramaz hale geldi.
xnor

Yanıtlar:




6

Perl, 22 bayt

içerir +içinp

perl -pe '$_=/^((.)((?1)\2)*)$/' <<< abcbcbcbcba

1 için doğru, hiçbir şey için yanlış


5

Brain-Flak , 78 bayt

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

Çevrimiçi deneyin!

1 için doğru, hiçbir şey yanlış için yazdırır.

Dağlık bir kelimeyi doğrulamak için, kelimenin mümkün olduğunca dağdan aşağıya indiğini varsaymak yeterlidir.



3

Prolog (SWI) , 29 bayt

a-->[X],+X.
+X-->[];a,[X],+X.

Çevrimiçi deneyin!

Bu program, a//0dağlık bir dize olan herhangi bir dizeyle (karakter listesi) eşleşen bir DCG kuralını tanımlar .

açıklama

Bu program için, dağlık dizgiler için, meydan okumada tanımlandığından biraz farklı fakat eşdeğer bir tanım kullandım: Dağlık dize, cardından cuçlarından geçen sayıdaki (sıfır olabilir) dağlık dizgilerin bir karakteridir . Daha kısa ve öz normal ifade edilen gösterimde, dağlık dize deseni eşleşmelidir dağlık dizesini ve bir parantez içinde ifade sıfır ya da daha fazla kez tekrar olduğu anlamına gelir. Her birinin aynı karakterde olmasına rağmen, her birinin aynı dağlık dize olması gerekmediğine dikkat edin.c(Mc)*M*cM

Eşitlik Kanıtı

Meydan okumadan 1 ve 2 numaralı kuralların, Mcsırasıyla sıfır ve bir kez meydana gelen kuralıma eşdeğer olduğu açıktır .

Dağlık ipin, Mcmeydana ngeldiği zamanlar n > 1olması durumunda, ipin , sonuncusu hariç kalan son zamanların cMcScneresi Solduğu gibi yeniden yazılabildiği durumlarda ( herhangi bir dağlık ipin olduğu ve diğerleriyle aynı olması gerekmediğine dikkat edin ). Çünkü dağlık bir dize, kural 2'ye göre, dağlık bir dize olmalıdır. Ya dağlık bir sicimdir ki bu durumda dağlık bir sicim ya da sonuncusu hariç kalan son zamanların olduğu gibi yeniden yazılabilir . Bu akıl yürütme çizgisi, dağlık olması garanti edilmeyen ipler kadar uygulanmaya devam edebilir.n - 1MccMMMcMcScScScMcTcTn - 2MccMcbir zamanlar bunun da dağlık olması gerektiği anlamına gelecekti. Bu nedenle ve dağlık olduğu için dağlık olması gerekir, bütün ip dağlık olmalıdır.cMc dağlık ve eğer olduğunucMccM'ccMcM'c

Converse, bir dize ve ya daha sonra dağlık olan bu kural 2 ile dağlık bir dize sonra ise kural 2 veya kural 3. tarafından dağlık bir dizedir da dağlık bir dize olmalıdır. Kural 3'e göre dağlık bir sicim ise, o zaman dağlık sicimlerin olduğu ve formda olması gerekir . En uzun ve en az iki karakterden daha kısa olması gerektiğinden ve kural 3 en az 5 karakterin uygulanmasını gerektirdiğinden, sonlu sayıda kural 3 uygulamasından sonra, her dize arasındaki dize tanımım gereği dağlıktır.cScTccSccTccScScSccUcVccUccVccUccVccScc uygulamasından sonra kural 3'ün uygulamaları tarafından seçilen dağlık olmalıdır. dize. Aynı akıl yürütme çizgisine uygulanabilir.cTc

Tanımımla eşleşen herhangi bir dize dağlık ve tanımım tüm dağlık dizgilerle eşleştiği için, söz konusu olana eşdeğerdir.

Kod açıklaması

Genel a//0olarak, ilk satırda tanımlanan DCG kuralı herhangi bir dağlık dize ile eşleşir. +//1DCG kuralı (yüklemler gibi, DCG kuralları operatör isimleri vermek edilebilir ikinci hatta tanımlanan), kendi argümanları olarak iletilen karakteri ile sıfır veya daha dağlık dizeleri dizisinden oluşur herhangi bir dize eşleşir Xbunların uçları tacked . Veya regex benzeri Yukarıda kullanılan notasyon, ödünç a//0eşleşmeleri c(Mc)*ama aslında eşleşen işi outsources (Mc)*için +//1hangi sürer conun argüman olarak X.

Satır satır kodlar aşağıdaki gibi davranır:

a-->[X],+X.

Bu çizgi DCG kuralını tanımlar a. [X]Devletler İlk karakter anda tanımsız değişken eşit olması gerektiğini X. Bu X, ilk karaktere eşit ayarlanmasıyla sonuçlanır . Daha +Xsonra dizenin geri kalanının DCG kuralının argümanı olarak ayarlanmış +//1karakterle eşleşmesi gerektiğini belirtir X.

+X-->[];a,[X],+X.

Bu çizgi +//1DCG kuralını tanımlar . ;Bir temsil veya Prolog hangi dize ya eşleşebilir demekse []ya a,[X],+X. []Boş bir dize böylece temsil +//1zaman boş dize eşleme yapabilmektedir. İp boş değilse, başlangıcı eşleşmeli a//0ve dağlık bir ip olmalıdır. Bu daha sonra hangi karaktere Xayarlanmışsa onu takip etmelidir . Son olarak dizenin geri kalanı eşleşmelidir +X.


2

Kabuğu , 15 bayt

εωφΓ§?t·:⁰`(=←t

Çevrimiçi deneyin! Tip çıkarımı yaklaşık 40 saniye sürer, bu yüzden sabırlı olun.

açıklama

εωφΓ§?t·:⁰`(=←t  Implicit input, say s = "abacdca"
 ω               Apply until fixed point is reached
  φ              this self-referential anonymous function (accessed with ⁰):
                  Argument is a string x.
   Γ              Deconstruct x into head h and tail t.
    §?t·:⁰`(=←t   Call this function on h and t. It is interpreted as §(?t)(·:⁰)(`(=←t)).
                  § feeds h to (·:⁰) and (`(=←t)), and calls (?t) on the results.
                  The semantics of ? cause t to be fed to all three functions.
          `(=←t   First, check whether h equals the first element (←) of the tail of t.
     ?t           If it does (e.g. if h='a' and t="bacdca"), return tail of t ("acdca").
                  Otherwise (e.g. if h='b' and t="acdca"),
       · ⁰        call the anonymous function recursively on t: "aca"
        :         and prepend h to the result: "baca".
                 Final result is "a".
ε                Is it a 1-element string? Implicitly print 0 or 1.

Fikir defalarca formun bir alt değiştirmektir abaile abu artık mümkün olana kadar. Girdi dağlıktır ve eğer bu sadece tek karakterli bir dizge ile sonuçlanırsa (ki bu ne εsınanırsa). Tek tehlikeli durum, böyle bir ip olduğu zaman, abazirveye benzemiyor:

a
 b
  a
   c
  a
   d
  a
 b
a

Neyse ki, her zaman bire dönüştürebiliriz:

a
 b
a
 c
a
 d
a
 b
a

trueVakalar için tek bir karakter döndürmenin, aksi takdirde "tutarlı olmama" olduğuna inanıyorum .
Jonathan Allan,

Aslında bu onu zorlayabiliyor, zira bunun arasında bir açıklık yok (no. Op) ("dağlık ve dağlık olduğunda dağlık bir ipi döndürüyor") arasında net bir boşluk olacak.
Jonathan Allan,

@JonathanAllan Tekli karakterlere karşı diğer karakter dizileri, benim için de biraz bulanık görünüyor, özellikle de doğrulukla çok az ilişkisi olduğu için (sadece boş dize Husk'ta sahte.)
Zgarb

Evet, “herhangi bir temsil” açıkça çok liberaldir - OP'nin altını yorumladım :)
Jonathan Allan

Aslında tanımın liberal olmasını istiyorum çünkü daha yaratıcı çözümler sunuyor. İfadeleri 'tutarlı' ifadesinden 'açık' ifadesine değiştirdim, yine de bağlamsız açık olması gerektiğini de ekleyebilirim. Olduğu gibi, sonucun doğru ya da yanlış olup olmadığını girdi dizesinin ne olduğunu bilmeden anlaşılmalıdır. Yani doğru için tek bir karakter ve yanlış için hiçbir şey iyi olmaz.
Beefster


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.