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

DJMcMayhem 04/29/2017. 6 answers, 427 views
code-golf string balanced-string classification brain-flak

明日は脳梗塞が1歳に変わる! その誕生日を祝して、私たちはPPCGスタイルの誕生日パーティーを開催しています。そこでは、いくつかのユーザーが脳卒中関連の質問を投稿しています! 私たちのお祝いにお役立てください! :)


Brain-Flakは、すべてのコマンドが角括弧で、角括弧のすべてが完全に一致しなければならないと書いた難解な言語です。 私自身の定義を借りるに

  • この挑戦の目的のために、「括弧」はこれらの文字のどれかである: ()[]{}<>

  • カッコのペアは、カッコが正しい順序であり、その内部に文字がない場合、「マッチした」とみなされます。

    ()
    []{} 

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

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

    サブエレメントは、いくつかの層を深くネストすることもできます。

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

    1. すべての文字は括弧で囲まれていますが、

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

脳フラックの最初の誕生日を祝うために、今日の課題は、不均衡な括弧のセットを取って、有効な脳浮腫にするためにどのような手術が必要かを判断することです。

  • たとえば、 ((有効な脳浮遊コードではありませんが、追加した場合)) 、それは(())になります。これは完全にバランスがとれており、したがって有効な脳浮腫です。 これはこの入力をappendableます。

  • 同様に、 >}は有効ではありませんが、 {<>}を作る前に{< >}を付けることができます。これは有効です。 これは、この入力をprependableます。

  • いくつかの入力はやや複雑です。 例えば、 )][({は、単に付加または前置することで有効にすることはできませんが、 [(および追加})]前に付けることによって有効にするcanができます})]

  • 最後に、一部の入力は、追加または前置することの任意の組み合わせによって有効な脳浮遊コードにすることはできません。 たとえば、 (>を有効にすることはできません(作成前に<作成する(>) )。したがって、この入力は追加可能でもプリペインダブルでもありません。

今日の課題については、大かっこの文字列を取り、その文字列が

appendable
prependable
both
neither 

それぞれのケースでどのような値を表現するのかを選択できます。 たとえば1, 2, 3, 4 、または'a', 'p', 'b', 'n' 、または1, 'foo', 3.1415, -17などを出力するなどです。 各出力がdistinctconsistentがある限り、それは問題ありません。 ただし、どの出力がどのケースに対応するかを明確に指定する必要があります。

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

あなたは、入力が有効であるとは限りません。

次の入力はすべてprependableです:

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

これらはすべてappendableです:

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

これらはすべてbothです:

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

そして、これらはneither

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

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


この挑戦は脳梗塞では特に難しいので、最大のブラウニーは脳梗塞で書かれたすべての答えを指しています。 :)

5 Comments
1 Erik the Outgolfer 04/29/2017
maximum brownie points私は、ブラウニーポイントとクッキーを最大限提供することは、Brain-Flakにとどまらず、 any言語でany簡単ではないと思うので、ブラインドポイント以上にBrain-Flakingを促すだろうと思う。 :P
Jonathan Allan 04/29/2017
FYI:両方のテストはすべて開いた括弧で終わり、どちらのテストもすべて括弧で囲まれていません。
1 orlp 04/29/2017
私は、「両方」は間違った言葉であると主張します。 ][ような文字列は追加できません。追加することはできません。有効にすることができます。 同様に、それは前置きできません。 それは...「挿入可能」です! 文字列に挿入すると、有効なBrainflak全体が作成されます。
Funky Computer Man 04/30/2017
既にバランスの取れた文字列はどちらか、あるいはどちらですか?
DJMcMayhem 04/30/2017
@wheatwizardバランスの取れた文字列は入力として与えられません。 You can assume that the input will never be valid brain-flak or empty.

6 Answers


Jonathan Allan 04/29/2017.

ゼリー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は[]返します)。

Try it online! - テストスイート( [2,0] 20であり、anyが含まれている行を無視する)


Cows quack 04/29/2017.

網膜41 40 41バイト

1 byte saved thanks to @MartinEnder

+`\(\)|\[]|{}|<>[]})>]+
1
\W+
0
...+
01 

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

  • プリペアブルは1
  • 追加可能は0
  • 両方とも10
  • なしは01

編集

  • @Neilに気づいたバグを修正するために1バイトを得ました
5 comments
Martin Ender♦ 04/29/2017
[]})>]は1バイトを保存します。
Cows quack 04/29/2017
@MartinEnderああ、キャラクターセットは空ではありませんので、ありがとう!
Neil 04/29/2017
これは、例えば、 (][)ように、付加不可能な入力に対しては機能しません。 私はそれを1バイトのコストで固定することができると思います101...+変更してください。
Cows quack 04/29/2017
@Neilバグに気付いてくれてありがとう、 Bothこのようなケースがあるのだろうか?
Neil 04/29/2017
いいえ、私は10Bothにとって唯一の有効な組み合わせだと思います。

Neil 04/29/2017.

バッチ、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% 

出力][ for append ][ for both ][ for []のいずれにも該当しません。


Ørjan Johansen 04/29/2017.

ハスケル115 108バイト

編集:

  • -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 

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

like (""#) "))"使用してください。 結果は次のとおりです。

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

使い方

  • 完全な不一致が存在する場合には残りの部分の結果の2番目の要素を削除することにより、前に付ける必要があることを示すように、出力エンコーディングが選択されます。
  • s#dは、期待される閉じ括弧s文字列/スタックsを与えられた残りの文字列s#d解析します。
    • s#""行は、文字列の終わりまですべての閉じ括弧が見つかったかどうかをチェックします。そうでなければ、追加が必要です。
    • s#(c:d)の最初の枝は、次の文字cが開始括弧であるかどうかをチェックし、そうであれば、再帰のために対応する終了括弧をスタックに残します。
    • それ以外の場合、スタックに閉じ括弧が含まれている場合、2番目のブランチは、先頭の文字が次の文字と一致するかどうかをチェックし、一致しない場合は、再帰の代わりに空のリストを返します。
    • 最後に、最後のブランチではスタックは空です。再帰する前に、前に置くことで固定されている可能性のある閉じ括弧があります。

ETHproductions 04/29/2017.

Japt 、44バイト

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

プリフェッチ可能な場合は1 、追加可能な場合は3 、両方の場合は13 、いずれもない場合は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 

Jörg Hülsermann 06/04/2017.

PHP、137バイト

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

1 => appendable、

2 =>プリペア可能、

12 =>両方、

0 =>どちらも

テストケース

2 comments
Cyoce 06/04/2017
"各出力が明確でconsistent,がある限りconsistent,それは問題ありません"。 これは、どちらの値に対しても一貫した値を持たないように見えます。
Jörg Hülsermann 06/04/2017
@Cyoce固定されました

Related questions

Hot questions

Language

Popular Tags