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"))