python(day18): update

This commit is contained in:
Sijmen 2020-12-22 16:15:18 +01:00
parent 46dff81bad
commit 35d4242541
Signed by: vijfhoek
GPG Key ID: DAF7821E067D9C48
1 changed files with 30 additions and 29 deletions

View File

@ -1,47 +1,48 @@
import fileinput import fileinput
def find_matching_parenthesis(line):
depth = 1
for i, c in enumerate(line[1:]):
if c == "(":
depth += 1
if c == ")":
depth -= 1
if depth == 0:
break
return i
def solve(line): def solve(line):
print("".join(line))
if line[0].isdigit(): if line[0].isdigit():
if len(line) == 1: if len(line) == 1:
return int(line[0]) return int(line[0])
if len(line) == 3 and line[1] == '+':
return int(line[0]) + int(line[2])
if len(line) == 3 and line[1] == '*':
return int(line[0]) * int(line[2])
if line[1] == '+':
if line[2] == '(':
depth = 1
for i, c in enumerate(line[3:]):
if c == '(':
depth += 1
if c == ')':
depth -= 1
if depth == 0:
break
inner = int(line[0]) + solve(line[3:i+3]) if len(line) == 3:
return solve([str(inner)] + line[i+4:]) if line[1] == "+":
return int(line[0]) + int(line[2])
if line[1] == "*":
return int(line[0]) * int(line[2])
if line[1] == "+":
if line[2] == "(":
closing = find_matching_parenthesis(line[2:])
inner = int(line[0]) + solve(line[3 : closing + 4])
return solve([str(inner)] + line[closing + 5 :])
else: else:
v = solve(line[:3]) v = solve(line[:3])
return solve([str(v)] + line[3:]) return solve([str(v)] + line[3:])
if line[1] == '*':
if line[1] == "*":
return solve(line[:1]) * solve(line[2:]) return solve(line[:1]) * solve(line[2:])
raise BaseException(f"HELP {repr(line)}") raise BaseException(f"HELP {repr(line)}")
if line[0] == "(":
closing = find_matching_parenthesis(line[1:])
inner = str(solve(line[1 : closing +2]))
return solve([inner] + line[closing +3 :])
if line[0] == '(':
depth = 1
for i, c in enumerate(line[1:]):
if c == '(':
depth += 1
if c == ')':
depth -= 1
if depth == 0:
break
inner = str(solve(line[1:i+1]))
return solve([inner] + line[i+2:])
summ = 0 summ = 0
for line in fileinput.input(): for line in fileinput.input():