1

Тема: задача №19 з codeabbey

Задача - https://www.codeabbey.com/index/task_vi … g-brackets
Мій код:

def chek(s):
    k = 0
    for c in s:
        if c == '(' or '[' or '{' or '<':
            k += 1
            
        elif c == ')' or ']' or '}' or '>':
            k -= 1
            if k < 0:
                return 0
    if k == 0: return 1
    else: return 0

out = []
n = int(input())
for i in range():
    out.append(chek(list(input())))
print(" ".join(out))

Треба доробити код, щоб при пересіканні дужок вибивало помилку.
Підскажіть як це зробити будь ласка.
Ps. І всіх з Новим Роком  ;)

2

Re: задача №19 з codeabbey

колись я рішив це так:

Прихований текст
s='''<{ }(({*} )<a>-[< (x)[<^>y]>%]<x>)[< >+]<v[ ]>>
[a]<*[{z}{b}-]>[w]<<-( {x})>{b(z)} [<e><+>^]>(<x{e}(e)>)[e]{v}
[t](({g}(z)[f]g)[u](y)[z )<e>(c)<g(/)>(c)
{[^]{b{( )%}}}((<v(g)>c<g>)+[{<x>[/]<^>*<{v{/}}z>}e[b]{e}{ }](v))
</{t{*[a]}}<->><<<b>t{d}>{g}>{<v>x}{d}(%<{z(t<x>){g}}%><*>)
[[{d}/]]([v]e[/(/)])[((h[t])b) ]< h>{(x[v]) }+>
(f)<g><[{[(%)+]{b}{[h[y]]e}y}a](a)>( ){ }[[+]/]
({x})(<<w>g<y>{ }>h(/)[<x>b[d]])[ ][ [v]]
<x><d>[%{ }[/]]{ }{t (a<[z](a)(^)u{*{*}}{y<d>}>(w))[v](v)()
{<<z><+{ }>->{%}[[*]{(f)a(f)}v{{h}h}][{g[v]}<%>z[x]][+][{a}w]}
(c){[g[*]][ ]%{^}}<<z<(<c>(/)[w] )h[ (g)]>>(h)>
<><(*)><[a]<g><t>e>{w}/( )]^(e)>(a)(g[c](^)(/))[(y)-]<^( <->)[
>(y(*(<f>w)<->)<b<%>[<d>)](f{(u<g>)^})[f]
<[t]< >( <^{(^)<w>f<g><{{ {x}<<e>{/} >}e}[-] >}>(z))>
{}(u){<^>{u z(b{e})}{t{h[x]<(e)(*)^>}(v)}
<[f]->{d}]{^(x)}(+)<<w(b)>b<{[b(e}+>>-<w>)[e]( )[^]{}
( )[t]([u][w]z{ })< (*)<a>>{{[-{v} {y}e}}
{[y]v[+]}<c{h}(c)> <*>< ><d(w)>(^)[+](f)}( {b(a)})'''

def OC(si):
    b_round='()'
    b_square='[]'
    b_curly='{}'
    b_angle='<>'
    stack=[1]
    brackets=b_round+b_square+b_curly+b_angle
    for i in si:
        if i in brackets[1::2] and len(stack)!=0: # close 
            #print('try close' , i, end='' )
            prev=stack.pop()
            if prev!=brackets[brackets.index(i)-1]:
                #print ("   not closed!")
                break
        elif i in brackets[0::2]: # open
            #print('open', i, end='')
            stack.append(i)
    if stack!=[1]:
        print( 0, end=' ' )
    else:
        print(1, end=' ')
    
for si in s.split('\n'):
    OC(si)
Подякували: Eff1c, leofun012

3

Re: задача №19 з codeabbey

Дужкові вирази слід розбирати стеком. Відкривається - кладемо в стек, закривається - якщо зверху в стеку така сама, то викидаємо її зі стеку, інакше помилка.
А вираз c == ')' or ']' or '}' or '>' працює зовсім не так, як ви очікуєте.

Подякували: Eff1c, leofun012

4 Востаннє редагувалося P.Y. (02.01.2019 02:18:52)

Re: задача №19 з codeabbey

А вираз c == ')' or ']' or '}' or '>' працює зовсім не так, як ви очікуєте.

Щоб робило те, що мається на увазі, треба так: c in ')]}>'
Або так: c in  { ')', ']',  '}', '>' }

Подякували: Eff1c, leofun01, /KIT\3

5

Re: задача №19 з codeabbey

Чи хоча б c==')' or c==']' or c=='}' or c=='>'.
Але загальноприйнятий спосіб - перший, вказаний P.Y.

Подякували: Eff1c1