diff --git a/day11.py b/day11.py new file mode 100644 index 0000000..da58184 --- /dev/null +++ b/day11.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python + +# https://adventofcode.com/2025/day/11 + +f = open("day11input.txt", "r") +#f = open("testinput.txt", "r") + +graph = {} +for line in f.readlines(): + node, outputs = line.strip("\n").split(":") + graph[node] = outputs.strip().split(" ") + + +def part1(current_path: list[str] | str, end: str) -> None: + if isinstance(current_path, str): + current_path = [current_path] + + node = current_path[-1] + + # check for dead ends + if node not in graph.keys(): + return + + # check if end node is reachable from current node + if end in graph[node]: + found_paths.append(current_path + [end]) + return + + # check all outputs + for output in graph[node]: + # avoid loops + if output in current_path: + continue + part1(current_path + [output], end) + + + +def part2(start: str, end: str) -> int: + print(f"STARTING BACKWARDS SEARCH FROM {end} TO {start}") + num_paths = {end: 0} + + def backsearch(target_node: str, current_node: str) -> int: + # init num_paths value for current node + num_paths[current_node] = 0 + + # find nodes with edges into current node + inputs = list(filter(lambda n: current_node in graph[n], graph.keys())) + + # check if current_node is a dead end + if len(inputs) == 0: + return + + # loop over input nodes + for node in inputs: + # check if node is the target node + if node == target_node: + num_paths[current_node] = 1 + + # input node was visited already + elif node in num_paths.keys(): + num_paths[current_node] += num_paths[node] + + # input node was not yet visited + else: + backsearch(target_node, node) + num_paths[current_node] += num_paths[node] + + return + + backsearch(start, end) + return num_paths[end] + + + + +# part 1 +found_paths = [] +part1("you", "out") +print(len(found_paths)) + +# part2 +svr2dac = part2("svr", "dac") +print(svr2dac) +dac2fft = part2("dac", "fft") +print(dac2fft) +fft2out = part2("fft", "out") +print(fft2out) +svr2fft = part2("svr", "fft") +print(svr2fft) +fft2dac = part2("fft", "dac") +print(fft2dac) +dac2out = part2("dac", "out") +print(dac2out) + +print("final result:", svr2dac * dac2fft * fft2out + svr2fft * fft2dac * dac2out) diff --git a/day11input.txt b/day11input.txt new file mode 100644 index 0000000..d147a88 --- /dev/null +++ b/day11input.txt @@ -0,0 +1,647 @@ +dfa: nbz qhk kzw +nzm: ors +coh: hvt mrm yvu +grm: jon +jcu: dco reg +hgd: zum ets rml +yqr: gbd you dev oki +zia: fft gpd +wgs: mwd +rma: smb +pfh: jgr +kva: wkb elg +ggl: qcf hvt +egb: hzs dwx +nwk: out +owz: nwk abc +loe: adu roz vis +qdw: npt you dev +esy: pbj gyu nph jeh +fdg: ykn epk jau +piz: dxz jbc swk +bby: pxp +qcf: enj qhf sav siy tbn ccn +req: ckp lew +you: vhr jzm onn muy wsz pba nqx chd uvn fgl leo tvv ajb +epk: gbd npt dev oki +ttu: hzs dwx weu dsm +ajb: knu +zis: owr wie sdo +baz: icr xxa +wof: hht wwo hpk +yde: aha acu gob +ugq: bpa +gxo: muw gcw dca kja +cnf: swk +kby: spx suh ats +qgt: php zqq jva pkm +oeh: huq ahv gun van +osl: qcf hvt yvu +hya: gob szv aha ors acu +vlc: lfr vfm xsh +hqt: ptd nid +ifl: yvu qcf +nba: ddz hsk are wkt +gob: xsh vfm lfr +ckc: zia tub +biu: qrc +ekm: wgs mit +oki: jcu nqx mok uvn pph pfh ajb tvv vhr onn avk jzm vcb muy pba qvl chd ssk leo dnj nno fgl wqz vyw wsz +ytg: isi thh csk +fwt: xzk guu obh +ivc: xog +pkm: xxa icr +wux: qcf yvu hvt mrm +yjo: spx +zqq: xxa ptd icr +scc: xsh +jbc: bby grt +ssk: ugq rhm +epo: bgi avt vrq +hmi: awf +uhe: xog ble +dla: yaa shj +hok: ryk anu qqm mag zes uhe ygh kaj jif syl dla qdf nle vao udl dvq xil +ors: lfr dhl xsh +vrt: xsh lfr +onn: wfl +xhi: smb +wol: nqc fga frw +mfc: wyu hhq +uku: obh xzk wcz +vyw: ekm +tmh: mrm +lfr: lvh dly ibi yee ywp ksa ogz rog zph fks nnp qnp zsg drv +vhh: dhl +rhb: jur cgb +ovf: dln bvr +azm: vzw yfz osl bmb +ken: vso ybh ifl ofa +for: scc icp +fuj: nmg zia dls +scb: ijp ekw +lme: mod ygu +cev: til yox axf +fks: red qip sda +szv: vfm dhl xsh +ygf: vnf xvj hgd +ygu: icr ptd xxa +zzz: qbf kik +weh: out +ljf: xvj ybc +php: ptd nid +wsx: rgq +wnb: snh wct +suh: vfm +are: ilu +qec: yuj lwk tso +uys: vip +guu: out +nkj: loi jfl ejf +ddw: asd yot owz +tid: bgi qzw xiv +dmu: kgk gxo ebz yaa +ptd: der inq jwg piz klp qag mtj yyf emp foa fgy ift zii lwe ddd gbz +qhv: dfd tnj vkj +nmv: mwb vkj dfd +isi: uba izt mdn xhi +jau: npt gbd oki +bhg: vas rnl ora pnt +mcg: otw mfq +wkr: dev oki npt gbd +vis: oih +kzw: jur +wwo: ivg acz +ykn: you oki dev +oen: hvt +dsu: ytg cim +kzx: byq few btc rrz +mrm: qgx tbn dsu kbc ccn rci crh neh wnb enj sav xur mfc azx qgu qiq qhf apg siy +ucs: ead rhb +swk: grt bby +nvu: hvt qcf +jon: vhh vlc +few: out +vgb: lfr dhl xsh +gdd: hvt yvu +osi: jvm zmz ddw +thh: izt rma uba +dys: wbu ucs bpf +vso: hvt mrm qcf +npt: wqz fgl nno dnj leo ssk chd wsz vyw tvv ajb pfh pph uvn mok jcu nqx biu qvl pba muy vcb jzm avk onn vhr +dac: epk kbw jau +izj: mea hmi +qrc: jxk epv +vaf: qgt +ddd: bhg bcj +pph: jgr rhm ugq +nfh: qmt csk thh +qdf: hyp +ets: out +xgk: dhl xsh +boa: hpk hht +ppr: wof +ble: lht ugz bpr +dyg: qmt +dca: cpe eyi +hjm: nep yya kik +zes: hyp uzy +vgl: hfm +vkp: mgv iah +vsh: cts xtl xsp +rrz: out +ckp: hsk ddz kqe +mxe: yuj +tre: luh +paz: wwo +luh: wcg +bvv: vxi etm +qzw: fri +hht: vgl yjo acz kby +itk: sdc alv tjv +xyo: hpz axf yox yyn +xkh: hhq zdi wyu qix +kgk: muw +mit: fsf mvk mwd +qse: lqt lxh wil +ofa: hvt mrm yvu qcf +ior: icr ptd nid xxa +syz: duo +vrq: rxb pfk fri +snh: hyg nop vaf sgh +csk: uba rma izt mdn xhi +dpw: jur zod +xwy: lsk bbi +mvk: tlo itk juq +wbu: rhb +otw: loi tcv +gpd: vrt scc +xog: ugz lht bpr bvv +nbr: byq few +hzt: wsx fms +sda: tdh bye eif ggl +byq: out +gbd: uvn pph mok jcu nqx ajb tvv pfh onn avk jzm vhr pba qvl biu vcb muy chd ssk wqz leo nno dnj vyw wsz +rhj: paz +kaj: dfa zzp jky ost +zsg: rwo sqf xyg +reg: hoi epv +oee: bne +jha: gyu jeh +chd: wfl +yyf: poh zzz hjm +wil: ahz +dfd: oki you gbd npt +mfj: bgi vrq xiv +fri: vyd +qvl: jgr +oyd: vfm lfr dhl +smg: oki dev you gbd +bco: amy kzx +ats: dhl vfm +cqs: lfr +tzw: oen gnu qxh gdd +rwc: mrp jbc +iwx: qlz bss awf +dnj: reg qrc dco +ibi: vrm elg +dly: ykj qip sda +jur: izj hfj tid epo ckc gwu eei syz tlb +ast: php jva zqq uxg +rnl: ngy eiq +zzp: kzw hed lfk qhk +nkp: tnj vkj +viz: mvk +hpz: ptd +qip: eif bye +rwo: pth +mwb: gbd npt +qiq: vsh vca +prl: kzw lfk qhk +flo: dhl lfr +lkz: hhx +siy: sce +xtl: xlz guz +kgu: qtw ura wkr smg bwf +uun: out +gyu: ldh ttu +nep: mfq gvg +bpr: qec etm mxe +ltr: gbd npt oki dev +svr: yxc gwm hok +avk: sdn zpz vvt zhw +xyg: krb wcg +boh: nmv qhv nkp +rgo: jdt rhb ead +jva: xxa nid +tni: nmg tub zia dls +nei: vfm +izd: mvp kgx scb sjc +qpy: rwo sqf +qtw: dev oki +izt: lrw baz smb +jdt: zod cgb jur +ewt: iwx mea auv +lwe: bcj +qag: sjc +hgv: osi bws hhx +sce: sdo +cts: guz hqt +vzw: hvt mrm qcf +lrw: nid icr xxa +ivg: fzd suh spx +gun: tzw eia +ebz: muw kja +abc: out +apg: lkf vsh sif +xlz: xxa nid ptd icr +see: bmi +sdn: bsl rob +cai: van huq +lrg: qtw bwf wkr smg +vsy: gfb weh uun +acu: vfm xsh +bwf: gbd npt you dev oki +sdo: nid ptd xxa +mfp: qip +dls: gpd fft +nsc: ivf +vhr: mxw dco +ldh: dpw hzs weu +vwg: paz +yfz: hvt +rci: nfh dyg nqt +bbi: qcf mrm yvu +xkj: weh +juq: tjv alv sdc +kqe: gik clq ilu +jxk: bco +inq: zzz hjm poh +nqx: ekm aet uyh +blj: ior mod rgi +udl: jha var esy vqa zex +mok: vvt sdn +fsf: juq tlo hgf +qwi: mwb dfd +ora: ngy eiq +sav: zis mbp +axf: nid ptd +kik: otw +cxl: azm +nbz: jur +zmz: vkp okc owz +zum: out +eei: boa paz +nhm: uun gfb +shj: gcw +sow: lsk +byv: ybh ofa +anu: isj xog +tso: zod jur cgb +xdr: osl vzw +jky: hed kzw qhk nbz +klc: xdr fol +vas: eiq gys +ykj: bye tdh +dsm: zod jur cgb +van: tzw azs fkq +rux: bby grt mgw +nnp: vrm wkb elg +klp: kgx scb +pth: coh jpj nvu wmz tmh +ekw: fga frw +xsh: fks mfp vlq kva kqb gtw drv qnp +hyp: fvp nba lew +hde: bvv bpr ugz +weu: jur +nmg: gpd +yvu: crh ruf rci ccn xkh kbc dsu qgx tbn sav enj wnb neh azx mfc xur siy apg qhf qiq qgu +nno: zpz zhw vvt +gwu: dln bvr +vlq: sqf rwo +lxh: ahz lme blj +bcj: vas +kgx: ggc ekw wol +tus: pkm php jva zqq +fft: icp ymx vrt vgb scc +ahv: eia azs tzw fkq +hgf: esi tjv +dhl: tre ibi fks lvh qpy cai kqb oeh ywp +vcb: reg qrc dco mxw +yuj: jur cgb +emp: mvp +nbj: obh wcz eot +muw: mao cpe eyi ybf +nvy: vso ifl ybh +yvt: ljf llb eoc +auv: dxq qlz awf +jns: ucs +smb: ptd +icp: lfr vfm dhl +lvh: vrm +wct: hyg nop vaf +foa: fms +gik: jur zod +ugz: etm +hhq: dog xzr bne xyo +qdc: eoc +pnt: gys ngy +hed: zod +acz: fzd +lqt: lme ahz +ujd: qwi +xiy: vso ybh ifl +qlz: oyd nei cqs +ssl: yvu +jeh: egb ttu ldh +wkw: vlc +ubb: guz hqt +dev: onn wsz vcb biu mok ssk uvn chd fgl nno dnj leo +vca: xsp xtl cdb ubb +uvn: zpz zhw vvt +zph: zok yvz +pyk: vhh +hsk: clq gik +kja: ybf cpe mao +jgr: wkf bjz bpa yvt +der: nkp +kbw: dev you +fkq: gdd qxh gnu +ijq: sgh vaf +dgy: uxg jva +bss: wfz flo oyd +avt: fri pfk grm rxb +bne: axf +yya: nkj +xur: sce mbp +mxw: hoi epv +qhd: lxh +eot: out +rml: out +huq: fkq azs tzw +ost: hed kzw qhk nbz +fgy: scb +jif: xog isj hde +azx: dyg cim nfh ytg +wqz: wfl loe +uxg: nid xxa +zok: lsk bbi +fbt: uun gfb +xiv: hsb +icr: pyl inq cnf boh hzt gbz klp piz aoz pkd +qbf: nkj otw mfq +qmt: uba +rgq: gys +bpf: jdt +llb: vnf ybc +vvt: bsl +gys: you oki gbd npt +yyn: ptd nid xxa +adu: oih +owr: nid icr ptd xxa +xil: hde ble +ybc: rml ets zum +cdb: xlz hqt guz +rva: guu obh wcz +yvz: wux +mkh: fwt nbj +gtd: xgk vlc +vkj: oki dev gbd +qhf: zis +fka: adu uys vis +til: ptd icr xxa +pkd: bhg wsx bcj +jzm: aet ekm +jbt: req +knu: hhx bws +syl: zex esy var jha +clq: cgb +qix: xyo xzr cev +yee: xwy sow zok +zdi: dog +ddz: gik clq +qhk: cgb jur +tbn: qhd qys qse +vfm: qpy fks zph ogz nnp oeh qnp gtw drv lvh ibi dly ywp yee cai +bjz: eoc ljf llb +xpa: njk nbr hcw +lus: eia +dln: hya +uba: lrw +iah: out +mfq: ltr ejf +ura: dev you npt +ygh: zzp dfa prl ost +sif: xtl xsp cts cdb ubb +nid: der jwg pyl inq klp piz izd pkd boh hzt emp mtj qag fgy see foa rwc lwe aoz ift gbz ddd +fga: yqr qdw caw uud +ift: qhv nkp +dfi: gfb weh +ogz: sow zok xwy yvz +pfk: wkw pyk jon gtd +alv: out +leo: fka +fzd: xsh lfr vfm +uyh: wgs viz mit +vxi: tso lwk +wkf: ygf eoc ljf +ywp: lus +loi: you oki dev +bsl: mkh jmw +qys: lxh +xzr: yyn hpz axf yox +spx: xsh +mbp: owr wie +wkt: gik +qgu: ijq +rhm: bjz wkf qdc +gvg: ltr tcv jfl loi +obh: out +bpa: llb ygf +oih: nhm dfi vsy +ymx: vfm lfr xsh +lsk: yvu +nqt: isi qmt +hcw: few rrz btc +wcz: out +sqf: wcg pth krb +ruf: wct ijq snh +tdh: qcf hvt yvu +rob: mkh ivf +wcg: jpj nvu wmz coh +fvp: ddz kqe are +eoc: xvj +sdc: out +saq: fol +lkf: xsp xtl cts ubb +muy: aet ekm +ijp: fga +grt: lrg +poh: qbf kik mcg +nph: ttu +ryk: zex +qnp: cxl +zii: swk mrp jbc rux +jvm: asd owz +etm: lwk tso yuj +hoi: bco xpa kqt +duo: yde nzm +bmi: epk +azs: gdd qxh +zod: tni hfj rhj ewt pma dbc syz fuj gwu epo vwg +dxq: oyd nei cqs flo wfz +lcw: kbw epk jau +gcw: cpe +hpk: yjo kby vgl ivg +nqc: qdw uud yqr +mdn: lrw smb baz +hhx: jvm zmz +sxj: out +hvt: dsu qiq nvm apg ruf +dwx: jur zod +pba: hgv lkz +tnj: npt gbd dev oki you +esa: yya mcg +jmw: uku nud nbj +isj: bvv lht +ybf: jur +eyi: jur cgb zod +hyg: scl tus +wmz: yvu qcf +bye: qcf yvu mrm +red: ggl eif tdh ssl +ggc: nqc +fym: gxo shj kgk ebz +mgv: out +tlo: esi tjv +lwk: zod +aoz: zzz hjm esa poh +gwm: anu ryk dmu qqm uhe zes dys jif kaj jbt qdf dla jns dvq fym vao ivc udl +gtw: vrm wkb +sgh: tus dgy +ilu: zod jur cgb +dbc: iwx hmi +ybz: lxh wil +xvj: zum +hfj: zia +krb: nvu +vqa: pbj nph +yaa: muw kja dca gcw +elg: ken byv +btc: out +hsb: gtd vyd pyk +scl: jva +jwg: bmi fdg lcw dac +bvr: yde hya +cgb: fuj vwg ban tlb eei dbc syz ovf pma hfj ndm ckc gwu tid epo mfj ewt izj ppr rhj tni +hzs: cgb +rxb: vyd wkw jon gtd +awf: nei wfz flo +ahz: rgi mod ygu +kqt: hcw amy njk +cim: csk thh +vnf: ets +bmb: qcf +nvm: ybz qhd +mtj: dac lcw bmi +caw: npt +njk: btc rrz few byq +mea: qlz +rgi: icr +ejf: you gbd npt +ivf: rva uku nbj +lfk: zod jur cgb +bnb: nhm fbt +mwd: juq hgf +vip: xkj vsy nhm +pxp: qtw bwf ura wkr smg +mrp: bby mgw +qgx: hhq oee qix +wfz: xsh +ybh: hvt mrm +tjv: out +kbc: sif vca vsh lkf +eia: gnu gdd +xxa: jwg ujd pyl inq boh piz izd pkd fgy foa emp yyf mtj qag gbz ddd aoz ift zii +gnu: qcf mrm +aha: vfm xsh +pbj: ldh ttu +neh: oee wyu qix hhq +fms: rnl +gbz: poh zzz +wkb: nvy ken byv xiy +tcv: gbd npt oki dev you +uud: you oki dev npt gbd +asd: nwk abc +pma: tub +nop: scl dgy qgt ast +ead: zod +utv: owz yot okc asd +tub: fft gpd for +esi: out +nud: eot +roz: vip bnb +bgi: grm fri +nle: zex vqa +eiq: dev you +jpj: hvt qcf +yot: abc iah mgv +zex: jeh gyu pbj +ndm: dln duo +zhw: pka +wyu: xzr +qqm: req hyp uzy +epv: kqt +dco: epv +qxh: qcf hvt mrm yvu +tlb: wof paz boa +dvq: jha zex esy +wie: ptd +yox: icr +ksa: van gun ahv huq +skr: mrm hvt +mao: cgb +ban: auv mea hmi +frw: uud qdw +vao: prl zzp dfa +zpz: rob bsl nsc pka +vyd: xgk +eif: mrm yvu qcf +cpe: zod jur +aet: viz +enj: snh +dxz: mgw +mvp: ekw wol ggc +var: nph gyu +mgw: lrg pxp kgu +lht: vxi qec etm +mag: ucs wbu rgo +pyl: nkp qwi nmv +drv: klc cxl saq +mod: nid icr xxa +amy: rrz byq +dog: yox +wfl: vis uys +bws: utv jvm +wsz: ekm uyh +tvv: wfl +yxc: ryk dmu anu qqm uhe mag jbt jif qdf jns ivc fym dvq nle xil +hfm: vfm lfr dhl +crh: qse qys +kqb: cxl saq +okc: sxj iah mgv abc +fol: skr yfz osl +xsp: xlz guz +sjc: ekw ijp +pka: mkh ivf jmw +rog: zok xwy yvz +guz: xxa ptd icr +ngy: dev oki you npt gbd +xzk: out +gfb: out +fgl: lkz knu hgv +vrm: nvy xiy +jfl: gbd npt oki you +ccn: qse +lew: ddz +uzy: lew ckp nba