Ekler veya Bağımlı mı? Bağlıdır


23

Beyin flak yarın bir yaşında! Doğum gününün şerefine, birkaç kullanıcının beyin-flakla ilgili sorular gönderdiği PPCG tarzı bir doğum günü partisi veriyoruz! Kutlamamıza yardım et! :)


Brain-flak, tüm komutların parantez olduğu ve tüm parantezlerin tam olarak eşleşmesi gereken yerde yazdığım ezoterik bir dildir. Kendi tanımımı ödünç almak için :

  • Bu meydan okuma amacıyla bir "parantez" bu karakterlerin herhangi biridir: ()[]{}<>.

  • Açma ve kapama parantezleri doğru sıradaysa ve içlerinde karakterleri yoksa, bir parantez bir çift parantez olarak kabul edilir.

    ()
    []{}
    

    Veya içindeki her alt öğe de eşleşirse.

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

    Alt öğeler ayrıca birkaç kat derinlikte yuvalanabilir.

    [(){<><>[()]}<>()]
    <[{((()))}]>
    
  • Bir dize "Tam olarak eşleşen" olarak kabul edilir ve yalnızca:

    1. Her karakter bir dirsek

    2. Her bir braket çifti, doğru açma ve kapama braketine ve doğru sıraya sahiptir.

