Compare commits

...

1 commit
main ... day-11

Author SHA1 Message Date
26f92406d2 Successful solution for part 1. 2025-12-10 22:24:01 -08:00
4 changed files with 739 additions and 0 deletions

83
11/README.md Normal file
View file

@ -0,0 +1,83 @@
# --- Day 11: Reactor ---
You hear some loud beeping coming from a hatch in the floor of the factory, so you decide to check it out. Inside, you find several large electrical conduits and a ladder.
Climbing down the ladder, you discover the source of the beeping: a large, toroidal reactor which powers the factory above. Some Elves here are hurriedly running between the reactor and a nearby server rack, apparently trying to fix something.
One of the Elves notices you and rushes over. "It's a good thing you're here! We just installed a new server rack, but we aren't having any luck getting the reactor to communicate with it!" You glance around the room and see a tangle of cables and devices running from the server rack to the reactor. She rushes off, returning a moment later with a list of the devices and their outputs (your puzzle input).
For example:
```txt
aaa: you hhh
you: bbb ccc
bbb: ddd eee
ccc: ddd eee fff
ddd: ggg
eee: out
fff: out
ggg: out
hhh: ccc fff iii
iii: out
```
Each line gives the name of a device followed by a list of the devices to which its outputs are attached. So, bbb: ddd eee means that device bbb has two outputs, one leading to device ddd and the other leading to device eee.
The Elves are pretty sure that the issue isn't due to any specific device, but rather that the issue is triggered by data following some specific path through the devices. Data only ever flows from a device through its outputs; it can't flow backwards.
After dividing up the work, the Elves would like you to focus on the devices starting with the one next to you (an Elf hastily attaches a label which just says you) and ending with the main output to the reactor (which is the device with the label out).
To help the Elves figure out which path is causing the issue, they need you to find every path from you to out.
In this example, these are all of the paths from you to out:
- Data could take the connection from you to bbb, then from bbb to ddd, then from ddd to ggg, then from ggg to out.
- Data could take the connection to bbb, then to eee, then to out.
- Data could go to ccc, then ddd, then ggg, then out.
- Data could go to ccc, then eee, then out.
- Data could go to ccc, then fff, then out.
In total, there are 5 different paths leading from you to out.
How many different paths lead from you to out?
## --- Part Two ---
Thanks in part to your analysis, the Elves have figured out a little bit about the issue. They now know that the problematic data path passes through both dac (a digital-to-analog converter) and fft (a device which performs a fast Fourier transform).
They're still not sure which specific path is the problem, and so they now need you to find every path from svr (the server rack) to out. However, the paths you find must all also visit both dac and fft (in any order).
For example:
```txt
svr: aaa bbb
aaa: fft
fft: ccc
bbb: tty
tty: ccc
ccc: ddd eee
ddd: hub
hub: fff
eee: dac
dac: fff
fff: ggg hhh
ggg: out
hhh: out
```
This new list of devices contains many paths from svr to out:
```txt
svr,aaa,fft,ccc,ddd,hub,fff,ggg,out
svr,aaa,fft,ccc,ddd,hub,fff,hhh,out
svr,aaa,fft,ccc,eee,dac,fff,ggg,out
svr,aaa,fft,ccc,eee,dac,fff,hhh,out
svr,bbb,tty,ccc,ddd,hub,fff,ggg,out
svr,bbb,tty,ccc,ddd,hub,fff,hhh,out
svr,bbb,tty,ccc,eee,dac,fff,ggg,out
svr,bbb,tty,ccc,eee,dac,fff,hhh,out
```
However, only 2 paths from svr to out visit both dac and fft.
Find all of the paths that lead from svr to out. How many of those paths visit both dac and fft?

588
11/input/server_rack.txt Normal file
View file

