This repository has been archived on 2025-12-22. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
aoc2025/day6/main.py
2025-12-07 17:38:21 +01:00

64 lines
1.9 KiB
Python

# ========== PART 1 ==========
with open("day6/input.txt") as file:
lines = file.readlines()
lines = [line.strip("\n").split() for line in lines]
for i in range(4):
lines[i] = [int(number) for number in lines[i]]
linesLen = len(lines)
lineLen = len(lines[0])
grandTotal = 0
for i in range(lineLen):
if(lines[4][i] == "*"):
grandTotal = grandTotal + (lines[0][i]*lines[1][i]*lines[2][i]*lines[3][i])
elif(lines[4][i] == "+"):
grandTotal = grandTotal + (lines[0][i]+lines[1][i]+lines[2][i]+lines[3][i])
else:
print("ohoh ein Fehler")
# ========== PART 2 ==========
with open("day6/input.txt") as file:
raw_lines = [line.rstrip('\n') for line in file.readlines()]
max_width = max(len(line) for line in raw_lines)
grid = [list(line.ljust(max_width)) for line in raw_lines]
num_rows = len(grid) - 1 # Number of rows with digits
op_row = len(grid) - 1 # Index of the operator row
max_cols = max_width
newGrandTotal = 0
current_numbers = [] # Stores numbers for the current problem (read R->L)
for col in range(max_cols - 1, -1, -1):
number_digits = ""
for row in range(num_rows):
char = grid[row][col]
if char.isdigit():
number_digits += char
operator = grid[op_row][col]
if operator == '+' or operator == '*':
if number_digits:
current_numbers.insert(0, int(number_digits)) # Prepend, as we are reading R->L
if not current_numbers:
continue
result = current_numbers[0]
if operator == '*':
for num in current_numbers[1:]:
result *= num
elif operator == '+':
for num in current_numbers[1:]:
result += num
newGrandTotal += result
current_numbers = []
elif number_digits:
current_numbers.insert(0, int(number_digits))
print(f"Part 1: {grandTotal}\nPart 2: {newGrandTotal}")