追加または前置?依存する


23

Brain-flakは明日1歳になります!誕生日を記念して、PPCGスタイルのバースデーパーティーを開催します。このパーティーでは、数人のユーザーがブレインフラック関連の質問を投稿します。祝福にご協力ください!:)


Brain-flakは私が書いた難解な言語で、すべてのコマンドが括弧であり、すべての括弧が完全に一致する必要があります。私自身の定義を借りるに

  • この課題のために、「括弧」は次の文字のいずれかです()[]{}<>

  • 次のように、開始ブラケットと終了ブラケットが正しい順序であり、中に文字がない場合、一対のブラケットは「一致」とみなされます。

    ()
    []{}
    

    または、その中のすべてのサブ要素も一致する場合。

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

    サブエレメントは、いくつかのレイヤーの深さにネストすることもできます。

    [(){<><>[()]}<>()]
    <[{((()))}]>
    
  • 次の場合にのみ、文字列は「完全一致」と見なされます。

    1. すべての文字は角かっこです。

    2. ブラケットの各ペアには、正しい開閉ブラケットが正しい順序であります

Brain-Flakの1歳の誕生日を祝うために、今日の課題は、不均衡なブラケットセットを取得し、それを有効なBrain-Flakにするために必要な操作の種類を決定することです。

  • たとえば、((は有効なbrain-flakコードではありませんが、これに追加))すると、になり(())、完全にバランスが取れているため、有効なbrain-flakです。これにより、この入力が追加可能になります。

  • 同様に、>}は有効ではありませんが{<、makeに追加して有効にすることができ{<>}ます。これにより、この入力がprependableになります。

  • 一部の入力はやや複雑です。たとえば、)][({追加または追加するだけでは有効にできません。しかし、それはできる付加することで有効となること[(と追記します})]。したがって、この入力はprependableappendableの両方です

  • 最後に、一部の入力は、アペンドまたはプリペンドの任意の組み合わせによって、有効なブレインフラックコードにすることはできません。たとえば、(>有効にすることはできません。(前置を<作成し<(>、及び添付の)作成(>)、有効でどちらも)ため、この入力は、追記又はprependableもありません。

今日の課題では、括弧の文字列を取り、その文字列が

appendable
prependable
both
neither

各ケースを表すために使用する値を選択できます。たとえば、、、、1, 2, 3, 4またはを出力する'a', 'p', 'b', 'n'1, 'foo', 3.1415, -17、何でも問題ありません。各出力が明確一貫している限り、それは問題ありません。あなたはしなければならないが、明らかに出力対応の場合に指定します。

最も便利な形式でこの値を返すことができます(たとえば、関数から戻る、STDOUTに出力する、引数を変更する、ファイルに書き込むなど)。

入力が有効なブレインフラークまたは空になることはないと想定できます。

次の入力はすべて付加可能です:

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

これらはすべて追加可能です:

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

これらはすべて両方です:

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

そして、これらはすべてではありません

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

いつものように、これはなので、標準の抜け穴が適用され、バイト単位の最短回答が勝ちます!


この課題は、ブレインフラックでは特に難しいため、ブラウニーの最大数は、ブレインフラックで記述されたすべての回答を指します。:)


1
maximum brownie points最大のブラウニーポイントとCookieを提供することは、Brain-Flakはもちろんのこと、どんな言語で些細なことではないと思うので、代わりにBrainie-Flakingをブラウニーポイント以上に奨励すると思います。:P
エリックアウトゴルファー

参考までに、両方のテストはすべて開き括弧で終わり、どちらのテストも閉じ括弧で終わります。
ジョナサンアラン

2
私は、「両方」が間違った用語であると主張します。以下のような文字列が][あるではないあなたが追加することができ、何もそれを有効にすることはできないとして、追加可能。同様に、先頭に追加できません。それは...「挿入可能」です!文字列に挿入して、有効なBrainflak全体を作成できます。
-orlp

すでにバランスの取れた文字列は両方ですか?
小麦ウィザード

@wheatwizardバランスの取れた文字列は、入力として提供されません。You can assume that the input will never be valid brain-flak or empty.
DJMcMayhem

回答:


6

ゼリー33 32 37 35 34 バイト

バグが見つかり、恐ろしい修正+5バイト、より良い修正-2バイト、ここで見 Adnanのトリックを使用して、さらに-1

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

戻り値:

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

(無効な入力は誤った結果を返しますが、有効なBrain-flackはを返します[]。)

オンラインでお試しください!-テストスイート(mushed表現を印刷する20ため[2,0]、forを含み、を含む行を無視します-)。


5

網膜41 40 41バイト

@MartinEnderのおかげで1バイト節約

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

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

オンラインでお試しください!

  • 接頭辞は 1
  • 追加可能 0
  • 両方とも 10
  • なしは 01

編集

  • @Neilが気づいたバグを修正するために1バイト獲得

[]})>]バイトを保存します。
マーティンエンダー

@MartinEnderああ、それは文字セットを空にできないからです、ありがとう!
KritixiのLithos

これは、たとえば、すべての追加不可能な入力では機能しません(][)。に変更101することで1バイトのコストで修正できると思います...+
ニール

このような例がある場合は、バグに気付いてくれてありがとう@Neil、私は不思議Bothにも
KritixiのLithos

いいえ、10の唯一の有効な組み合わせですBoth
ニール

3

バッチ、337バイト

@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%

]プリペンド、[アペンド、][両方、両方とも出力[]


3

Haskell115108バイト

編集:

  • -7バイト:より多くのガードを使用します。
(""#)
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

オンラインでお試しください!

のように使用し(""#) "))"ます。結果は次のとおりです。

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

使い方

  • 出力エンコードは、残りの結果の2番目の要素がある場合はその結果の2番目の要素をドロップすることで先頭に追加する必要があることを通知するように選択されます。
  • s#d予想される閉じ括弧のd文字列/スタックsを指定して、残りの文字列を解析します。
    • このs#""行は、すべての閉じ括弧が文字列の終わりまでに見つかったかどうかを確認します。見つかっていない場合は、追加が必要です。
    • 最初のブランチはs#(c:d)、次の文字cが左角かっこであるかどうかをチェックし、右角かっこである場合、対応する右角かっこを再帰のためにスタックに残します。
    • それ以外の場合、スタックに閉じ角かっこが含まれている場合、2番目のブランチは先頭の文字が次の文字と一致するかどうかをチェックし、一致しない場合は再帰ではなく空のリストを返します。
    • 最後に、最後のブランチではスタックが空であり、再帰する前に先頭に追加することで修正できる不一致の閉じ括弧があります。

2

Japt、44バイト

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

1prependable、3appendable、13both、およびbothの出力31

オンラインでテストしてください!または、すべてのテストケースを一度に検証します。

使い方

 =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バイト

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

1 =>追加可能、

2 =>追加可能、

12 =>両方、

0 =>どちらでもない

テストケース


「各出力が明確で一貫している限りそれは問題ありません」。これは、どちらにも一貫した値を持たないようです。
チョイス

@Cyoce現在では固定された
イェルクHülsermann
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.