@ -0,0 +1,588 @@
vwu: ary btg ioq vxk
ixs: yql jqu
vbz: oug smc kkp
kke: oot eui zff
lja: mfd vrd
ooj: yht
hlz: iav lvo yxb
kaf: feu
ebc: ary vxk ioq jbe btg
qem: out
feu: pnf dir
hob: gla
gnc: vcp
ixr: orj pmj xry dvi bcy cmm gxr csa
jet: wco kqk dnd
kvb: uuy hsf
iam: ssk you
oyv: xvw aip kdz
tzy: def dsa prd rxe
qgl: awi dtr yfr
imx: wuc
jap: btg jbe vxk ary
dct: beh xhy yop zrv vii hfn bft pkj
eut: jvl cai dkn ehs
vvy: bgy
hzh: ssk you
yht: tng yss
ajy: axa ncc
fop: gsd brx
fmx: jbe btg vxk ioq
svd: wcg cos
tfb: ppk lnn
lvo: adi scd itg oko leo
gxr: uzf
ukl: fft zce ghl
drm: wjc vnc ehi
dcg: wpt hck caa ywe
jwi: mmi nca
jjl: dct
def: uii
tek: ehl tzy ewm jce
dej: gvl ryx
yql: dtr awi yfs
nss: hnh eut xtc wcj eyb jrc wyz wnf uoa rxg tyw tnn jsi
fqw: nss
sft: kck nfk
saf: ibf tiw
iot: kti ssk you
kvl: uob lgx nru
els: goz mvt gyo
tae: dne
nhr: kqg yll
tam: ubt owj mox
awi: out
lit: jjl hcx lsz
sku: wvv tam
gft: jap
eui: ogz cps
owf: lpx bve dxt bdr
hsf: gla dct
cai: qdg gft
qdg: uvw jap
isc: zhx hki yab lbl
jbe: hgz zil mkc els
hfa: ywi
deb: nss
hfn: qkc lfn
jdt: xkd nss
pky: ubt vvy okw mox
bgi: kti
unh: ryx khi
pxf: cps fop
qkn: jvj zze
bbe: zzm cov qzz
dge: ppp tzy ewm ehl
odx: xes uzf
wyx: ixs tng
zcv: ekq jwi fgh ywo
kgc: vjb dxf ccr ftz
rcj: izs ajy
kpj: jba
mfq: mfa bjd
utw: ssb tbg xmn
wwg: you kti
iby: onz nzn iep
rxe: sws
aah: khc dvp xar iam
lfn: saf
wyz: yxb lvo
uoh: kti ssk you
sws: hzh bgi off
kzu: hzh off
ohx: ifr
xtq: mmi oqq nca
ehi: out
luk: kfr
wcj: yxb
ppk: exr apg lkq
okd: nxt unh odm dej
nud: jvj
rri: rkk yht
xwl: jzd gso uys rwo
okw: emf gla bgy ylc
ifh: lbl yab
wse: ssk you
scx: khi gvl
wqr: ohk tyg bpg ylm
cjd: wvv tam pky
kck: vcb tiq
mdx: qkc
nxt: ryx khi
zpf: ukl
ppp: prd iri
yop: nlw paj
you: ixw wnh hfa xrx ake gzk vcc taw
caa: dct emf gla ylc
cos: yab
kfr: xeg tkf
njb: dih ebc zpw fmx
yvx: wrm
wuc: aah rqa
xry: glr qhv
hck: gla dct ylc bgy
cvm: qem pcr
ubr: dnd
ctp: axj rri pac ijl
cps: brx gsd wwm
uoa: njb
dwa: zur cov zzm
rii: unh
jsg: xqw rii
kpn: pxf oot
ccr: oio gmn
xwz: tiq dcg vcb
yab: gck uoh wwg jzf
fvh: zce fft
put: bff bdo
lbl: zvj wwg uoh gck
jvj: ywo fgh
iep: xna
vyd: xgm
enl: fvh
uii: hzh off bgi
eoc: tca nzn kpj
zgx: mrd tld svd
rdl: bgy emf gla
tzd: dir
ldo: dej
prd: kzu
ptk: jch
mlp: luk bnr tae
pkj: nmr paj
oen: vbz
zpw: jbe
tru: wrm
rqx: odx fcf csa cmm rcj qcs prp pmj
mnu: mtf yiy
yiy: ary jbe btg ioq
axu: pct
mkc: awl
kti: nhr ctp qta wnh xrx fvq vcc bec naf sog jzw gjx ake iiq gzk ixw yxm mwn isy taw jsg hfa pjv tio
dwo: nss xkd idh
leo: btg
nru: out
pcr: out
vrd: izg
ajb: dct gla ylc
inc: svd mrd
iri: kzu uii sws
yuz: ylc bgy emf
bwx: vcp wuc qpp
knk: dwo cwq fqw pcq clg
lgq: idh xkd
bpg: ths dvj wse
cyb: mvt gyo
hsi: nca wrm
prp: glr
bft: tpq xgj pzr
lnn: mnu ohx lkq
zwz: nru dai
beh: ibu qnz vwc
qnz: uju
xna: jjl hcx lsz
cwq: idh nss
gqj: kxp dkc snm
nlw: whi ubr mvg
uju: idh
hnq: kti you ssk
ubt: ylc dct gla
dxs: wjc lbs
orj: xwb uzf xes
hty: idh
nxd: ztf drm gxu
vvf: tam pky
uuy: gla emf ylc bgy
nzn: xna
vjb: gmn vgz fnk oio fee
svr: rqx hlx yqu ixr
zil: tld svd
bnr: frn kfr dne
skt: mvt
yll: rhg gkn unj oyv
dkc: rjq agq ebp lgq
bqh: zzm zur
sdl: axa owf ncc
hjb: xwl uyr
dkn: gft bao
mfd: cnk hnb
qcs: mnm tzd feu
wyd: nss
ubd: ibf
tfw: bgy ylc dct emf
qrx: out
jzf: kti
axj: rrl wyx rkk yht
fvq: bfv kqg
wco: hty jdt deb
pmk: jbe btg ioq ary
bwn: xtq
xqq: ads pux epo
zup: zpw ebc
gso: out
ege: odm
xkd: uoa eut hnh wyz hlz fnq
pzd: qem pcr wlg
sog: rii ldo okd
hcx: bgy ylc dct emf gla
fee: knt fqx hnq
lgx: out
ixx: mvt
gze: azp
bfv: nnk gkn rhg unj
idh: eyb eut hlz tyw rxg wnf lkn ofh ukr wcj jsi tnn uoa jrc wyz
pum: kvb
cov: ary ioq vxk jbe
lbs: out
lkn: fsv zup
oko: vxk ioq jbe ary
iav: leo oko itg
dvp: you
awl: vcp vyd wuc
dak: axa owf
kgs: dih ebc
mwn: psf utw
ofh: tfb det
hnb: pux lyb epo qho
vii: paj
xar: you
jmi: hty
exr: mtf pmk
dnd: jdt
tyw: iav yxb
fcf: qkn nio nud
zzt: ssk you
gzk: yll bfv
fnk: fqx
zur: btg ary
ghl: uuy
ocr: tlx lnn
qho: idh xkd
owj: emf gla ylc
bjd: mmp bwn xpd
ads: nss
xtc: ehs dkn syx cai
zff: ogz cps
ikk: pzr tpq
ogz: gsd wwm
lmh: iby dxx eoc
iiq: oen nrm dii
ftp: out
egb: bnr
loc: gla dct bgy
lzx: wse dvj
rqa: dvp khc
anv: tiq pct vcb dcg
mfa: xpd mmp bwn
wrm: ywp kpn sku lmh kke fui zpf cjd yme gze sft ars mjk xau ags
csa: izs dak qzw ajy
tpg: emf gla bgy ylc
wnh: sar psf
pmj: qkn
yrt: xwl
smc: tss
yor: out
clg: idh
mja: yrt oyn hjb
dai: out
rrl: yss
ixw: xqw ldo okd
ywp: kck anv nfk axu xwz
dvi: sdl dak
tng: qgl jqu yql
qhv: ynr
dxx: kpj nzn iep
ynr: bwn mmp xpd
gzt: pcr
gby: lbs ehi vnc qto
kdz: dxs gby drm gxu
yfs: out
wpt: bgy gla
qzw: axa
bgy: beh xpw uzo vii dbj mdx csq
xvw: gxu ztf
wlg: out
hjq: yor ftp qrx
vcp: aah fek
wvv: okw mox
hqt: roe vjb dxf ccr ftz
lno: wrm
goz: dac wqr
waw: oqq mmi
gqv: vbz
xwb: yvx vxb xug
hlx: kaf odx cmm xry rsn tun prp csa gxr bcy opw fts dvi rcj
tiw: dwo cwq pcq clg
tnn: bqh dwa bbe
agq: nss
xrx: psf utw sar
tun: glr mfq
aip: drm gby ztf
pac: tgh rrl rkk
qpp: xgm fek aah
tbg: yrt oyn hjb
fzm: pzu kkp
ehs: cif bao qdg
ags: eoc
hie: dct gla
ifr: ary vxk jbe btg
gkn: aip kdz xvw
izg: qho ads
fgh: oqq
paj: jet whi
eoj: awl bwx gnc imx
dtr: out
ncc: bdr bve dxt lpx
zhx: gck jzf wwg zvj
unj: kdz xvw
lin: uyr xwl gww
tca: jba
kqg: nnk unj rhg gkn
psf: xmn hwm
bff: vix ubd saf
jrw: tpg ajb hie pww
pww: dct gla ylc bgy
xmn: kzo lin oyn
ywi: vbz
fek: zzt khc dvp xar iam
uob: out
fbh: frn kfr
qbp: saf vix
tld: isc wcg
gvl: cvm pzd
trj: cnk
ijl: tgh rrl rkk yht wyx
avv: pum fvh
tkf: kxl ftp yor qrx
itg: ary vxk ioq jbe
tgh: ixs
shk: out
jce: iri prd def rxe
uzo: fqs dkc snm
bao: vwu jap
kxl: out
uzf: xug vxb waw oxx yvx
khi: pzd gfd gzt
pux: nss
vxb: oqq nca
gmn: iot hnq
zzm: jbe btg ioq ary
nfk: dcg vcb pct tiq
ewm: dsa
wvf: qxl gnc bwx awl
nmr: jet ubr mvg
lpl: tlx ppk lnn
ebp: xkd
kqx: lyb pux ads
mvt: dac gio wqr
fqx: kti you
isy: rac mlp amh
frn: tkf hjq xeg
ywo: wrm
amh: fbh wwr luk bnr
xsk: xkd nss idh
kkp: kvl tss
gjx: kqg
bdr: mmi nca wrm
emf: bft pkj put vii zrv hfn uzo beh ptk gqj
izs: ncc owf
xgj: vrd bqn
xpw: ibu qnz
uys: out
fsv: ebc
ekq: nca oqq mmi
scd: vxk ioq jbe
tpq: vrd bqn
tiq: hck wpt caa ywe
tgl: goz mvt gyo
jzd: out
ylc: ptk uzo gqj zrv vii xhy wss hfn ikk bft csq pkj
gyo: gio
zze: ywo ekq
tss: lgx uob vip
fny: ibu vwc
dvj: you ssk
pnf: lln gic
ssk: wnh yxm iiq gzk sog jsg gjx tio pjv fvq isy naf taw bec
fui: azp iso jrw
oug: zwz tss
gic: oqq mmi
khc: you kti
lsz: bgy emf dct
fts: qzw izs
det: tlx ppk
nrm: fzm apf vbz
vcc: psf
yqu: xry tun qcs prp odx kaf cmm csa gxr bcy opw dvi fts
jrc: ocr det tfb lpl
xau: iby eoc dxx
opw: nud
ibf: cwq pcq clg
wwr: frn dne
ohk: ths kji
vcb: ywe caa wpt
gww: uys jzd rwo
mmp: dsr tvk
rac: wwr
gck: ssk
vnc: out
rxg: zup kgs fsv
jvl: bao cif
dac: lzx ohk tyg bpg
mjk: eui
yme: fvh ukl mht
dii: fzm
dsa: kzu
adi: vxk ary
oxx: mmi oqq nca wrm
sar: hwm mja tbg xmn
tyg: dvj kji ths
vwc: uju wyd
off: you ssk
qta: xqw
odm: khi
tvk: mmi nca oqq wrm
kzo: gww
dbj: fqs snm dkc
azp: pww hie ajb
ibu: xsk aof
dsr: wrm nca oqq mmi
cif: vwu jap uvw
gfd: wlg pcr
vgn: ylc bgy gla
dih: jbe btg vxk ioq ary
ynh: hki zhx
lkq: wzy
pcq: xkd nss
pzu: kvl
eyb: bqh dwa
tio: ooj pac
dxf: fnk
ary: wvf cyb azq kgc hgz dkh llx eoj tek els zil tgl bpx
wwm: pnb rdl tfw yuz
dxt: mmi oqq wrm
ufr: wwr fbh tae luk
epo: idh xkd nss
naf: rii ege
ftz: fee
xqw: odm dej scx
mox: dct
mht: ghl kvb
rhg: aip kdz
vxk: wvf cyb mkc zgx skt qau ixx azq hgz llx zil eoj
taw: egb amh mlp ufr
bec: kqg yll bfv
ioq: zgx qau tgl dge tek eoj azq hqt ixx
kxp: rjq lgq
fft: uuy pms loc hsf
jsi: syx
ylm: wse
bqn: kqx xqq
zce: uuy vgn hsf
onz: xna jba lit
qau: tzy
azq: roe vjb ccr
ztf: lbs
wcg: lbl yab hki
ryx: gzt gfd cvm pzd
nca: xau mjk ags yme gze sft enl zpf kke fui kpn vvf lqy
snm: ebp lgq rjq agq
whi: jmi rzu wco
vix: knk
yfr: out
bdo: saf vix
jba: hob
oio: knt
gxu: qto vnc lbs
xpd: tvk
cnk: ads epo lyb pux
rzu: hty
qto: out
zvj: kti you ssk
gla: dbj csq mdx pkj bft ikk hfn yop wss put fny vii zrv uzo beh ptk gqj
rwo: out
hgz: mrd
bcy: xes
uyr: gso jzd
apg: ifr pmk wzy yiy
jch: agq lgq ebp
xeg: shk qrx kxl yor ftp
qzz: ioq vxk jbe
rjq: xkd idh
ake: egb
wnf: lvo
oyn: uyr
bpx: ppp
xhy: lja tpq xgj
cmm: xwb uzf xes
pzr: trj vrd
kji: ssk you kti
fqs: rjq ebp
uvw: ary btg ioq vxk
yxm: oen ywi nrm dii
hki: jzf
csq: tpq lja pzr
ars: iso
zrv: pzr xgj lja tpq
jqu: awi yfs
iso: tpg hie
gio: bpg ohk tyg lzx
ehl: rxe def iri dsa prd
oot: cps ogz
axa: bve dxt qys lpx
pct: wpt ywe caa
kqk: hty jdt deb
urb: lno tru
btg: dkh inc zil tgl eoj tek cyb mkc qau azq kgc ixx hqt
lpx: nca
pms: emf gla ylc
qys: wrm nca oqq mmi
ssb: yrt
nnk: nxd xvw aip
wjc: out
pnb: dct emf gla bgy
oqq: cjd sft zpf enl mjk ags ywp vvf kke sku lmh
rkk: tng ixs
vip: out
glr: mfa
ywe: bgy ylc emf
mnm: dir urb
hwm: lin
aof: xkd idh
knt: kti
mmi: cjd gze avv ywp ars lqy vvf kpn
nio: zze zcv
xes: yvx oxx vxb
vgz: hnq fqx knt
hnh: njb kgs fsv zup
apf: kkp pzu oug
qkc: vix ubd
dne: hjq xeg
rsn: feu tzd
xug: mmi oqq nca wrm
qxl: vyd qpp
wzy: btg jbe
lyb: nss xkd
ths: you
roe: vgz fee oio
wss: qbp
gsd: pnb
ukr: tfb lpl ocr
mrd: ifh ynh cos isc wcg
bve: mmi nca wrm
fnq: bqh bbe
dir: hsi tru lno
jzw: nrm ywi oen gqv
mvg: dnd jmi wco
syx: qdg bao cif gft
lqy: anv axu xwz
llx: qxl gnc awl
yss: qgl
mtf: ary vxk btg jbe
tlx: ohx mnu apg
pjv: axj ooj ijl
xgm: zzt khc iam xar
brx: yuz tfw rdl
lln: mmi oqq wrm
dkh: mrd
yxb: itg adi scd

