diff --git a/2025/day11/input b/2025/day11/input new file mode 100644 index 0000000..c1adfe6 --- /dev/null +++ b/2025/day11/input @@ -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 diff --git a/2025/day11/main.go b/2025/day11/main.go new file mode 100644 index 0000000..7acc632 --- /dev/null +++ b/2025/day11/main.go @@ -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 +} diff --git a/2025/day11/problem b/2025/day11/problem new file mode 100644 index 0000000..2ea7f87 --- /dev/null +++ b/2025/day11/problem @@ -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 diff --git a/2025/day11/testinput b/2025/day11/testinput new file mode 100644 index 0000000..01e5b43 --- /dev/null +++ b/2025/day11/testinput @@ -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 diff --git a/2025/day11/testinput2 b/2025/day11/testinput2 new file mode 100644 index 0000000..d787665 --- /dev/null +++ b/2025/day11/testinput2 @@ -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