This commit is contained in:
Stefan Harmuth 2022-12-04 12:49:47 +01:00
parent a44bd51f68
commit fd8aa6af91
3 changed files with 130 additions and 0 deletions

65
day24.py Normal file
View File

@ -0,0 +1,65 @@
from tools.aoc import AOCDay
from typing import Any
def get_max_bridge_strength(bridge_parts: list, connect_to: int) -> int:
max_strength = 0
for part in bridge_parts:
if connect_to not in part:
continue
sub_parts = bridge_parts.copy()
sub_parts.remove(part)
this_strength = sum(part) + get_max_bridge_strength(sub_parts, part[int(not part.index(connect_to))])
max_strength = max(max_strength, this_strength)
return max_strength
def get_possible_bridges(bridge_parts: list, connect_to: int) -> list:
bridges = []
for part in bridge_parts:
if connect_to not in part:
continue
sub_parts = bridge_parts.copy()
sub_parts.remove(part)
bridges.append([part])
sub_bridges = get_possible_bridges(sub_parts, part[int(not part.index(connect_to))])
for sub_bridge in sub_bridges:
bridges.append([part] + sub_bridge)
return bridges
class Day(AOCDay):
inputs = [
[
(31, "input24_test"),
(1940, "input24")
],
[
(19, "input24_test"),
(1928, "input24")
]
]
def get_bridge_parts(self) -> list:
return [
list(map(int, line.split("/")))
for line in self.getInput()
]
def part1(self) -> Any:
return get_max_bridge_strength(self.get_bridge_parts(), 0)
def part2(self) -> Any:
bridges = get_possible_bridges(self.get_bridge_parts(), 0)
max_length = max(map(len, bridges))
return max(sum(sum(x) for x in b) for b in bridges if len(b) == max_length)
if __name__ == '__main__':
day = Day(2017, 24)
day.run(verbose=True)

57
inputs/input24 Normal file
View File

@ -0,0 +1,57 @@
42/37
28/28
29/25
45/8
35/23
49/20
44/4
15/33
14/19
31/44
39/14
25/17
34/34
38/42
8/42
15/28
0/7
49/12
18/36
45/45
28/7
30/43
23/41
0/35
18/9
3/31
20/31
10/40
0/22
1/23
20/47
38/36
15/8
34/32
30/30
30/44
19/28
46/15
34/50
40/20
27/39
3/14
43/45
50/42
1/33
6/39
46/44
22/35
15/20
43/31
23/23
19/27
47/15
43/43
25/36
26/38
1/10

8
inputs/input24_test Normal file
View File

@ -0,0 +1,8 @@
0/2
2/2
2/3
3/4
3/5
0/1
10/1
9/10