68 lines
1.4 KiB
Python
68 lines
1.4 KiB
Python
debug = False
|
|
|
|
def do_homework(filename: str):
|
|
# Read file as list of strings
|
|
with open(filename, "r") as fp:
|
|
data = fp.read().splitlines()
|
|
|
|
# Gimme the operators
|
|
last_row = data[-1]
|
|
operators = last_row.split()
|
|
|
|
# Use that to find the lengths
|
|
num_of_cols = len(operators)
|
|
|
|
icol_prev = 0
|
|
final_result = 0
|
|
for icol in range(num_of_cols):
|
|
op = operators[icol]
|
|
|
|
# Find the length of this column.
|
|
col_len = len(last_row[icol_prev:]) - len(last_row[icol_prev + 1:].lstrip())
|
|
|
|
# For the last column, I don't have that nice column of nothing
|
|
if icol == num_of_cols - 1:
|
|
col_len += 1
|
|
|
|
# Prepare empty string for my numbers
|
|
nums = (col_len - 1)*[""]
|
|
|
|
# Make the num strings by moving row by row
|
|
for jcol in range(icol_prev, icol_prev + col_len - 1):
|
|
for row in data[:-1]:
|
|
nums[jcol - icol_prev] += row[jcol]
|
|
|
|
# Do the math
|
|
if op == '*':
|
|
result = 1
|
|
if debug:
|
|
print(1, end="")
|
|
for num in nums:
|
|
num = int(num)
|
|
if debug:
|
|
print(f" * {num}", end="")
|
|
|
|
result *= num
|
|
elif op == '+':
|
|
result = 0
|
|
if debug:
|
|
print(0, end="")
|
|
for num in nums:
|
|
num = int(num)
|
|
if debug:
|
|
print(f" + {num}", end="")
|
|
|
|
result += num
|
|
else:
|
|
assert False, "fuck this"
|
|
|
|
icol_prev += col_len
|
|
final_result += result
|
|
if debug:
|
|
print(f" = {result}")
|
|
return final_result
|
|
|
|
if __name__ == "__main__":
|
|
assert do_homework("testinput") == 3263827
|
|
|
|
print(do_homework("input")) |