diff --git a/Cargo.lock b/Cargo.lock index 1d4521c..c9bad9a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -311,6 +311,14 @@ dependencies = [ "z3", ] +[[package]] +name = "day-25" +version = "0.0.0" +dependencies = [ + "indoc", + "pathfinding", +] + [[package]] name = "deprecate-until" version = "0.1.1" @@ -581,9 +589,9 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "pathfinding" -version = "4.6.0" +version = "4.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ea07a6e677e47d6a84724d4fdf88b1e37fcb49ac94e236d7caeefd8fee75c8a" +checksum = "f6f4a3f5089b981000cb50ec24320faf7a19649a45e8730e4adf49f78f066528" dependencies = [ "deprecate-until", "fixedbitset", @@ -726,18 +734,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.50" +version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +checksum = "f11c217e1416d6f036b870f14e0413d480dbf28edbee1f877abaf0206af43bb7" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.50" +version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +checksum = "01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df" dependencies = [ "proc-macro2", "quote", diff --git a/day-25/Cargo.toml b/day-25/Cargo.toml new file mode 100644 index 0000000..9346627 --- /dev/null +++ b/day-25/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "day-25" +version = "0.0.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +pathfinding = "4.8.0" + +[dev-dependencies] +indoc.workspace = true diff --git a/day-25/src/input.txt b/day-25/src/input.txt new file mode 100644 index 0000000..1e9cfff --- /dev/null +++ b/day-25/src/input.txt @@ -0,0 +1,1215 @@ +ctq: hnk zbt lpm txv +qhv: ztp nmc ctg cfm +flc: mxp +fds: fjd nqr +crt: njh jph +tzv: lvv +bmx: tjz jst tns jmd mqb kfj +slm: fkf dtz chl nxr +kkt: qdl +gpv: qpb clq +gxf: zrf +rsz: clr +jqt: msg tdp lnv lzt +dkb: fbr fdx ljl +gfp: ljp dtg +sdh: tjn +mtc: dxc rqp +ccd: tkb +hdx: pqs +ntd: spb zjs vkb +hjl: cbb gxd vpp +ktt: jdn +hkf: vmm +nlh: lbs +tjr: npd ppc jxp ldr +nfk: pxg njf cht +gzl: kfs +nvm: bmv jgh vjt +ffd: sdn kht +rjc: bjd fql lbn skk +kgn: drp hmx +qlj: cqn vfx cth kmd lhn fpq kvc smm lhf +zcx: qrv xdv thr +hpb: lhg nbv ftm tcr +kxk: gcl dvk kgx rfz zsz +fnv: hbq tnq fdp +fls: ntk fmv rxx kpq +lnk: dqv cqq ffd pgq hbv +kpf: llk qhs zxd lcj +bld: nxd zbv dlg qts +thg: psz nzd fpt +mzp: hzk csp jxg hrg +lqk: cpv kdv +slb: chj chm rpk +gxq: kvn mhz grq +zmk: krs +rcf: srd fnn xpg jcg +rff: zqp +cmk: khb btp sdn +sxc: kgg +kvb: fbt bhp vvx nlh +vgn: bkk qps lpp +rxp: dmp kgg kfj +mmv: gqd lnh pqj tkn +qcq: kkt +nlr: pkq txv +mmf: pnn +bxv: pjv fht hnm +rjl: xpl +lld: zsz +jcs: jsn nzd fml lpm +rfj: csq +brt: fgj +cfg: cqq ntk jlr frc +gml: mpm rsz ndq xsl +bmh: blx lkl sds qph bvc +fhx: tmk vrk hbq zff +hhf: mzb fnv fcn +pgz: xbl dkc spj vmm vft +mdd: srp krs kft qsg +qbg: pkj sph +mgv: dxq kgl +jhj: rpb lhq +kht: lph +frm: klh gpv rvl +sqx: prm tnr tjt +rbh: nrp ggl vls xqt +mmj: xlb +vkb: lvn +dfj: lbb sbs xjd +mlh: mmj lht ptl kzn kzg jgv +qgs: pkj tjz qcq +jsn: gnl kzc jvt +zjx: zff jsl kxt rjl +kfq: qkl dvs nhk +tkp: klm +vzv: jgx ngq lbd ttt lnl +fbs: mpf fjj qps +xzg: hnz rrn ffq +lfc: gjz +qtj: mcs bbn mxs ljl +vnb: pkl svs lpz +gsg: pcg sfd hfs vbg +zdr: fkc zjp qlg +lzt: cln xqt +ccs: dkc +kpq: kqg bvp +plr: ldr gzd zbv +kps: vrt +snf: nnd +pdq: znj cdd +jnb: bjd spd dlg +ndq: cnl mbk +pqb: kgn vlt fqv +qln: sdf pvn zdx +mlp: kzg +xqv: xbm lpp +nvp: hgc +rzr: sml lpp tzp crt +ttt: fgh bfx thp fsg +mvn: ngz +tbj: tmc nnd xvp +xgf: bmv +kxh: nkd hfc +ftl: vnn ccs xzm +hvf: srd sds lld xvn +ztp: plk +jmj: tmq xgm kdq gkn +hjq: btg +jjx: nxv +pdt: jpj gkk mds ccd vqp +kss: dqg zlb cxn zmk +kdq: xvn +mrq: hzl +pgf: pgs hth xlk +txv: pzx +vfx: hqs mrq qdp +jnd: jxg +xdv: hgc +dfh: tst +qbs: ffb lkl +xjb: xpg +jnm: tks rcn mvc hgj +qtl: ftr pgm nbh fjz fhq +tst: xkv sdn +gjt: kmq bxc +xks: ntx +hxb: ljp ljk fdp +pjb: qbg jdc bpp hsr +qnh: xmg htm +tqm: ncc bmn jlt fhk +nmr: drp xgg +bsv: mbx bqr nhx xcd +krk: tdp gmx +qzc: nhk hxm +xnp: llk qdh tzv +mfz: nnk pjq +rrg: qbq rfj +sph: cbb fbt ctm qmq +lkr: bgd hcn kdq cnb +blx: zbv hmx +xrd: vvx nkd +vjs: fdt xrd prp ghp +nrk: phn nvp vhs zxd +dqv: lmz chs xqb +zpg: bbf rmx +fkt: lhp +xsb: fjz ptt +nlj: rlv +hgf: gnm xcn tld cqg rct +cvg: znj dkd kbt dfh +tjq: sbg hsr xcs gsd nvz +hnf: skp +mnl: gmp jsz fsh jsm gsm +zlv: fnn bpl bmx mlz +skt: rfm knf +lhx: lrp kbc scx vrt lcj +ldf: jxp chl jnb hfz +rnq: cqp pds +qgh: mjc fjz +fdk: nmr jmg qzn zmk +rlx: dcf kpv mph vxg +bfc: phn kft nlj fsk +nkd: znj jsl +dsd: hxm +dxc: lrq mtf +hvk: rdh vvm qgx qnl nnm +mpf: sdn +qzg: hsx rxt chh mdd +zmx: jlr zsb ptl +trr: qbs rlv nrk +blm: fzm glx qbd +xnd: tks +lgp: kmq tmq +xqh: frc cbz +bzm: pvk kxk krs +bxk: vcg gqv csq xhp zmx lzr +jnq: nnk qzn gjc mjx +tgs: jrs pcg +bmn: stf mbb tmc +pnz: txv kmq lhq +fcn: qzb mbh +gff: ccj lqk hzk +nvf: tps ghp +nxz: nnb ccz +hvg: xhg fnj tqc +nnd: mjp lvn +xjs: tzl +ngn: nlj vtl +mrf: bvp cqp jgv lnt +mxp: fpp kxv +tmq: ndg rgr jzh bfj vsr +pxg: kgl xdq +sdf: bfq dhs xzr cpn +ssf: shj rrk xrv +psz: rcj sdb +ldr: fpt +ctg: tnr kht +kgf: vxg vjt +nrq: nbv vkf csl jdm ntd +ptp: jrp csl lld gmx +qhm: cxn xfr zfn ffh nzb ndn vmx +ntx: lht cpn qdl +zqr: ttv +cnb: zfx nqr stb +gxj: jjk fqz vsv cnj +vct: jfn zpn dmg +xcg: kzm mjb grf +qrh: bhv rff dvq +plt: pnf mlp mpm +rtj: pnn jmx hrx +kqg: szl +sbg: hxm +tzk: qdh mxp gmm frx +rfk: dcf +qgv: ljp +srd: kps +lqt: qgp +dhc: ccn ppm gvj ftm +bqr: nhx +llq: pdr qfs hpx dhk +nmd: mvr tvn xzp jmx +hcb: dmp zjp qpg +ntl: ppg rdh +djh: qjh tzl ltv +srz: xqv nvz sgt +vkl: xxx jjx zvx +vnq: nzq vvr jml +blp: xpg nzb +rxz: mph pch +ghz: jcg msg +ppc: mmf +zmp: dvl flc mnz hhc +ssh: ljk vzc +kjd: xts +vkd: ggz bqr xlb sdh +ngt: mgf gmm vsr ksf +dbm: mxf +zkk: ctm xhf shh +tzp: vcg bpp gxf +mbb: pch rpb tvq zdd +ncs: dhm +dvk: vkf +klk: hzs gcb +cvk: lnv vpl dxs jkq tvn +zfn: kxk qsf ddl +lvx: qfs +ndf: frm nqs skt hbq +xzm: dzb +kvp: hnf vpq zsh dkh kcg gkm +xbk: vxf mrq dxx +khz: jqz gvt nqt lbs sxc +phn: ksf jqg +xcm: sqb vmm mql zcq +vft: mjr xgf dnz +qcn: hxs pjn flc tsl gkk +mkv: btz glx +ftk: dtf gxf xcg zsq +rrc: nvz zcc mzl +qsg: scl pkq +jkj: xdl lvt ctp +gfv: jlp rjf vpq tdj +rvl: xbm zqr +dkd: zdg ctz +vlt: rlh hjb gfl +cbb: lfc +hlk: bmv +grq: gqd pzx +tnq: kjr +pcq: kqc gnl dqg bgd +lnb: mvn +mlq: xzp pch lvx kgz +bvc: tcr bfl ncp +lhd: xvn gmx clj +dct: hhc jgh tbz plp hxs +xrv: vcz vmf +mcq: pkq +jgv: ngz +hjg: ccs fsh gnm +ghm: jrs nmc xnd +sjt: vfp kpq +xcx: gzb nhk vmf +mkr: tcr xgm +vcz: qnl +hzb: ssn sng scf +xgx: skk cpv +mbx: klm frr tgx +sgf: bfj zcq mxp +fgh: chs tdj xcd +zpn: lph +kcf: xsx xzb qrh +vqr: mbx svs tnq +fht: zdg +gls: gzb tjn +xjg: tzp qpb srz +hnk: fcp jxx +ptc: bqc +znd: hdx bxv ftq +cdd: rxc hgj fpg +qzb: snv +frg: gzl tsl dvf +xmj: sxc +mzb: fqs +dkc: drp +zfz: frc +jdn: kpv +mxz: sdh skp mqb +vmg: fhl lvv hlk gmm +gms: pgg tcr ccd +plh: nvm smr lld +fsj: rdk qdp rjf +bmq: qmn pjq jzc cpv +pnf: zlg dkb +kvt: qgd zmg xjs +dsb: spx pxt lgp lvx pqj rtj +gjz: rxc +nqt: zcc qgx mdk tbl bqq +hlt: knc bjd qrx gsm xfr +gbj: ctp fpt +cxx: kfs zpf vnv mhz +fdp: gjz xpl +kvc: ztp sxc +kgt: bqc xqt +njf: szx mns tjn +qmb: bfm pgf rgn brc +fmc: srj vjm rnq +nhz: kmd nzq ttj hth xhx +bzb: csg rzf rlh dqn fsh nrp +lbf: mqb tht rmx +sdx: skz plk xbk xcx +skl: hjq cch pgm qbs zcm +rdr: hhp rkt +hqs: ghp fqs +rmz: lsk xbv xxc hhf ctz xmj vgj gnj +dpc: nvp ksf +kfj: dsd +zfm: tlr gjh frx mpd xxz jvk +xsz: pqm qfp mtl lnb +cbh: nbh ccn gcf gjt +fpz: gfr hnz dlq +kmq: bsx xts +xvp: xjd jmx xdl +dsr: rfm +dmb: ljl knr cxz jcc +tht: qbq +lnq: klm szx +fqk: cfj lvt sdb xdv +nxd: mcq pdr nrp gcb +btg: hgc srp qhl +dvs: kbq +bch: zff +gxd: gpv +jkk: vpk ffq pdb gcd +cvh: szh zzr fql fbp +vhs: jpp +cgr: kgk xbm jgr +tql: qzf zsh xms xrv +xsg: xkq pxt vlp hmx +blb: fkt jrf +mjr: qts xdr +tzl: zqr +vzc: ztg +hlj: jcs rzk gbr rjc +tlt: kxm rpz gff +lxs: stp bdt mtb ngn +ssn: dcs kzm +zdx: stq gfp +sjs: ltv kjr +lbs: phq +tjz: hqs +dbn: qpb +mdh: tbj lhd ktt rcr jnl +pck: dsr fdp mzb bdq +ttx: qvb kcs gpf +ppz: zkm lcj snm +lzr: pqm zpb +rzf: vnv +nqs: rvl rvd +svv: zff jnm qkl +mkt: vxg lqk pjq hxt +cqd: mzq ctg dkb mqd +lfn: blb vzc klh ngz +dnz: mhs ksx scx +bmm: jzf ptc nnd tzv +ftq: fnj zrf gxf pdb dhs +rph: mdk tdj nlb sql +smr: fnp gpf xjb +cxf: pgs +thz: lbd ghm hcc nhz bhp +zsh: vnd sgn +bfq: pcr qzc +chs: khd +rhx: vnq vbq rlq +tpn: pqb bxc nmj rcr +njh: dhm +xsl: mqd tpb xhg +tkb: tbz vrt +kmd: pds +bhz: ffd fkt mns +zdn: mtf lqj +frx: hjb +bbr: fql fbp +spz: nqb ptt +ftr: phs dpc +zfb: qgv nxg jzv jhq +jnl: kgf +qkt: qgv lsk dxq frc brt +xms: kbt zpb +flb: zfm ptt lmb hrg clf +chh: hnq lhg +tks: ntk +rxt: nqr +bxx: jrr mmf xdr vcs spb +rpz: bhv vcs xgx +dzk: qvb ncc dvk rkl ptc +qnd: mcq dlg jcs +zkh: cqp dcs snq +mvg: fml tmq gjt tpb vpm +zxr: ljp +zlg: dmg qvc vvx +nhf: glx szl +gqv: sdh tgx dmb +gkk: kjd fqv +dcx: zkc nxg cpp slx +gqr: thr vjt jgp fkf +gtg: ffp +dxq: jst bch llx +xcs: sml zdx +ggv: xks tjz rcn nlh +dzc: tqv nlb gxv fkt +trs: qnd ngr bpv hnq +zcn: mgv lht lrt +lhf: dvs rlq grd gfv +dlt: bbt njx smp fqs +trb: jgh nzb +zjs: ccj mph +tkv: mxf jdc +mqq: qns mjh pxt +txn: htm jlt +ngc: szh rrs thd npd jgh +ctz: tnq pqm +dvb: hck jzh mql dzb xgx +gcl: gqd grq +mtl: mkv +llt: grd cht jgv skd +njn: sqx vkp grd kxt ndq +qmq: pvn zfz +qqh: ngz fjj sng +ntm: hgj +fbr: nvf zvx zpg +qjp: zcm fjz hlk +vrk: rsz +tlr: cpv ndg tbz +kxm: ghz mjr +ccn: vkf zsz rrs +kqj: dtg rhd +grg: spz xdv bbr pgm +zts: tkv zff dlq bqm ljk +lrt: dnr +bbt: fdp bdj +krl: hxm +bbf: mdl +tkg: hdx +rch: lbs szl pbr mjb mvn +tld: jdj +pjr: qdh knc thg mjx +msg: vgl pgg tkb +tvq: ggl qsg +nkn: chp jrs mlp sct +nbz: blp jnd +frk: mtl chp +pxp: djq nvp qrv zrb +ggp: mpf zqr fkq +zkm: cph +fhl: mjh nbv ktt czx +mjc: xzp +rlk: xbm fkc cxf +kft: ppc xdr mfz xkd xxz +qrx: shg rjj xcn +hbv: skd szx dtf +hzs: rkt xbs mhs +xqf: ptc srv frg ptt +stm: bfl snf fxc +prp: ntl vgz brc +vgx: lrr chp mxz +bfm: knf +zjd: ngz +kbx: flc fql stm dsl +pch: nmj +bdt: hgc hjg +qbd: lnl xrd zjd +mdk: btp sth jrf +gmx: jmx +thp: sml ztg btz +qgx: lht +gtx: vtl cls lrj +dhk: jrx xvn xjd +jrt: xnk dlq zzk hnz +xsx: nrk hnt jmx +sgt: szl jph nhx +xsn: lfc ztg qmq +pxx: qsf gms +fpg: qbv +rqc: gtp ppg bfm pcg +dpf: npd qvb hhc gpq +fhk: hnq tzv ngn +hdq: fcp phs ccs mph gzl +qzr: rsz jst hfc +vls: xgg zzp xbs +xqb: llx hbq +rvj: xlb nhk +kkg: kmd pqs lnb rnq mpj +hzz: fkq zxm ghp lsk clr +gkn: gmm cch ffp +jtv: fpg hzl nmc +lvt: mjp chl +kbt: rrg nnm +gsv: lpp mtc hfd fpq +cfm: xhf xrm gkb +znl: jfs ppm +hfx: qdh bsx rcr zpq +jsz: fpp +jft: qgh tlt qph +slv: xhp tkp +kgx: mmz vmx hjb +zzv: khp chs rmx +lbn: fsk cpz +pbg: frk mtc kfj fbs rrn hlm kqj +jhq: hhf vnq +skn: jrn vcr btn xcn +smm: dmg kzg +qzx: tkg pqs skz lhn +xfk: pjv sjs lkf +grd: rvl +vkr: vkb grv ttx +bpl: ksf mqq fsk vgl fhq +fzm: xpl cnl ldq +nxx: rzk ccs hbk clb +lcj: mjn mjx +bvs: svv dnr sjt lfs zkh +njr: znd kgk lnb zdr +hhp: bhv skn +mmx: fpt zpf +blh: xqh xnd bkk vdr nzq gkb +rjp: vbg njh bcl shj +xhg: pqs hfc +bhp: vnx +cdb: ktt plh lqt plr +qvc: cxf fgj +mpd: gbj tkn +pvk: dqg htm +hrg: csl +xdh: vgn xjs plk dvj bdj +nbv: htm jjk bsx +vpk: frm tmk qfp drv +jmg: dtz qts +xkq: bjl cnj +pjk: tst +vvr: fjj nns +hzd: bfl lcz hnt +rlh: xbs +xmg: nnb +xzb: ftm sqk +krf: fpp sqb xfr cfj +sdj: vgx vnd tkv rqp qgx bvb tgl +qbr: mxl vvm sbg mch lfc +dqn: lpv gzd jxg bdt +jrx: xzm tdp qjp +sct: bch srq xmj +hzk: hbj +fgb: qgd vfp ggz dnr +qlv: jrs mpj dfh +kbj: hfx srd nbt xsb +gts: lvn mdd jxx gzd +mpq: jsl zpn ztg +bbj: lpz lmj cnl +cnj: mmf +hjb: xxz +ksx: tnd +jfs: gtg +dtf: qgd +nzq: gcd +scf: xks jlr jzz fdx +rnm: lpm jmg jps nxz +pxt: xfr dxs cgq +xbg: mph +xtc: xzg cmk tql kcg +hqc: gfp sdh jjf +rcn: zbm qlv +lpz: nrv ncs +xkv: xnk +rnv: jps hck hbk jkj vtc +ssc: zcq zkm ksf +skk: hxt gqd +zsb: ngz vrk ljk +zlq: lvx krs xph blx +kjp: lkb llt jjf ssf +hsr: ljl mjb +dcm: rvd vfp zbm +tdj: njh +gxv: fhx hbv qzb +vfp: srq +fql: ccd kcs +rxj: bcv mhc nxg smm +hlm: fgj shc +xfc: zzk zts kxh zdn +jgh: tld +dhb: chl +pbr: vpq ggt csq +dcs: shh +nzd: ldr pgm +qmn: cnb gzx mll +phs: lbb +lsp: dhb ctp ffb fpt +jsm: knd ppc ktd +xnz: jgc gsm qns ftr +bcl: hth ffd vnx +pql: kvn +ltj: grv rcj sqb sqk +kdr: dhs djh zcn pmm +qpb: phq +csl: thr +hzp: bbl lkl tlr vrq +ftm: nbp +bdq: rbg +qbm: sgn bbf vcz mns +dlq: lfs +rkl: ksf +snq: cbz +cpp: zvx zkc rpk +ktb: jbx qph lhq lrj +mns: jcc nkq lrt +gvl: tkg +snm: lnh jsz mhs +jqg: gcf lcz +fzt: tsl rng qhs vmx +pfj: pjn bsq psg kmq +gnj: nzq pvn +mzl: mbh shh +bvb: drv +mlz: blp nbv lbn +dvf: gnm kqc +dqg: xjb +kfd: gnj jst xxc zpn +drv: ctm +lbd: lnq knf +jgs: bvb zdn hnf tqc +xmh: mjp +dkh: gfr sdf gls +vgz: vbg +css: jnl jpp zjs krk rkr +kgk: szx +kxt: ntm qcq +zll: llk rkl +nns: frl +mhd: gcl ccn pxt stf vcs +sgn: mbh +lzk: xjg vgz zjx lhz +fzq: rdr dvf cqk pjq +zdd: xkd +zzp: nbh +rjf: ncs qvf +ftg: rvd szx pkj +hdm: xqb xlk mzb +hzl: rrn ntm +qvf: dbm dcs btz xrm +bcv: vpq fpl vgz +bnj: fmv knf jjf jrs xks grf +hdf: mjb +grv: dvf +qlm: kzm +mld: kcs pql nrz krk +rdh: cbz xlb +bsz: srj jml vjm +rdk: hth shc hcb zxm +fvk: pqm kvt +hkn: qfp zff qzx prp +jgj: chh mcq bbr vmm +vcg: nhf +xgg: gbj +gxs: jrr plv cxx vjt kbc +tgl: gkb mbk sgn xqv mvh +cmq: blb zpg bfq fpz ncs +fxl: sdb qfs jzh bds jlt kdp +jph: grf +mds: clj hpx +zgf: nhx kzm bqm lnm +rpk: zrj zkc zdg +qkl: shh zfz +vtc: dvq lvn mph +hnm: sql snv cbq +gfr: vcn jgr +hfd: lfs bdj mbh +gpq: nbz jmx nnd ffb +zcc: khp +vsv: rzf bxc vhs +nnf: lnb slx +vpp: mdl +bsq: ncc rfz bjl ddl +xbl: gtg zpf mtb +knr: jrs jjx +qfp: mlp +dvj: pjk zqr xjs +qdh: sgx +sxn: vcn qlm jjx +hxs: cbk pvk +cnk: knt plc gjz cbq ptl +jrs: mvh +knd: jmx clj +kph: brc ztp pvr mjm +thd: jzc lkl +fdt: nvz tqc kkg qgs +vqn: xjb xpt zxd dsl vxg gzd lnh +vhq: gtx rct hrx qnh tbj +rcg: jft hrx trr zzr jmg +shg: mmf jxp +zrn: lcz sqk mpd zjs +vrq: jjk fjd +jbx: rsk kdv jdn xph +qcm: xnk rxx gxd xxl xdh +cnx: xcx pjb blm bbn +pld: zrb xgg srp gcb hmx jzh +shj: chm dtf +knt: mdl +mhc: vkp xcd tns ttv +cbk: srv dzb qfs +cqn: kjr dsr qpg +rng: zpq qgh tbz +fdx: hbq hfd +qfs: spb +btp: klh +mft: nlr kpv qgp +gnv: rxc pds hdf fkq +pkk: mdl ppg gvt tjt +bbh: hdm dvj vjm mpx +jvt: sdb +ltl: lqj dtg ttj pdq vgj +zzk: kzm xqv +pds: jdc phq +ggz: btp +xrz: jml zfz dxc bhz +xxc: tks vkp +srb: plv rsk qts sdr zzp +ndn: rff zxd fqz +spd: vtl pql zpf rkl fmm +zbt: qns nrk snf +ppq: prp lbs zxr nhx +grt: xjs nxv pdq zjp +ggt: mtf brt +jmd: lph +gxk: lhg rcj vcr gnm kgz zzp +dqq: lbf bhr jgr +svd: mvh shh +rfm: bkk +ngr: jdm stb hkf +czb: zzv fcn blm lhp +cfc: kgn pgm vsr lgp zpq +rqd: hgj jjx lnm nfk +cld: vqr tjt zjd jtv drv +sqb: fkf +fpl: ptl rkp vcn +mxl: zbm khb +qsf: zxd tcr +xkd: lbn zcq +gsm: ffh +dxx: dmp lpp qvc +qhs: kdv kps +vnn: lpm kjd +nmj: slk +jgx: kzg vdr tks gvl hlm tqv +fsg: rhd fkq dfh +fbd: bcl qdl rrg zjd jsl +jml: lhp qbv +rgs: sbs bmv mjn +fqs: hnz +htq: fml jzc fxc +szh: xdr xxz +jps: ccz zlb bjb pzx +lkf: kht xkv lbs tjz +krs: pnn dvq slk +gzx: ccj dxs zll hmx zbv +xbv: nxv +rhd: qpb nhf klm +jxl: rgs rfk jxx +gnk: jlt mhz qgp +rfd: znj fsg hth xbj +lsf: ffh klk rkt +lnt: zxr jlp xxx +zrb: vtl cfj +cqg: pjn fnp mmx +bqf: blb qlm ghs +khq: hqc thp chp ssh +plj: bbj mqd +vnd: jmd +hbk: lbb mjx +pkl: xhx tmk +dhs: snq +jdm: nlj +xbj: ntm mjb +fnj: lnm ssh fht +fnh: hhp fhl +rlq: rqp sth +pqp: bqc pql mjp tvf +snv: zqr qbv +cpv: ctp +qbc: cpz spc rtj +xbc: vbq zrf qqh +plc: ppg mkv lrq +pdr: fmm gnm +xzz: sqk zzr dpc ndg rst +jbr: lqt xjd +mng: stf rpz fhk trb +vqx: rqp gls cgr vnb +hcc: qdp vrk pcr fvk +msc: jbx xdl lqp jpp dhc csp +nvs: rxt scx nrp rjj +mdl: nns ggt +svs: xbm xdq tnr bqr +pvr: kfq vpp skt +qgd: ttv +prm: sbt plc +crp: lbg mtl vbq xbj gvl +gcb: tnf hnt +rfz: ccz jcg +frl: srj +pmm: bqq slv rvd +fvj: xdl vcr rct +rpg: psz nrp zll nzb +spb: drp +zfh: frx xbg jdj +hnq: lpv +xcz: jdm srv tbj cln +nst: xgg nmr bjl xsb +ckq: frk qgd nnm xms jhq dbn +vpl: kcs mjc gpf +kcb: sxn +bpm: qjh frl ncs rvj +qnl: lhp +csg: ppc lqp kzc +qlg: zrf zpn cbz +vmf: rbg nrv +hnr: sgx ftm mmz +ngq: frl +clb: kcs +bqq: sdh bpq dxc +ndd: ggl kxv fsk lhd +rgr: qgp +ncc: tmc +gvt: jlp tgx +knc: jxp zqp +szc: stm xmh vrn bbl csp +rpn: lfc rhx ppg qzr +zfx: hrg xzb +rkp: hdx ltv khb +fjd: txn +cph: btn kqc +qph: fds qnh +sdr: zcm +lxg: bbl rxz +jgp: zdd vnv sdr +mcm: jsz zkm fjp qzn +cxn: bhv +sgl: cqk kgt xmg +rjj: bmv +xzr: vfp jvr pkj +qzf: nbg dvs njh +hgd: ngq qps vvr brj gvl +srq: qpg ntk +htx: zhg jzv tbl rfj +spj: xgm hjq srp jnd +fcp: tvf tkb +rst: lrd dvk pqb +vdr: xlk mpf +fpj: clr zpb stq llx pcr +kbq: jvr stq kgg btz +ktd: mmx lbb btg cln +xxq: lzt bfl lxd knd thd +cgq: vnn hxt +rct: pjq +brj: rvd ttv +pqj: vmm bsq +cfj: szh +cth: gzb jrs +zlb: xqt fjz +jpj: lrj stm gbj +lqp: mhs txn +hpx: fnp mgm +vpq: jlp +mls: sdr fnh spz zbv +bsx: xbs +hsb: lxg clb qrx krk czx +vnv: fpp +ksd: fvj ngc pzx bzm +vkp: qbq +nmm: hnk hhc mjn mjc kqc +zbq: bbh nsl sdj bfx +bpv: fjp kgf tkn gnl tvq +vpm: bfj zfh thr +ghs: khd kqg +mvr: zfx tbj +rcr: gcf +lmz: rbg pdq +tvn: ggl fsh +fkc: khd ncs +dvl: qdh lpv mgf +mtm: tgs kxt blf bjm ntl hxb gnv +vcr: qgp +zsq: jlr +bzc: cfg qdp ssh zrj +xxl: fmv xqh xnd +lpd: snm kpj mds kvn +blf: vkd cvg fbt qlv +spc: mgm jdj +brp: xzm ksx tsl lhq qph +bhr: dmp +bsk: rbg kvt mxl bdq bpp +xpl: nrv +mnz: jvt fhq bfl mmz +bqc: kfs +ksf: drp +lrp: xvn jhj fnh +scr: mvr kkk sgx hnt +bfx: pqm sql +hgj: nnm +bpq: ptl glx +gmp: jzf hfz cbh zbt kpv +qzl: vgz klh jvr lrq +vcn: khp +chj: cxz rfq jjf fkt nnf +fnp: bjl slk mgf +mnq: mhs ppz nmr ddl +nsl: ggp nkq +dsl: xbg jxx +xtf: ghz kdp nbz jfs +ptv: jxp dpc hnr tkx +vvf: bsz tkp cbq vnd +jst: fbt +llx: zpn +mpm: pjv fkc rvl lzr +nbg: hvg fgh hvk lmj +spx: spd xbg psg +nhd: pcr mpf zpg +dcf: cln xts +vrn: lvx mqj nvp qhm jfs +fqv: dvk gnl +xlb: knf +tps: qdl +sbt: chm xhx +slk: fhq +hts: xmg xkq dtz +xfz: khp nhd nns xzr +zlf: mft bbl dqg xmh nlr +fkf: fml +jfd: jqg sds rkt xzp +mjh: lhg ndg rrs +nbt: nbz ccz scl +rfq: kcb sth +qjh: skz +sth: sbg +clq: mbh slx knt +mjs: qns dtz zcq jcs +gnm: rcj +bjb: zkm pnn rfk qjp +plp: vmx fpp +qrv: spc tvf nbh +xgb: mpq pdb lrr zsq +bgd: lnv nbp hzd +jgc: tld vrq gbr +php: mjn rlv fbp vkb gjt +fjp: hkf thr dhb xqt +mvc: pcs pqs vcz +kcg: rvj xmj +pbx: jkq ffp kfs dzb kps +plb: rxj jgs dmg tps +tvf: gbj +tmd: skp vzc bfm mkv +pgg: jcg +fsh: hfz +bpp: mvn +khb: nkq +qhl: spc nzb dvq +lmd: qjh zrj ctm nxg dsd +rpb: thr cxn +mch: dqj knt ftg +xtm: kqj qkp mtf dkd tps +zqp: jnd stf +mqd: dtg rmx +xxx: cbz +fnn: nqb tsp +gmm: jdj +lcf: tzl vjm khn lhn +cls: pld skk dqn gxj +vbq: lmj +gzv: zmg hdf bkk mxf +fgn: sxn dcs kxh slb stq +lrr: mmj zvx +mpj: vgz ngq +kbc: vgl xbs +jvk: nmr cln nmj +vss: qdl tqv fdp qln rlk +tpb: rgs htq +dxv: zmk jkq jkj jrx gjc jdn +tnf: pgg scs gtg dkc +djn: vrt tnd lsf qns +bbc: rrn nnf +tbl: rcb svd qfp +bbl: rrs +bvp: qbq +qxx: rlv rxz lhd +kgl: fpq pjv +xhx: fpg tnr +grf: khd +mlt: nqt qbg cth ppg +mxs: nqs qlm xfk pnf knr lmj bhp +gbr: gfl zqp +sgx: vgl +tqc: bhr +fjc: qbc ksx vrt dlg +zhx: phs mjp rfk mmz tdp +rbd: nlb fmv sbt bdb +stb: jjk +xcd: lfs +nlb: skd lnl +rcm: hzk jpp xkq +tpt: sgt xnk kkt cxz +nvz: csq +lhq: mgm +gjc: grv kxm +cbq: lmz rxc ttj +nmc: dhm +rxx: lnl dbm +gqj: nsl dhm vbg zkh xkv +gkh: znl jbr rff vrt xgf htm jkq +tsp: cnj csp dlg +ftx: xcs sjs gxd ttj +vnx: hxm lrt +mrg: jph vpp cxf mxl kvc mvh +sbs: vkf jqg +cpj: hnr phs cqk rgr +kkk: cpz nnb +ncp: skn tcr +jzv: gtp kbq +jqz: vcz cht bbn +cpf: plt jrs fgj qgv +srv: ddl kdp +mtb: mfz xnp +mpr: ptp znl xmh jxp +pjv: lnq +zxm: tkp xqh +hrx: kkk +stp: pxt jxg gbr +gfl: lvv fxc +qps: tns +vvm: chm pgq +xhp: tjn bhr +qkp: bjm qpg rfq +frr: jzv xbv zpb +mqj: drp vrq kdq +cqq: lsk jjx nkd +ngl: gtp zfz xbv qlg +pcs: rfj vvr hbv +czx: nbz jbr zpq +lbg: mrq zkk bbf bdq xhf +jzf: xzb jbr +tkx: rlh dhb xqt +pdb: tjt +jcc: pcg +hck: vhs gpf +lqj: clr +mzq: krl hjl dkb +zlz: jgp nqr htm sgl +jtx: pgf vkl kfd pxg +xtt: mgv cht pvr rfm +rgc: hqs lbs kdr pvn +lmb: kxv hfz jrr vnn +qqk: xnp ssc jjk xvp +zxj: kcb mch crt bbc plj +hbj: tmc fxc vkb scl +kgz: xgf cch +zbm: qzc gtp +xhf: jcc +ghq: gds bqf fht sgn +nrz: zsz vcs hkf +mbk: kgk +jfn: qzb bvb mxl +cnl: srq fgj +tcc: mqd pjk mbk lqj +zzr: mmf mkr +mcs: hlm vbg ggz +dqj: ggt szl dbn cpn +cfs: fmc jgr zcn cgr vvx +slx: khp lbs +shc: pgs zpn +nnk: ppm +lxd: cch mql tnd ksx +nxr: lxg vxg fmm +qkd: zdd pxx lld lvv ppm +jrf: kkt +psg: kkk +lrq: bvp mqb +hkg: vcg xrm krl sng +xgm: btn +ccx: lcf rxp bbt xrm rbd +lmr: ffb gjh lpv gkk +cpn: snq +zhg: mpx plk dsd +lkb: zdg dbn jrf bbc +bds: lcz tnd cph +qmm: rdr gxk kcf nxz zfh +cqk: bjd bxc +fqz: rjj kxv +xph: nbp chl +djq: pjn gpf xdr +plv: lnv rxt +rcb: dqq hdf qcq srj +ldq: nrv khn zrj +ltv: gsd gzb +zcm: kdv vrt +rkr: sds kjd +njx: plj hnz hsr +xpt: clj fml fmm fvj +hsx: fds ftl jhj +mjm: pkl knf prm +vlp: zvn gcf spb +chp: kcb +gkm: cvs fvk mbh +rrk: pjk nlh rkp +vxf: vvr svd hxm +gdc: chp gkb dnr skd xqb +jrr: snf llk +hdt: klk gts zcx ffp hlk +scs: pkq ndp +bdb: hfc khp tns +krj: zpb tqv tmk xzg sql +nqb: scs mgf kdp +kzn: zxr fsj dxx +bxc: lqt +kpj: dxs rzf nnk szh +ffq: zcc +jqc: xts ndg bfj gxq +ddv: bch plb mhc tgs +gjh: cpz kgt +zmg: dsr gsd +fxs: sgf pxx gzl fjd +dqt: jxl lnh rxt hts +qrn: ncp psg ccj cph +fph: qnd scl qxx kjd hxt +zvn: dfj trb fsh +zkc: cbb bdj sng +cvs: pjv gxv sbt ghs +cxz: bqm +clf: rcm tkn clb +ztg: ffq +sds: zpq +kzc: bxc +sfd: brt qgx jts +khn: plk tkp +lrd: qzn ffh qpg cgq +rgn: fht dsr qbq zsq +skp: qvc +kgv: bsq rsk pnz slk +hfs: qnl dcm ssf tkp +bbn: mzl +fjj: vzc +lpv: rgr +qvb: nbp +bjm: lph drv tht +hcn: hfz mkr vsr +vgj: mbh mmj qpg +lrj: qzg +smp: xlk hnf gcd +npd: jqg +vqp: rsk rkr mgm +kgg: bvp +zjp: gnj vcz qgv +rzk: stb lkl +jts: fpq gsd xbc +sml: jvr +mll: gvj kzc qsf +mpx: rmx nvz +hps: vzv bpq nvf nxv +vtl: zqp +gds: hzl mdl dtf +mhz: xvn +lhz: dkb bpp pgq +pjj: hzb sjt rrc slv +xdq: jrs pgs +tsm: xjb xcn kvn vkr zrn +gkr: gnk jvt hjq tpb +rlr: lnm vzv xsn dxc +jzz: dbm phq tkg nkq +tvx: jnl scx pch trb +bjq: krl ssn bqm brj +btn: vmx +dfp: vct ctg rjl sdn +ndp: plp lpm nnb +pgq: xxx pjv +mvv: tgx kqg rkp jdc +jrp: vkb shg htq +jrn: mql fbp xpg +gvj: jzc kpv jxp +lhn: rjl +gcd: qbv +brc: skz tht kjr +jhg: mxf zff jmd cqp \ No newline at end of file diff --git a/day-25/src/main.rs b/day-25/src/main.rs new file mode 100644 index 0000000..2cbeaf0 --- /dev/null +++ b/day-25/src/main.rs @@ -0,0 +1,127 @@ +use pathfinding::prelude::bfs; +use std::collections::{HashMap, HashSet}; + +/// Puzzle consists only of one part today. +fn main() { + println!("{}", part1(include_str!("./input.txt"))); +} + +fn part1(input: &str) -> usize { + let mut graph = graph_from_input(input); + + for i in 1..graph.len() { + let paths = (0..3) + .map(|_| { + let path = bfs( + &0, + |node| graph[node].iter().copied(), + |&node| node == i as u16, + ) + .unwrap(); + + // remove chosen edges + path.windows(2).for_each(|e| { + graph.get_mut(&e[0]).unwrap().remove(&e[1]); + graph.get_mut(&e[1]).unwrap().remove(&e[0]); + }); + + path + }) + .collect::>(); + + // check if graph is still connected + match bfs( + &0, + |node| graph[node].iter().copied(), + |&node| node == i as u16, + ) { + Some(_) => (), + None => { + let size_a = connected_count(&graph); + let size_b = graph.len() - size_a; + + return size_a * size_b; + } + } + + // restore edges + paths.into_iter().for_each(|path| { + path.windows(2).for_each(|e| { + graph.get_mut(&e[0]).unwrap().insert(e[1]); + graph.get_mut(&e[1]).unwrap().insert(e[0]); + }); + }); + } + + 0 +} + +type Graph = HashMap>; + +fn graph_from_input(input: &str) -> Graph { + let mut node_ids = HashMap::new(); + let mut nodes = HashMap::new(); + for line in input.lines() { + let (start, ends) = line.split_once(": ").unwrap(); + for end in ends.split(' ') { + let id = node_ids.len() as u16; + node_ids.entry(end).or_insert(id); + } + let id = node_ids.len() as u16; + node_ids.entry(start).or_insert(id); + + let start = node_ids[&start]; + let ends = ends.split(' ').map(|e| node_ids[&e]); + for end in ends.clone() { + nodes.entry(end).or_insert_with(HashSet::new).insert(start); + } + nodes.entry(start).or_insert_with(HashSet::new).extend(ends); + } + + nodes +} + +fn connected_count(nodes: &Graph) -> usize { + let mut visited = HashSet::new(); + let mut queue = Vec::new(); + queue.push(*nodes.keys().next().unwrap()); + while let Some(node) = queue.pop() { + if !visited.insert(node) { + continue; + } + for &neighbor in nodes[&node].iter() { + queue.push(neighbor); + } + } + visited.len() +} + +#[cfg(test)] +mod tests { + use super::*; + use indoc::indoc; + + #[test] + fn test_part1() { + assert_eq!( + part1(indoc!( + " + jqt: rhn xhk nvd + rsh: frs pzl lsr + xhk: hfx + cmg: qnr nvd lhk bvb + rhn: xhk bvb hfx + bvb: xhk hfx + pzl: lsr hfx nvd + qnr: nvd + ntq: jqt hfx bvb xhk + nvd: lhk + lsr: lhk + rzs: qnr cmg lsr rsh + frs: qnr lhk lsr + " + )), + 54 + ); + } +}