41 lines
991 B
Python
Executable file
41 lines
991 B
Python
Executable file
#!/usr/bin/env python
|
|
|
|
import enum
|
|
import functools
|
|
import operator
|
|
import sys
|
|
|
|
|
|
class Op(enum.StrEnum):
|
|
ADD = "+"
|
|
MUL = "*"
|
|
|
|
|
|
def solve(input: list[str]) -> int:
|
|
def parse(input: list[str]) -> tuple[list[list[int]], list[Op]]:
|
|
raw_nums, raw_ops = input[:-1], input[-1]
|
|
matrix = [[int(n) for n in line.split()] for line in raw_nums]
|
|
ops = [Op(c) for c in raw_ops.split()]
|
|
return matrix, ops
|
|
|
|
def transpose(matrix: list[list[int]]) -> list[list[int]]:
|
|
return list(map(list, zip(*matrix, strict=True)))
|
|
|
|
def apply(op: Op, nums: list[int]) -> int:
|
|
f = {
|
|
Op.ADD: operator.add,
|
|
Op.MUL: operator.mul,
|
|
}[op]
|
|
return functools.reduce(f, nums)
|
|
|
|
matrix, ops = parse(input)
|
|
return sum(apply(op, nums) for op, nums in zip(ops, transpose(matrix), strict=True))
|
|
|
|
|
|
def main() -> None:
|
|
input = sys.stdin.read().splitlines()
|
|
print(solve(input))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|