Files
adventofcode/2025/06/part2.py
Kees van Kempen 00a147462b 2025(06): thanks to loops, things work
2.28 ms ± 347 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
2025-12-06 18:26:25 +01:00

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