<filename>brackers weight.py
"""
    Условие задачи

    Посчитать 'вес' последовательности скобок по првилу:
    () = 1, ()() = ()+(), (А) = 2*А, где А - последовательность скобок
    Примеры:
    ()()() = 3
    (()) = 2
    ()(()())(()(()())) = 1+2*(1+1)+2*(1+2*(1+1)) = 15

    Предполагается, что последовательность скобок корректная, т.е. для каждой открывающей есть своя закрыввющая
"""


def weight(st, mult=1):
    if st == '':
        return mult // 2
    else:
        mult *= 2
        a = split_str(st)
        sum = 0
        for i in a:
            sum += weight(i[1:-1], mult)
        return sum


def split_str(st):
    buf = 0
    arr = []
    s = ''
    for i in range(0, len(st)):
        char = st[i]
        if char == '(':
            buf += 1
            s += char
        else:
            buf -= 1
            s += char
            if buf == 0:
                arr.append(s)
                s = ''
    return arr


st = '()(()())(()(()()))'

print(weight(st))
<filename>brackers weight.py
"""
    Условие задачи

    Посчитать 'вес' последовательности скобок по првилу:
    () = 1, ()() = ()+(), (А) = 2*А, где А - последовательность скобок
    Примеры:
    ()()() = 3
    (()) = 2
    ()(()())(()(()())) = 1+2*(1+1)+2*(1+2*(1+1)) = 15

    Предполагается, что последовательность скобок корректная, т.е. для каждой открывающей есть своя закрыввющая
"""


def weight(st, mult=1):
    if st == '':
        return mult // 2
    else:
        mult *= 2
        a = split_str(st)
        sum = 0
        for i in a:
            sum += weight(i[1:-1], mult)
        return sum


def split_str(st):
    buf = 0
    arr = []
    s = ''
    for i in range(0, len(st)):
        char = st[i]
        if char == '(':
            buf += 1
            s += char
        else:
            buf -= 1
            s += char
            if buf == 0:
                arr.append(s)
                s = ''
    return arr


st = '()(()())(()(()()))'

print(weight(st))
Условие задачи
 
     Посчитать 'вес' последовательности скобок по првилу:
     () = 1, ()() = ()+(), (А) = 2*А, где А - последовательность скобок
     Примеры:
     ()()() = 3
     (()) = 2
     ()(()())(()(()())) = 1+2*(1+1)+2*(1+2*(1+1)) = 15
 
     Предполагается, что последовательность скобок корректная, т.е. для каждой открывающей есть своя закрыввющая