-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathday6.py
More file actions
91 lines (81 loc) · 2.36 KB
/
day6.py
File metadata and controls
91 lines (81 loc) · 2.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import sys
import numpy as np
input_file = "input/6.ex" if len(sys.argv) < 2 else sys.argv[1]
with open(input_file, "r") as f:
lines = f.readlines()
# lines = [ l.strip() for l in lines ]
lines = [ l[:-1] for l in lines ]
spaces = set()
for line in lines:
if len(spaces) == 0:
for i, c in enumerate(line):
if c == " ":
spaces.add(i)
else:
to_remove = set()
for i in spaces:
if line[i] != " ":
to_remove.add(i)
if len(to_remove) > 0:
spaces = spaces - to_remove
columns = sorted(list(spaces))
print(columns)
num_tasks = len(columns) + 1
print(num_tasks)
tasks = [ [] for _ in range(num_tasks) ]
for line in lines:
tokens = [ line[i:j].strip() for i,j in zip([0] + columns, columns + [None])]
try:
t = [ int(token) for token in tokens ]
for i in range(num_tasks):
tasks[i].append(t[i])
except:
operands = tokens
print(tasks)
part_a = 0
for i, task in enumerate(tasks):
if operands[i] == "+":
result = 0
for num in task:
result += num
elif operands[i] == "*":
result = 1
for num in task:
result *= num
part_a += result
print(part_a)
tasks_b = [ [] for _ in range(num_tasks) ]
for line in lines:
tokens = [ line[i+1:j] for i,j in zip([-1] + columns, columns + [None])]
print(tokens)
for i, token in enumerate(tokens):
length = len(token)
if len(tasks_b[i]) == 0:
print("length of task", length)
for j in range(length):
tasks_b[i].append([])
try:
for j, digit in enumerate(token):
if digit == " ":
digit = "0"
tasks_b[i][j].append(int(digit))
except ValueError:
pass
tasks_b = [[ int("".join([ str(n) for n in num ])) for num in task ] for task in tasks_b ]
part_b = 0
for i, task in enumerate(tasks_b):
if operands[i] == "+":
result = 0
for num in task:
while num % 10 == 0:
num = int(num / 10)
result += num
elif operands[i] == "*":
result = 1
for num in task:
while num % 10 == 0:
num = int( num / 10 )
result *= num
print(operands[i], task, "=", result)
part_b += result
print(part_b)