View file

@ -0,0 +1,10 @@
aaa: you hhh
you: bbb ccc
bbb: ddd eee
ccc: ddd eee fff
ddd: ggg
eee: out
fff: out
ggg: out
hhh: ccc fff iii
iii: out

58
11/main.py Executable file
View file

@ -0,0 +1,58 @@
#!/usr/bin/env python3
from logging import debug, DEBUG, basicConfig
from sys import argv
io: dict[str, list[str]] = {}
paths: list[list[str]] = []
def parse_input(input_filepath: str) -> dict[str, list[str]]:
with open(file=input_filepath, mode="r") as input_file:
input_data: list[str] = input_file.readlines()
debug(f"\n\nRAW INPUT: {input_data}\n\n")
input_dict = {}
for line in input_data:
input_dict[line.strip().split(":")[0]] = line.strip().split(" ")[1:]
return input_dict
def traverse_path(path: list[str]):
global paths
if path[len(path) - 1] == "out":
paths.append(path)
return
elif path[len(path) - 1] in path[:-1]:
return
for p in io[path[len(path) - 1]]:
traverse_path(path + [p])
def find_paths():
global paths
path = ["you"]
traverse_path(path)
def main() -> None:
global io
global paths
input_filepath = "input/server_rack.txt"
io = parse_input(input_filepath)
debug(f"INPUT DICT: {io}")
find_paths()
debug(f"PATHS FOUND: {paths}")
print(f'There are {len(paths)} paths from "you" to "out"')
return
if __name__ == "__main__":
if "-d" in argv or "--debug" in argv:
basicConfig(filename="debug.log", level=DEBUG)
main()
exit(0)