summaryrefslogtreecommitdiffstats
path: root/day16
diff options
context:
space:
mode:
Diffstat (limited to 'day16')
-rw-r--r--day16/__init__.py60
-rw-r--r--day16/example.txt10
-rw-r--r--day16/input.txt59
3 files changed, 129 insertions, 0 deletions
diff --git a/day16/__init__.py b/day16/__init__.py
new file mode 100644
index 0000000..ecf33c5
--- /dev/null
+++ b/day16/__init__.py
@@ -0,0 +1,60 @@
1# -*- coding: utf-8 -*-
2import re
3from abc import ABC
4from dataclasses import dataclass
5from typing import List, Iterator, Dict
6
7from aoc import BaseAssignment
8from aoc.mixins import AStarMixin
9
10
11@dataclass
12class Valve:
13 name: str
14 flow_rate: int
15 tunnels_to: List[str]
16
17 def __hash__(self):
18 return hash(self.name)
19
20
21valve_pattern = re.compile(
22 "Valve (\w+) has flow rate=(\d+); tunnels? leads? to valves? (.*)"
23)
24
25
26class Assignment(BaseAssignment[int, Valve], AStarMixin[Valve], ABC):
27 def parse_item(self, item: str) -> Valve:
28 match = valve_pattern.match(item)
29 name, flow_rate, tunnels_to = match.groups()
30
31 return Valve(
32 name=name,
33 tunnels_to=tunnels_to.split(", "),
34 flow_rate=int(flow_rate),
35 )
36
37 @staticmethod
38 def valve_map(input: Iterator[Valve]) -> Dict[str, Valve]:
39 return {valve.name: valve for valve in input}
40
41
42class AssignmentOne(Assignment):
43 example_result = 1651
44
45 def run(self, input: Iterator[Valve]) -> int:
46 valves = self.valve_map(input)
47
48 queue = [valves["AA"]]
49 open = {}
50 minutes = 30
51
52 while len(queue) > 0 or minutes > 0:
53 valve = queue.pop(0)
54
55 for v in valve.tunnels_to:
56 pass
57
58
59class AssignmentTwo(Assignment):
60 pass
diff --git a/day16/example.txt b/day16/example.txt
new file mode 100644
index 0000000..9f30acc
--- /dev/null
+++ b/day16/example.txt
@@ -0,0 +1,10 @@
1Valve AA has flow rate=0; tunnels lead to valves DD, II, BB
2Valve BB has flow rate=13; tunnels lead to valves CC, AA
3Valve CC has flow rate=2; tunnels lead to valves DD, BB
4Valve DD has flow rate=20; tunnels lead to valves CC, AA, EE
5Valve EE has flow rate=3; tunnels lead to valves FF, DD
6Valve FF has flow rate=0; tunnels lead to valves EE, GG
7Valve GG has flow rate=0; tunnels lead to valves FF, HH
8Valve HH has flow rate=22; tunnel leads to valve GG
9Valve II has flow rate=0; tunnels lead to valves AA, JJ
10Valve JJ has flow rate=21; tunnel leads to valve II
diff --git a/day16/input.txt b/day16/input.txt
new file mode 100644
index 0000000..89e7cac
--- /dev/null
+++ b/day16/input.txt
@@ -0,0 +1,59 @@
1Valve ZT has flow rate=0; tunnels lead to valves QQ, DS
2Valve JX has flow rate=22; tunnels lead to valves CI, ZH, UR
3Valve EM has flow rate=0; tunnels lead to valves WH, IT
4Valve AA has flow rate=0; tunnels lead to valves EQ, QD, NP, ZP, KX
5Valve HW has flow rate=0; tunnels lead to valves CI, BV
6Valve IK has flow rate=8; tunnels lead to valves ET, NU, ZO, XL, QD
7Valve HA has flow rate=0; tunnels lead to valves WQ, LB
8Valve WH has flow rate=12; tunnels lead to valves EM, LW
9Valve KU has flow rate=0; tunnels lead to valves BV, CF
10Valve QD has flow rate=0; tunnels lead to valves AA, IK
11Valve CF has flow rate=18; tunnels lead to valves KU, JT, CM
12Valve VC has flow rate=0; tunnels lead to valves AD, UY
13Valve JT has flow rate=0; tunnels lead to valves CF, ZH
14Valve QQ has flow rate=11; tunnel leads to valve ZT
15Valve ZP has flow rate=0; tunnels lead to valves EZ, AA
16Valve LI has flow rate=0; tunnels lead to valves LB, CM
17Valve CI has flow rate=0; tunnels lead to valves HW, JX
18Valve VK has flow rate=6; tunnels lead to valves YM, LC, HE, NU, TI
19Valve WL has flow rate=20; tunnels lead to valves LW, TO
20Valve TI has flow rate=0; tunnels lead to valves VK, YW
21Valve NU has flow rate=0; tunnels lead to valves VK, IK
22Valve DS has flow rate=9; tunnels lead to valves NP, MV, FR, ZT, YW
23Valve HE has flow rate=0; tunnels lead to valves VK, EQ
24Valve ZH has flow rate=0; tunnels lead to valves JT, JX
25Valve TO has flow rate=0; tunnels lead to valves MT, WL
26Valve CM has flow rate=0; tunnels lead to valves LI, CF
27Valve WM has flow rate=14; tunnels lead to valves MO, WQ, EC, RN
28Valve EZ has flow rate=16; tunnels lead to valves RT, RZ, ZP
29Valve PB has flow rate=0; tunnels lead to valves YM, UY
30Valve XL has flow rate=0; tunnels lead to valves IK, MS
31Valve LB has flow rate=17; tunnels lead to valves LI, HA, ON, UR, AD
32Valve WQ has flow rate=0; tunnels lead to valves WM, HA
33Valve BV has flow rate=13; tunnels lead to valves KU, RT, HW, MO, EH
34Valve RN has flow rate=0; tunnels lead to valves WM, RZ
35Valve LW has flow rate=0; tunnels lead to valves WH, WL
36Valve NP has flow rate=0; tunnels lead to valves AA, DS
37Valve MT has flow rate=0; tunnels lead to valves TO, HG
38Valve ET has flow rate=0; tunnels lead to valves IK, EC
39Valve HG has flow rate=19; tunnel leads to valve MT
40Valve MV has flow rate=0; tunnels lead to valves UY, DS
41Valve RT has flow rate=0; tunnels lead to valves BV, EZ
42Valve ON has flow rate=0; tunnels lead to valves LB, EH
43Valve MO has flow rate=0; tunnels lead to valves BV, WM
44Valve UY has flow rate=5; tunnels lead to valves PB, BR, MS, VC, MV
45Valve UR has flow rate=0; tunnels lead to valves JX, LB
46Valve YM has flow rate=0; tunnels lead to valves PB, VK
47Valve RZ has flow rate=0; tunnels lead to valves RN, EZ
48Valve AD has flow rate=0; tunnels lead to valves VC, LB
49Valve EH has flow rate=0; tunnels lead to valves ON, BV
50Valve EQ has flow rate=0; tunnels lead to valves AA, HE
51Valve KX has flow rate=0; tunnels lead to valves AA, BR
52Valve BR has flow rate=0; tunnels lead to valves UY, KX
53Valve LC has flow rate=0; tunnels lead to valves VK, IT
54Valve YW has flow rate=0; tunnels lead to valves TI, DS
55Valve EC has flow rate=0; tunnels lead to valves ET, WM
56Valve IT has flow rate=10; tunnels lead to valves LC, EM
57Valve MS has flow rate=0; tunnels lead to valves UY, XL
58Valve FR has flow rate=0; tunnels lead to valves DS, ZO
59Valve ZO has flow rate=0; tunnels lead to valves FR, IK