diff options
Diffstat (limited to 'day16')
| -rw-r--r-- | day16/__init__.py | 60 | ||||
| -rw-r--r-- | day16/example.txt | 10 | ||||
| -rw-r--r-- | day16/input.txt | 59 |
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 -*- | ||
| 2 | import re | ||
| 3 | from abc import ABC | ||
| 4 | from dataclasses import dataclass | ||
| 5 | from typing import List, Iterator, Dict | ||
| 6 | |||
| 7 | from aoc import BaseAssignment | ||
| 8 | from aoc.mixins import AStarMixin | ||
| 9 | |||
| 10 | |||
| 11 | @dataclass | ||
| 12 | class 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 | |||
| 21 | valve_pattern = re.compile( | ||
| 22 | "Valve (\w+) has flow rate=(\d+); tunnels? leads? to valves? (.*)" | ||
| 23 | ) | ||
| 24 | |||
| 25 | |||
| 26 | class 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 | |||
| 42 | class 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 | |||
| 59 | class 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 @@ | |||
| 1 | Valve AA has flow rate=0; tunnels lead to valves DD, II, BB | ||
| 2 | Valve BB has flow rate=13; tunnels lead to valves CC, AA | ||
| 3 | Valve CC has flow rate=2; tunnels lead to valves DD, BB | ||
| 4 | Valve DD has flow rate=20; tunnels lead to valves CC, AA, EE | ||
| 5 | Valve EE has flow rate=3; tunnels lead to valves FF, DD | ||
| 6 | Valve FF has flow rate=0; tunnels lead to valves EE, GG | ||
| 7 | Valve GG has flow rate=0; tunnels lead to valves FF, HH | ||
| 8 | Valve HH has flow rate=22; tunnel leads to valve GG | ||
| 9 | Valve II has flow rate=0; tunnels lead to valves AA, JJ | ||
| 10 | Valve 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 @@ | |||
| 1 | Valve ZT has flow rate=0; tunnels lead to valves QQ, DS | ||
| 2 | Valve JX has flow rate=22; tunnels lead to valves CI, ZH, UR | ||
| 3 | Valve EM has flow rate=0; tunnels lead to valves WH, IT | ||
| 4 | Valve AA has flow rate=0; tunnels lead to valves EQ, QD, NP, ZP, KX | ||
| 5 | Valve HW has flow rate=0; tunnels lead to valves CI, BV | ||
| 6 | Valve IK has flow rate=8; tunnels lead to valves ET, NU, ZO, XL, QD | ||
| 7 | Valve HA has flow rate=0; tunnels lead to valves WQ, LB | ||
| 8 | Valve WH has flow rate=12; tunnels lead to valves EM, LW | ||
| 9 | Valve KU has flow rate=0; tunnels lead to valves BV, CF | ||
| 10 | Valve QD has flow rate=0; tunnels lead to valves AA, IK | ||
| 11 | Valve CF has flow rate=18; tunnels lead to valves KU, JT, CM | ||
| 12 | Valve VC has flow rate=0; tunnels lead to valves AD, UY | ||
| 13 | Valve JT has flow rate=0; tunnels lead to valves CF, ZH | ||
| 14 | Valve QQ has flow rate=11; tunnel leads to valve ZT | ||
| 15 | Valve ZP has flow rate=0; tunnels lead to valves EZ, AA | ||
| 16 | Valve LI has flow rate=0; tunnels lead to valves LB, CM | ||
| 17 | Valve CI has flow rate=0; tunnels lead to valves HW, JX | ||
| 18 | Valve VK has flow rate=6; tunnels lead to valves YM, LC, HE, NU, TI | ||
| 19 | Valve WL has flow rate=20; tunnels lead to valves LW, TO | ||
| 20 | Valve TI has flow rate=0; tunnels lead to valves VK, YW | ||
| 21 | Valve NU has flow rate=0; tunnels lead to valves VK, IK | ||
| 22 | Valve DS has flow rate=9; tunnels lead to valves NP, MV, FR, ZT, YW | ||
| 23 | Valve HE has flow rate=0; tunnels lead to valves VK, EQ | ||
| 24 | Valve ZH has flow rate=0; tunnels lead to valves JT, JX | ||
| 25 | Valve TO has flow rate=0; tunnels lead to valves MT, WL | ||
| 26 | Valve CM has flow rate=0; tunnels lead to valves LI, CF | ||
| 27 | Valve WM has flow rate=14; tunnels lead to valves MO, WQ, EC, RN | ||
| 28 | Valve EZ has flow rate=16; tunnels lead to valves RT, RZ, ZP | ||
| 29 | Valve PB has flow rate=0; tunnels lead to valves YM, UY | ||
| 30 | Valve XL has flow rate=0; tunnels lead to valves IK, MS | ||
| 31 | Valve LB has flow rate=17; tunnels lead to valves LI, HA, ON, UR, AD | ||
| 32 | Valve WQ has flow rate=0; tunnels lead to valves WM, HA | ||
| 33 | Valve BV has flow rate=13; tunnels lead to valves KU, RT, HW, MO, EH | ||
| 34 | Valve RN has flow rate=0; tunnels lead to valves WM, RZ | ||
| 35 | Valve LW has flow rate=0; tunnels lead to valves WH, WL | ||
| 36 | Valve NP has flow rate=0; tunnels lead to valves AA, DS | ||
| 37 | Valve MT has flow rate=0; tunnels lead to valves TO, HG | ||
| 38 | Valve ET has flow rate=0; tunnels lead to valves IK, EC | ||
| 39 | Valve HG has flow rate=19; tunnel leads to valve MT | ||
| 40 | Valve MV has flow rate=0; tunnels lead to valves UY, DS | ||
| 41 | Valve RT has flow rate=0; tunnels lead to valves BV, EZ | ||
| 42 | Valve ON has flow rate=0; tunnels lead to valves LB, EH | ||
| 43 | Valve MO has flow rate=0; tunnels lead to valves BV, WM | ||
| 44 | Valve UY has flow rate=5; tunnels lead to valves PB, BR, MS, VC, MV | ||
| 45 | Valve UR has flow rate=0; tunnels lead to valves JX, LB | ||
| 46 | Valve YM has flow rate=0; tunnels lead to valves PB, VK | ||
| 47 | Valve RZ has flow rate=0; tunnels lead to valves RN, EZ | ||
| 48 | Valve AD has flow rate=0; tunnels lead to valves VC, LB | ||
| 49 | Valve EH has flow rate=0; tunnels lead to valves ON, BV | ||
| 50 | Valve EQ has flow rate=0; tunnels lead to valves AA, HE | ||
| 51 | Valve KX has flow rate=0; tunnels lead to valves AA, BR | ||
| 52 | Valve BR has flow rate=0; tunnels lead to valves UY, KX | ||
| 53 | Valve LC has flow rate=0; tunnels lead to valves VK, IT | ||
| 54 | Valve YW has flow rate=0; tunnels lead to valves TI, DS | ||
| 55 | Valve EC has flow rate=0; tunnels lead to valves ET, WM | ||
| 56 | Valve IT has flow rate=10; tunnels lead to valves LC, EM | ||
| 57 | Valve MS has flow rate=0; tunnels lead to valves UY, XL | ||
| 58 | Valve FR has flow rate=0; tunnels lead to valves DS, ZO | ||
| 59 | Valve ZO has flow rate=0; tunnels lead to valves FR, IK | ||
