2025 Day 11 Complete!

This commit is contained in:
2025-12-11 09:30:21 -06:00
parent 4e09d431cb
commit 827f0d8a72
5 changed files with 839 additions and 0 deletions

574
2025/day11/input Normal file
View File

@@ -0,0 +1,574 @@
fxp: udl vii hgb qmy
ixc: cje lra jhu
sgn: apv vbc
wua: knq
fnr: csd awl vvj fyx cvi xhb mvn guw wid vbp uvk krt oil izj zlh gwv
krt: grp cml vxt
hwj: laq jlg
rus: out
oag: wrc gpp
uos: zqg aiu gdx
xpu: qpb zqg gdx aiu
mdb: fnr mwu ozd
yrt: jlg ifs laq
eao: txi jmk xee sta knq
qcj: ivn mwb nrx lgx
wks: fyy lyd
xso: rqn flj fak
ucp: wpn mpy
zcf: knq sta xee jmk
sdr: vfy gsc wfb
ggn: brb ylm kdl rnk
tky: wcx ytk hbp xjh dne
kzl: sft sof utn
epc: uhn cqf xwv
srh: shh mei
uqe: sft
htw: hmf aia wsm
wid: qwo
daz: yvs
bdl: ipm kkp
xay: mpi
bsb: epc jpb cqs ixc cur ril ybr
mwb: out
cxr: yvs
ruf: jax uvl ctm
vtp: rbo
tqs: kdl pje ylm brb
thb: out
ljy: ael tqw
tkl: ssx yds
ozd: itv csd vvj fyx awl xhb mvn guw vbp hzn yft mfv izj oil uvk cui krt myo fqn gwv zlh
uhn: lzx dac iqf
zad: wvh tmc ece
qlf: gce sgn fni
kcf: dka pvw uzw
uat: bda mkd
aai: gtk gkf cuk qcj
mfv: cml
qlv: wdr sbi ihm nww jkx bud qxb
paz: kbq osk
rys: iwh
gdx: out
hco: cuk gkf
gte: wks fft
zrw: iur mei shh
izj: elj wrh vnz uss
lur: jpb zib zwl uzn epc nta cur cqs ybr tkl sle
hgu: jmk xee
okf: ypu gye qzd
mli: dir mzw
shh: rjp
nhj: ael tqw
pbm: fxp dfl
vnz: che
vim: bmu
puz: dcl ofd
zrg: ihy
scj: ysr knu
pjc: uvl jax bvs
tbn: uat lkd fdg
rcp: okf
min: out
poc: rta yvs rbo
kde: bcz
wct: bvs jax uvl
wvh: brg
wrh: frd kbe ihy
fak: jwl lzu dni
zaq: jlg ifs laq ppm
yun: kde kob qmz uxn
boa: yql brg fbt sgu
izk: czt
xyj: out
xhk: ril cur yun pmu nta epc uzn zwl rxn sle tkl puz ixc cqs nqo jpb zzk
yql: mjy cfo bpj vqp
dcl: nbq
ogv: utn sof pld
rtp: gpp gmb eka
nki: jmk xee knq
agn: jly alh ola zcf
vrp: hnw
lts: yql fbt sgu
myo: rhq kvi
jpb: dcl xuk
dju: vrt ozd fnr you mwu
hnw: hmf
rhq: ehc
dij: knq sta xee txi
awl: vxt
knu: bsb lur igu
dfo: pab
ewm: sgn fni gce
fed: osk
nwy: ppm laq qgn
wby: you mwu fnr ozd
dir: jmn gpu
mjy: wfb iyi vfy
fcj: zkn hgq szd
mzo: out
lzl: xhk
czt: xcu xvu
tyq: gsc wfb kjq iyi
tda: rbo
ltv: srf vim mli slg
iwh: qpo
hnn: bsb fpb lur
fan: sgu
vqp: zow rqn fak flj wke
ltm: pvm xmq
cyc: dfl fxp
kvi: gwp jnw
srd: ipm jrk
lkv: fnr vrt
shb: hxf thb rus
xuk: zxj
ifs: ryr gep wck lcp fwn gdh foj
ynz: uji
igh: sta jmk
fyx: krd
gkf: ivn mwb axi
bcz: ftm rdm wby lkv
qeg: jlg qgn ifs ppm
goq: icv
qmy: out
wxl: igh heh hvs
kbe: dzp ybw
hxf: out
tqw: rdn nac
bmu: jmn gkl xfg
cqf: lzx
phn: rbi fjm
ykt: sgu fbt brg
zqg: out
ain: mpj
esz: jmk txi
bpj: rqn zow flj wke fak
qaj: gtk gkf cuk qcj
kul: ckh
rss: dka nwy
gaq: ifs laq jlg
ehc: hco qaj qup
saf: mwu you fnr vrt
mub: bee
tns: lyd fyy bqw
ssx: utb nel thp hhu wbs
mwd: qeg gpo
lgx: out
lyr: ozd
knq: qlf tnt bhv aeo ljy dmr
php: sgu
qmz: fer bcz
oab: lup
sof: ikt
lte: ytk hbp xjh dne wcx
hvs: xee txi knq
bnw: yhu qhx
jnw: aai hco qup nxs
uge: bqw fyy
cml: sid txz qgh
sle: uwp jhu lra ltm
uoi: yql sgu
tcu: eao hgu
aaj: laq ppm
bqy: you
gye: qpo
csx: you mwu fnr vrt
uut: dne xjh wcx
tat: kul jxm dxd shb wtu
sbi: yvn mub
uss: suv ihy kbe
def: wrc eka gpp
rso: out
dmr: oab kbr jaa
jhu: xmq
qxb: mub sfu fhq yvn
nww: htw
szd: zfx
gpp: qvv min rso iey
sft: fzl hnn ikt
fwn: mei iur
giz: txi sta jmk
you: hzn izj oil krt wid awl vbp csd
yvs: fpb lur xhk bsb
mci: jrk ipm kkp
nqo: uwp jhu cje
alh: jmk xee sta txi
ejz: fjm rbi fim
jnd: wua esz
igu: nta pmu yun cur ril ybr rxn zwl uzn fnn cqs ixc puz sle zzk jpb nqo zib
yft: tky kcj
vxt: sid
dni: hvs heh mpi
jwy: wtu
ypu: yrt
rqn: lzu dni
yfw: bag puu yba
vgx: amv gte qwd hpw
hgb: out
gwp: nxs qaj
obo: fbt
yhu: xkn jai boa
phi: bqy ftm
cmi: xyj
mvn: ruf btp
utn: ikt
mkd: zcf giz alh
eff: zow rqn wke flj
dml: yql brg sgu fbt
ivn: out
fft: fyy lyd
vbp: vnz
cuk: ivn lgx axi nrx
brb: lts bcq xsx fan
ckh: out
cui: zrg elj wrh vnz uss
ybw: pxr
sfu: bee ynz
aov: gyl xyj
yxq: jsh smb qhx
hgq: xvu
yba: pab xbk bvq
ser: mzo vii hgb qmy
xfg: txi xee
iey: out
vhi: jaa kbr evt ndc
kcj: hbp
qmf: zfx
tum: sgu brg yql
sva: her yfw anr
ctm: cyc
sta: ewm izk bhv tnt vhi hkq ljy waa aeo ofz xhd fcj gwo qlf nhj
jai: fbt sgu
iyj: dka kez nwy
ofd: tlb
qff: rcp osk
wbs: fnr you mwu vrt ozd
ulj: hrd tcu uqb
uvk: vxt grp qgy
txz: irm jwy fmr
yco: out
hlo: fxp ser
gsc: ldf yqe ulj
vpo: zxj tlb
jgf: laq
hns: uoi tmc ece
cvi: gpt otp sva
cur: kob kde qmz
lre: ipm
ryr: wpn fdl
wrc: iey yco
ftq: fvb kbp scb oap cvl
qwd: tns wks uge
laq: ryr nhf srh zrw bvv xje gep phn ejz ucp vgx foj gdh tph
fyy: vin obo dml php tum
iyi: yqe ldf axk
wck: mei iur
lzu: mpi
btp: uvl ctm bvs jax
zib: jhu lra cje ltm uwp
dac: lyr csx saf rmg vns
pje: lts ykt bcq
awp: oap kbp
iqf: lyr vns
fac: qgn
iiu: lre
gmb: min rso
pxk: wsm
icv: jlg ifs laq
tnt: oab ndc kbr evt
guw: otp qwo
rjp: fbt sgu
iqh: srf vim mli slg
xje: mpy
cmt: amv gte
kob: bcz fer
fzl: igu fpb
bud: rss fxl
lup: fvb cvl
bpc: jsh smb yhu
jui: fnr mwu you vrt ozd
wmr: tmc uoi wvh
ulo: yql brg sgu
quz: hns avo euq zad
avo: wvh uoi tmc
wtu: rus thb hxf ckh
jsh: xkn ulo boa ahv
bbz: mwd imq
hpw: fft tns uge
nbq: gcg jui zqy
cel: fxp dfl
jrk: lsu nki wgx
qzd: acm yrt qpo
xcu: ain
qxl: lur igu bsb
pmu: xuk dcl ofd
ahv: fbt brg
gtk: lgx nrx
vrt: yft izj uvk cui mfv oil myo hzn gwv zlh fqn guw vbp wid xhb mvn csd itv cvi fyx awl
gcg: vrt
ppm: bvv zrw vis dcr wck ryr gdh tph ucp ejz uuh gep
nel: ozd fnr
udl: out
gkl: knq txi jmk xee
vvj: btp pjc wct
adp: cxr vtp daz poc
zxj: jui gcg zqy
dka: ifs laq qgn jlg
bhl: xpu uos
mzw: jmn xfg
ycr: qmf hgq szd czt
zfx: dbo ain scj
jax: pbm bxg cel cyc hlo
yqe: jnd uqb hrd
lyd: dml php vin obo
euq: uoi ece
hzn: wct
gwv: uut tky lte
wgx: sta xee knq
xhd: phh ael
axk: tcu uqb
ece: sgu fbt
waa: jaa
jaa: ftq lup awp
cje: xmq pvm
lln: bbz qff dkw paz htf fhv vrp jkx ihm bud jef eej
bvs: pbm cel
zow: xay wxl
pvm: fnr you vrt ozd
dbo: knu
vbc: pld
xpp: iwh qzd gye
gep: fdl
qqj: xhk bsb lur fpb
wpo: fdg
qgy: sid qgh
dne: oag def
oap: igu lur bsb xhk
bee: oxm uji tpb jgf
dxd: rus thb
mjp: jgf mkp
ytc: brg yql sgu fbt
zlh: krd kvi rhq
wcx: def oag rtp
svr: qlv lln qwc
ola: sta xee jmk txi
qwc: jkx ihm nww sbi bud fed jef eej bbz qff nfj paz fhv vrp wdr
gce: kzl ogv
uxn: phi bcz
vnd: fbt brg
xee: uni hkq ljy qlf aeo
zaz: cmi
gpt: yfw
dkm: gaq fac aaj zaq
kjq: sgy
oba: qgn jlg
slg: dir
fvb: xhk bsb igu lur
csd: gpt otp qwo
kkp: dij pbf
osk: xpp rys
hmf: pde luh dkm
uwn: lkd
crd: ikt hnn fzl
acm: jlg qgn laq
utb: fnr mwu you
lcp: rbi
mby: out
fbt: tbn iiu uxu sdr wyl uwn xao ltv wpo mjy xso
fhq: ynz mjp
qhx: ahv boa ulo jai
wpn: bpo
xbk: mby
axi: out
rbi: yxq bnw
dcr: fjm
nxs: gkf cuk qcj
rxn: uwp jhu lra ltm
kez: ifs
ikt: xhk bsb igu fpb
nhf: pje
lsu: xee sta jmk
ejp: oba aaj gaq
tph: rnk brb
bpo: wmr euq
ybr: uhn cqf
pde: gaq
kbp: xhk bsb
fhv: pxk htw
lkd: bda mkd agn bhh
fmr: shb wtu kul
ftm: ozd vrt
aeo: szd qmf hgq
dhu: ogv apv vbc kzl
irh: mpj ysr qxl
thp: you ozd vrt
bda: alh jly ola zcf giz
uzw: laq ifs qgn
scb: bsb
aeb: wbs hhu nel utb
vin: brg
rnk: fan
sid: jwy fmr irm
uxu: slg mli vim srf
anr: yba puu zaz
kbq: rys
jwl: igh
vis: amv hpw gte qwd
fer: lkv wby rdm bqy ftm
kwv: ola jly zcf
nac: lur
xvu: phc irh
luh: aaj zaq oba gaq
bcq: fbt sgu brg yql
puu: bvq xbk
mei: rjp ytc vnd
lyf: igu xhk bsb
tmc: fbt
suv: rzo dzp qig bhl
qwo: anr
uuh: iur
dfl: mzo vii
hrd: esz wua
eka: min rso qvv yco
qpb: out
zqy: you mwu
evt: lup
bxg: dfl fxp
uni: oab kbr evt jaa
uwp: xmq dju
rdm: ozd vrt you fnr
gwo: poc
dto: bsb xhk lur fpb
ofz: dhu fni sgn
fjm: bpc
wsm: pde luh ejp
tmb: amv qwd
kdl: bcq ykt lts
jxm: ckh hxf
dyl: euq avo wmr hns
pxr: zqg
xsx: yql brg
wdr: rss fxl kcf
frd: rzo qig dzp bhl
tlb: zqy mdb
yvn: ynz mjp
bvv: fim
xjh: oag def
jmk: vhi bhv tnt izk ewm adp nhj qlf gwo fcj xhd ofz aeo ycr ljy hkq
smb: ahv xkn ulo
hbp: def rtp
fdl: quz bpo
flj: xay wxl
mkp: qgn jlg
fdg: mkd agn bda kwv bhh
mpy: bpo quz dyl
fim: yxq bnw bpc
mwu: xhb yft myo cui gwv mvn fqn fyx vbp wid
yds: hhu nel
her: dfo yba puu bag
ipm: nki wgx lsu pbf
wfb: ulj axk ldf
bvq: xyj
hhu: ozd you fnr
vfy: ulj yqe ldf axk
pld: qqj fzl
zkn: xvu zfx xcu
rbo: fpb lur
zzk: yds aeb
rdn: bsb igu fpb
ril: qmz uxn kde kob
foj: fdl
xhb: krd kvi
htf: osk rcp
nrx: out
zwl: xwv uhn cqf
gyl: out
dkw: rcp osk
sgu: wyl iiu vqp bpj sdr tyq tbn cfo eff wpo xso xao ltv
pbf: sta
ytk: oag
irm: shb kul
brg: wpo iqh tyq tbn uwn
dzp: xpu uos
ufe: utb nel hhu
gpo: jlg
ihy: bhl rzo dzp qig
jlg: srh tqs bvv tmb dcr
qgh: jwy fmr tat irm
aiu: out
itv: grp qgy
cqs: yds ufe ssx
mpj: igu xhk
pvw: ppm laq
mpi: xee knq
pab: gyl
jef: rss kcf iyj
qig: pxr xpu
lra: pvm
che: rzo qig dzp ybw
xao: rqn fak wke
nta: vpo xuk
rta: lur igu bsb
qvv: out
fpb: puz cqs ixc fnn tkl nqo jpb zzk zib yun cur pmu nta ybr ril uzn zwl
imq: hwj qeg gpo
jkx: fhq mub sfu
ael: lzl dto
wyl: srd bdl mci
hkq: zkn czt
apv: utn crd sof pld
kbr: ftq
xwv: iqf lzx
cfo: lre bdl srd
ysr: fpb xhk bsb
aia: dkm ejp
ndc: awp lup ftq
bhh: ola
bhv: poc daz vtp tda cxr
uqb: hgu
xkn: yql
eej: imq
ihm: htw pxk
phh: rdn lyf nac
cvl: fpb igu lur xhk
rzo: uos
uzn: kde
jly: jmk sta xee knq
otp: her
vii: out
fni: ogv uqe kzl
phc: ysr
srf: bmu mzw
fnn: xwv
rmg: you
heh: knq jmk xee txi
elj: frd kbe che suv
fxl: dka kez pvw uzw
sgy: uqb
vns: vrt fnr
gdh: hpw
bag: pab aov xbk cmi
bqw: dml tum php
txi: aeo dmr adp waa nhj uni
krd: gwp
wke: dni wxl jwl
ldf: uqb tcu hrd
jmn: knq xee jmk
ylm: fan bcq lts
qpo: ppm laq qgn jlg
qgn: ucp ejz phn cmt lcp uuh xje tqs gep foj gdh tph nhf fwn dcr wck ryr bvv tmb zrw srh vis ggn
tpb: ifs laq
uvl: hlo cel bxg pbm
iur: rjp vnd ytc
oil: uut lte
oxm: ppm laq qgn jlg
grp: qgh sid
lzx: vns csx saf
uji: qgn jlg ppm laq
amv: wks uge tns
qup: qcj
xmq: mwu you
fqn: sva
gpu: sta xee jmk txi
nfj: mwd goq