Brain-Flak'ın ilk doğum gününün kutlanmasında bugünün zorluğu, dengesiz bir parantez seti almak ve onu geçerli bir beyin-lafı yapmak için ne tür operasyonların gerekli olduğunu belirlemek.

  • Örneğin, ((geçerli beyin kurşun geçirmez kod değil, ama biz eklemek eğer ))kendisine, bu olur (()), tamamen dengeli ve dolayısıyla geçerli beyin kurşun geçirmez olan. Yani bu giriş yapar appendable .

  • Benzer şekilde, >}geçerli değil, ancak bunu geçerli {<kılmak için hazırlayabiliriz {<>}. Bu girdiyi ön plana çıkarır .

  • Bazı girdiler biraz daha karmaşıktır. Örneğin, )][({yalnızca ekleyerek veya hazırlayarak geçerli olamaz. Ama olabilir prepending tarafından geçerli yapılabilir [(ve ekleme })]. Bu nedenle, bu girdi hem prependable ve appendable .

  • Son olarak, bazı girdiler ekleme veya hazırlamanın herhangi bir kombinasyonu ile asla geçerli bir beyin-laf kodu yapılamaz. Örneğin, (>hiçbir zaman geçerli olamaz. (Prepending <oluşturur <(>ve ek ilavesi )oluşturur (>)Bu nedenle, bu giriş ne appendable veya prependable olduğu geçerlidir ikisi de).

Günümüzün mücadelesi için, bir dizi parantez alan ve dizenin olup olmadığını belirleyen bir program veya işlev yazmalısınız.

appendable
prependable
both
neither

Her bir vaka için hangi değerleri temsil ettiğinizi seçebilirsiniz. Örneğin, çıktı almak 1, 2, 3, 4, veya 'a', 'p', 'b', 'n', veya 1, 'foo', 3.1415, -17veya her neyse iyidir. Her çıktı farklı ve tutarlı olduğu sürece , sorun değil. Sen gerekir ancak, açıkça çıkış karşılık gelir vaka için belirtin.

Hangi formatta en uygunsa bu değeri geri döndürebilirsiniz (örneğin, bir işlevden döndürme, STDOUT'a yazdırma, argümanları değiştirme, bir dosyaya yazma, vb.).

Girişin hiçbir zaman geçerli beyin yongası veya boş olmayacağını varsayabilirsiniz.

Örnekler

Aşağıdaki girdilerin tümü önceden ödenebilir :

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

Bunların hepsi eklenebilir :

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

Bunların ikisi de :

))((
>()[(()){
>{

Ve bunların hepsi de :

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

Her zaman olduğu gibi, bu , bu yüzden standart boşluklar geçerli ve bayt cinsinden en kısa cevap kazanıyor!


Bu zorluk, beyin-flakta özellikle zordur, bu nedenle maksimum kek , beyin-flakta yazılmış herhangi bir cevabı işaret eder. :)


1
maximum brownie pointsBence maksimum browni puanları ve çerezleri teklif etmenin Brain-Flaking'i bu meydan okumayı sadece browni puanlarından daha fazla teşvik edeceğini düşünüyorum, çünkü Brain-Flak'ı bir dilde kullanmanın hiç de önemsiz olmadığını düşünüyorum . : P
Outgolfer Erik

Bilginize: Her iki test de açık parantez ile bitmiştir, her iki test de parantez ile bitmemektedir.
Jonathan Allan

2
İkisinin de yanlış terim olduğunu iddia ediyorum. Gibi bir dize ][olduğu değil sen ekleyebilirsiniz şey de geçerli kılmak gibi, appendable. Benzer şekilde, bu önceden tahmin edilemez. Bu ... 'takılabilir'! Geçerli Brainflak'ın tamamını yapmak için onu bir dizgeye ekleyebilirsiniz.
orlp

Zaten dengeli dizeler ikisi de değil mi?
Buğday Sihirbazı

@ buğday sihirbazı Dengeli dizeler girdi olarak verilmeyecek. You can assume that the input will never be valid brain-flak or empty.
DJMcMayhem

Yanıtlar:


6

Jelly , 33 32 37 35 34 bayt

böcek bulundu, korkunç düzeltme +5 bayt, daha iyi düzeltme - 2 bayt, Adnan'ın bir numarasını kullanarak burada -1 tane daha gördüm .

“({[<“)}]>”Z;@WœṣF¥/µÐLO‘&2µIṀ>0ȯQ

Dönüş değerleri:

prepends [2]
 appends [0]
    both [2,0]
 neither 1

(Geçersiz girdi, geçerli Brain-flack olsa da geri döndürülse de sahte sonuçlar döndürür [].)

Çevrimiçi deneyin! - Bir test paketi (baskılar, yani temsillerini mushed20için[2,0]ve zaman göz ardı edilen çizgiler herhangi birini içeren-).


5

Retina , 41 40 41 bayt

@MartinEnder sayesinde 1 bayt kurtarıldı

+`\(\)|\[]|{}|<>

[]})>]+
1
\W+
0
...+
01

Çevrimiçi deneyin!

  • Öngörülebilir 1
  • Eklenebilir 0
  • İkiside 10
  • Yok 01

Düzenlemeler

  • @Neil tarafından fark edilen hatayı düzeltmek için 1 bayt kazanıldı

[]})>]bir bayt kaydeder.
Martin Ender

@MartinEnder Ah, çünkü karakter kümeleri boş olamaz, teşekkürler!
Kritixi Lithos,

Bu, örneğin bütün eksiz girdiler için işe yaramaz (][). Ben değiştirerek bir byte bir maliyetle sabitlenebilir düşünmek 101için ...+.
Neil

Böyle durumlar varsa hata fark için teşekkürler @Neil acaba Bothyanı
Kritixi Lithos

Hayır, bence 10geçerli olan tek kombinasyon Both.
Neil

3

Toplu iş, 337 bayt

@echo off
set/ps=
:g
set "t=%s:<>=%
set "t=%t:()=%
set "t=%t:[]=%
set "t=%t:{}=%
if not "%t%"=="%s%" set "s=%t%"&goto g
set "s=%s:<=[%
set s=%s:>=]%
set s=%s:(=[%
set s=%s:)=]%
set s=%s:{=[%
set s=%s:}=]%
:l
if %s:~,2%==]] set s=%s:~1%&goto l
:r
if %s:~-2%==[[ set s=%s:~,-1%&goto l
if not _%s:~2%==_ set s=[]
echo %s%

Hazırlık ]için, her ikisi için de, son eki [için çıktılar .][[]


3

Haskell , 115 108 bayt

DÜZENLE:

  • -7 bayt: Daha fazla koruma kullanın.
(""#)
s#""=[s>"",1>0]
s#(c:d)|Just a<-lookup c$zip"([{<"")]}>"=(a:s)#d|(a:b)<-s=[1|a==c]>>b#d|0<1=take 1$s#d

Çevrimiçi deneyin!

Gibi kullanın (""#) "))". Sonuçlar şöyle verilmiştir:

[False,True]: needs nothing
[False]: prependable
[True,True]: appendable
[True]: both
[]: neither

Nasıl çalışır

  • Çıktı kodlaması, hazırlama ihtiyacının geri kalanın sonucunun ikinci elemanını bırakarak işaretleneceği şekilde seçildi, varsa, tamamıyla uyuşmazlığın hepsinin bırakılmasıyla işaretlenmesi.
  • s#dBeklenen kapanış parantezlerinin dbir dizesi / yığını verilen kalan bir dizgeyi ayrıştırır s.
    • s#""Hat kontrolleri tüm kapanış parantez aksi gereklidir ekleyerek, dizenin sonuna kadar bulunmuştur eğer.
    • İlk dal , bir s#(c:d)sonraki karakterin cbir açılış braketi olup olmadığını kontrol eder ve eğer öyleyse, karşılık gelen kapanış braketi özyineleme için yığında bırakır.
    • Aksi halde, yığın kapanış parantezleri içeriyorsa, ikinci dal en üst olanın bir sonraki karakterle eşleşip eşleşmediğini kontrol eder ve eğer değilse, özyineleme yerine boş bir liste döndürür.
    • Son olarak, son dalda yığın boştur ve tekrarlamadan önce hazırlayarak sabitlenebilecek eşsiz bir kapanış braketimiz vardır.

2

Japt , 44 bayt

=Ue"%(%)|%[]|\{}|<>" ®c -1&2|1})f31 |UfD |Ug

1Önceden üretilebilir, 3eklenebilir, 13her ikisi için de ikisi için de çıktılar 31.

Çevrimiçi test edin! veya Tüm test durumlarını bir kerede doğrulayın.

Nasıl çalışır

 =Ue"%(%)|%[]|\{}|<>" ®   c -1&2|1})f31 |UfD |Ug
U=Ue"%(%)|%[]|\{}|<>" mZ{Zc -1&2|1})f31 |UfD |Ug

                    // "(((()()())))}"  "([({}{})"    ">()[(()){"  "((((<>()]"
Ue"%(%)|%[]|\{}|<>" // Recursively remove all instances of "()", "[]", "{}", and "<>" from U.
                    // "}"              "(["          ">[{"        "((((]"
mZ{Zc -1&2|1}       // Replace each char Z with (Z.charCodeAt() - 1) & 2 | 1.
                    // "1"              "33"          "133"        "33331"
U=                  // Save the result in U.
f31 |UfD |Ug        // Match all instances of "31" and "13" (D = 13) and bitwise-OR the results with the first char.
                    // null|null|1      null|null|3   null|13|1    31|null|3
                    // 1                3             13           31
                    // Implicit: output result of last expression

2

PHP, 137 Bayt

for($c=1;$c;)$a=preg_replace("#<>|\(\)|\[\]|\{\}#","",$a=&$argn,-1,$c);echo($a=preg_replace(["#[]})>]+#","#[[{(<]+#"],[1,2],$a))<13?$a:0;

1 => eklenebilir

2 => önceden hesaplanabilir,

12 =>, her ikisi de

0 => hiçbiri

testcases


“Her çıktı farklı ve tutarlı olduğu sürece , sorun değil”. Bu ikisi için de tutarlı bir değere sahip görünmüyor.
Cyoce

@Cyoce Şimdi Sabit
Jörg Hülsermann
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.