diff --git a/data/25.in b/data/25.in new file mode 100644 index 0000000..f575aee --- /dev/null +++ b/data/25.in @@ -0,0 +1,1228 @@ +srp: gkb zst +grc: pxt +rbc: zcc mth dgq zrv +glc: dqz zlz hqm fkn +zpx: sfx msc hnx vjs +mlx: tpx mfb +fds: zqn xcf brs nmv +fjm: qdk +rvb: kbj +zcj: bmc brs jtm trk +nps: bfh ths zds +scs: kbj dqz zfb rtp +qrj: jsk llj +kdj: frn tzp qrj +rxp: mkg +qzr: cxn hnn vhf tdd +tkb: bvf fhp vjt +njz: hlq fdc +cmj: dfp +hmr: vbd +nnk: bnr +fgx: lfq gkv kms mbx +lqr: vpc hmr dsb +sck: kbj skd +qhk: hgs +ncs: bnr kxr ggq mdp +qmb: bsf zqk fhq bsz +tjc: bsq jgq +zzz: jtl +tgl: fvr sbc dqz +tht: ptz qmp qmr +vxl: mqs tkk bfc jls mzq qpm xzr ffx +ttk: qrx +mxz: gtz +hrk: crj scs xbm lqj +bcd: gdl vtg +nrf: mqf ndq fch zvp +jss: sks zdr phr zpt +xhd: dpc +fkn: hhl +kgc: gnn +gtt: bfc jrp jdd kjp +ngh: tlh chd tkz +fzk: gdl hhj cxk +gtf: mmt +pgf: nzk +pxl: jdx vqx vvq +src: vcn cvg xjn +zjb: hmv rfs thn +nfb: qzc +sbx: txq cms kcg +kbx: jrc bnz lpg glg +djg: zzz nhs vvq +bzm: mgb frt hhf mvq +szs: qgx khz +kcq: bbt xkv +tkn: frn +cbm: mmj +lzh: nkp nbz +jvx: cjh mhz +nrb: kms gtf gbg trs +hkl: kvc +btv: dck +qph: vnz tbb pbh +fdp: hhl qkx +cmx: tjj pnh prx +txk: qdq vqr cjv jtv +txz: kqd vgr kxn +hnz: cmj +msc: fdc vjr +mgl: ljf +tzk: srv dbg +ckg: dfd pkx +zzx: fhq zsm cbv ndd +vpr: lfq zcc zzr ffm +tkk: jbk xpp hpp +dxd: xjn rjl kpl zjg +mkz: qfv kfq kvc +dkb: fjm mfr zxs xtp krc +khz: qrx +khp: fgm gkb kml jkz +sxn: tnd htx dph rxp +jdc: kmr +kbr: zqq zgx +chm: dcv xbj +pdr: qmp xxd zkx +zbv: bfv dln qct +qlj: xsm jsk rtm +kjg: hkl pcd +gpp: stn qxq qjh kbz +dtk: zcm hqs fjz flj cvl zcl +lqv: lzm +lcx: kxd krz bnz +lqq: qtq vks +ctp: jdc kbs svx jqq +fpr: hls nmv +ltx: pbh vcb qgh frc blr +mmx: qkx vpc cct +tsp: xrc zsq +xdt: nfs spz +xlf: dsb qft xfh xns ngx +rmx: xps xxn mpt prc +nmq: gmx vxd gms src +klf: vgj mln +fjl: pbd hvg jvg +vzd: jgq +qvx: rsq +pvp: rvb hqs xxd +chd: jlk hqm +gpc: pgc jvb +zdx: nmk bbt shz vdr lzq +ths: btv zdr +rtn: qpm hbk rpt mpm +tdt: jnq xpt +tpd: xjb lqh +rgf: zqj +tzp: xhx qcm +sjs: mdb ncp +krz: hlq +cjv: rks +vgk: bcb +dtc: vfj zqn qbk gvn +ckh: mtf jzf +lxq: pkx chm +cvc: fnv zqc mrp msn +qbk: qxq kbm +jlz: mmp chf szf pbq +qdp: mgl npj jpm +ddm: ljt gkd bkf csg +tdd: rsg +rhb: brb vhm kpl +zjg: dfp +xbg: hkb mqf +szd: mnz +sbt: kzl csp jdx nhr qgk +czq: lzg +fmf: grv vld rjb mbk pjq +cnm: sqp btr xrk zjb +xdm: shz bsj skd +snl: lkl drt kqm qnl +hpp: htt +mtv: bdh jnf +zbk: hnz rvm djg zxs +bjp: vfj bjn bbg zns rxp +pgm: dnl clq gzt kkm +ksf: bvf qhk nzc zdh +dbm: rnh rnm smq zcx hjn +jbd: nrb xdd qgd +pjk: ljq +ghv: nrb kqs txh gnf +dxp: vrh rst rgg vbs +nks: jnq jrj bmc dkc +nqs: rsn dfm rgs vng +kfz: ltx vck lqj zxd +cjr: nhs mdj bkp dkj +vcb: qmr +qpv: kjj fbk ffh +dcn: kbj gtz +pvd: vhf +grk: qrj fbz bjn +gnl: jmk mkl +zkj: jhh +zxp: pmb +gzs: ltb ffh szd +kvt: nzk +hrt: flj +vmm: qnf rsn hqg nkm npb dnh +dsv: tzk pbq vfk tcg mtn +zxd: vhc xbj crv ngh +bvc: mcs zms sqg fnq +xhz: szs +ckp: zlz ttb npd +kmr: zjk +gcz: dkv bzb pvp rhr +pbq: btg glm khc +cqx: vgr jzq +tbj: ddg zlx mtk gbt +xtx: tbc lmg qqg snf +lsq: gkb srb +zlj: xxz qtc hpp +vcs: kqd dsb jbk +nrj: mzq xlf +ffr: csg kfp tgb +mxb: tgj +vsg: vhz cgt qbb +qhj: cvl sks zrt +pml: jzq zfb fmg +dlz: fzt +mhr: cpx svx rkx dgd +vhj: bns ptj +dmj: fns vkl dgr +vvk: mnz +jjb: hmg zsq qrj +cxk: xln +cvg: qdk +rqn: nxm kkm +zpb: cvg +xjc: ttk +grh: gtx +nnj: pxb vdp jdc srd +ghf: tbb dhd kxb +qxq: rxs +dpn: dvh ffr znv gbd +mnf: thd +dzz: spm ztq vjt +cgk: dph nbz +rhg: zpt +nqv: gcp pzq cmj zvt rfx +krq: xrc rtm +vtg: llq lts +nkm: kvt hck +gzt: ngh qdq +skn: zqn spm gpc +fnv: hkb +bvb: dtm dqh hhf rsm +txq: pkl jbb +frx: kkm hxb ltn +vcm: fzk rqn jhb bsj +jtm: bql mxf lkb xtl lcj +nnn: csm prx khj qrs rck +qng: gzq pbh +vhl: smt +xxj: rlj fql mhz kms +zxt: npk pkm zpq cgz +htv: htn mvf xvd qtx +ntn: qbz zjg dlg qsl +bjz: lxt vgj ncb +cdl: jfc +zvt: gnl sqp +qgk: kfp jsp +jnb: bdh bjz hxb +rtr: dbg jhs +tcz: tvt +bkf: ssk qhf lkn prx +zlc: dlz zpb bsq sqg +gkx: rcj dck vhh xjc +rcj: tkz +bmc: gnn +psg: nmt dxk jsp mcj +qqg: zst +vng: cqx +rxd: dpc hpp +tcg: vhh +jnq: pzd tmv +jxx: pxg +xld: xns fmg fdk +qgv: kqd zlz mfh xdm +tct: hck gzq +hcm: hmv rst hsr +csg: hkp +vln: msq frj vcs lhx ffj +qqv: pmp khz +bgs: dfs gmz jdd bsj +ngd: kdh pkm tzp +fxr: zlv zbv nhr jrj klc +hkg: pkl qrx ktl gjs +jdh: rfh hcm qkd ghb +jfm: btv +gjt: tss hcd zgf hdg +jzx: hck kjp xrd bxs +tlm: smt vhf +ltn: zfq mfq +tbc: pcq +srz: qhq sbc xln mvp qpm +sdf: mrn tpx mgl gbg hcm fqk +fxn: msc vrh bfs vvk hkp +qfx: tbc fvx jst +rbr: cmm zxp +fmg: nkk kgd +gsg: bpm lnz +sxl: crs +znm: qqg rfv vms qrn +ghr: htt dcv +zrg: gbx rdr tkz +bnd: xcm hdg fds hnz +jbk: zpr htg +bdv: nbz ptj vlk +lvk: htt pcd +hmn: qzs tfc csh qbz +qhf: scf rgg +dzq: qls +pjq: jbl ltq gcg +sxf: vvq tfc +thz: mrd bgm tfq rrc thg +bsz: brb fnr +xhx: tdk qlr +kdn: pld bft fqk +tcq: lkn mgb zgz +sfj: vlh gft lxd +fvr: hhl +pvk: tkm bbg tqb +mdp: lrp hdg tgb +qkj: nzk bmj nps xhq pgf +mxf: zkj qcm zqx +vlx: tvt cjv zfx sct +xhj: jsp jtz hsr rgt +lkb: bjq vnd fjl +lqg: xtp zqn hjn +pms: xxz hnn htr gbx +szj: zlj fjz xzr djq chz dmj jnf +cxs: hsr xtl +glm: nxm jhb pcs hrt +qjn: trb pxk +xnx: kgd +mfh: svq lpk +phx: scf +zdr: gtz +zzl: lvv ngd jrk qhk +cpz: bnr szd zfz dzd +tvr: vhj nhz pxk qtz +vhz: svq kbg gkb +bfs: cgk nnc gcp +fqg: ffh +kbm: pkm +jdt: zdh dgq +ddr: npx +kmt: hdg hls gkr vzd +xlq: hkk tqv zjt zzf +xxn: mmx lbt xlq +jmx: vfg qsl zqj +gvn: bvf dzq ccx +kzv: mpk pnv +kht: ddg +lxh: ddk vjs mcf gzs +tqx: ljq kgp +vnr: sks +qbb: blr nkk xfp +jmz: lkq dmx dfd bhv +dft: fcg +dpc: hhb +sqv: nxc +djl: thd rrc +mkj: vtk tlm ggr +vxh: kxd ghq +kns: zcx mxv gkc lzh +vnt: dvj +qrp: mtf pzr +pfs: mnf cfz sbx jfm +tlp: xrc qzs tpk psc +kks: mzl dsf ght svl +pxq: kmt jrj sxp +vgc: shz ddr lkq rhd +mrn: qdk +qls: rfs tzt +ktb: llj mzl xnv lfz +ftn: dsb +vrs: xpt fnx mzl jxv +zxs: rtv rdb bvg +bsf: vht +lrp: zpb +gpb: ngx jnf dnl gkb +lcg: thd vnr tht +mgt: dbg pfp +pvv: pqb znm spz gbx rsq +pdx: dgr qng srv +dbc: ffx xkv +bsx: src gnn +zhp: nnz msq gft prc +tst: rsg rgs +lqh: jvb +pff: lxg lbf +jqh: frx flj ftn lns mrx +xbm: prj tsb qnf +thd: qhq +vck: ztv vkl dkk vdr +mxv: kxd tpd +vcz: mtv lnh kxz nrf +jbb: pfp +sct: ksj xbj vhc +lkn: tkq +fgl: ght snj xlh +pqb: vpp tvb vgk +bgk: ptl zfz hls mdj cfg +txv: pld +ltq: qhf +fts: mfr pnx cht fhq +pgl: rrj cdd llc mtl +zdn: hsr bsm tsp bdv vxh +sdc: zjg csh bjn +jph: zqc xhd jnc hxb fgm +knf: qrn ndq lxt zpt +nfz: jgr qgh bcb +nnz: zkx fdk hhl +jtv: xhz hhj dfs +zsm: bnr +bpm: vdt +pcd: vng +vgj: nvq kht +fck: xjc +xsm: fjm tpd jhh +jhs: hmr +htn: znv jch xdd hlq zsm +srm: nvf tnd cfg +jqq: cbm slg +rsg: dsb +vqx: sqv kgc tdk zjg +qgd: lcx mdp ssk bbg +mgb: mlq +xpt: hcd lrp +kxb: zgx vtl hch +bsm: fdc kqt +lzq: ncf pph cxn mqf +tsb: vhf mxz +trs: qsl jhh pcr +rzf: cct vhh +htc: fxd llb vgs mdb +crt: glg tvk fhq pxt +gvk: csp sqv rhf +pqx: qgx jmv qzk +zqk: tzt lfs +zhd: qkd fxh mhz +brb: ccx +mth: mxg lhb cmj +trq: sbl frn bns +mvp: lnz zvp +vmb: npd +qmr: fgm +vzl: llc kbs fqg gnl +zfb: nfs lxd +dln: xdd pzr vnd +jms: xjb ccx mdj lqg pnv xjn +vhc: kjg kcq +ffj: qvz +qgh: lqv mfq +jcv: lfs pff zqx +cxt: qhv cvd svl kpl +zxc: qqv fxq djq htt dbc +vjr: spm ghq tkn +mht: zqx qtz xrk glk +sgx: chm bcd rzf mhb mnf +pxp: jmk +vld: jbx rst zns vnc +kcd: dgr +mlj: hnz hns rxj +bbm: hkl lhx mqs +nvs: rqn gtt vlh fns +cqh: gzq +kxt: pxb jdk gkr sxp dkc +hbm: vxm bfh +tgb: pbd +hdl: kjj dmd mmj tdk jtq +jcq: vfg rtm tmf glg xjb +qkd: dsf vxd +nzc: grh fgl +cpg: mmj mcf tlp +lns: vfr slb htt cdl +lps: cxk frx fvr msq +fvx: fxz htr +ffn: psx bcb rhd jvz ftn phr npd +stb: djg trs sxl lqh +kmj: rtm pxt rhf +qsn: vbp qxl fdc +srf: kgm rvm fbr thn bsx +mdb: slb blt ddr +ggr: qnf +lsh: jhs rvg gmz +qfb: lkl qfq dvj +zlz: smt +zfx: jvq qqg xcq +rmd: phn gfn frj +psd: qnh vmb nrj qnf +hml: mxt +dbx: lvk kxn xhd vbd +ncf: kqd mtk qrd rgs +cbv: sdc +bph: pxl fdf jpm lpg xhx +fmr: kxh hrg prj +rhr: kmg kng gfn xcq xlf +slg: qxl dqm nhz tgj rck +gdh: znl vsr qnf +cbn: zfq vms mrg rfv +blr: hkk xfh +mcs: cmm jtl nzc xgh +mmj: lqh +tvv: ltn cqh srp rtr +zfz: krb +shz: jbb ztd fch +ght: qbz csm +dcv: nvt +zzf: jst jdd kjp +zmx: msn rzf rhg kcg cfz +ngz: xtz qhj lnh vgr +xxx: vgs tvb +cjh: zns +sbl: dxp kmj +rjl: tgj +djj: ktq ttk xxx +qzd: fgg +klk: jdd vgj +jrb: sqp pxq nck rkr +zcm: mln cqx mdd +bkk: tst rrc mmp +gkv: mfk ssk csg +thx: ftn sdm grl fdr +qmm: qfb hbg qsn +kml: bqd +bfz: srm vht btp +fsx: bkk zpr jmv mzq mst hxb +ncp: rhg +ncq: qfb dmd tgg +rfx: bbg jqq +zgz: krz gcg ghq +thj: hmg sqg zjg mnz +xxd: sks spz +dxm: ndd +cgt: vmb llb trg +rql: mkl pxp cgk rkr +jzf: qrp pxb +tkm: grf +pmp: qtq jfc +vnb: frd nfb prc +szf: frc mln qhg plt +tfq: dgr hkb +vks: ztd zlz gbt +zsv: lzh tkm hgs +kqt: tch njz nnk +npd: zvp +fpx: hnn hzg qvg +zzr: jvg gvk cgz +snn: bnz pkt djg mfb +lxg: fhp +xfp: kht +vqr: qtc jhs szt +tnh: ngq hjn ljt fsg +cms: ffj kjg +qrd: cvl +rjr: btr cjh rlj sqv +sfq: jdx fqg sqp ngd +czj: sdf psg tkq qhv +dbq: pkl vlp snf trg +rjb: xhn sqg +khn: gvq gft +pxg: fqg pld +hhb: npx +kgm: kfp dxm +qfv: qmp pgf +msb: xqq jfc dsb fvt +mrd: vxm +mdd: kjp +xfg: gvq ggr zpr nkk skd mrp +rrm: bkp vxh pvl vlk +vfj: mbh +gbg: cjr czq +tkz: frj +qfr: rfx hnz rdp nrb +tqv: nsh gzq rdr +grv: lzg +zgf: dlg hzb qlj zpq hgs +ngm: gxf szs kcq hzg +qln: lqr jsm hmr gbl +zcl: bcb rrc jzz +vlt: kgd mtl +tch: mmj rjl kjh krz qhv +qdg: kqd lxt vxm qvz +jnx: lxd thd pdx bcd +crv: ggr sxb sqr +hsr: tmf zjk +fmj: scg dft lxg rxp +npb: kcq msq tsv +sdm: mrd +dfp: mmt gtx +ktl: jth gdl slb skx +ddb: trk csp mgl lzj +jzr: ckh dph brs kmr +mnt: srp xtf gqz +zqc: xvf srb +tpk: rdb +tmn: kbg kjg jxk chd +pnh: qjn tpx lpg +jnf: kbg ttb +thg: mxt zjt vsr +dnh: xft gbt +dbg: flj +zbn: hlq tlp zhd xjn +bzb: qdq dpc +mmp: mkk vhl +mbm: znl +txh: dvj +fpd: jbx zxp qpv +rdt: ptl jrk fzx +gpj: mrn +rzj: kbg tsv lpk +vhh: vpc jth +sqg: tpd mcj +hlf: dck tcg sck fsv jss lfr +zcx: mxg xkn jsk +xnv: xcm xkn +nvq: ktq +rzz: lvh sqp dtm hbg +prx: xjb +sxg: rbr sxl pbd +vlp: gfx gft +ltc: bql pzr gvn +hck: htg +qtk: nbb mbm mkk +ksj: tvt +jbn: qzd ffh lkl +nhv: fql kdn +dzk: hqm lsq xbj rxd fnv +kgn: gfq ltb pvk jbx zlf +lsv: qrc rtp kxz chm tlh +jsm: hcj bzb mbm +tbb: bbm nvq +tgq: cmm vnt grf xpt +cvv: mvf xnv gnl ngn +jmn: tdk rzn rxs cbv +hbk: fxz +dkv: srb mdd slb +zlf: dvj +nkj: sbl svr pxb krb +pgc: kmj +rqg: grl nlj hzr tsv vhl hhj +dkk: gqz qft vlh +zzs: hjp bvm pgc ggq vvk +qfm: tfc tsp smq mfb +mvq: gfq mlq +frd: fch dfk +psx: mrg djl dmx prj +bvg: gtf tzt kxd mxb +bfc: phn +fxx: hgs qbt knc qrp +dqm: vxd zsr +jhm: zdr gbr ckp fkn nrj kgq +xjq: htx khj +chz: nxm svq szt +sjt: pnv +vfg: vht kzk hls +pqd: gjs vdt zlx blt +rcs: pnx hnt jpd qff +svr: tgj +vqc: qfq +nbb: bdh ncb +ktv: trb vzd +pph: pbh cct +lkd: lbt lsh zcm xxd +jrp: njh dcn qhq +jbx: rjb +mpm: qnh ncp qrd pml +bsq: qbp +bdp: vzd kxr bhj mtf kjh +qft: ztv +fxz: xpj qrx +frn: dxm +jrt: xrk bsz rfh +rhd: xpp jlr mxq +fvb: gtx rkb tcq hbx +drt: gkc mhf +fnq: jnq xlh vsm lvh +ffl: khj +jvb: qxl +tlf: rrc dfk gxf bcb +vbg: tlm hhb vpc fmr +mbh: cmm +tgg: dvh +tgx: qhk mvq fcg dxd cvg +rtp: jvq cxn +zxb: zkv tvb vdt gbx zkx +vtl: llq qzk rcj +vdc: xrb +bbs: rjl +xsg: jnq gkr mdj jzf +kqs: nck qkl vss sxl +zdh: dsf +jlm: lzj mcf qcm zkh +zkn: xkv xfp qzc klk +kmg: rvg kcq +fxc: rdp cnr zxs kzk jch rgg scf vcn +jxc: spf hbk +bgb: nmt qrs cmm svr +nlj: hzg ncb +ngn: rfs crs +bjx: ztd kvc +rkn: fqg bzc kbm dmd +jsk: tjc +ktq: chf +xrk: tkb +lld: lqv mnf +dnq: hvt krb cpx lkn qnz +ttn: qnl cxs tdt llj sxl +png: sdm ghr mtk +hjn: bsq +smq: qcm ngn +vnc: bsf dgq shm +lfq: dqm qbz +vgs: gqz +xnf: hdg kjj mfk jdc +zms: crt fbf qdp tmv +pvn: mfk svx zns htx fbz +nkf: rsn fck gpb pcd +ksn: csh bfv phx +vhm: mqv dxm bql +tfc: mxg hzb +tnp: ffj lld +rhf: qfq +txj: srb vsr btg rvb fns +kzp: jrt qhv nzx tqx +ngq: pzq bnr mht +nbf: cbv sxp jrc hjp +khq: sqf pgl rtv dxm +mtq: zqx kbz frt nck +jzq: frj +jhb: xpj qtc vhl +gqx: mqs zfq qnk +jkx: bfz pvl gkd frn +qnz: vxd qzs +hns: qzs zlf +zds: qkx xfp +hjp: jrh nnc +qst: qzk kbb mnt smn +vfk: sqr xqh qzr +vpp: xld hkk kcd hkb +mkl: zqn +bpk: hzk llq xns kht +mvf: pxg +kbz: zlf cfg stn +xgc: gcp jzf vbp gmx +jks: ztd znl rfv +xdq: mlj ksn nxc ljf kqm pvl +mcf: frn +gbb: sbt fzx zsr plf +lfs: jnq kdx +jhc: llc vvl mbh qkd +ptl: pxz csm +jtq: ddx +gzv: cms ncp cxn +prj: bfh +rrc: jzq +kxr: rvh hzb csm +vbv: vdc jkx rkx tkm +xft: ttb +ddg: bdh +xcm: jrh dlg +hdc: jgq cxs bsx pzr +dkh: zhd kdj jpm jvg +ggn: ttk cqh jth +pkt: zvc khj bhj +nhs: ghq +rdq: jzz vnr zrt +cvd: llf kqm rck qfq +zsc: jpd pmb nhv scj htn +dgd: cxs bjq qpv +gbd: bvm mxb jdt +vdp: jgp dvn rzn +jkz: kfq npx +zjt: qvg qrn +drd: rst hns jrk mrn +dtg: bbj gkr rjh +ztq: jvb pxz nhz +xln: gbr +dgq: svl +zfg: gtf mvf ddx sqp +lkk: kxh pvd ljr gzt vnr +mhf: ghq mlq +hqr: scg rxj qkl tkq +mgm: ptj pbd rxp rtv +lzj: xcf lfz +jtz: jpm snj krb +sfg: xng dvn fdm kbf +qff: csp pxz +jxk: mkk qnh mbm +xpj: jzz +pcs: ztv lnz +jrk: xkn rkx +dzd: krq tfv xth +psr: rlq fsv rks gzv +frc: nfs +tjj: sfm +zkh: bsq rxs +fjz: srp +kxz: cxn jqv +scp: cpg tgq ptb qzd +xtp: qbp +pns: hhb cdl +dzj: cgz gpj lkn gkc +fvc: rrc hqm ngc xjc +jhh: bvm +plf: xgh sxg nhs +llf: ffl xth hdg +bjq: ddk gms +crj: ngm ngc vlt +qhv: jtr +vss: pmb pxn bjn tfc svr +jnt: fcg jxv tpk kbf +lrh: chd kbr hqs ztv +hzb: txh jrc +rkx: nnk +xns: kgq lhx +kcn: kkm zrt lqj xbv +xrb: mmt zsr mdj +tqb: bds mkg kdx +blt: lzm +xbt: skn dzq kgm qlr +rvh: shm jxv +trg: btv +mrx: tsv mfq +xtf: zpr vtk +zqq: rzj vbd +xrc: mpk brb +bkj: pff zbv mgb crt jbn +jvg: fpr gnl scg +lbf: xpt +xzr: znl +pjn: trg qft pvd pgf xft +ccx: mhz ffh +nvf: kms +lkq: zqq +btg: lxt spz +rlj: kmr kqm +jqg: mkz chg xkv ncj +xth: vcn +bhj: vht bsx +xvd: ggq qgd trb +jgp: ltc tzt mkl khj +cqt: gkd gpj qht krn +gmx: qsl zxp +gjs: ksj mtl +qtc: qzc +hvl: gcg gkr fnr nrb +fxh: nkp svx +rxj: pkv gfq +fnx: lvh kgp +mhb: mkj nsh qpm xqq +chg: pfz rqr lqq qft rsn +btp: rgg vnt kgc dkc +rzr: vrv nkj grk bds +jpd: vvl mgm +pkv: xth bbs rrj ggq +kdh: gms gnl +tpq: mvp qnh kxn +krc: mxg bnr ffl +vnd: hmg +zlv: mfr bft dzz +nfg: jlr ksj nvq lnh +rld: lxt svq hch +spf: ptz nfb htc +vdt: rhg sxd xtf +hvt: trk rnh bnz +lfr: qvg tst xft tcz +jtg: jbd lqg hcm rvm +cdd: brs kdx npk +hqg: gmz xhd frd +bgm: qvz vnz +gfn: bxs +crs: fql +vcr: xcf pxn jsp shm +vjs: lzg jtl +lfz: kjj tjj +fdq: pqz qbp qcm +lnh: zfq +nmk: kxn xtc phn +npj: lkl mlq mfk +tcc: tss nhz szd kns qzs +lts: jfc sbc +jbl: ndd +kgd: jmv +snf: vms +lmq: xxx bpm djl vng +kbs: gpc +phn: kgq xfh +kzn: thz blt mxq sct hml +dts: hvt bql ggq +vvl: zzz ktv ksf ght +llb: gqz +vlk: jdc mnz +ljr: ggn vnr nvq +fdk: bbt +nkk: snf +qbh: krz tdt cvd rhf +hxq: jmx vdc dvh cbm +rll: rdr mst jnf vgk sbc prj +hzr: tbj jjm xqq +zrv: lrp grh txh +qtx: jcv stn tkn +lph: rjh nmt crs kgp +kxd: rhf +tvk: pfd pjk +dhz: gbr gfn fdp kbr +jrh: scf +ngc: gss hnn xnx +zqn: rtm ktv +qgx: nvt +grd: rrj bsz qjn lzh +pfz: ncf tnp qdq +tzt: zkh +zhh: thx mst tsb xhz +xqh: tct bxs kml vmb xzr xbv +xpp: xfh nzk +lzm: mxz +btr: jtr krb +zmt: jfm zxq fmg chf dgr +mcj: nmt vcn vjt +kcg: szt jbk +qjh: pvl drt ktb +jls: tlf pns +nbz: vjt +gcg: txv fnx +dfn: kkh rsq kmg jnb +tss: nlh xmq kzv +lbd: jmv gqt nkm ngm +rfh: trk +pzq: svl hcd +fdr: vsr blr ngx nlj +ljt: zsq tmf +xlh: txh rhf +tlh: nbb xjc +fhh: fck qvz lcg ggr zrg mrg zrt +hsp: vnd czq pbd lzg +vsp: jhh fqk jtj bsm qff +rnm: ffm jtq drd tgg +cnn: mbh qnz kbm jrc +ptj: jdk +xng: nhr jnt pnv +dqh: mvq qgd dlz +hbg: grh tjc nnk +vbp: trk vbs +rsm: glk ffh ljq +lpc: vcz jgr lxq +szt: mln lts +nmf: ddx bvf zsv sxf +nxm: gqt +tcn: dbg gbt lmg dfk +gqz: tvt bqd +fbr: zsr fpr qct +grl: kgg ggn +jst: kht +mxt: frj +jqv: mtv gtz jvq +qhg: npx +gdl: gsg +vlg: jjm xsq tbj vgk +srd: vqc +znv: fcg vcn +hnn: kht ptz +lpg: gmx pkm +rdp: zvt tpd +xtc: ftn kbb jlr zgx +cfz: lqv pkx kml +xtk: xdt lcb qpz txq pfp +hhl: lpk +bkh: bqd ckg rkv jkz +jlr: gss +pqz: pdq qhf jdt +lrm: skx tsb hbm sfj bhv +sbd: ncq fhq zsm pxn pxk +xcq: xbv qpz +vcx: htg bbt tlf gzq jfm +nlr: ddg dfk ncf kcd +dbn: dlz mqv qrj nhv +zkv: hkp kzl +nsh: rks pph +dfs: jzz pns gss +cgs: ssk zpq dtg rgt +tdg: zdr qkx psr qtk +pfd: zqn mdj +rvv: sqf xdd jtz snj +rtv: czq llc +jvz: nzr qgx qfx fkn +clq: bgm tpq bxs tdd +fzt: hjn rfh +mrg: sxd bjx klf +fmx: pjk pxp svr rgf +kbb: mdd sjs +lqm: kvt rks qvx +tfm: bjp mnz shm dxk +nlh: rdb bmc +jjm: gfx mnx lqq +cpx: pcr mmt +zlx: dbg +qnl: kbz sfx lcj +ccp: rrj jtr rvh tkm +pxb: bbs +kvm: skd fgm txz +csb: mlx sfx cbm gcp +rnr: zvp fvz kng vkl tcg qtq +fbk: jxx xpt bnr +fxq: pcs bjz vfr +kdk: qtz jxv vvk +nnc: rfs +lbt: gqt hbk +fsv: mrd cqx +gqt: kgd +vnz: hkl rsn +pcq: dsb khz qpz +hgs: pzq kzl fgg +kpl: tpk mkg qbp +ddk: ffl +cbc: jsh lcj dxm tfv +vfr: xsq txq +xsq: ttb +hch: kgq smt +mhg: nfs bzb xsq tcz dcn +hmv: rst jxv +bbg: bbs txv xcf +zvm: zcx kgc trq htx +lcb: mvp frc kcd rxd +nck: qzd bsf +ngx: mtv +kvc: llb +gfx: fch ncb +zlr: sxf qrs psc kjh vqc +dlg: rgf +qzk: jlr +bzc: tjj nvf hcd sjt +hfp: sjt dxk qxl zpb +lvv: fnr nnn bsf +sqr: tct skx +mtf: njz +mst: xpj +lcz: rrj jxx dft jqq +jgr: gvq hkl +xrd: fvx zkx sxd lkf mfq vbd +vsm: sfm bmc +mrp: mtk ghr +gfz: ths tzk jfc txk +jtj: rrj hnx cln +xxt: hnx xdd rgt lfq +gxf: cct +srv: cdl mqf +fdm: ddk rxs pcr +ccf: rld lhx rdr xlq rtr +cgv: hzk png vnb phn +hnt: qrs fdq glg +cht: ddk cmx +qrr: mbx phx bft hjp +htg: fdk +fbf: jbl hdg vvq +qnk: ths bjz jls smn +tqs: zqc rgs vlp lld xxn +kxh: qgh bpm rkv +mpk: mhf rgt +zsd: stn pzd qdk sjt +mtn: hbm vng +hmg: kfp +gmn: zds mfh gbt chf brc +vgr: qgx +blm: vgj ctb rtr lpc +skr: vrh tfz rgf xtp +phr: mrx nvt +knc: nnc tlp bzc +qlg: kgg zpj pqx lqm rfv +qbt: jxx rhb qxq +xnk: lhx hbk dcn xtf +jsh: grv gfq pfd +cln: gpj zns vbp +njh: mst mxq +mbk: qjn kdk ltb +djq: vtg dnh +plt: snf lxq hbm +ncn: mkg tfz ztq +bmj: lkq vtg rxd +qsh: vsg qlg pdr xvf +tvb: pvd +qkx: tgl +lqj: fns +qtz: fjm grc nmv kqm jch +cfg: dvh sfm +dhd: sxd vdr rfv +kgg: lxt +dlh: fvr vlt vtk tcz +zpj: lnz bbt xbg +tnd: gnn +lcj: tfz +jfn: rsq dfk jks rmd +zxq: mtn lpk hml +sft: npk zfz qsn jrh +vff: dlz qct krq pxk jtl +qpq: qng qmr rgv ncp +jlk: zgx qtq hzg +dvn: grv xsm +msn: fck xxz +rzn: zqk mxv +plq: mxt sjs bqd dck jbb +tzs: lxd mtk xsq rvb +hzk: pkx +thn: nvf pjk pdq psc jxv srd jvx +nhr: tgg rck +mtm: pfp qrd hhj fns +skx: kjp +frt: fzx grc lzj +mbx: csh kms +hvg: qct srd qgk +hnx: gkc dsf +bds: bhj dzd +pzd: jmk csh +ndq: gxf xnx +kfq: xjc +rnh: zpq xjq +pkl: ztv +prc: mqs +sxb: gbr vcb ddr hkk +rlq: gvq qvg +nzx: kjh dxp jjb kbm +jvq: zst +fss: zst nfz znl nsh +hbx: vfj mlx gtx +bns: xjb pld +mfb: lbf +gzk: qlr rdt fbz kdh +rqr: zrt hrt xln +mpt: vdr rlq smn lqv dbc +brs: src +sqf: jvx pxt dkc ksn +rjh: llj vqc ltq ghb +gkd: lbf +xmq: sjt ncn pxt +tfv: bft dfp +sfm: spm zjk +ghb: zqj +xxz: pfp +ffx: lsq tlm +fqk: jch +cnr: pxn tnd scg +jnc: qhq qhg gfx cvl +ddx: dph +nxc: fgg nkp +zcc: vcr btr +mxg: zjk +lfp: rnh gpp bsf psg +qtp: nvs bfc jxc zlx +kqv: xjq jtq fxh txv +tkq: zkv +scj: zqk cjh cht +mqv: phx pfd +ctb: fch lqr djj +mfr: zxp vxd +bsj: lzm htr +dtm: mxb grf tkn +fnr: grc pcr +sfx: ljf fgg +vbs: vqc tmf +krn: fhp vsm mlx +xbv: qvx +ptb: vzf nlh pdq ljq +kbf: dkj fhp +gkr: rdb +qrc: ckg msq qvx +hqs: hck hzk fpx qmp +qrn: vxm ktq +khc: pns ktq qmp +lmg: lqv xtz +kfn: shm qxq qkd xtl +pxn: mzl +sfr: ndd zkj hbg qhv +htr: jdd +vjl: kfq jph mxk khn +bfh: jth +gmz: xnx qpz +gkk: jdk qhf ljf bvm vrh +kld: bjx qzc kgg rkv +dkc: bfv +xlm: pdq tgb fzt zxp +fvz: smn qhg fzk fjz cqh +rpt: phr qmp mqs +ntm: tvk mlq rvm ltq pld +rrj: sxp jgq hkp +xps: qtq vhh ndq +fdf: hmg pgc tpx kzk +bbj: psg dft nkp +kkh: mzq xqq rsg ksj bqd +dfm: blm mxk sck pdr +nzm: gcp pjq qbk zqx bfv +mxk: mgt qph vcb +ptz: gdh +ffm: kdx +dkj: rlj glk +lrz: zlj znl zmt kvm +vlh: zpt mln +rvg: hch +bkp: jdk kgp +fzx: kzv +dxk: nhz +bnp: btv kbb tdd ghf +mnx: vms gss vng +ghq: rtm +fsg: svx dlz kbs +fxd: mxz nvt klk dmx +grf: nmv +klc: grf qkl zqj +lkf: dmx scf vpc tht qqv +zvc: ckh dzq jsh +vnx: vzf jbl pzq kzl +rkb: dts qlr lvh tqx kdx +xgh: ggq pmb +mkk: mqs +vpv: zsq ght cjr qkl +gnf: phx zzz xkn jtr +tnr: gqx hml qfv vks +jdx: jrj mvf sqv +ccz: khn msb ksj lnh +kzk: pzr +xcj: cbv vhj bvb rkr +rkr: npk +ljl: qsl glk trb vnt +cxf: bjz nfb njh cjv vgs jxc +hvs: fpd jsk mvq rhb +vrv: dmd nnk qmb ffm qls qmm +qzc: mtl +xtl: pxz +tfz: hhf jgq +xvf: vbd tkz +fbz: vvq +gms: fql +xhq: qtp nlr xbg nrf +bhv: gsg xns +nvc: hlf qph mrm sct +jmk: hhf +vzf: snj pxp +vkl: mgt rdq +brc: pmp sbc mxq +pnx: mgl hnz +cgz: qsl +dnl: jst dcv hch +xhn: ltb svl hdg +ncj: tkk kvt lvk +hzj: vdc ddx vnd pzd +hcj: dqz rkv cxk +qht: lxg psc kbf +dfd: thd lpk +kng: chg tbc +hrg: xtz btv hrt vgs +nzr: zgx xtz vtk +tmv: rbr fqg pzd +lhb: ghb lzg zkj zdh qbz +fvt: klk sdm tnp fdp +gbl: xhz fnv rvg +rgv: fxz tfq bsj fpx +mrm: llq klf qvx xdt +srb: rcj diff --git a/src/bin/day25.rs b/src/bin/day25.rs new file mode 100644 index 0000000..487a83e --- /dev/null +++ b/src/bin/day25.rs @@ -0,0 +1,110 @@ +use anyhow::{Context, Result}; +use rand::seq::SliceRandom; +use rand::thread_rng; +use std::collections::HashMap; + +struct DisjointSets { + parent: Vec, + rank: Vec, + size: usize, +} + +impl DisjointSets { + fn new(size: usize) -> Self { + let mut parent = Vec::with_capacity(size); + for i in 0..size { + parent.push(i); + } + let rank = vec![0; size]; + DisjointSets { parent, rank, size } + } + + fn reset(&mut self) { + for i in 0..self.parent.len() { + self.parent[i] = i; + } + self.rank.fill(0); + self.size = self.parent.len(); + } + + fn find(&mut self, member: usize) -> usize { + let parent = self.parent[member]; + if parent == member { + member + } else { + self.parent[member] = self.find(parent); + self.parent[member] + } + } + + fn union(&mut self, u: usize, v: usize) { + let mut pu = self.find(u); + let mut pv = self.find(v); + + if pu != pv { + if self.rank[pu] < self.rank[pv] { + (pu, pv) = (pv, pu) + } + + self.parent[pv] = pu; + self.size -= 1; + + if self.rank[pu] == self.rank[pv] { + self.rank[pu] += 1; + } + } + } +} + +fn main() -> Result<()> { + let filename = std::env::args() + .nth(1) + .context("./day25 ")?; + let input = std::fs::read_to_string(filename)?; + + let mut edges = Vec::new(); + let mut name_ids = HashMap::new(); + for line in input.lines() { + let (from, to) = line.split_once(": ").context("malformed input.")?; + let to = to.split(' ').collect::>(); + let l = name_ids.len(); + let from_id: usize = *name_ids.entry(from).or_insert(l); + for to in to { + let l = name_ids.len(); + let to_id: usize = *name_ids.entry(to).or_insert(l); + edges.push((from_id, to_id)); + } + } + + let mut rng = thread_rng(); + let mut sets = DisjointSets::new(name_ids.len()); + let part1 = loop { + edges.as_mut_slice().shuffle(&mut rng); + let mut it = edges.iter(); + + while sets.size > 2 { + let edge = it.next().unwrap(); + sets.union(edge.0, edge.1); + } + + let cut_size = it + .filter(|edge| sets.find(edge.0) != sets.find(edge.1)) + .count(); + + if cut_size == 3 { + (0..sets.parent.len()).for_each(|i| { + sets.find(i); + }); + let p1 = sets.find(sets.parent[0]); + let partition_size = sets.parent.iter().filter(|&&v| v == p1).count(); + break partition_size * (sets.parent.len() - partition_size); + } + + sets.reset(); + }; + + println!("1) {}", part1); + println!("2) Merry Christmas"); + + Ok(()) +}