101
2025/day11/main.go Normal file
View File

@@ -0,0 +1,101 @@
package main
import (
"fmt"
"slices"
"strings"
h "git.bullercodeworks.com/brian/adventofcode/helpers"
)
func main() {
inp := h.StdinToStringSlice()
part1(inp)
fmt.Println()
part2(inp)
}
func part1(inp []string) {
m := parseInput(inp)
cache = make(map[string]int)
fmt.Println("# Part 1")
fmt.Println(findPaths("you", "out", m))
}
func part2(inp []string) {
m := parseInput(inp)
fmt.Println("# Part 2")
fmt.Println(findPaths2(m, m["svr"], false, false, map[track]int{}))
}
type track struct {
node string
fft, dac bool
}
func parseInput(inp []string) map[string][]string {
ret := make(map[string][]string)
for i := range inp {
pts := strings.Fields(inp[i])
st := pts[0][:len(pts[0])-1]
ret[st] = pts[1:]
}
return ret
}
var cache map[string]int
func findPaths(start, end string, m map[string][]string) int {
if v, ok := cache[start]; ok {
return v
}
var ret int
v := m[start]
for i := range v {
if v[i] == end {
ret++
} else {
ret += findPaths(v[i], end, m)
}
}
cache[start] = ret
return ret
}
func findPaths2(m map[string][]string, vals []string, fft, dac bool, cache map[track]int) int {
var ret int
if slices.Contains(vals, "out") {
if fft && dac {
return 1
}
return 0
}
for _, i := range vals {
hfft, hdac := fft, dac
t := track{
node: i,
fft: hfft,
dac: hdac,
}
if v, ok := cache[t]; ok {
ret += v
continue
}
switch i {
case "fft":
hfft = true
case "dac":
hdac = true
}
t = track{
node: i,
fft: hfft,
dac: hdac,
}
cache[t] = findPaths2(m, m[i], hfft, hdac, cache)
ret += cache[t]
}
return ret
}

