Skip to content

Commit d135733

Browse files
committed
2024, day 5, part 2 (too low)
1 parent 7c514a5 commit d135733

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

2024/day05.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,29 @@
33

44
def parse(protocol):
55
top, bottom = protocol.split("\n\n")
6-
ordering_rules = defaultdict(list)
6+
ordering_rules = defaultdict(set)
77
for line in top.splitlines():
88
key, value = map(int, line.split("|"))
9-
ordering_rules[key].append(value)
9+
ordering_rules[key].add(value)
1010
updates = [list(map(int, line.split(","))) for line in bottom.splitlines()]
1111
return ordering_rules, updates
1212

1313

1414
def in_right_order(update, ordering_rules):
1515
for i in range(len(update)):
1616
number, *rest = update[i:]
17-
if not set(rest).issubset(set(ordering_rules[number])):
17+
if not set(rest).issubset(ordering_rules[number]):
1818
return False
1919
return True
2020

2121

22+
def order(update, ordering_rules):
23+
print(update)
24+
for n in update:
25+
print(n, ordering_rules[n])
26+
return sorted(update, key=lambda n: len(ordering_rules[n]), reverse=True)
27+
28+
2229
def middle_page_number(protocol, part=1):
2330
total = 0
2431
ordering_rules, updates = parse(protocol)
@@ -28,7 +35,9 @@ def middle_page_number(protocol, part=1):
2835
idx = len(update) // 2
2936
total += update[idx]
3037
if not is_in_right_order and part == 2:
31-
pass
38+
new_update = order(update, ordering_rules)
39+
idx = len(new_update) // 2
40+
total += new_update[idx]
3241
return total
3342

3443

@@ -71,3 +80,7 @@ def main(part: int = 1) -> int:
7180
assert middle_page_number(protocol) == 143
7281

7382
print(main())
83+
84+
assert middle_page_number(protocol, part=2) == 123
85+
86+
print(main(part=2))

0 commit comments

Comments
 (0)