変装した括弧はありますか?


12

誰かが文字列を与えてくれましたが、すべての括弧のような文字が通常の文字に変更されており、どれがどれだけあるか、さらには何個あるかさえわかりません。私たちが知っているのは、L1,L2,L3,...,LN異なる種類のR1,R2,R3,...,RN左角かっこであり、対応する種類の右角かっこであり、すべてが異なる場合(2N個の異なる角かっこ文字)、それが次のいずれかである場合に文字列が有効になることです(+は通常の文字列連結):

  • L1+X+R1L2+X+R2、...、LN+X+RNここで、X有効な文字列であり、

  • X+Y、どこXYは有効な文字列、

  • ブラケット文字ではない任意の単一文字。

  • 空の文字列

かっこを変更する前に有効な文字列から始めたことがわかっており、文字列に既に存在する文字には変更していません。各ブラケットにも少なくとも1つのペアが存在しました。どの文字が元々左右のブラケットペアであったかを再構築できますか(特定の条件を見つけて、LiそれにRi従ってください)?

大括弧であった文字のペアを出力します。たとえば、(){}[]実際にブラケット文字だった場合(){}[]{}[]()または[](){}、などを出力する可能性があります。文字列に対してこれを行う方法は複数ある場合があり、より多くのペアでブラケットが割り当てられない方法を1つ返すだけです(例を参照)。出力文字列は常に偶数の長さであることに注意してください。

例:

abcc- c2回出現して他の文字がないので、ブラケットすることはできませんが、abあなたは正確にそう、出力しまうブラケットペアすることができab

fffff -最大で1文字の文字列には角括弧を使用できないため、空の文字列を返すか、何も出力しません。

aedbedebdcecdec -1 a、2 bs、3 cs、4 ds、および5 esがあるため、この文字列に角括弧を含めることはできません。したがって、同じ文字数で2つの文字が発生することはありません。

abcd-可能な割り当てがあるabcdabcdcdabadbcbcadacadbcおよびbd、(だけでなく、それらのすべてが持っている空の割り当て、)しかし、あなたは、あなたが返さなければならないので、最長の割り当てのいずれかを返す必要がありabcdcdabadbc、またはbcad

aabbccabc-これらは両方持っているabacと、bc有効なペアとして。これらのペアのいずれかを返す必要がありますが、どちらでもかまいません。

abbac-aとbの文字カウントは同じですが、実際には機能しません。これらの1つは、他のすべてのオカレンスの左右の両方で発生するためです。何も返しません。

aabcdb- cdおよびabは正確な2つのブラケットペアであるため、cdabまたはのいずれかを出力しますabcd

abcdacbd-唯一のペアを一度に実現することができますが、abacbdcd、とadあなたは、可能なペアのすべてを返すことができています。どのペアを選択しても、その中に他の単一のキャラクターがいるインスタンスがあり、他のペアを禁止します。ただし、の場合を除きad、他のペアbccbは単独では不可能であり、不可能ですでad

これはコードゴルフであるため、バイト単位の最短コードが優先されます。ご使用の言語で可能な場合、入力はSTDINからのものです。それが不可能な場合は、回答に入力方法を記載してください。


1
入力のabcd場合、出力adbcも許容されますよね?
パトリックロバーツ

はい、例に追加しました。
摩擦摩擦メロン

回答:


4

ルビー、373バイト

i=gets.chomp
b=[*(i.chars.group_by{|x|x}.group_by{|x,y|y.size}.map{|x|s=x[1].size
x[1][0...s-s%2].map{|x|x[0]}*''}*'').chars.each_slice(2)]
puts [*[*b.size.downto(1).map{|n|b.combination(n).map{|t|[t*'',(h=Hash[t]
s=[]
o=1
i.each_char{|c|s.push(c)if h.keys.include?c
(o=false if s.empty?||!h[s.pop].eql?(c))if h.values.include?c}
o ?s.empty?: o)]}}.find{|x|x[0][1]}][0]][0]

ここでは、スタックパーサーのゴルフバージョンを使用します

おそらくさらに簡略化できますが、私の脳がこれ以上処理できるとは思いません。

すべてのテストケース: http : //ideone.com/gcqDkK

空白あり: http : //ideone.com/pLrsHg

Ungolfed(ほとんど): http ://ideone.com/oM5gKX

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