141
2025/day11/problem Normal file
View File

@@ -0,0 +1,141 @@
[1]Advent of Code
br0xen [7](AoC++) 22*
--- 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:
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?
Your puzzle answer was 585.
--- 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 [16]digital-to-analog converter) and fft (a device
which performs a [17]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:
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:
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?
Your puzzle answer was 349322478796032.
Both parts of this puzzle are complete! They provide two gold stars: **
At this point, you should [18]return to your Advent calendar and try
another puzzle.
If you still want to see it, you can [19]get your puzzle input.
References
Visible links
1. https://adventofcode.com/
2. https://adventofcode.com/2025/about
3. https://adventofcode.com/2025/events
4. https://adventofcode.com/2025/shop
5. https://adventofcode.com/2025/settings
6. https://adventofcode.com/2025/auth/logout
7. Advent of Code Supporter
https://adventofcode.com/2025/support
8. https://adventofcode.com/2025
9. https://adventofcode.com/2025
10. https://adventofcode.com/2025/support
11. https://adventofcode.com/2025/sponsors
12. https://adventofcode.com/2025/leaderboard/private
13. https://adventofcode.com/2025/stats
14. https://adventofcode.com/2025/sponsors
16. https://en.wikipedia.org/wiki/Digital-to-analog_converter
17. https://en.wikipedia.org/wiki/Fast_Fourier_transform
18. https://adventofcode.com/2025
19. https://adventofcode.com/2025/day/11/input

10
2025/day11/testinput Normal file
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

13
2025/day11/testinput2 Normal file
View File

@@ -0,0 +1,13 @@
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