#!/usr/bin/python3

import sys

filename="p1_71.txt"
if len(sys.argv) > 1:
    filename=sys.argv[1]

def parse_sum(oursum):
    parts = oursum.split()
    new_parts=[]

    for part in parts:
        if part[0]=="(":
            for index,c in enumerate(part):
                if c=="(":
                    new_parts.append("(")
                else:
                    new_parts.extend(parse_sum(part[index:]))
                    break
        elif part[-1]==")":
            got_number=False
            for index,c in enumerate(part):
                if c==")":
                    if not got_number:
                        new_parts.extend(parse_sum(part[0:index]))
                        got_number=True
                    new_parts.append(c)
        elif part in ['+','*']:
            new_parts.append(part)
        else:
            new_parts.append(int(part))
    return new_parts

def do_sum(parts):
    cur_total=0
    next_oper="+"
    bracketed=[]
    in_brackets=0
    new_parts=[]

    # first do all bracketed parts
    for part in parts:
        if in_brackets > 0 and part != ")" and part != "(":
            bracketed.append(part)
            continue
        if in_brackets > 0 and part == ")":
            in_brackets-=1
            bracketed.append(part)
            if in_brackets == 0:
                part=do_sum(bracketed[1:-1])
                bracketed.clear()
            else:
                continue
        if part == "(":
            in_brackets+=1
            bracketed.append(part)
            continue
        new_parts.append(part)

    while "+" in new_parts:
        plus_index = new_parts.index("+")
        left=new_parts[plus_index-1]
        right=new_parts[plus_index+1]
        new_new_parts=new_parts[:plus_index-1]
        new_new_parts.append(left+right)
        new_new_parts.extend(new_parts[plus_index+2:])
        new_parts=new_new_parts

    cur_total=new_parts[0]

    # now we should just be able to go through new_parts left to right
    for part in new_parts[1:]:
        if part == '*':
            continue
        else:
            cur_total*=int(part)

    return cur_total

total=0
total2=0
for line in [line.rstrip() for line in open(filename, "r")]:
    answer=do_sum(parse_sum(line))
    total+=answer

print("Part 2 Total:", total)
