From fd48bea5164417154ba4ca2cae54ea0476e6c0a9 Mon Sep 17 00:00:00 2001 From: Dory Date: Mon, 25 Dec 2023 16:45:25 -0800 Subject: [PATCH] d25p1 --- 25/input.txt | 1205 ++++++++++++++++++++++++++++++++++++++++++++++++++ 25/part1.pl | 91 ++++ 25/test.txt | 13 + 3 files changed, 1309 insertions(+) create mode 100644 25/input.txt create mode 100644 25/part1.pl create mode 100644 25/test.txt diff --git a/25/input.txt b/25/input.txt new file mode 100644 index 0000000..07cd325 --- /dev/null +++ b/25/input.txt @@ -0,0 +1,1205 @@ +hxf: vkx +nrc: kvx pzd xgt +jsp: kqz djz fzb +lmc: rjz +brp: gbb vgr dlg +shv: dbz +gkh: cps +fqd: kkv gvv bcr +xst: kvj mlf mlr +zzn: nck ttg +tcv: vdf zrr +gbb: hbn fzs rch +xrm: fxr mtm nzf czj +ctt: rbb pqq +bff: bpt bgc +cpg: nfx rxv khr +bkd: bqq jmv qnv +pzn: xgt ndb +xhx: jhm zkn ldc +knz: qcf cfk cgk rxv +jgv: sqx jsg ktf tzb zrr +qlc: bhc xcx rnz jhm +lxg: xrz bcv krk +phx: kqv bxr xsg hlq +qbc: trd xlp dpn mzg +nzf: mlh +mjs: lnk rmx zkh bbz +tpd: qmq xgp krk zqk +pdb: njv glt vrv cks ncc +zvs: crk dml hmz bsx +xnz: xtx +qbx: mxm kqn sft +nhk: gqx gst vtg zhg +bss: rpd pft llq +bsm: qfd +kkv: fbr +cgq: zkk tpl fvh +fxl: qkp zbl xlv jhp +hkd: zrr jrb gbq bjn +rvj: pxc nrc fxr xzd +kpf: kjk +kgd: dmz ghn pkz jmr +ldq: ztz ltn hlp tmv +jln: rfv bgc +gpr: snq fxv jln +hth: lqj tsg +xdk: rhr prf cxs fkc +bdn: mns lps lnm mnc fnm +xhk: rqk cfk kkz kkd djz +kmg: bsm frd hnf trt mqg vhj +jpt: ftj nvz mvh lfv +bdz: fvh flr gqj bmp +ggp: dzk xhq +sjp: cks +mnc: tmp ggp +vfh: fgh gff +mvz: qdh +frv: hhr tpl mgj jkt +ktc: dgc jvs jcx +stf: nlq dxc xtz +xvg: bmp rcj +frp: mjg dtj +lcl: cnl bvr gnb +gsb: tnl zlq hjr hsx +zpn: ltn xrn mzj rxj +bls: gvl fhs +rfk: qbc xqm tnk +rzg: xpb hsx bck +npk: gcd mtk +xbx: cjl hjn nxl tcv tnh rqv +bjp: mrx xrn xnk +bdk: hjr ftv +glt: rrc rpl xfl hmg +gms: xdr +hdl: hnr mnx sss +fjg: php rjk svt +mqg: tps kgm gqj +fjl: cch gct ndk scj brv rgg +xrr: vjv zqk vxp +pzq: tzv +dml: pdm tjh gcd +ssx: dhv mrx kdp +bqd: gph xdb qlp +dvq: frb qmn vdq kkd mvs +qtk: xdq +vdf: vhr +pft: bqk gcj +bjv: jsp dgr fjt jsj +hmj: xnm nkf gfg pnf +crd: znq kmn hdv +pgm: tnq +mgv: xvn vtb spk xqm sqh +cch: tnh zkn +vkm: gmr mlg xnr tsf qdj +xpr: lnb qng zcm ncc +jkt: qsk +bqk: ktf xll +gxk: hfg csr vmk +mkp: hsf khr khs kcj +gtk: nlh nvx ktr ddr +llx: sdh bdh zpk hxr +tsg: vvt +gkg: sdn mlg qfn +pnq: jdk +zcn: jsv gzk fjg +vpd: gqj hdp cxp tps +dqx: kqn tdm +bqq: dhv +ctk: xpv tcf bsl +mrt: jln pbl gkl +zbl: fpg cxk +rkh: fzb fxc tzv jvv +vvj: qhl lcj zkh +psk: dtv +ppv: mvg qhc rds vgk nzf pqm +zxl: gch njl rfm jms +djr: lsl ptb mzs +zxq: mtm tjf +nsl: msg rpv +lzk: rdf zsh grl zcv +jrc: dtp fnm rcx fnz +xjk: vvj xhq krk +lnk: cvt jcg jmk sqg qmg +xsz: sqg dpj +gvs: cks +mvs: bxr kgm zvg pzf xxb +qmc: hjr +hbr: prk fvm +xdb: vtm nmv +nfx: tzv drm fpg +drk: hhg spn jpm +zjb: khz bjp +vjs: jzn zlv +skp: lfz jkx tsr dtz nzc dqq +zbb: dgz bck +jkm: ncc mpf hlq +qvh: fgh hbr +lqs: ktt qtn tkk htb +pnt: jsv qtb prv +hmk: kzm dzm rfl +hzm: lsl fnz xkp mmk +mzx: dvg qmn jzc fvm qsl +psp: kmb cxd zvx nmf +fxk: pxk kjd bcf grh bcr +jvr: mtv lfv vbj +jmt: qcs nxs jpr crg +drt: kcj lfv +gcl: cnn zzn smz pmc +cxt: nhf hmd rnm vbn +tlv: kzg dqn cxp nrl +qjx: qdh qmm jnx +njm: nrz rkx +mnl: xvg zpk mlp +rcx: xtx dzm jsk +nbh: bhd tvj +nmh: mzs +vbk: xfl mvs +mkm: lxs rnr bjt zsq ftj +nxl: ttt drs +jbt: qlt hqb hpx qbx +zcs: xnf +kdq: rrx kkd +pzx: bkp vfh fnf lfb +crx: gpb zsl xsd +kmn: bdm tbx nrz +tnm: ljl djz nrv xlt qkp xpt +lxv: pqq tbp ttj bqd +lbh: csr +rrt: lfx bsl phj hsq +ptl: rlj +mbd: gvs msf zrh mbs +cnz: zjt fcz knn bcr +qxk: mss hpb +tzb: ptb ttv +gxx: jkp +vjr: ftv +ktt: xdr dzk +mxq: bls pkz qtk rbz +nfl: kbf phx knq cng mqb +lfv: gdv +bfp: txm zvx zsz +qzn: nvx +lvr: vpn nnm qxk +qhp: rpl nsj ltn +kkd: kvx +zhk: frk mtb znj +xcp: szf dpn bzn ccl +zcb: kmb krl mks +jsf: npk +glf: pbx +stg: lfx pxj dqs djm +tbq: cxs dgz +shn: gvl tcf +dqr: zhb bdm tcr ddr bkj +bsl: hgg hpt +fbf: rlj lbx +phl: xqz zpm zxp knt +srx: smb pxk fnm ptl +snq: tsz +fzx: xsg fvh +rqq: znq xgf tbs +rff: czj mqg dtz ntj +crz: rfv czg zsq +rxx: bmf jdk crk hfg +zhh: ztc +tqk: mmd szn +kfb: hjm bxl xqz mmc +ntj: xnk hhc +vzj: ktp srv +qcv: mzd jsg +kzf: sjv ctx sgq mgj +xqz: xdr skh +jrx: zcp sqx vjc drs +bsb: qmh hhk pxc +mvp: frk mdm gxx +php: ggq +mpf: qsk pdr +hpf: cdj qdb +hdv: spn +nrr: vvm +njx: tnh txm fsd cjr +mvg: klg mjg +xvt: xtz xqm +qlt: gsz kvd zqv +bxl: sqh zjh kjh +clp: gcs rjz +kzg: kht nrh +pfm: ffx sfc zfj hpr hth +lxs: vcz vbk fzx xpn +xnr: bck +vkc: lqj szn bfp +rhr: ggq +dfq: jpt rxx ztz jmv +vtm: zrh +szd: ggp dxc vvm +mnf: xvd frh prv hlg +qdb: rgn mcr +bxd: hdl ljh dvt vsx jvl +snb: kxk +lqf: rqv lvk bkm qxg +hlb: nrv ttj vvx +ghn: xll trd +vcs: bkm ffj +jhr: lth gbv hsc +rkz: pcm +fbh: dcj hgz bgc +ljz: fbf bjh pdk htb +jsj: tnq qvh dlc +phj: gms xqm +fmt: pkp mqp +ssj: pbx clc vjs +sbb: zkp +ldz: clt gzk spz gsc +vgh: nzl zbl ctx +dkb: smb pql hpt jbs +mmk: rpj rgk lrh gvf rrt +qsl: tbx gxk +ncq: rsv qhc mbr qfv +bgd: mlp vck hsc +xjh: cnn zcs jxp ndk psk +spt: cvt fhs mmt nhq bgh +pgs: ctd qbz klg txs +hgp: qhp pzn xlv +kjs: xjx llb jqd +qdx: rkz dsg hrs +bth: nsl rrc bhx pzz sph ccj +flr: xgs frp +dcm: pnq tdq bvr dvs +gzl: qng ccj nrh lfg +xdq: jgc hxf +txg: vqh xtm lxs dbz +kps: sbv dhv jdk ppr lxz +vng: mjg +zsz: kjd +fsc: mmt bkm jms zjh +rmp: lhd +bsj: qzn drn lnt tps +fcz: rql ggq +kzm: mbn rlj +xhb: qnn bhz xhm shn +tvx: fcg spz +xfj: dcg xsz +fcq: fnz dfp ktl qgg +tpq: zgg rht qjj +nkf: mdp njs ssz xpk +qrv: pcm lfz +hrm: dgr +gsz: jcf +hcg: rpd qjn dtp pmm +lpc: mss +kqz: tmm jmz +fst: bbn fxh bxx +zdb: tsx flr vng vvx +tbs: nbz rmn rxs +dgx: vvj xpb jnj +ccj: blx +qfr: tsr gdg fxt +lhh: mlz vmk mlp cvp +qms: dxc +gmc: lqz xnc pbl fhp +hbn: kmb +gmt: bcf +htq: pmp psb hlq vzj ptm +hrb: pzr ccj zlb fbk +thd: zlv xgs zgg +qcg: hdr tqv kpf +hqb: zkh qdh gmr +xrn: clc hfg +tfp: ctx +grm: hjt kzm mss knr +bhx: vjs nzf sbb +xsb: hqp jgc sqg +brc: jvl +bxg: xnm ndk jpq dng +ktr: mrx mtv +ctj: xsb jqh drf vkm nmh +tjf: cfl rmp +cxd: scp chj +rnt: zvv crx fsg +vvs: qgg vjr xst knm +hhg: ljl +rqk: jsf +kvj: sqh +hts: njm kjs hsf +kqn: nxk +xch: brc zkk +xhv: czg +rrs: tvj zll +mcp: nrc ljh snb hlq +xhl: xtm kbf jhl shj +skf: frx fjr tgg vqr +jgr: mcr gst kkb +tff: ncn lfz xfl +dks: vdf xgd +mgj: rxx rpn +kfv: tmv ckx tjf +qnm: hzc trv fkk llm +jjq: gqx dqs nxs gch +zkp: nrv +xvn: bqk tmp xnr +qnz: zsz +jvf: cph hdp mrk pzq jkm +xxt: php szd xgh +vhp: gms ptb pxr hdr +sxz: xfd xht vvj fcj +lns: jqh vdf knx +bkp: qvh gmc +gnb: pzr +zsv: pzr sbp gdg nsj +xgl: bdc tvz msg svc +zvv: dcj hvl +pcx: nmv kmn +qbk: dsz vxp zbq xvt +znq: lhd +jhp: zzd tbp drt +ggs: mxj nsj klt xqv +fbt: hrm qfv gdv xvg zkp +jzm: qgg kkb qmg snt bfp +bfb: jmr ldc vns mvz +ggz: jcf +fzs: zrb zhk zfb +dqs: hmd rgg +xpb: xll +btp: mlr svh rhr +sqz: mks bbz zmj +jpm: sgq zkp dvt +jkc: zbk shn mbn +dvg: mlp nrz cnd gmt +lfg: pdz +qkp: tqj rxj grl +fkc: qxg zqv +dqn: nxp pkp vqz vzj +bpq: gms +jjv: kgm snq tsz cvp xch +dsz: bls pqt qmc +zhc: dvg rbb xch +cck: mdm hpt +mgm: dqx fhs jmk +ccc: mzs fcb +ggc: jhl snb gqc klj +ptb: kvf +qtb: zxp dpj +qfv: gnb +cvt: dgj rnm brv tnl +pkk: mlr +zkj: kvf fnz +hlv: scj pnf xhb xdk +lcc: skv lft +vgk: xxb +hnf: pxs vck hnr +fzg: gct xht dqs jxp +bxs: scp kzh qmm dpn +fsd: xnf sjh dbp +jpz: cjr xxt pxj zkj nkk +jlx: kcn tsc qms +lfb: kht bdm dvg +mzj: frx xnk +dhf: mkn hmk xkk jnj +nlh: lxq zsq +mmc: bgh qtn qpk +gpn: zjt xpv rch qmg lsx +nxp: nrv xrq tfp +dtd: tcj cnd rds khr +rsv: rxx gvs jzz +ktk: mrq tcd rkm +cxp: mqj xtm +nsv: xfd xnf +pzf: jkt +ngt: bpq sfc rjz +dfp: jmk hpf +ngx: dgj znj djm +vzd: xnz +qcf: mqp +hfn: gcs szn +mks: rnz vzd +dcv: mdj vtb bhd spc +czj: sjp vhj +klx: qrt fxr +hxr: khs +ndb: dsg +gdb: mkz kdq dgc xsd +hhv: qdh +kbq: vmk fcr +ghk: knm htb qhl +sjc: ppx zkn +gsc: ftv kvs +nnx: xdq dzk xvd +krx: gft ctt bdh zcm bch +xxk: bdz kkz jcx +hzz: cdp +ztc: cng +zlf: zxp vvt +xvc: fvm qfv mzj lxq +rrx: tqj cng hvl +ljs: zsx vvm dmf tqk +zfp: jmz fxv bdz fjt +mkz: tcs qnv gdg +htz: hpr ggq jpr ngt +bxq: ncc tbx nzl +pdg: jst +xnm: nrr +gff: bvr pgm dvs +rxs: zpr hhk pqq +svt: djr nxs qmc vvt +fkk: gvl trd +qsb: jcx zcv svl +hmz: qjj +prk: snq +ckg: vdq qjj hgz ljl +zkn: hxf +cgk: pzf svl bxx +zht: qms +cmt: qtk pft vns +ftm: xqv nbz cvk xtm +bsx: flt nsj zmv +kvp: bxx rht +zqx: dfm gcj nmf lvk zjt +gbq: zrx +cjl: nck zqv ctk +gcs: kvm +tpb: kdj ttg qgz hvg +hqp: zkr kkb qxk +jxn: bqh +pbh: jsg bjn srl +zcm: xgf +lbx: hgg vjp +klh: cxk +jgz: fhp rnt fdq mzj +kcg: pnq lxq +xht: bdk +trt: mqg ljv +dtz: lfg +qbv: jbs gkh tnk rgg +zhg: bck vtg rbl +bmx: jsv kjd +vrv: fvm +ljr: jpq rck pdg nhv +prv: ssp nmh +fht: kht gpr ljl +jhj: shl ktt dzm +rtq: vdr gcj sqh +mmt: tqf ttt gbb +tnc: nsv scp spz +bqg: bpt +fnf: hhr zpk zpr +rjx: sjh +dmb: rqv +xkk: mss gsz +tsc: vhg +llh: dzk pqt +ffx: gqx zqv dgx +vrl: lnl mlh znd pzq +kzh: zfb njl +rfb: zvb szf ngx zcs nbh +rcj: prk +fjt: gph hgb +vpt: gkg smb xgm btp mxk +grk: xkk zfj cdp xgd nmf zqd +jzg: ghn mdj qhl nhq +drn: nvz tcr +lmb: xjx crk vtp qcm +zfv: kjh vdr jhm hcg hpb +bdh: zlv tbr +vhg: lbl +fgs: zjh cck rql rdl +hch: npk +jvv: bvr shh bbn +svc: zjb rkz bfq kbq +rfp: pzd rxb ztc lfv +hct: bcr vxp mxk xdq +hgn: qcf dgr lft +dbp: vlr jxn mzs +tbr: xjx bqg +kvd: lbx prf +jcx: kql +mbv: kjd cdj +mxm: tnc +bkj: qbz pdr ssx +dkf: kjh fcb vpn +sss: cmh tsr rpv xpt +zdg: mbn +xgh: xhm rzh +gcv: tnq tsx cnl vlh mnl ftj +kqg: csr xsg xgz qsl tfq +pdz: pzd +spj: bkp vnt kmz hgb dmn +njs: hbn +xzh: dkd mps nxk gvj +xjq: bjt lfz qfr bff +zgg: xsq +gvl: vns +tgk: zzn nlq kjk ggz +dzj: kvp mbs hmz +hff: ndq dmz pbh htb fbd +sdh: nvz djz rmk +scx: fst gft zcv lxz +bgb: hzx gvf dfm nhf +sgn: mvz fbr +kzr: hnr rvf ndb +gql: nxl xxt gsc +fml: nzl nlh rvf lnt mgj +vnc: jms nxs bfp qbv +bjh: zmj pbv jhj nrg +cnl: bxq tmn +gph: zzd hhc +zsx: tpx +vks: pkz zqd bbz +jrr: lrr fbr lfx xtx +qfn: xvk zmj rjx +pmg: khs +pxr: lsl +vnt: fjr nsl +nxs: zcs +jsq: zlb pnq vqh +xqn: mcg kbq +frh: sjh +bhz: qmm hpx bhc +zts: mtm sng tzv +hdj: slz glf +lnt: sjp kdp +nlq: sjc mlf +jvs: frp srv +rdt: prv fcb ggp kkb +txm: lrh +mvf: gjc qfr vng frb +vgs: hsq qdh +fgh: zmv rpn +cnj: drs lkn smz gcs +qzt: xsq bpt lbh rvj +hdr: djm brt dpj +txs: scx bff nxp +frk: tpk +jmz: dgc fxh vqz +jht: spk rnz cps +pkp: bgc brc +dmz: dtv +blt: dmf vkx hth gvj +kbv: csr fhp sgq nnb +rtv: jcf nnx sgn pvk zfz +jmk: pqt +nhf: qtn +htb: ktl dgz kpf nph +qcp: hsf cgt tzf tfv +bch: vtm jrl dzj +lrl: bkm bmn zlq vkc +qbq: mbs jmz vhj lfv +qmh: pts +nnb: shh +gxt: pmp zpr +sdn: sfc +jhl: djz +kjk: ssp +lhn: vgk zkk tmn pgf +zqk: qhl trd +nph: rgk ssp +zrc: nhq xcp +zmq: kjg gms vjh jsg +lnc: gql qcg lqj htb pdg +xxb: pts frb +qdj: xtx psk +sng: rmp +pvk: bck gch llq +zvg: tmv hph +pnx: kfv xnk bcf +rnm: dlg +dpn: xll +cjq: vlr hmd +tcd: mlp mtm +fvn: qcs srl drp +vvq: tdm +rnz: bpq +kzn: lbh kjs +shf: kcn sjh jmr qtk +rfl: vjr zkn +kjg: hmf bjn qgz +czg: vvx +sph: nrh nrc shv +lqz: kqz xrq qzt fzx +vcb: lnl kmn +dmk: bgd mrt lcc xsd +gkn: cxk llb pdm +jpd: lbx mdm zdg +dmn: ctd hrs +gdm: ffx tsc +rzq: trt xpn zrp lbh +jnj: mdm kjk +bbd: jgr lvr crj xpv brp +msf: lth zrp xcl +qgx: gkh xhx dtv clt vcs +nvx: lbh njm +zdd: jrb pqt gxx bgh +cph: mvj rkm tdq +hzx: ssp +rkn: hff xnh vlv tnh qzh +zlq: ggp rzg +mzt: fst zcv qnv drt +cdp: vhg dmb +llg: gzk vjh ghk nhq +jqf: jxn vdr vvq tnl pkk +dcg: tcq hzx +bpz: qfd vcz tfv xqn bxm +zng: fcr cvk qcm +rnr: jmv tbx +lsx: tcf vkx +knr: frk hpb pmh +crg: rcr +gvt: mvg fjr lfb dqc +cpf: jhp ntj vcb +gzd: drn tsz mqb kqd +hmg: vsx mzj rmk +vjk: pts hsc qkp shv frd +hcb: mmd ktt stf zdg +skh: bpq zkr gms +zcp: htn llk btp +fvj: rfk dcg blb klc tng xhn +fxg: zcs dft dng +tjq: kvx llb xpt +sfn: fxh dtj thd fsg +tqf: jkp nmh +rph: vgk klj xgt sbv +vqh: brs +fsg: hhk pgm +tjh: spn bxm +vbn: jms hgg drf +kmr: rgk sqz dlg nbh +nmv: fxt +mxj: grr +ldt: vhg hsx mvp +gfg: dks nkk npq +zsh: hph sbv +djb: fcg zcb +npq: xpb kgs hqb +qxv: tpq xsq mlz grl +svh: vvm +fbk: jzn jqd ndb +spc: dtv dtp gxx +hpz: fxr lth +zgs: bxr slz flt mvh +zrb: zrx jsv +hhr: pms +hjt: njs scp lns +bgh: jqh +tzf: cnd fzb xxc +hpt: mbn +blb: mnc jnj pkk +lcj: xrz kjh +fcj: zbq gbq ggp +xrz: hct xpb +ndc: hmk rmx btp vgr shl +xvk: xqm grh qcv kvm +tnh: sfm +vqp: tkj tjh kbf kmx +rjc: rkz jxl rds hxr +sbv: lhd kvx +zjt: hsq +gvv: rnz +ktl: hqf crj +xcb: gff lbc qng hpz fpg +gft: xxc pxc +rvg: mmd ftv pqt bnh cdj +rdl: knx dsz +klt: ddb kzr lfb +tcr: pcm tfq +qzh: mxm kmh fvn +htn: jrb ffj +pxk: bhd +qcm: zpr +xzd: rcj xqv pzd +kmx: grr mnx lll +xtz: fcb +brs: cfl fxr kht +rvl: llh vdr tsf xnr qmq jtg ccl pql +tbg: tfv qcm gpr ctt +sgm: rxn szf rjh hzz zll +fnz: qdj +vtp: dqq zpk vrv +tvg: ntb qsk zjb gjc vnt +vtg: bdx sml +cxs: vvm +gjp: rrc +jnc: htn vjp bck kqn +tpl: ddb +jcg: mmd bck +tcq: fkk rlj qqr +pxj: xfd vks rnm +spk: tcf dpj +hmd: vgs nxk kcn bvv +hdp: bbn +trn: bcf gxt klh cpg +ssd: pdm mrx qdx zpv +rxv: zhb njv jxl tfq +qlz: bdm kqd vtm rkx nnb +mlz: dlc jmv +vlr: xtz fkc +knm: hpf gvj xgd +tvj: ghn kqn +pqp: rrc qfd bsb gqj +kkl: dkd cxd ktf cch +kqv: hdv zxq +ttj: fpg qrv vtm dmn +kgs: lfx bvv +rxb: lcc qdx +dnj: sft djb vdr bqh qmc +klj: nzl +rbz: tnk pmm +qkg: fbr lrr krl vvt +mcr: zxp +dng: jqh +pxc: pnq +ncc: khr +rxj: xgs +qmm: psk zbb lmc +vtb: cdj jhm +cxv: tdq dtz fcn jsf +xpn: cnl vng +srv: zlv +kmh: rjz +dlg: sml +gpb: tsz zgg lhd +kvm: xdr +pql: brv xcp +vcz: tcd bcf +drp: dzm +xvd: rql chj +ppr: qlp +mqp: drm +zdf: xcl vqz frb txs +xgm: qtb +spq: xpk rdt bck mtb +bfq: zgs gjc qcm +ljv: dtj +zhb: sjp hhg +hzf: vtp mxj ktk lth +mlh: sgq +tkk: vpn vvm +jzc: dqq tmm +hgz: zpk +spn: pqq +fxh: hrm +tvf: pgm dlc +hlg: cnj smb xzm kjk +kvs: mbv zbk +cjr: sjc ppx lsl +jkx: hhr rdf +ncn: gqc jhl +sbp: pzq ktp cvk +jrl: rpv hph kqd +cmg: bkm rqv pnl rbz prf +dgc: gdv +jxl: pnq +rbl: xnh xvt xhm +tbp: fvh cfl njv +npc: vjv ppx vvj crj +zfb: tdm +nbz: drm gcd +qgz: xxt kzh jrb +pdm: pdr +pbv: vgs gqx cct xfj +gst: lnm +pzr: spm +thq: kvs bxl pmh lvk +mbr: xlv +brt: pnf dfm +fbs: tjh clc ssj mqj +nkk: bpq cjq knx +hph: mbs +qmr: kmm phj nhq +khs: hph ckx +xnf: rlj +png: blt hgg gvv jxn +fpq: hdv jdk jvs tsz +ffj: kgs +fxx: bdx xhn vjh pxr kkv +kvf: nxk +xrg: gqc xdb lhd lfg hxr +gvj: jcg +hzc: prf rpd +qmk: zvb xht vjp sgm +cnn: clp bmx +mtk: tzv jzn hhc +rgg: dzm +ztx: vvq pmm zfj bcv +ncg: bdc snq hmz +xpk: nmf +jxp: kkv pdg +sns: lpc ndq rjh cjq +sfc: kmb +ghh: hhg jzh crz +qqx: qcv gvj vcp qms +ttt: srl bcr +grr: brs +rfv: dcj +thc: xgz kcj vdq ncg +lkn: lcj xnm llq +ptg: chj zmj +gvf: fcz dmb +zrq: sjh kdg kzh pmc lnm +mmd: bhc +dlq: rqk zrp gkl hbr mqb +fxt: pnq +pbl: vtp +ksb: njl mgm jht lxg vcs +gdg: jhr +bmn: zsx hpx zlf +rqm: nnb tfv lbh shv +zfz: nxl pkk +mll: prk fsg kdq lhd +ndk: zgp +nrv: kdp +nvz: kdp vbj +tcs: qrt jzn +jzz: ljv lfz khs +dbz: zrh +grj: xgm vxp qtk +znj: rpd tqf hct +fgk: mbr glf klq vcb +qgg: xrr gkh +sfm: jms sqg +fhs: rfm +llm: cps jxn +qdq: vhr tpk qnm tvx ldt thj +vrs: tbq ggb chj rrt rdl +klq: jvl vmk tps +snt: qxk fcg sgn +tng: rdt xrr rql +nzr: xxk xgz ptm mbd jvl hpz +zhq: xgp vzd gsz nrr +hlp: xjx +xlp: jgc vhr mzd +rbb: qrv sng +mlf: ccc ldc +cvp: rkx cxk jzc +lgt: bmp flr kqv smc tmn +mbz: rht vsx qbz +vxp: nrr +nck: kvm tcv +shl: sdn lsl +qfg: jsq gdv xrq +tvz: pdr +vqr: mvj xqv +xcl: pts +mjf: mvj ghh hdp hgn zcm pcx +zpv: slz +knn: svh +jxh: rmn dvj zsv vgh qlp +jpr: kvj fcz xvt plz +xnh: dzk +mtb: bdx llq +hpr: tvx ptg +xbs: crj ptg hzx rgk +mlv: znq hfg lxq zhh +qqr: xnf mlr ggq +xnc: ktp +rmx: jmn mns +ntz: phj kjg lmc sgm +gjm: tpk pml bzn hzc mps jrb +mdp: tdm hpf +jqn: kps ckx mlp rdf +qmq: qtb llh dtv +jpq: hsq qpk +nsj: mqb jcx +ddb: kdp sbv +drf: zkr dxc +rbv: rgn kvd xgh fcj qnz +ntl: gkt vdq gnb ljv +hsf: hnr kgm +knx: vks pdk +zgx: xhn ktf svh cps +lvd: xzm dkb dmb drs clt +rck: zcs bhd brv +zpm: rdt ptl hhv +mcg: rfv fxv xhv +frd: xqv +zrp: rkm +pdk: fcb vjp trd +hvg: fbf nsv +kdg: svt vtb nnm +mdj: tsc nmh +pjd: drp qcs jcf gjx +mqj: qjr +zmm: qsb ftj rbb mbr +lrr: jgc +nhm: gxt pgs kcg bbn nkq +shh: qmn +ptm: jkt tjq +gbc: lkd gdv zrh bkd +hls: rxb sjv vtp zzd +pqm: kvp rkz +kfd: frx bmf rgf xjx +crs: psb gjp dvq hvl pxs pms hch +rch: tmp lxg +lrh: gmr rql +zrh: crk +jpx: tjq xpt mvh vvx +mkn: qms mns knx gct +zgc: vvt bqh rpk qmg llq +qjr: vbj skv +fjv: rxb ppr msg sfn kcg +tkf: xpt cgt +rvf: tvz hrm +znd: zvg jpt klj +nrz: dbz +ttg: sqg bbz +ggb: tkk brt tqk gsc bzn +jsk: pxr lmc knn +rjh: kmr hfn xhm +sls: zqd gdm hzz zsx +ljh: fzb +dkd: hpb fcb +fbd: mzd fqd krk +hmb: mvh mlz pbx ndb mjg +thj: dng rfm xgm ggz +vdh: rnr xhv +zkg: jbs kmh vhr rjx tzb +pgf: gjc sbb jvs +zvb: tmp +tct: qzn dzj bxr vzj +xnl: rqq drm cks mvj qmh +gzk: dfp tsg kmh +rct: cpf nfx hgp qcf bvr +zxc: qjx vcs djb bhc +xgp: xpv +psb: lfv jvr +bcv: bhd +rjk: kkb jst krl +rcb: hsc fht ftj tpl pmg +ztz: tkf ktr +xgf: mqp ktp +kcp: xhq zfb bhc +xcx: xkk qnn vgr +fnm: krk xgm +pmp: czg qnv +cmh: bpt +hkn: vfh kql sgq pxc +rgn: rbz rfl kmb drf +flt: skv lxz +hkj: fxv qjr vqh hgt kkz +hlq: rpv xsq +lps: ggp knn jbs +scj: qxg +dgz: vlv +hrd: mxk hjr hhv klc +sjv: hch vhj +pbg: pzf ktc klt rmk fxt klh kzg +ptd: dkf cck shf qmr +hmf: zqd jht dmf +dhv: dcj +jkp: ldc kcn +mzg: ptl +blx: jkx ljh xsq +hqf: bdk +mrq: gqc vng zvv +csn: pbl bqq jvs knz +shj: fbr dng bvv +hjm: kmm pxk ktt +bnh: bss kvf hzd +tqv: vjr shn zbb +fcr: mbs cng dvs +xfl: hlp +lgl: ncn jcx kkd +xjb: krk vlv +vlh: vbj dbz +mnx: xtm vck +qsp: frv qmh cgq mxj zpr +rxn: jlx nph xfd zrc +kxf: bjv mkx njv ftm +zrx: kvm mzg +hdk: hzd ccl rrs cps +hvl: hgb +hpx: gmr +xkp: rgg kcp jkp +cct: zbb dfm +rlv: hsx rrs grh ggz lbl +tcj: pcx kql zxq +tdq: pnq +zjh: fcz lnm mdm +gcd: gjp +qlp: hsc +vcp: xjb zsx nhv vjh +djm: hhv +zgp: php zvx +tgg: blx hts znq +fdv: zng msg bsb bfq dtj +hzv: tsr dsg mbz xxc +jqd: cks +vxd: pdz hkt ctd bqg qfg +zrr: kvf +mxk: qxg +bkz: bxm rxj rds qng +msg: njm bsm +ccs: xsg zpv jzh pqp hgz +dmf: rpk zbq +cgt: zgp tmm dvs +dqc: xgs qzt gkn +gkl: srv +zll: zbk +gbv: qzn hhr xxc +rpk: xjb vzd +sml: xhn zbk +zjz: nzj vsx tfp pmg +psh: zlf cmt pdg qmc +pmh: jpq cct +kxk: spn xnk +rkm: klx jqd +gks: vdh glf xnc pms lgl +qpd: ccl xgd cdp fcg +vgr: mns +clt: tsg +nkq: jsf bqq ztc rgf +bdc: kcj pcm +hhp: jmn gbq qnz kxs +lft: brc frx +pmd: szf drp pmm cdp +clc: pzr gjp +vlc: pdr xcl tbg hlb +vmh: zht zvb dmz shj +krk: qdb +hgt: dvt pdz xsq +tqj: rnr fvm +gpg: rzh dqx jmn hcb +ncp: fmt tsx ctx mqj hfg +tsx: xlv +tpx: mxk +grl: vjs +kmm: ppx mdp +kbf: pms +jst: mzg zkr +zqv: ktt +mzs: lvk +zsl: lll zhh pxc +bgf: rmp zrh +hzd: xzm tdm +zjn: shl qmc zdg rtq +qjn: frh grj knt cch +rgf: dgr pqq +qpk: ccc tcf +tmm: zmv qsk +kjh: dgj +sbf: lqf gdm txm mlg xsz +fxc: drk tbr jcx tvz +sxq: ztz ztc hhr nzj xqn +gjx: pbh jbs hxf hdr +llb: dlc +nhv: hjr tbq kcn hqf +rzh: bzn lpc +zhs: hvg qcs tnl zkj llk xvd +pmc: mbv zht tvx +rfj: pnt scj pxr tpx +kqd: jkx zpv kql +jtg: qbv hbn sdn +nzc: gvs cmh pnx qjj +jnx: hpx tsc frh gvv njl +cvk: xlv +pzz: shh hhg tnq +nnm: ftv sfm jlr +xgz: vsx +zcq: bdn qtn bcr plz +lbc: xxc zsh sbb lth +vmk: vqz qsk +tkj: kxk mrx xrq +nzj: qjr vrv kdp +kdj: cps tpk lrr +sft: dft djm zll +xlt: lxz +gfr: rpn bxx vqh zrp +fdq: drn tvz jkt +lkd: kzn zlv +gch: hqf +mns: rql +qnn: tsf lsx +rds: pmg qhc xlt +hjn: chj llm kpf +rkx: qrt +zkk: hnr +xgc: jmn sgn jmr mxm xfj +vlv: llq zjt +zsq: czg +hkt: hgb ltn tbr +klg: cnd spn snq +fcn: hdj xlt +rmn: cfl vck +jlr: rjx vkx vns +spd: tpx bvv klc vlr brp +fqb: mzg xgp zrb +plq: hch lcl vqh klx +jzh: mlh sng +vjc: xnz gms trd llk +bmf: tjf +khz: ftj jvv +trv: lpc zrc lbl +gbr: ltn lkd xsd bqg +rht: kcj zlb +lnl: xhv qfd spm +zqc: zlb klh qbz hhc zhc fjr rmk +lgj: zcn dks ctk qbc mvz +dgj: dxc +ssz: rhr szn qtn +bkm: mcr +rpj: ttv bmx xcp +zkh: clp hsx +kgl: gmt crd vqr vmk +cjj: rpn mnx xxc +mkx: vdh mpf zts +hrs: tmn +pkz: zbq +ddr: tkf spm gjc +krl: tnk +hpm: gch jpd ffj zfz +zfj: mzd +hhh: bxm qmn pqm ppr spm +nrh: dcj +zvx: bjn +mtv: ctd kzn xnc +pxs: hhk fbh +hxd: frp slz tcs lll +drd: vvq ffj hqf kvj +dtp: hsq pkz +dzh: crg nhf hfn qnz +rpl: bsm gjc +mlg: xhq +prf: llk +kmz: ckx xgt zlv +ttv: tsf xnz lbl gct +kxs: xpb srl mzs +bst: fcn rqm zpk ljv +bgr: tvf dsg fmt snb zzd tfp +ndq: bkm bfp +knt: pft nrr +qtn: zsz +xxx: pzn bgf dvs lll +kkz: tmv bmp +pnl: jsg fhs ptg +dvj: tct nmv tff +dft: spz lqj zmj +smc: rcj grr mbr +plz: pkk qtb +tkh: dzm llq vjv xjk +nrg: ptb ptl bls +xtq: kfv vlh jpx khz qhp +qnv: qrt klj +bjt: qzt zmv jrl +ntb: pbx qhc pcx tfq hch +gkt: gkl skv pbx +mps: zqd llq +svl: tvf gqc +lhp: crg jkc rfm vjv +cfk: dgc bmf +fpx: bcv xpk klc xsb +xzm: zrb +knq: cfk rqk fhp +llk: zkr +rcr: qbc dzk pnf +hhm: cxs lqj fqd fxg +mrk: qmh cjj hlb +pml: fqb pjd hzz +smz: xdq vpn +nfz: gst grh xnh njs +nrl: gmt jhp hlp +zsf: hdj vbk frd zhh +tps: rdf +dqq: frp +bdx: gcj +bvr: cmh dvt +sqx: bqh zht cps +lnb: bgf hrs lfv jxl diff --git a/25/part1.pl b/25/part1.pl new file mode 100644 index 0000000..871f626 --- /dev/null +++ b/25/part1.pl @@ -0,0 +1,91 @@ +% This needs more stack. Try --stack_limit=4G +:- use_module(library(pio)). +:- use_module(library(dcg/basics)). +:- initialization(main, main). + +main([FileName|_]) :- + input(FileName, Conns), + dict_pairs(Conns, _, ConnsList), + length(ConnsList, NNodes), + findnsols( + 1, PartitionSize, ( + _ = Conns.StartNode, + iterate(StartNode, EndNode, Conns, _), + atom_length(EndNode, NodeSize3), + PartitionSize is NodeSize3 / 3), + [Side1]), + Side2 is NNodes - Side1, + Answer is Side1*Side2, + write(Answer), nl. + +iterate(Node, Node, Graph, Graph) :- length(Graph.Node, 3), !. +iterate(Node0, Node, Graph0, Graph) :- + countall(Graph0.Node0, NeighborCounts), + NeighborCounts = [_-Max|_], + member(Neighbor-Max, NeighborCounts), + combine(Node0, Neighbor, Node1, Graph0, Graph1), + iterate(Node1, Node, Graph1, Graph). + +% combine 2 nodes into one, keep all outbound connections +combine(Node1, Node2, Node12, Graph0, Graph) :- + % delete N1 -> N2's and N2 -> N1's + del_dict(Node1, Graph0, OldN1Outs, Graph1), + del_dict(Node2, Graph1, OldN2Outs, Graph2), + remove_all(Node2, OldN1Outs, N1Outs), + remove_all(Node1, OldN2Outs, N2Outs), + % replace N1 -> X and N2 -> Y with N12 -> [X|Y] + atom_concat(Node1, Node2, Node12), + append(N1Outs, N2Outs, N12Outs), + Graph3 = Graph2.put(Node12, N12Outs), + % replace X -> N1 or X -> N2 with X -> N12 (twice if needed) + foldl(replace_outbound_node(Node1, Node12), N1Outs, Graph3, Graph4), + foldl(replace_outbound_node(Node2, Node12), N2Outs, Graph4, Graph). + +replace_outbound_node(Node1, Node2, Node, Graph0, Graph) :- + replace_all(Node1, Graph0.Node, Node2, NewList), + Graph = Graph0.put(Node, NewList). + +% List has all items in List but with all ItemOut instances replaced with ItemIn +replace_all(_, [], _, []). +replace_all(ItemOut, [ItemOut|List0], ItemIn, [ItemIn|List]) :- + replace_all(ItemOut, List0, ItemIn, List). +replace_all(ItemOut, [X|List0], ItemIn, [X|List]) :- + \+ X = ItemOut, + replace_all(ItemOut, List0, ItemIn, List). + +remove_all(_, [], []). +remove_all(X, [X|List], ListOut) :- remove_all(X, List, ListOut). +remove_all(X, [Y|List], [Y|ListOut]) :- \+ X = Y, remove_all(X, List, ListOut). + +% countall means Counts is pairs of Item-Count where Item in List, sorted > +countall(List, Counts) :- + foldl(increment, List, count{}, CountsMap), + dict_pairs(CountsMap, _, CountsList), + sort(2, @>=, CountsList, Counts). + +increment(X, Ns0, Ns) :- Next is Ns0.get(X, 0) + 1, Ns = Ns0.put(X, Next). + +% input parsing stuff below. +input(FileName, Conns) :- + phrase_from_file(conns(ConnsList), FileName), + to_bidi_graph(ConnsList, Conns). + +conns([]) --> eos, !. +conns([From-Tos|Conns]) --> node(From), ": ", tos(Tos), conns(Conns). +tos([To]) --> node(To), "\n". +tos([To|Tos]) --> node(To), " ", tos(Tos). +node(Node) --> string_without(": \n", NodeStr), {atom_codes(Node, NodeStr)}. + +to_bidi_graph(ConnsList, BidiConnsGraph) :- + dict_pairs(Graph0, conn, ConnsList), + foldl(add_reverse_conns_for, ConnsList, Graph0, BidiConnsGraph). + +add_reverse_conns_for(Node-Outbounds, Conns0, Conns1) :- + foldl(add_conn(Node), Outbounds, Conns0, Conns1). + +add_conn(ToNode, FromNode, Conns0, Conns1) :- + Current = Conns0.get(FromNode, []), + Conns1 = Conns0.put(FromNode, [ToNode|Current]). + +% debug +print(Graph) :- dict_pairs(Graph, _, Lines), maplist(format('~w~n'), Lines). diff --git a/25/test.txt b/25/test.txt new file mode 100644 index 0000000..bbfda0b --- /dev/null +++ b/25/test.txt @@ -0,0 +1,13 @@ +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