@@ -9,18 +9,30 @@ def validate(page_order, rule_map) -> bool:
9
9
return True
10
10
11
11
12
+ def find_middle (page_order , rule_map ) -> int :
13
+ for page in page_order :
14
+ pages = rule_map [page ].intersection (set (page_order ))
15
+ if len (pages ) == len (page_order )// 2 :
16
+ return page
17
+ # print(page_order, page, rule_map[page], pages)
18
+
19
+
12
20
def main ():
13
21
rules , page_orders = aoc .read_sections ()
14
22
rules = [list (map (int , rule .split ('|' ))) for rule in rules .split ('\n ' )]
15
23
page_orders = [list (map (int , pages .split (',' ))) for pages in page_orders .split ('\n ' )]
16
- rule_map = defaultdict (list )
24
+ rule_map = defaultdict (set )
17
25
for rule in rules :
18
- rule_map [rule [0 ]].append (rule [1 ])
26
+ rule_map [rule [0 ]].add (rule [1 ])
19
27
20
28
print ("p1:" , sum (page_order [len (page_order )// 2 ]
21
29
for page_order in page_orders
22
30
if validate (page_order , rule_map )))
23
31
32
+ print ("p2:" , sum (find_middle (page_order , rule_map )
33
+ for page_order in page_orders
34
+ if not validate (page_order , rule_map )))
35
+
24
36
25
37
if __name__ == "__main__" :
26
38
main ()
0 commit comments