固定牙套等


15

你的任务,你应该选择接受它,是要最低括号,括号,括号和数量做一个给定的字符串(只包含括号,括号,括号和)有正确的括号匹配。必须通过使成对的花括号之间具有最大距离来断开添加的符号的关系。您必须仅返回一个符合这两个规则的正确答案;如果存在进一步的关系,则可以按照您认为合适的任何方式断开它们。

例子:

input      output
                          // Empty String is a legal input
[          []             // Boring example
[()]       [()]           // Do nothing if there's nothing to be done
({{        ({{}})         // NOT (){}{} (0 + 0 + 0). Maximum distance is 4 + 2 + 0, ({{}})
[([{])]}   {[([{}])]}     // NOT [([])]{[([])]} or similar

您可以编写程序或函数,通过STDIN接收输入作为函数的字符串参数,然后将输出作为字符串返回或将其打印到STDOUT(或最接近的输出)。您可以选择在输出中包含单个尾随换行符。

您可以假定输入字符串仅包含以下6个字符(或缺少6个字符):([](){}不需要支持<>

这是,最短的程序获胜。当然,标准漏洞是被禁止的


您是要在实际标题的正下方重复标题,还是在实际标签的正上方重复标签?仅询问是否复制了从沙盒粘贴而忘记删除它们。
Rainbolt 2015年

@Rainbolt前者没有(沙盒),后者是
durron597

1
@AlexA。我可以看到它们在微小的方面有何不同,但我认为它们过于相似,因此不能视为单独的问题。
NinjaBearMonkey 2015年

很公平。它当然不是一成不变的,如果其他人决定不关闭它,我也不会追求将其关闭。
NinjaBearMonkey 2015年

我认为这足够不同。投票重新开放。
nderscore 2015年

Answers:


1

Python 2-198

我希望能将一些理解力降低一些,但现在没有太多时间去真正地测试不同的做事方式。

s="()[]{}";f=s.find
def F(S):
 r=m=""
 for c in S:
    i=f(c)^1
    if i%2:m=c+m;r+=c
    else:
     for d in m:
        if d==s[i]:break
        r+=s[f(d)^1]
     else:r=s[i]+r+c
     m=m[1:]
 for c in m:r+=s[f(c)^1]
 return r

OP没有包含类似的示例{[([{}])]}{[(带有相邻组),但是无论是否需要此功能,输出的都是正确的{[([{}])]}{[]}


198个字节如何?
扎卡里

@ZacharyT,\t在堆栈溢出时,tabs()的格式设置为4个空格,但实际上是交替使用tabs和空格(您可以在Python 2中对缩进级别执行此操作,而不是在3中执行此操作),因此第一级是[space]第二个,[tab]第三级[tab][space][tab][tab]。在这里输入带有空格的代码使我从这里得到227 mothereff.in/byte-counter,我计算了10个制表符,因此227-(3 * 10)=197。呵呵,我想我实际上在返回时多了1发布了这个。
KSab '16

ANG!那真是个好戏。(在行尾输入)。您可以结合使用底部的for循环和return语句return r+[s[f(c)^1]for c in m]来保存字节。
扎卡里

1

哈斯克尔513

功能h。先前版本没有为"({{)["和提供正确的答案"({{)}}"

import Control.Monad

m '('=')'
m '['=']'
m '{'='}'
m ')'='('
m ']'='['
m '}'='{'

data B=B Char[B]|N[B]|Z B Char[B]
instance Eq B where(==)a b=q a==q b
instance Ord B where(<=)a b=q a<=q b

w(B o s)=o:(s>>=w)++[m o]
v(N k)=k>>=w
n(B _ k)=(sum$n<$>k)+1
q(N k)=sum$n<$>k

u(Z(Z g pc pk) c k)=Z g pc(pk++[B c k])
u(Z(N pk) c k)=N(pk++[B c k])
t(N k)=N k
t z=t$u z

f z c|elem c "([{"=[Z z c[]]
f z@(Z p o k) c|m c==o=[u z]|2>1=(u$Z(Z p o [])(m c)k):f(u z)c
f (N k)c=[Z(N[])(m c)k]

h s=v.minimum$t<$>foldM f(N [])s
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.