import logging import sys # Logger setup logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) stream_handler = logging.StreamHandler() logger.addHandler(stream_handler) class Problem: def __init__(self, operation, numbers): self._operation = operation self._numbers = numbers @property def operation(self): """The operation property.""" return self._operation @operation.setter def operation(self, value): self._operation = value @property def numbers(self): """The numbers property.""" return self._numbers @numbers.setter def numbers(self, value): self._numbers = value def result(self): result = 0 match self._operation: case "*": result = self._numbers[0] for i in range(1, len(self._numbers)): result = result * self._numbers[i] case "+": result = self._numbers[0] for i in range(1, len(self._numbers)): result = result + self._numbers[i] case _: logger.error("Undefined operator") return result def main(): output = 0 operations = [] number_lines = [] problems = [] with open("input.txt", "r") as input: lines = input.readlines() operations = lines[-1].strip().split() for line in lines[:len(lines) - 1]: number_lines.append(line.strip().split()) for i in range(len(number_lines[0])): column = [] for j in range(len(number_lines)): column.append(int(number_lines[j][i])) problems.append(Problem(operations[i], column)) for problem in problems: output += problem.result() logger.info("Output: " + str(output)) if __name__ == "__main__": main()