···11+import sys
22+from operator import mul, add
33+from functools import reduce
44+55+total_wordwise = 0
66+total_digitwise = 0
77+file = '6.input' if len(sys.argv) <= 1 else sys.argv[1]
88+99+columns = []
1010+ops = []
1111+op_line = None
1212+1313+for line in open(file).readlines():
1414+ line = line.strip('\n')
1515+ for word in line.split(' '):
1616+ if not word: continue
1717+ if word in '+*':
1818+ ops.append(word)
1919+ op_line = line
2020+ else:
2121+ columns.append(word)
2222+2323+for op_i, op in enumerate(ops):
2424+ column = [int(c) for i, c in enumerate(columns) if i % len(ops) == op_i]
2525+ if op == '+':
2626+ total_wordwise += sum(column)
2727+ elif op == '*':
2828+ total_wordwise += reduce(mul, column, 1)
2929+3030+print(f'p1: {total_wordwise}')
3131+3232+lines = []
3333+op_pos = [i for i, ch in enumerate(op_line) if ch in '+*']
3434+for line in open(file).readlines():
3535+ if line.strip() == op_line.strip(): break
3636+ words = [line[i:j][:-1] for i, j in zip([0] + op_pos[1:], op_pos[1:] + [None])]
3737+ lines.append(words)
3838+3939+for op_i, op in enumerate(ops):
4040+ cols = [line[i] for i in range(len(lines[0])) if i % len(ops) == op_i for line in lines]
4141+ digits = [col[i] for i in range(len(cols[0])) for col in cols]
4242+ numbers = [int(''.join(digits[i:i+len(cols)])) for i in range(0, len(digits), len(cols))]
4343+ if op == '+':
4444+ total_digitwise += sum(numbers)
4545+ elif op == '*':
4646+ total_digitwise += reduce(mul, numbers, 1)
4747+4848+print(f'p2: {total_digitwise}')