summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Wernick <justin@worthe-it.co.za>2023-12-25 22:06:18 +0200
committerJustin Wernick <justin@worthe-it.co.za>2023-12-25 22:06:18 +0200
commit97fc768fc4b1781f7f420d0ef33f56210449ad1b (patch)
tree0a8be0daaa4d1fec7feb71051ef80612764e0cca
parentf3304cff3fc3614a691539c3174980a02f72f19a (diff)
Day 25
-rw-r--r--2023/inputs/day_25.txt1244
-rw-r--r--2023/src/bin/day_25.rs153
2 files changed, 1388 insertions, 9 deletions
diff --git a/2023/inputs/day_25.txt b/2023/inputs/day_25.txt
new file mode 100644
index 0000000..fcc1f16
--- /dev/null
+++ b/2023/inputs/day_25.txt
@@ -0,0 +1,1244 @@
+ncx: ncb zdz zlz pcj
+mrt: rjs
+mrq: bvd
+mrk: zsg ksb cml hqh
+zhx: rdv
+jxx: vcv
+zrx: zss ngj mph fcm zlk
+mhk: bnf pcb hjk vxf
+lmc: nhr slp ltz mzl ddm
+lfb: npj xxj zzs zrz
+zxf: fnz
+kpq: rtq kjs kdr
+rgr: cpx xlc slp
+frp: cpx xfc
+ntr: xtb
+vtl: sht cfl lxr knj
+cjj: vkh rmz
+xtz: jpp cjj zpf
+bcs: snl kkm rfk xgt
+rcx: bvd ntx pgg fbm
+bgk: mtg
+fqx: jbh hzz gvp pgv
+tks: cln vcl
+klh: pfh
+jmk: mgn nvg
+dsz: pjj mlx
+jxr: lsf mph
+gbg: mdn
+zmg: vbt cjv mqj cpf
+lmq: mtg hlx qtn
+vcd: qcj ksb mkg
+xhl: xpt xtv tmc
+dzn: qkp
+rqj: qnm zfl czq
+rvm: fhm fnq hlx vrb zbx
+xgx: svg
+smv: mnz psr lzl qmj gcb
+sdx: vxx vqq
+tbl: ntr
+kms: dfl zmz
+lqz: stz jxq hdk
+qdx: pgp dsk
+fvr: trk qkp btv rfk
+fvd: ngp gxp xfs ljj bbg
+grc: pmz mvk slp bxb txr
+ppf: gdx gxp bkp qfp vdv
+mqd: src
+dnk: ldx jpg pxs kts
+brk: xpp
+jpk: rfg zlc tbq qkc
+dhs: thl rtq kls
+tzp: jmk
+pgr: hzz plp dcq
+zhp: tfx rjc fjt
+xjq: vjc tbl lzl fxj
+gmk: pgv
+xdf: qst bhx
+znd: qzm ptl
+lcj: fht
+kvb: vxf ktj fqm xsv
+msg: zmm kjc snf xpn
+zkl: gpz rmn nvk xpb
+kmk: lvt
+sdr: jbr ndr vhp kzf ndp
+lhm: mqv tfd xvk qdc
+pdp: sbk pgp
+tsc: cjv ttq fcm
+fvf: tct jgx fjt rmh fdr
+jrq: ndf stg rjz vbp ldt
+bkp: cgb
+kfr: dtl thv mzn
+hjd: bqf tzp zrt vjn fkz
+rfk: psd
+hkr: gft
+xkp: qsx xbd
+ldr: jvp dmr
+sqc: psf
+zsj: lrc xpm hvj
+vjn: pml
+jmr: ztk xvk mms
+zqq: ttc qzx
+ttc: cjv jfp
+hzp: jcg xmc qpr
+cns: kxx
+mkz: xpb dtn
+njh: txr nhk kmn cmp
+cgs: mrs spk
+klv: chf zbz vrf
+fdl: lkd frh
+xms: dgm
+ddm: xvp csc gqp
+zjv: tnr fsv qzz czr
+vbp: cvq cln ggm
+hld: fql
+crt: jls krp ldj zlj
+hlb: zdh bpc rzb bxz vnh qch
+rbf: xdb nml gqg zht kvr
+mfd: pql kjc
+vbm: dsz zmm
+ngj: dlt
+mxq: mqj xmc llm ttc
+qcm: xtb gpx tgx gnz
+svj: cpx ckl
+hbz: dgs gqp
+lkl: xlc
+qjx: pkb kjc zmx
+rtx: fxm mgn bkc
+zpx: gnk
+vcx: lmk fdg bjx
+sjp: jsh hbm gbm lhj drj
+krp: ltc mzp
+dbr: vjl zdz
+cxp: gjj fzg lzl nff
+sbm: zlk rzp bpc ngj
+vzv: cps rbf cll vpv chn
+hpk: gnt lfx
+hdq: msz ccv msg
+dsd: lxg xgb krk qrn
+xgb: zdz lhp bsq
+nhp: shr msz
+pbk: xxl mlr
+bgg: zxt xfr
+pxn: gqg zqz mtq dsk trx znf
+mgx: qgj qcj vlv
+hhk: mrq zst
+fkr: czq pgp
+prz: bzp
+dqm: lbp
+fzq: bql
+ngc: lsf
+cpf: lnn
+rgx: szt
+zqz: vjb
+qpb: ddq mmt lgt
+nnb: jgr ppx rgx
+jbc: chg zbk
+ltc: xzz
+dqh: lks
+rsl: tpx hhm krp ksb
+fnq: kjv
+qxs: vjf dmr
+lcs: bqm prq qdt hfh
+kjm: pxk cck xxr pcj
+mcm: mxg
+rhx: qqn mhc bvq
+fgv: pzx zst jjq
+nml: czh
+bds: mgn ptz zhr flh tns
+nfs: drh qsx
+vmc: kqd jqq
+tsn: dxp rnc jxr ggc
+xpp: mdz pgg
+kkm: jhb vjn zhx nqh
+zvz: rlj
+fcq: dxp xfr cpf lgk
+vch: blb cln lhj tjq dgc
+rhj: fnq zpf dxc
+sps: fpl cpx znk
+dzk: nqj bfr lkr xsp
+khm: lxt ztk
+znt: hjg fqg nml ldk
+hjq: qcn qgn hhk jtl
+qtz: krm ljg jlb sbd
+hxh: sps jsx lbp rhv lqb ktq
+fqn: sqc gxv qlf xgx fvd
+gdx: btm mbf
+cxs: qgl ngc zfr lcj jmh
+rmq: nhk xzz qcn qvs
+tvt: kzx spk sxv sdq
+fjt: cps
+qpx: pjj pgx qsx
+ptf: jjk gdd dtn
+trx: ssd vqm
+zlz: zrq
+hkc: ldt hsr krp fkr
+gmx: gnz msn kfm shr
+ctb: zvp
+rsx: ldx hvj
+dzh: vbm mtz lcj bxz
+htk: bpv
+qmt: pzx zsm
+jqc: fzq glh mdz
+hls: bpv kjs
+srd: zvz cdd rjc
+zpt: crq
+qxr: vfm czq
+zvg: mrp srt ngg
+tjk: mgr gsl mkg
+shr: frl tdv
+nxn: jnj
+kdr: mhx
+jml: mdz
+snc: zds
+tbq: xgf hfh
+cpp: rsc mlq kvq lhx
+kcs: qzm hrz ttr lrc tqj
+trm: bxd zgm gpt
+pns: hmj mjg rmz
+krm: fjt xpf nlq
+qrk: klx crh
+cqr: jtr gxx ppx krx
+plh: vjl xmc dgz zxc
+qlf: kmk sjv
+qgn: mbf fbt
+dnx: hzt qxx snm dcq
+gzk: cpt zjd lnt vmh
+pxk: xrp fcn hdk thv zmz
+gcb: vqt
+cnb: rnq rnc stf bkm
+rdr: zxc
+rpt: jgp psf qgk prz
+msh: fpk vhf xhh
+zmq: lmc rgv bxb qgj
+clf: sqc zhx vvs hls
+rlm: dgz mdn
+shd: jrp
+cpg: gkh cll rhv ttg xgt
+fcm: skk rlm
+bsz: zlp pch
+jgh: ggd klv hkq lng
+hmf: bkc xlc
+hzc: hkr zhh
+mxn: ldh
+flh: tcc
+sff: rqj xsz
+dpc: lkh krt xgv
+dpg: dqp jfg zff
+fvx: nfs qnn snf dfg
+xmf: tlb
+tdb: fbm ghn
+mkq: mtq jqc
+nff: xrb qmj clh
+fxj: zpx rzp dmr brs
+zrk: zdm gpm ggd
+vbt: chz sgn
+cck: jzm rnc
+gxv: pck vhr
+mhs: vtp xjc mkk vjc
+hrz: thv gpp mkk bxr
+bxg: qth llm kms snm
+kkr: jjk mcm gbs mrp
+qlh: zbr chn ljm
+zfk: nbp shr rnq qkn pgx
+nqn: vqm nlg fcf shh
+mts: zqk frl ttr
+hzb: gmt thx zlz gvz
+ffs: mdn
+hjx: pgx dtk hzz xdf rqb cqr
+jzm: kpv zpt
+tcr: jhb
+hbv: czg mfn prq zmb ldr
+bpg: vng mrs njp gdd
+ggm: ppv hhp
+svg: lvt
+gbq: zpx zlc prb qhj lrc
+vdc: qbs pbd
+tpl: zhx qzj fjp prz
+hbt: xkd
+llp: grs xpn tsc btf slt xgl
+hbd: mtf hld qhh
+sxq: lkl svb nrj
+gcl: lvt sbk rtq
+gkn: qth
+brs: mtz
+grt: mhj jcg qbs njs
+gdj: fht xzn
+kcx: tks fql jgx
+fpj: jjr zjr zlv ltc zfl
+drj: qbn
+vlm: gxk bvc cgn
+stf: kzx llz mxk zps
+qcn: ndb lxd
+qzx: kpv hlx
+jsh: psf qkp
+gjt: qch jlz gbg
+mzn: nvk
+fsk: gqg zhh
+pvh: vxx psp
+tjb: znj klx
+cml: glh jfv
+xrb: xtb vhf
+xtn: kgh zbr
+lkh: qkc cds
+kgr: hls rlj pdp vxf
+vcf: mkn srg pxc brk
+psv: nsj llm slt gmk
+qkr: rhv dzn
+chp: dxc jhz lkq pns
+sfx: ggm fxm cpx hgj
+zck: pkp pdf
+btf: tgn nlb gzb
+rms: mhj
+bkm: lmq krh sgn
+ctf: lrc zmb gpz
+rph: gcg hbm xhj sdv
+vvc: kxx
+lpd: hrf msp hbm dqb
+xmc: cfl
+jdj: nhr nxb nrj sff
+nfl: fgl xtn
+gcd: fdr
+qst: hjj jxx
+zcs: xxr qch
+zjb: shz ndz nlh ccv
+kls: qnm qmd gqp
+rvr: rhv
+mbn: ldk
+xgl: zrz zmv
+zzt: grs rgx svn xvk
+vxk: gff
+mqv: lnn
+jkf: jrp mgj zgj pmh
+sht: fqb
+thl: dzj
+tjt: nqh ccn pxz sdv ljg
+nhl: lkd pxz
+jpp: qpr gdr
+plp: rdr
+pgx: qnn
+tcx: pbq ppz pnr hpp
+mkk: sxv
+jpb: cjj jxx bll ckv
+lvp: gnz rjs dxc
+spk: zdh
+jsx: nxb cqq
+ftt: crh zss
+fjp: rss vbx znr
+zff: njc mmb
+bbg: cmm qpt cpd qcj
+mgl: njc zsg zvp kgj
+xtd: xxl fsk
+rsd: jgg blm
+ztk: bxr vgc
+zmx: zsb gbg
+vns: kmg kvq bcn nsp
+gkd: bdh fzq hpk
+chb: ksp rsb
+nlh: brc cns kts
+gxz: zmh zxc pxt mgz
+znk: tjk ljg
+tpf: trm mgx tns
+pnh: mdn chb pcj jhx
+ccv: ffs kcm
+zdz: xnk pkp
+pjj: plp
+lpn: qjq dvr dsk xzz
+jfm: tvz ptq dxp mrt
+skq: tcc hbd gcg kgh
+zzv: vll xlt xsv hld
+hjh: qvf gnx bhx zsb
+glh: jbt
+fdg: hdv psr vbt
+pzn: qtr
+fpk: tjb zjb cgf zpt
+xts: lks hgf hlt blm
+szd: qgl xnn svn fdg
+mkn: dff pcb blm
+vlh: qch tlh zqv zbj
+kzf: tbq kjv
+svr: srv hbq bvq zgm
+ghj: mkz prb dgz qxx fqb
+frh: dzj zgj
+dqp: nml ckl vml
+dgc: xxm bvq bts
+qvq: gvz qxs cjj jmz
+jxq: pxt
+jbr: qrk kkr zmh
+ttk: ngp tkh vcd
+skk: plp
+tmv: lfc
+spp: rjs gkn zqq
+mjb: qkb nhp zss cjv
+pxs: qsx tck
+rgn: zfl bql
+pmc: gzj jfp
+qhp: dtn rlp jvp znj drh
+jgj: xjc gkn bbr lfk
+kvr: tcz lcm jjr zgv
+txz: kqd pnm
+sbr: dcq tsh zss bxz
+fpl: shh cjl
+mcd: kkj zsm vfd cqj pzv
+pnt: npb fxk fds mvt
+knj: zdz mrs
+nlq: qhh rss vrf
+qrn: kts vjq ppm xpt dbp
+gtn: csc
+vqs: mxm qkb lsf msz
+hqh: vrm qmd jvx
+dvr: pfb qlh fqg
+ztg: pgg
+sdq: zxf
+jqq: svb
+rjb: qlx hbz rtq ptz
+zxv: fqg tdb ssd
+qcb: gsl hld
+fsv: gsf pkp
+czh: tzn
+ppj: lbp tmv hgj nmb
+gff: jrg cpd psd ldh tcz
+crq: bpz
+slt: bxr
+fsc: frp fvb
+gpf: qxg bkp pxz
+pdc: jtd bks chn xxs
+mnp: chz gvx jmr vsv
+ndz: qzx
+dhk: hqc jrg cpx djb
+hqc: zbr fvb
+ftg: xjq xpn kjc zbj
+rxz: ttq xsp
+gdh: nnd vjn xmf mxn
+mzl: htf bdh
+vmr: mrq jgg
+xsv: zvp sjv znk
+hrf: btm
+xxr: jll dxc
+gst: lmj xvp vfd svj qxh bgt
+zkk: pdf qnn
+xbd: dpl gzb zfr
+rgv: tjg gnn qpt rhr
+dds: vfm gxj lks
+nnn: rms
+kjz: qzn zlz ptq tnv
+dxl: hbt tqk frp tfx
+rqb: rbg ldr lqz
+brc: zjd
+hjk: qxr trx dzn
+mbl: tmv gcd tks jvx
+thx: zmz nhp brc
+zxt: szt
+tgn: rsc
+hfh: rms
+cqj: lgr crz
+ttr: mnz zlq
+jfc: htf cbj rlj
+bnx: xfc
+nhr: pfb
+xbz: gvz zpx bxz
+pjm: dxp mxk
+crz: gqg gcg
+vng: qtr jnb
+kbm: mbf dff qvs zlj
+vml: zjr thl znr
+qhf: cgf pxt jxx
+zjl: xhc bpv mbn gzg dqj
+qlt: vxz psr smj xgv qdt
+vjc: dtk lll
+vzb: qmb tnr nxn mgr sbk hhk
+tdg: qkc gth rbb hvj
+pdm: vfb pbk djg
+mlq: fcm klh
+qfm: mlq vbm gdj
+lfc: cjg bzp
+pdh: cjv
+jmh: krk jxq khm
+stb: hdq dqd gch
+sxc: fpl fxm nhk psp
+mnd: fmj xxs qfp rrm jtg
+bnr: kmf lxr
+mdz: qkp jfv
+mrp: jch
+mmt: pxz
+gbm: dds qbj mmb
+zdb: xdf nhq hdv xzn chg
+mhc: zvp blm lkl
+vsv: bgl zpx
+kxr: szt
+ndp: jvp mzc ngj
+szk: clh zxf gjt tjz
+srk: lmj qfb qjq
+hjj: spk
+bpj: sdq jxr lxt vls
+gth: dpl nqj ppx
+qcj: cmm nxg gbm
+nft: thl lfx szj
+cvq: hqc mkg
+mss: ptq
+dbp: vrb
+pck: ljm
+bts: cjl mtf psf
+nsp: fxs cxp pkp
+tbn: hzp krx gdj kmf
+gkt: nfl cml qpv pft
+gld: zvp jlb
+mlr: mjr cjg
+gjz: bvc txr lhj
+fgl: ttg
+zpd: xtc hld pft
+lrh: ncb mfd zpf mcm
+xxq: znr hqz njd zlj
+xxm: jtg zgm pgg
+clc: qjs rgb pfb jml
+bvq: pml ztg gkh
+xkc: frp xxs pml
+grh: lkd ksr cgn qhl
+vpf: djb zdm pdp fpd
+rzb: srt mxg mjt
+snl: mkq cll nxg
+dqj: zfv hzs vrm
+fmd: mdz nms jlb
+dkc: blm bxb vhr
+bxs: sdx zqp fzq cvq
+gxx: pjj
+vhp: bbr
+zbz: cpd lmj fdf
+mgz: frl tnl nvk
+vjp: ctb
+jdg: mph mjb tnv cds lhp
+rdd: pfb
+hvh: tqx dbp gqv
+nxb: fbm
+qdt: jcg rzq
+tmc: zbk vrb pgr
+qfg: tvf nft
+tht: cdd vfm mrq
+skm: msz krh jfz zcs
+rzq: zmh
+fkp: bzp
+mng: zmv nnn
+vlj: fdl hmc zqz zrt mcr fvd
+xvk: tbq qhj
+bfr: qvf vfx zqv chz
+dpm: kjs gcl hxp
+qgq: hjj sxv
+zbf: hkh zmv hqf bxg jpg
+xrp: xgf smj
+jgx: mmt lmh ktq
+bvc: xhc ssd
+vbv: zpf cgs qgq
+qxc: xsm mcr crl srk ttk
+mmk: srg ldp lnm
+dtb: dtn fht gvx
+znf: ssd cgn pxc gnt
+nlm: cml jqq fbk
+zhr: gpm dzn
+tjl: dkl gpp mtz
+jrm: gld sxq mfx tcr
+ndr: vhp vbv pkb
+vpv: sbv mlr qfb
+zks: msz kzx xhh brc
+bll: mhj
+dtl: pbd jhz
+bfb: gxx
+msz: czg
+npq: zql lxr gcs
+zcm: vls tdj lkg htr
+qpr: mjg
+fcf: mmk vts vmr
+kqv: lxr mkk lqc
+jmp: nms dqh gnn zht
+vst: tqx hbs fzg
+pnz: qpb tcc bqp rkk
+vbk: rbf xpf
+mtq: qpt
+dbs: mbn lfr qmt mkg
+jvc: tcc pcb zst zgm
+sbp: pkb mjt hxv tfl
+kkh: nlm vdz fql
+vfb: gsl nlg mgj qzj
+tnj: bvq qmd kpl
+rpb: svb cmm srv
+hqz: cps vdv
+xdz: zkn rtx hmc djb
+xgm: zdh pfh hdv
+rrr: xgx jrg
+qft: dls qlz jbc hff
+rzp: chg
+xtc: nmp vvb cjg
+njv: qkc ncb rfg
+pjq: rmn kfm xpm rjs
+gxp: rgb
+vfd: hpk fdf
+mbp: xzz mmb
+nnf: cgf fxn jch rhh
+jgp: vhr
+fpr: rxz vhq qvh plh
+jfh: htr xtz xnn
+lmj: bkp
+vmb: pnm fds qjq mrq
+tmm: jjc djb hsr
+ccr: fhg lhp tdv
+szq: gcd gpt ddq njd
+tnv: vvc
+bpp: svb dzn jml
+cbj: fbt svg
+jlz: tqx
+lgk: zlc rqk vng
+kfm: gbg jmz
+nlb: pgr kxx
+lxg: gsb njt
+hxd: crh qfm pgv fnz
+ckl: tns
+sch: sdv mgj qhh qxh qmd nhd
+qhl: jnj
+mxk: vbz
+mpj: jnb frl zmm
+bgl: qsg cds
+crh: dmr
+xjx: zrk
+rnc: zpx
+zkt: kbc ftt mcm
+pnv: lmq qrk vnc
+qll: vls jfh lhp
+jsn: prq bfb zxc gpp chb
+vcl: fqv tzn
+xpq: llm xtb ncx prx
+dbj: jgx vgb nmb
+zlq: zmh crq
+jch: ptq vqt
+bnf: gpt hhm
+rss: qfb nvg
+nsb: pxk gnz kcm ltp
+gch: pfh snf
+qhg: klc rnh tjl cns
+bqz: vdc zmz
+tzn: zvp
+ncg: kkj rlj qlx qfg
+hff: nlb bgk lxt
+xsz: tvf ddq
+zng: ffs nvv
+pdl: kdr cvq bnx
+tmz: zqk ngc lvp
+sgn: jbc lml
+sdz: bdb lmq fxn lll
+rmh: jjq mpf cgb
+mfn: prx jhz fcn rhj grt
+sfd: bjx mbk gnz vnc
+nkt: gcz nnd nhk gxk
+jlx: tjz xxd
+hzn: xzn msn mjg ksp
+qjs: mzv vll kkh
+mqx: vcf zqz bvd rtr
+pgn: qkr qmb nxg rfk
+qkb: fcn dcq kxr
+hxr: fxn sxr bsz qgl
+vlq: xmc vrv npq xms
+tqk: gxj dzj
+cbn: lmk qdr mqv cpt
+jfr: gnt dbc jkj dqh
+mvm: snc fdf jml smb qxr qmt
+ctp: htf xmm qnm vkl
+kkb: fcn gsb kzx jgr
+rtr: gxj qjq dsk rdv
+llz: chz kjv
+fvv: qht rtc fdz nhl
+jjq: xjx vrm
+kvq: kpv tsh
+hcb: xkp tgx zjd dbr
+xgv: tdl
+jjr: hld fmj
+qdr: lml fcz
+lfr: jjz ssd
+pxf: cpd
+lml: bgk hbs
+kpl: grc bxd sjv
+ppm: fhg lhp
+mpf: dpm phr nqn fkp fsc drj jfg
+cvb: mhg zmm ngg ccr
+smb: vbk qpv
+jjz: kdr
+zzs: dtl sxv
+pmn: mtg hjj vls pkb
+mtj: mzv xfb
+xbb: kcc lnm bpv brk
+xsp: mtz zlp vvc tdl
+tdj: pbd
+nlg: tcz
+vxz: cpf
+txg: qzz pch lqc njt
+nsj: xgv thv hrr zps
+mtc: gmt pdf vhp zqv dpc hxr
+tjz: ngc gzj pql
+xfb: zht
+hsr: sqs zdm xsm
+pzv: cmm ctb xpc zgj
+zql: kfm tqj qfx
+rsb: gqv
+hfq: mlx vrb pjm qdr
+xhp: gzg vbk jnj
+cbc: hbz hhp mgn bxd
+nmf: tft qmx bsq hqv
+gsb: zss vsx
+ljg: qbj xmf
+xqs: rfg tvz zfr
+xgc: qtn pfh brc vrv
+frn: lmh qxg vxx
+vlv: dbc jbt
+tck: pgx tgn xjc
+nxz: mjl vdz njc rkv
+zgv: ldh mxn tns
+bhk: kgj frp rdv vxx
+qhj: pdh
+dbv: ltp bxj tgx
+mkp: hqz htf bvq qzj
+gjj: pcj xms xtb
+ltp: krt
+bcn: xbz qmj pjm
+lvs: tzx gnx nmq zsj
+djb: pxc
+rhh: xrp qnn tqj rmn xmc
+vtp: jvf chz
+pct: pzn
+dls: fqb xxj vhf
+hpp: qpr chz xtb prx
+rtq: jbt
+fbr: hbd zhp tnh jrm
+zlk: rmn vhp
+fqv: lfx
+qqd: fnz pzn rlm fqb
+npc: vjb
+zrt: vjp
+jkn: bll xhh
+thd: szj ckr flh lfx hmf
+mhx: hgf
+jfs: zfv mmb bqf
+ltz: tjk tdb dbj
+hgj: psp ttg
+dbc: tjq xbb
+lpx: qvf mnz qzz jpg
+vmh: tnr fnq lhx
+kbx: dvd xtd hrf xfs
+pxd: rrr fsk nxq xpf
+hjg: hxp jrp
+mms: cgs slt dfl
+kbh: gnk qtm njp jhz
+vmz: zxf hbs grs
+cqq: xvp pxc
+xhz: ngg sgn dgm
+qmj: lll
+jjk: vgc nfs
+ptz: txz
+xpc: gpt ccn bnx
+gpx: sht smj
+bxz: mrt
+kcm: msn fzg
+gdd: qtm
+rkp: kcx rdv fpj mrq bts
+fhm: vst qpx nvv
+qpf: jtl kqd mvt fvb
+lxd: rsd jtg
+kbc: zlp vgc
+rrl: fql mdz bdh
+xnn: xtv pkp
+lfk: tnr krx mrp
+vqm: cbj
+mpx: qbn ljm
+xln: lqc zqv bfb
+zkn: dff
+vdz: bkx
+srv: gpm cps vdv
+bkk: rvd shh mvk zbr prd gfb
+pql: ptl
+bvl: nmq svn mlx
+rjc: vgb htf
+tnh: ccn
+kgh: ldb
+zlc: jfz
+qlx: mkq lcr ckr
+hxt: zsb zzs zqq
+xhc: xfc
+rkk: pzx fkp gnt svj
+vbx: vgb gxj pgg ckr sbd
+gmg: drh ngg sht skk fcm
+nrj: bnx dzj
+fxn: zxt fhg qmx jmz lkg
+tdv: mss zck
+hrq: qnt xms vfx
+gnx: ttq
+nnx: zqp dqb xpz sxc
+tpc: krh hbs tnl qzx msh
+mnt: dfz bdh pxf
+ksp: jgr
+dqb: vdv zns
+gnn: snc gkh
+tdl: njp vgc
+pkb: qmj
+qgb: qht xsm pzx gld
+gsf: npj ldx tvz
+bvt: pct gzj vdc rbg jxq snm
+phr: nmb
+prd: hpt sff hbm pqd zkn
+npb: xrv
+psr: sbj dxp
+jxc: pkb lcj qhj czg
+hgf: mbf
+srt: pxt dgm jbc zlc
+vjb: hbq lfx
+xdm: mxp rlm
+gzb: fcz
+hmj: pbd ckv ldx xfr
+xxl: mhx
+mfx: zpd ppv zbr
+mcb: lgt vmr mpx cbc chf
+bxj: krk bpz
+jls: fbm vff vgb nzf jfc hxp
+tnl: gvz dnx dfg pdh
+lxt: msn
+gsl: qfp
+xfr: frl
+tfx: jgp
+jhx: vvc mxp
+qgl: pch
+mtv: cqq
+vts: bvd gpf
+lkq: czg kts bgl
+ndb: gfb
+lkv: qhl gqp dqp fmj
+zsd: smv mhg hqf fgn
+xzn: qth vfx
+chn: hsr
+hzs: qvs qnm vml
+csc: qxg xsz
+cgf: tlh dgz
+tvz: njs
+xdc: brk hgf vhr frh
+htr: sxr
+btv: bql qhh dqm
+hzt: qsg
+tpx: gfb
+ppz: htr rlm gch lqc
+fbd: ddd vtl vfx pch
+zps: vnc mhg
+qtr: zrz rmz
+hlg: pfb flp fjp mqx
+ksb: mbf
+zds: mvk hjg jrg
+jfg: qfb xdb
+ldj: ldb ldk qcn hbq
+dbn: mqv jhz rgx dlt
+kcc: tnh
+zrn: vsx ptf lrf hrr
+plz: rvr qbn tcr lks xdb
+ljj: djb hnz qgk
+vxf: hbt
+znr: qgk
+kqx: hzz lmq mzn
+vqq: ztg plt
+jkg: mzl fxm ppv
+kmh: pqn rfc nmb npb
+rnh: tsh bll szt
+rlp: bgk qxx mzn qtn gcb
+xpz: krc slp nnc
+dxx: jfs cqj pdp
+gdr: cds cpf mss
+svb: bkc zsg
+qfx: zss fnq hdv
+vrr: rkn xhl jlx xdm pct
+ckv: tbl
+ddp: zlj qgj snl
+pkv: xlc
+jtd: qkp
+mpl: qxg frn bkx
+msp: dpg tpx gnt lkv
+bgr: kqx mpt dsz zpf
+flp: fqm ggm lgt
+hqf: pmc gnz jch
+dmp: krk zlq dqd rzq
+gft: lcm thl
+lrf: lkh qsg znd gvx pnv
+vhq: zkt qgq sxv
+gzg: zfv qhl
+jbh: cck xgf vcv qhp qzz
+lkr: xtv dlt ksp
+ndf: fql zqp tqk
+ldt: mjr vmb
+vrv: rtk
+nbp: rzp sht kjv
+rlk: sdx rpb pkv tdb
+vrj: zjr jjc ktq fsc
+pft: lmj xfs
+xfs: pmh
+zns: dgs ztg gcc
+rkv: fgl zrt bkc vxk
+pvk: gcs kzf dbr
+mjl: tzn ghn fgl
+xrv: pxz lbp pnm
+ksr: czh rdv kgj hnz
+bpc: hzt hjj
+prq: fcm jlz
+hvx: vxz qmx tzx znj
+vvb: tns
+blb: rsd thd vxk
+njt: thv klh
+jff: jpp gpz mng ngg
+zzn: xsm nvg zsg glh
+xpm: clh skk
+klc: ddd
+crl: src pml
+lcr: jtl bvd
+hrl: zbv ndb gpl crz
+gxk: xfb
+hhm: cjg kgj cjl
+cfb: rxb cxn zff djg nzf mbn
+dzz: qpb btm fqv cjx
+fbk: qgn dpg tnh
+snm: qtm
+rkn: dtk hxv bgg cfl
+jln: qgk zhh qkr fmj
+kht: dgs gpl cln xtn nhr qfp
+htb: bnr ncb rlm jtr xhh
+bvf: tzx qlz ptl gpp
+xvp: hrf
+hdv: fht
+qqn: nvg kjs rrm
+fkz: mqd svg
+qqt: ntx gpm srg tpf fdr
+xxd: zxt fzg
+dsc: zng gpx zkk kjz
+smj: mss
+njs: rsc npj
+nmp: zkn xfb zhr
+zfv: hnz tzp vjb
+nvd: mmt ljm hqz vqm
+vgh: tzp fqv rtc mtj zds
+zsb: gpp
+rjz: lkl
+khl: qkp vml mjr gkh
+qkn: bbr mng pmc
+mxm: gsf zpt sdq rnc
+chh: prz jjq dqm shc qpt
+mnz: pdf
+znj: kqv
+dmj: zdz psv gzk vcv pfh
+lqb: bql jbt vmc
+dhq: kdr htk gtn fsc
+czq: jtl
+jfz: zrz
+rxb: rpb nhl
+vqg: rxz vcx cbn tjz
+gls: lmh qcb jsx ndf lbp
+jvf: fhg pdh
+lnr: gqp ktq smb plt
+sqm: gtn kmn sbk djg qhm vvb
+nbf: vkh dtb qhf xxd
+fpd: ltc szj shd
+cdz: xgl brq njv xmc
+rfg: jfp
+lxq: nfl cmp mtj bxb
+vkl: sbd qzj ddp
+zqp: szj txz qkr
+fxk: jlb htk mtf
+xpt: bhx
+bks: jrp zsm plt
+qmv: xgx jtd bpp ntx
+lgr: dgs tns jln grc
+gpl: fqm qcb xfp
+tgr: nxn qgn
+sbj: fcz pfh
+blm: hjg
+vcg: ggd cpx phr njc
+xjm: djb xjx zjr lxd vxk
+sjv: ndb fds vjp
+xgt: gcg srg
+qbj: qnm slp
+lmg: krx cjg ldk rrm
+zbx: qvj zng qvf
+qvj: dqd qkc vjf
+lmk: lkr ctf
+mqj: snm crh qdr
+bmr: gff vxx bkc
+rbb: gdj xhz jgr
+bxd: zht
+djk: ffz ssd pkv zxv
+nxq: gkd dzn rgr
+fds: gxp
+hkh: gsv mss
+kxx: rsc
+rvd: jqq kkj rrr
+lnp: mhx nqh xtc pmh
+jll: tsh dfl zmz
+rjp: cmp rhz nnd snc
+cfl: mhg
+ttd: crq ttr nnb dqd ncb nts
+psp: psf
+vpc: bvl krh lnn tnv rjs
+stm: rjz vdz gxk nzf
+nvv: mxg
+cjx: vxx pkv
+nnc: fbm xxl
+kkj: xkd
+xtv: vjf mxp
+vjl: hlx
+rdj: vnh mhs hdk gzj
+dvd: rgb kmk
+xhb: cdd mtq hhp bkx
+rtc: phr qxg lcm pcb hbt
+fzv: vmz mlx gcs gnx
+jkj: dds rvr gjz
+fpx: hmj vtp ldx nvv gdd
+gjr: qxx zck lqc bfb
+hrr: rfg kmf
+lmh: hnz rdd
+zmb: zdz gnz
+zpf: ntr
+xpf: vfm rvr
+zhh: rdd
+tft: qll pxs xkp mqj
+ddd: zjd dtk
+csd: tjb dxp jnb jhz
+jpx: kqd cmp mtv nrj
+vll: nqh src
+ttq: xnk sbj
+vsx: qsx
+ffz: tgr tht pml pck
+tqj: qtn
+ngg: npj
+qpv: lkd tkh
+chf: bnf rpt
+cxn: xfp qbn dvd zkn hkr
+kps: stb klh drh qqm gdj
+hjp: sqs gft hbq kbx
+clh: zdh
+jmz: bpz
+lrg: xgm jlx vjl klc
+htf: mzp
+rbg: ftt qsg rzp
+tgx: vbz
+bnc: kmg zmh pdf qjx
+fgn: vbv rsx fsv
+nvs: jbt
+dpl: jfz
+gcz: vvb ldp
+fqg: pzv
+bxr: qth
+fdz: dvd vqq gpm
+dsh: mts dpc pjj tfd
+jjc: ldh vjp
+jvs: kcc src tcr zvz
+lgt: cbj
+psd: shd kmk
+mjt: rmz xpn xqs
+nqj: qnt fzg vhp tbl
+fdf: sdv ldh
+gmr: jkg ggd zvp
+lng: fqn ggm bnx tmm
+pqn: vrm hls pdm
+tnr: dgm
+dcb: zfr tqx lrc ptl jjk fzg
+ngp: hbt xkd
+hxp: znr
+tqn: ndz tvf xpt ztk
+pbq: tgn tlh cqr
+pmz: vjn mzp dzn
+snf: vqt
+rhz: dfz lhj rdd
+prb: dbp fcz
+bgt: cpl tqk cqq
+xlt: ldb xfc ljj
+qdc: vgc vkh rsx spp
+jtr: brs hzz
+dpq: lkd thl rjz
+hmc: jjz rgb
+qqm: jlz cpt zcs
+mxp: xjc
+tjq: vmr xfp
+stz: dhb rsb
+zdm: bpv
+dzl: zff pnz njh zjl
+nkj: scs lll lzl vng
+trk: mbp cgb shh
+qlz: gcb
+mbk: rsx vxz rms
+zfr: zdh
+nts: rtk kxr
+qvm: pxz kkj fbm rrm
+bkx: jgp
+vmx: mvt dpq mqd dxx
+mch: xfp fgv vlv vmx jtl
+fph: svn zss pch
+ngv: nsj rdr mng hxt lnn
+bct: nvs fdr dfz qlf pbk pvh
+sdc: lfh czq fgv nnc
+lfh: glh xpp pck mnt
+kkk: vrv pvk bnc stz
+mzv: nxb
+bqp: nvs vlm plz
+dff: mvt
+gpp: xpn
+krt: vjf zbk
+qbf: fzq mtv dhs qdx xpp
+vxd: vcl psp flh
+hlt: nfl mmk rzl pxc gqg
+shc: kpq rlj bdh
+mjr: jlb
+kmg: pct gxx
+kmn: fkr cgb
+kmf: slt
+tct: zlv qvs jkg
+jhb: cjl zsm
+bqf: cpl ptz
+stg: xhj csc ghn
+dkl: qst ppx tlh
+klx: rdr
+vjq: dlt jxq xpm
+gvx: ppm qvf jch fhg mph
+xpb: zss gzb
+qrc: jvf klx gpz
+qmb: cll
+bjx: pzn qzm
+mpt: pct ndz hvj
+bdb: grs hzt hqv
+tzx: dpl
+zqx: kxr dxp hkh
+vvs: srd xjx flp dqh
+hfb: dfz hsr trk rgn
+qht: nvj hjd
+hhj: kxx vqt bsq vcv dbp
+plt: tkh
+mgr: hpt jvx xxs
+hqv: kxx pbd
+ggc: tcx cns bhx
+qmx: dfg gxx zlp
+fnt: zhh pxf lfr kgh
+pfc: gnk xnk zsj vbz
+cgn: kqd gcd
+gcs: ntr
+zlv: zgj hrf pvh npc ttg
+gcc: ggd
+ssr: zpf zbj bqz qch
+svn: rsc qtm
+lkg: fnq mrt
+rbd: dqj mtq vxd gtf
+shz: bqz xrb mxg
+cdd: ghn lfc ddq
+nzf: mqd
+bbr: jvf
+jpm: mkz zvg dcb smj
+vff: nvs qmb pqd mtf
+gvp: xgf klc spk
+nhq: nnn sbr tmz khm bpz
+tfd: ngj xdm
+rkj: dfl zqx svn dbv xln
+gbs: knj zrq
+btm: zfl
+nnd: jsh
+lnt: mtg tdj mrs hvh qxs
+jvx: snl
+scs: rsb pjm zbk llz
+qxh: mhx bgt
+gqv: zbk
+qnt: dlt bxj kpv qlz ttc
+tlb: nvg
+njd: mpx ckr
+qzn: mhj qzx bfb
+rnq: gbs znd pql
+brq: tdv jkn bsz
+djg: hqc
+hdk: gdd rtk
+mzc: xjc vsx
+kqd: ldb
+vnh: mpj vkh drh lxg pql
+qhm: pkv jmk jfv vrf
+xhj: rgn
+tqx: lsf
+htq: pkp vbz cpt qrc vsv
+nhd: pdl hzc mgj
+vkh: vnc zrq
+bqm: kjc zfr vng zrq
+gsv: jfz krx fnz
+zst: gdx ctb tzn
+vls: cpt
+psf: fbt
+lkk: gsl xdb lcm rqj
+rhr: lnm ccn rrl
+tjf: bgg bhx xpm hrq
+krh: mcm zkk vhf
+bsq: tqj
+pnr: gmk hvj nsj
+xmm: vxf czh gpt
+nvk: mrs
+nkz: cgb dzz bnx rjz
+tkh: cjg
+ftf: mkz smv brs jhx
+fqm: gxv
+gmt: gkn hzz
+lhx: zmv
+hmr: ldp mxn pzx xkc
+fxs: nts vqt mzc
+ghv: npb jgg hpt dbj
+fpq: jvp njs rlm nnn
+svf: hkr kcc mzv rjp xrv
+czr: kfr ffs dfg
+pnm: jnj
+gfb: gkd mqd
+rzl: bkp jtg lcr
+pqd: vts vxd
+mkc: jtd fdl npc lmj
+nzv: bql hgf dqm xmf
+dfz: bxd
+zqk: pfh qbs
+bql: lvt cpx
+zbv: ldp bmr mqd xkd
+tjg: pxf tlb psd xtd
+qgj: gtn
+btg: sfx jjz dkc mpl qfg
+xmh: gmk mjt mpj grs
+rqk: msg mfd ptl prx
+krc: srv lfh kcc
+sqs: cpl crl
+txr: ggd
+lqf: zjd qch jcg mjg
+gtf: ckl vmc pgp
+tfl: hfh rzq vbv mxk crq
+bkv: fnt zst nxn fqg
+mqs: pct zbx gnk krh ckv
+sbd: fmd
+qvh: fph kms zmv
+tvf: tlb
+mrr: ttg vzv gmr jgg zvz gcz
+dxp: kbc
+bzp: hhp tcz
+rqm: tpx gcc ntx xfs
+nms: qfb xhc
+knd: tfx tvf mbp xhp
+hkq: tnj npc sqc
+pgv: vbz
+vzh: gqv rhj vjc cgf
+ppv: vfm
+sbv: shd mvk tgr
+dhb: hbs zqv
+jpg: ngc
+rsq: zmx cjv bnr hvx
+lnm: hhp
+xxj: grs qsx
+gtv: bvc qpb qxc ndf
+rfc: htk mzp bpp qdx
+nvj: ljg drj tmv
+sxr: rdr zbj
+mcr: hzc dzj
+ldg: xhj kdr mtq rbf
+bxk: jzm njp dhb vdc
+nmq: lhx qch
+ktj: fkp mmt gcc
+dfs: jfp jkn qzm qbs qhf chg
+skh: ltp rtk vfx gmt
+bft: tdj rfg jcg jgr
+hxv: zzs ttc
+vrf: hpt fvb
+tbb: rqj cjx fkz mtv
+grj: pmh jfv hbd rxb
+svk: fbt nlg rhx jfr hmf
+nxg: cpl zff
+xnk: vcv jnb
diff --git a/2023/src/bin/day_25.rs b/2023/src/bin/day_25.rs
index b3a610b..7bd3751 100644
--- a/2023/src/bin/day_25.rs
+++ b/2023/src/bin/day_25.rs
@@ -1,19 +1,154 @@
-use nom::IResult;
-use std::fs;
+use nom::{
+ bytes::complete::tag,
+ character::complete::{alpha1, line_ending, space1},
+ combinator::map,
+ multi::separated_list1,
+ sequence::separated_pair,
+ IResult,
+};
+use std::{collections::BTreeMap, fs};
fn main() -> Result<(), Box<dyn std::error::Error>> {
- let input = fs::read_to_string("inputs/day_2.txt")?;
- let parsed = Example::parser(&input).unwrap().1;
- dbg!(&parsed);
+ let input = fs::read_to_string("inputs/day_25.txt")?;
+ let parsed = Circuit::parser(&input).unwrap().1;
+ let three_cut_partition_sizes = parsed.find_non_zero_three_cut_partition_sizes();
+ dbg!(&three_cut_partition_sizes);
+ dbg!(three_cut_partition_sizes.0 * three_cut_partition_sizes.1);
Ok(())
}
+#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
+struct VertexId(usize);
+
#[derive(Debug)]
-struct Example;
+struct Circuit {
+ wires: Vec<Vec<VertexId>>,
+}
+
+#[derive(Debug, Clone, Eq)]
+struct Edge {
+ a: VertexId,
+ b: VertexId,
+}
+
+impl PartialEq for Edge {
+ fn eq(&self, other: &Self) -> bool {
+ (self.a == other.a && self.b == other.b) || (self.a == other.b && self.b == other.a)
+ }
+}
+
+impl Circuit {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(
+ line_ending,
+ separated_pair(
+ map(alpha1, |s: &str| s.to_owned()),
+ tag(": "),
+ separated_list1(space1, map(alpha1, |s: &str| s.to_owned())),
+ ),
+ ),
+ |vertices| {
+ let mut vertex_id_mapping = BTreeMap::new();
+ let mut wires = Vec::new();
+
+ for (from, tos) in vertices {
+ let from_id = vertex_id_mapping
+ .entry(from)
+ .or_insert_with(|| {
+ let new_id = VertexId(wires.len());
+ wires.push(Vec::new());
+ new_id
+ })
+ .clone();
+ for to in tos {
+ let to_id = vertex_id_mapping
+ .entry(to)
+ .or_insert_with(|| {
+ let new_id = VertexId(wires.len());
+ wires.push(Vec::new());
+ new_id
+ })
+ .clone();
+ wires[from_id.0].push(to_id);
+ wires[to_id.0].push(from_id);
+ }
+ }
+ Circuit { wires }
+ },
+ )(input)
+ }
+
+ fn find_non_zero_three_cut_partition_sizes(&self) -> (usize, usize) {
+ let cut1s = self.edges_to_traverse_everything([]);
+ for (cut1i, cut1) in cut1s.iter().enumerate() {
+ let cut2s = self.edges_to_traverse_everything([cut1.clone()]);
+ for (cut2i, cut2) in cut2s.iter().enumerate() {
+ if cut1s[0..cut1i].contains(&cut2) {
+ continue;
+ }
+ for cut3 in self.edges_to_traverse_everything([cut1.clone(), cut2.clone()]) {
+ if cut1s[0..cut1i].contains(&cut3) || cut2s[0..cut2i].contains(&cut3) {
+ // if (cut2, *) didn't work, then (*, cut2) also wouldn't work.
+ continue;
+ }
+ let (size1, size2) = self.partition_sizes([cut1.clone(), cut2.clone(), cut3]);
+ if size2 > 0 {
+ return (size1, size2);
+ }
+ }
+ }
+ }
+ panic!("No partitions with three cuts");
+ }
+
+ fn partition_sizes(&self, cuts: [Edge; 3]) -> (usize, usize) {
+ let mut visited = vec![false; self.wires.len()];
+ let mut frontier = Vec::new();
+
+ visited[0] = true;
+ frontier.push(VertexId(0));
+ let mut visited_count = 1;
+
+ while let Some(from) = frontier.pop() {
+ for to in &self.wires[from.0] {
+ let edge = Edge::new(from, *to);
+ if !cuts.contains(&edge) && !visited[to.0] {
+ visited[to.0] = true;
+ visited_count += 1;
+ frontier.push(*to);
+ }
+ }
+ }
+
+ (visited_count, self.wires.len() - visited_count)
+ }
+
+ fn edges_to_traverse_everything<const N: usize>(&self, cuts: [Edge; N]) -> Vec<Edge> {
+ let mut visited = vec![false; self.wires.len()];
+ let mut frontier = Vec::new();
+
+ visited[0] = true;
+ frontier.push(VertexId(0));
+ let mut used_edges = Vec::new();
+
+ while let Some(from) = frontier.pop() {
+ for to in &self.wires[from.0] {
+ let edge = Edge::new(from, *to);
+ if !cuts.contains(&edge) && !visited[to.0] {
+ visited[to.0] = true;
+ used_edges.push(edge);
+ frontier.push(*to);
+ }
+ }
+ }
+ used_edges
+ }
+}
-impl Example {
- fn parser(_input: &str) -> IResult<&str, Self> {
- todo!()
+impl Edge {
+ fn new(a: VertexId, b: VertexId) -> Edge {
+ Edge { a, b }
}
}