-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday05.py
98 lines (70 loc) · 1.58 KB
/
day05.py
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
92
93
94
95
96
97
98
import sys
inputfile = ""
if len(sys.argv) == 2:
inputfile = sys.argv[1] + ".txt"
else:
inputfile = "input" + sys.argv[0][3:5] + ".txt"
order = {}
updates = []
with open(inputfile,"r") as input:
for line in input:
if '|' in line:
spl = line.rstrip().split('|')
if spl[0] in order:
order[spl[0]].append(spl[1])
else:
order[spl[0]] = [spl[1]]
elif ',' in line:
updates.append(line.rstrip().split(','))
def valid_pos(seen,now):
global order
if now in order:
for later in order[now]:
if later in seen:
return False
return True
def valid_pos2(seen,now):
global order
if now in order:
for later in order[now]:
if later in seen:
return later
return "OK"
def sortit(pages):
out = []
todo = pages
while len(todo) > 0:
page = todo.pop(0)
result = valid_pos2(out,page)
while not result == "OK":
out.remove(result)
todo.insert(0, result)
result = valid_pos2(out,page)
out.append(page)
return out
valid = []
def run_part1():
for one in updates:
seen = []
ok = 1
for page in one:
if valid_pos(seen,page):
seen.append(page)
else:
ok = 0
break
if ok:
valid.append(one)
print(valid)
middle = [int(x[int((len(x)-1)/2)]) for x in valid]
print(sum(middle))
def run_part2():
correct = []
for one in updates:
if not one in valid:
correct.append(sortit(one))
print(correct)
middle = [int(x[int((len(x)-1)/2)]) for x in correct]
print(sum(middle))
run_part1()
run_part2()