generated from public/aoc_template
day23
This commit is contained in:
parent
a0ff8eb0b9
commit
9e1db2a109
1
.gitignore
vendored
1
.gitignore
vendored
@ -128,6 +128,7 @@ venv/
|
|||||||
ENV/
|
ENV/
|
||||||
env.bak/
|
env.bak/
|
||||||
venv.bak/
|
venv.bak/
|
||||||
|
venv_pypy/
|
||||||
|
|
||||||
# Spyder project settings
|
# Spyder project settings
|
||||||
.spyderproject
|
.spyderproject
|
||||||
|
|||||||
71
day23.py
Normal file
71
day23.py
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
from black.trans import defaultdict
|
||||||
|
from tools.aoc import AOCDay
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
|
||||||
|
class Day(AOCDay):
|
||||||
|
inputs = [
|
||||||
|
[
|
||||||
|
(7, "input23_test"),
|
||||||
|
(1411, "input23"),
|
||||||
|
],
|
||||||
|
[
|
||||||
|
("co,de,ka,ta", "input23_test"),
|
||||||
|
("aq,bn,ch,dt,gu,ow,pk,qy,tv,us,yx,zg,zu", "input23"),
|
||||||
|
],
|
||||||
|
]
|
||||||
|
|
||||||
|
def parse_input(self) -> dict[str, set]:
|
||||||
|
conns = defaultdict(set)
|
||||||
|
for line in self.getInput():
|
||||||
|
a, b = line.split("-")
|
||||||
|
conns[a].add(b)
|
||||||
|
conns[b].add(a)
|
||||||
|
|
||||||
|
return conns
|
||||||
|
|
||||||
|
def part1(self) -> Any:
|
||||||
|
conns = self.parse_input()
|
||||||
|
|
||||||
|
sets = set()
|
||||||
|
for comp in conns:
|
||||||
|
if not comp.startswith("t"):
|
||||||
|
continue
|
||||||
|
for a in conns[comp]:
|
||||||
|
for b in conns[comp]:
|
||||||
|
if a == b:
|
||||||
|
continue
|
||||||
|
if b in conns[a]:
|
||||||
|
sets.add(",".join(sorted([comp, a, b])))
|
||||||
|
|
||||||
|
return len(sets)
|
||||||
|
|
||||||
|
def part2(self) -> Any:
|
||||||
|
conns = self.parse_input()
|
||||||
|
|
||||||
|
best = set()
|
||||||
|
for comp in conns:
|
||||||
|
lan = {comp}
|
||||||
|
for a in conns[comp]:
|
||||||
|
for b in conns[comp]:
|
||||||
|
if a == b:
|
||||||
|
continue
|
||||||
|
if b in conns[a]:
|
||||||
|
lan.add(a)
|
||||||
|
lan.add(b)
|
||||||
|
|
||||||
|
good = True
|
||||||
|
for a in lan:
|
||||||
|
for b in lan:
|
||||||
|
if a != b and a not in conns[b]:
|
||||||
|
good = False
|
||||||
|
|
||||||
|
if good and len(lan) > len(best):
|
||||||
|
best = lan
|
||||||
|
|
||||||
|
return ",".join(sorted(best))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
day = Day(2024, 23)
|
||||||
|
day.run(verbose=True)
|
||||||
3380
inputs/input23
Normal file
3380
inputs/input23
Normal file
File diff suppressed because it is too large
Load Diff
32
inputs/input23_test
Normal file
32
inputs/input23_test
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
kh-tc
|
||||||
|
qp-kh
|
||||||
|
de-cg
|
||||||
|
ka-co
|
||||||
|
yn-aq
|
||||||
|
qp-ub
|
||||||
|
cg-tb
|
||||||
|
vc-aq
|
||||||
|
tb-ka
|
||||||
|
wh-tc
|
||||||
|
yn-cg
|
||||||
|
kh-ub
|
||||||
|
ta-co
|
||||||
|
de-co
|
||||||
|
tc-td
|
||||||
|
tb-wq
|
||||||
|
wh-td
|
||||||
|
ta-ka
|
||||||
|
td-qp
|
||||||
|
aq-cg
|
||||||
|
wq-ub
|
||||||
|
ub-vc
|
||||||
|
de-ta
|
||||||
|
wq-aq
|
||||||
|
wq-vc
|
||||||
|
wh-yn
|
||||||
|
ka-de
|
||||||
|
kh-ta
|
||||||
|
co-tc
|
||||||
|
wh-qp
|
||||||
|
tb-vc
|
||||||
|
td-yn
|
||||||
Loading…
Reference in New Issue
Block a user