From 950e109848a2981ad979171e810ae7b6e12d77b2 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 21 Dec 2022 15:10:59 -0500 Subject: day 21 --- benches/2022.rs | 5 + data/2022/21.txt | 2087 +++++++++++++++++++++++++++++++++++++++++++++++++ src/bin/2022/day21.rs | 227 ++++++ src/bin/2022/main.rs | 2 + 4 files changed, 2321 insertions(+) create mode 100644 data/2022/21.txt create mode 100644 src/bin/2022/day21.rs diff --git a/benches/2022.rs b/benches/2022.rs index 60b5b3c..e4c40d5 100644 --- a/benches/2022.rs +++ b/benches/2022.rs @@ -41,6 +41,8 @@ mod day18; mod day19; #[path = "../src/bin/2022/day20.rs"] mod day20; +#[path = "../src/bin/2022/day21.rs"] +mod day21; // NEXT MOD day!(2022, 1, day1); @@ -63,6 +65,7 @@ day!(2022, 17, day17); day!(2022, 18, day18); day!(2022, 19, day19); day!(2022, 20, day20); +day!(2022, 21, day21); // NEXT DAY fn bench_2022(c: &mut criterion::Criterion) { @@ -88,6 +91,7 @@ fn bench_2022(c: &mut criterion::Criterion) { day_combined!(2022, 18, day18); day_combined!(2022, 19, day19); day_combined!(2022, 20, day20); + day_combined!(2022, 21, day21); // NEXT DAY COMBINED }) }); @@ -116,5 +120,6 @@ criterion::criterion_main!( bench_2022day18, bench_2022day19, bench_2022day20, + bench_2022day21, // NEXT GROUP ); diff --git a/data/2022/21.txt b/data/2022/21.txt new file mode 100644 index 0000000..2d1fd90 --- /dev/null +++ b/data/2022/21.txt @@ -0,0 +1,2087 @@ +dvlj: 6 +wwth: vvpf + hwcp +mnzt: zgrl * tpbs +llmq: smwg * nbrl +sjgr: vsfh + lsdf +zsjj: 12 +mctz: 4 +frnf: wwnw + vjrn +nzgv: 2 +cpfs: 6 +fsfn: zznl * bgnb +nhrh: dphm * lrhl +hcrw: wvjr * hbzc +nbvf: 2 +dbwl: 2 +pvmn: 2 +gzpd: 3 +vpmt: wcpl - mnnl +frqd: 16 +zrgr: 10 +qcws: cnqp * shhw +fjwd: 4 +nlsd: 2 +fgnb: 5 +pjsn: pljb + wbbj +jwrd: 2 +hrpb: blgd * wrnv +lwvh: rfpp * wnlb +pwcr: 2 +ldjv: trpl + mjts +znmt: 6 +gmmg: 17 +rrcd: tpfj * grgl +nfnf: bspf * qvsf +pswv: ngwc * zhzd +mllb: rdfg + jpjv +hmwt: lvdt * nzjn +shff: dfwr + pzgq +nsdn: pznn * vbwf +dfsw: 2 +hhsz: vbcm + lgvq +fdwm: 11 +hrgv: jsfg * zzrp +rjbw: fbqp * qrgc +jsbm: hgmj + wfvt +ngcp: mvhv + gsns +smwg: 2 +jqts: 3 +vrbc: jvhw + qlfg +lqpq: 5 +ntht: jwsf * cvhj +hqtl: 2 +mhcj: hrpb - qcbj +ldwg: phtb + jpnw +bwcr: 2 +vbbd: bnvf + hcrw +zbdm: jmwd / vqqg +lpvl: 5 +wvmm: mnfb / spbl +cghh: mflz + ghms +jgbw: 10 +jffg: sjjm + qwfw +cdrn: 3 +vrff: dzpd * pmnh +tdwf: 3 +dvsf: zbzz * zpls +fnbm: 2 +pspv: shsc + bzcz +dhbp: lblw + wzhg +rhdp: gznd + dpwq +rhnd: 19 +wngh: trvs * jrdg +rvvz: mwnj * lpvl +mrlb: crdg + sddw +zwfw: 7 +pzcw: ttvj * bfcb +rvnw: 9 +chnv: 5 +wpvd: hvmp + bbsr +vwvg: lrdm / tmdp +hfnb: vjdv + vnwb +jpjv: vgzz * tfll +trnp: 11 +trwd: dzzd + ldsc +mpzm: rwvt * scpz +rzqz: 3 +lcjl: lgmh * frbs +sbdp: bhmd * zdcc +lrhl: wwnt + zcwc +qlwp: 5 +qmsb: ffzn * fjht +plwb: mwsz + fwbl +qcbh: 1 +nnwb: vvql - zgdj +dndb: 4 +mphm: mnds + rlqv +vfdf: 11 +ngcm: smvz * ngcp +frbb: fgqw / dvmv +mtgr: 11 +sdqr: 3 +fnvn: nmhl * rjbv +mpsc: 3 +jsss: 7 +jcql: bphz + fmrc +cvdq: 15 +wwnw: 15 +jwnq: thgt * wfff +zvjv: czcv + ngcm +tttp: 2 +wwwt: 3 +pzwl: lfmf / pfst +ngrt: 5 +bhgg: 3 +bvwm: mhnq + scsq +wptn: pbcs * pdvz +wnln: sntz * rqpr +vwrp: 3 +qzcg: 4 +wnvr: 3 +hntj: 10 +bfjq: mdhf + ghsj +jgcc: gths * mjmn +fcsb: gcst + dhqt +fplt: 3 +qbrj: frbb - zdzg +root: tcmj + qggp +mbpv: 3 +mlsg: 10 +lpzh: mgjl * rvfz +scrp: sdzp / lltz +mlss: 2 +hvvp: fgff * gzcd +hzfp: 5 +wzhg: bppd * ffzv +lprr: 2 +njtp: svpr / cjcp +qjmj: lzvn * nhzm +flvr: spdh + pdsn +htlr: qnwh * nbgq +dvmv: 3 +cvhv: 11 +pvfg: mqfv / nlsd +twpr: 2 +bphz: zltg + wcmd +mmln: hqcf / dpgs +vwmp: wjnt * lqbw +vgfb: 5 +shbh: hnfr + bggl +mlhm: mzjl + lmdc +zhzd: 8 +szng: mvmd - pdld +fdgr: 2 +qmcs: jsjm + fzvq +lvds: ttcv * wphv +bmsg: 3 +npvv: njfn * ptzb +btnj: 9 +rgrj: rtln * phlt +dphm: 4 +trvs: 3 +gsdt: 3 +mcpd: nvhz + dljs +pljb: 19 +ddtw: 5 +gpbn: slvh * mnsw +ndfn: 2 +lrgp: dftn * mslz +hqsf: 5 +hzsb: vdnq + dqfq +rjwr: prqf * pqsl +fqgz: 4 +zzcn: 3 +jvcn: 7 +nlnz: pfcb * zzcn +lsbp: djcl * hsmw +fbsf: 3 +hmlr: 5 +vwhb: jplb * zqqp +drzq: 2 +bwfq: zrtw * dlwf +pwvl: 6 +hwjh: cqnc * fmng +cnhp: wqpv * ctfs +qnwh: 3 +jlqg: pjnv + bjmr +dblj: 4 +qmnr: 4 +rqnb: pjlw * rbgq +qnjz: 2 +cmnr: vwrp * djzm +vmsd: 3 +blfj: brzt + lbsm +sgjp: tjfz * fhvg +prvc: 3 +pwjv: 2 +dhmm: 2 +gcnf: sfwz + vhvb +cjpr: mvtj * vgqm +gnqj: wbgm * fglb +tqsj: 7 +mnbr: 5 +jfcj: dfsw * pqgv +mmcp: 9 +mfmr: 2 +llzt: 2 +vstj: 3 +qngv: dttb * rwwh +dwzz: 4 +zssp: 2 +grwr: wrcg / pcnv +phss: cwfd + lflg +dqfq: nwqp + qjmj +vsfh: zrvl * mhrc +hdwf: zqsj - qjvn +bgsg: zpnz + qlnh +fjrc: jjws * wpdr +rftn: qlpg + gmnj +lplp: qwdh + ttdl +lvlz: mbqm + hhsl +gvdm: pfsq + shqj +ztsb: jgbz * sgml +gths: 3 +wbdj: gnfs * dpdc +mcsm: 2 +rgsp: 2 +sgpp: 4 +crpd: gdnh * cltv +fmlm: 7 +rdcv: 7 +mcsl: 19 +njfn: 9 +hprw: dnnz + lnpb +dzdq: 6 +rvfz: mnzd + jtzq +sqtr: flvr + wfqq +hsmw: jdsv * drlv +pzmc: ltph * qtmd +lzvn: qzdn / vgqj +htnr: 2 +clzg: wvjt + mcph +qrgc: 4 +bhmd: 2 +cwsw: 3 +pltr: 4 +cggm: jjmv * vndp +trld: lvpb + lmpz +hwcp: jpbn + vcdj +mwnj: ntlv + rvzq +qtgm: lzrl - jllf +nrpl: nsdn * bbwp +smsc: wnln * ndqd +scwm: 2 +gpzf: 2 +zrdv: 2 +dvsj: lgsm * tdwf +mbqm: pgff * vjcs +wrnv: rhrf * fmhq +qwlz: 3 +vvgt: qwhv + tbdq +wfqq: zddq - rftn +rsww: 2 +bqdr: dgmb * qnvl +mflz: ncml * rhzg +tvgw: dtlt + mjql +fgdd: jqts * brgv +tbdq: psjz + tqss +vvpf: rfjd * vzhw +tcrs: dhbp + lmjq +bftd: 2 +qqhw: 14 +tlsq: jrtv * qsps +lbsm: hqsf + bpps +rbcw: 8 +wndr: bhpl * ctvb +cjrl: wvjv * gnjj +qzpd: dvsj / btmr +vfmh: 4 +jdgm: 2 +gzcd: fzzl - sqzr +bfhv: psng * llsq +crdg: bcvq * nbrz +bpps: 3 +nqhd: 2 +vmzh: 3 +rdfg: 2 +gbbr: mlsg + qwsj +qrwq: 5 +lhzp: 4 +jlgm: 15 +shws: 3 +sszv: 2 +qsps: btsd / zbdn +gdtb: srwm * zdpw +tjvq: 7 +scnz: ztcr * fsvn +mdfb: 17 +vstc: rvvc * cgbr +mmqs: cvgc + prlm +hbmr: 4 +mtzz: 2 +jjfj: 4 +zndf: rjwg * nclb +vpqn: 2 +dblq: tmlh * chhj +rbnj: 2 +tmhp: plgj / fbvq +rsrp: 2 +zcdh: cfns + btfh +mvlr: 2 +qmwz: gbmm * fhvc +qbqq: qmwz + cgcl +vwns: 2 +spdh: lhsj * mjgh +nmdm: 2 +drwj: 17 +lfsc: 4 +swlb: 6 +zcqw: drzq * jzrr +lggh: mfmd * mmnc +hcct: lgvw - hgtg +gcst: zptm * cspt +fwgl: mbpv * hdwf +zptd: 2 +lmbc: tdtf / bspl +mvmd: cpwl * vpmt +fqdf: chvt - ppww +njww: mqlf * fjps +ghms: qzhb - dqdj +qqwf: cmqs - wzrl +wsmr: dggb + pcrt +fmws: 5 +hzfl: rtdw + lddd +pgsq: 3 +pccw: 5 +wbgm: 13 +pjsm: 2 +jmbb: 3 +bzzq: pmlb * cgrj +fqfs: 4 +dplg: 5 +npgm: nmvh - cllb +fpgb: 3 +djbc: 6 +jjns: vfbw + jffg +rztj: tcgf * fgbv +vcrc: 4 +bpbt: nlnz * hzzt +lvww: ggwb * btnm +dncr: 5 +tfpp: 2 +qvcg: 18 +sjwc: zjcq + thbs +nggs: 3 +czwp: 2 +hrvc: 4 +wvqz: snds * lzpp +htfv: pfqb * wnpp +bqfs: hcjs + ndff +crgt: 5 +hpqw: 4 +zcfc: rlrl * zdrw +thzv: mhms + vcms +rwvt: njww - nzcs +gzqj: bqdr - ssrh +lnpb: dqpz + fzlr +pcqw: 4 +jmvl: plgt * vwss +bccs: nfnf / lcpv +fjfn: mhss + hqhs +dtlt: mwfz * wdwh +bbwp: 12 +clrl: 5 +dtcv: 5 +hcbb: 2 +dttb: 5 +tpzl: 3 +dmcg: 10 +cbwh: 3 +lbqb: 5 +jdqb: tmlq * djml +fnql: 3 +mhms: 9 +rlvm: 4 +ftcz: 2 +qlpg: 1 +vjbm: mrlb * lwzs +phtb: 3 +cqcl: 2 +lzpp: 5 +bpth: msbt * hlrm +wzgm: 2 +ftlw: 4 +prpg: lmbc + tlsq +hgmp: vvgt + qvcg +fnwz: bzww * gwlh +fndz: 4 +jdsv: qmmb * nbjm +vhtg: qgwc * phcw +bbgz: hmlr * mfpp +thbs: 2 +dmhf: 3 +ccnl: ccwf * nrwl +mdbn: 4 +thzr: 5 +rmhb: 2 +pfqb: bbcp + szpd +zvbd: 2 +cqnc: 7 +bgnf: phss + rztj +rjln: dpft + tjjz +mfjd: ldwg + dbvz +bdvs: rqmc + wjhm +qszs: lqsz * ztlf +prfp: 3 +pmgq: drrw * wjww +phjf: 4 +chvt: 8 +vctd: vzwr * jnrh +tqqd: fmtw * hpqw +gvnc: zbwh / hgjg +fwbl: hsst + jwjv +vbdp: 3 +nhzm: 2 +vjdv: gbgh + lvmh +tfbn: fgpw + wfrj +wsjc: jdvp + zwfw +gznd: qmsb / vjbl +fbrq: fslz * tbpl +nfqd: 5 +brwv: 5 +hvdl: sllr * bhcj +pbbg: qdvm + prqv +hqtp: 2 +vbbw: 14 +mbnn: ltdc + scwm +qvfr: bvwm * vjtt +lhrn: 2 +dcjh: 6 +ltcz: 2 +vcns: hssw * czvn +qhfn: 11 +cgbb: hstf * bwcr +dfjj: pcfd * bqpg +ffsd: wdsv + hdzt +lddd: 1 +mmrq: bdrd + rmnc +ndmz: qqmc + qmcs +bmgl: 4 +dlwf: dvtb * ffdz +bptw: 4 +tlzv: dmfb + fphz +fnrf: dhdf * plwb +vtgz: 16 +qlfg: cghh * lmjf +zdpw: pvrc + tthw +pnqr: rgcl + gjnh +vtfq: 16 +dnlz: gbfr + zfhb +shsc: rpbf * tmzz +wvjt: 3 +lsdf: dncr * mrfd +gqgw: cjgl + szvv +qfmz: twmh * qntf +cfns: fhhh + vrff +zhqr: 2 +zddc: 2 +slsh: 9 +llsq: 2 +bfrd: 3 +tnjc: hdrs * cgpz +jmwd: zndf - mqzd +cdwm: 10 +ctvb: 3 +sbds: 14 +nbtz: 2 +gqnj: vhtg + bcmb +zpfd: 2 +frdq: 19 +wvhb: 3 +ptzb: 3 +qjrt: 5 +pdsn: qvcz / rsrp +pbcp: qwzn + vfdf +gdfr: 2 +dbnf: spdl * qtmn +vvql: 8 +dndf: 7 +rggm: 4 +vljr: dhbz * hbqp +rgcl: 3 +drsz: 2 +dpwq: 10 +qzjm: ltgt + dgzg +qsmr: 5 +gzcl: rgrj / qvgf +jrnj: 2 +ltbd: 4 +nwzv: gvnc * cbjz +jrnr: vqdf + lzrs +gjnh: 4 +bnvf: npnz - rmpq +rwhv: cgbb + svrh +jlnl: 3 +ndlv: 4 +sclj: hzfh + whpc +prqv: 5 +snds: svjs * fphb +lwzs: 2 +zwlf: 3 +pfsq: pmgq + tzmv +jswl: lphp + jbvn +twgg: 9 +whpc: 5 +mhsc: fnlj * vjts +mrwh: 2 +pmnh: lclr + wljl +jlrh: jtjp / hqtp +jrvh: 2 +llpw: 2 +qzqh: htrd - pvfg +gclb: 2 +rwwh: 11 +gbfr: htnr * gbfp +hmhf: gmvr * lhrn +flwb: 4 +dnnz: 2 +qgwc: qcrq * mjsq +gmtf: 12 +jcbj: npvv + gbbt +pcnv: 7 +jnrh: 10 +sdsj: 2 +jzgv: fbpw / zptd +jbrj: 4 +bzww: pwjz / bpbl +gghf: gpbn * ngrt +bwhq: rbpv + chqt +wsrl: 7 +btfb: 1 +tvvz: vnpw * ztlj +tzmv: trls * btld +tngq: cwsm * mbnn +gcnj: 2 +zfnp: 10 +mzdh: nswn * pbcc +bpbl: 4 +qnlz: gbzg / pvmn +ptgr: 2 +jsjm: 6 +wnlb: 2 +scjm: zbdz * vsfj +rjbv: 4 +mfnd: ldjp + sbsd +drjn: 3 +mfws: 3 +ptjb: 3 +ldnf: jrnr * bmgl +wncv: 3 +wsqc: hvvp / gbtv +zhmg: 18 +mzrn: 3 +jcvs: 3 +hsgw: 2 +hbzc: 3 +scmv: dsfh * zfpz +smvz: 5 +zhcb: 2 +lphp: wpvw * dsdz +djzm: rvnw + jfcj +fbpn: 2 +mjql: vmsd * hzsb +tgqq: rdvs * nrjs +bhsc: 3 +msbt: 2 +rpts: 3 +mdpw: jtsl / qrss +dsrf: 4 +qgjm: 2 +wdsv: rlcv - wndr +mqrz: dwzz + lhrj +nclb: dhvt + pvvb +gdqr: 3 +llqp: ltbd * dsrf +qrfz: 2 +zghv: mwdw * mdfc +lqbs: gsdq + wjqb +hlfr: 4 +bhzz: 15 +pnsg: vmgv * bzsv +tzgg: 4 +nbmt: 2 +pgmt: vstc + htfv +gwjz: 2 +gbmm: 2 +gbbt: pbtd * nnlw +jtsl: pmbg * vgdg +fslz: 5 +hqqr: hmqq + gfqw +gltf: qrwq + zjqg +jdbc: 1 +mcwh: 4 +nzsm: znmp / pwvl +ccwf: 2 +gswq: 5 +lbsq: 2 +nbjm: 2 +jpgs: 3 +mggd: qdmz * fmlm +phbj: pvmh * wqnd +bbnd: 2 +vrsf: 2 +msps: 9 +pvvb: hbfw * gdqg +nbrl: dqrf + brfl +ntlv: wwsp + mphm +zbhh: 5 +vtfn: hmpb + jjns +rcmg: tqsj * fnfr +nmlf: 7 +lnzv: ddbq + fnvn +fnbw: nssj * lqsp +llpg: 4 +lhwh: 2 +zzhc: wrbg - qclr +qcbn: qzgt * bmrl +qnlc: dwff + gzvl +qmpb: fdpv / vswv +pqgv: zqzl + tsmj +lgmh: dtng * hhpp +cpwl: 3 +wjww: 3 +tgjn: vbbw + whlg +bdqb: pbcp + humn +cllb: 4 +fdpv: mvcl * zghv +wwfl: wfjw + rpjv +zrgn: 4 +dwgv: 4 +nppp: 12 +mpvd: sbdp * bfqs +wwnt: wzzz * rqqp +qggp: vcns * dzcq +mnrm: hwcl * sszv +tsmj: zclr + pswv +phvs: 2 +rdwq: 3 +stvg: 5 +vgdg: wnvr * rndh +thgt: 3 +bttn: brwv * mcmg +nbdg: lzsn * qqbn +gwjm: 4 +mvlc: 2 +hhhg: jlgm * spcp +bhgf: vbnh * twgg +hnfr: tnhc / qfsn +ppbl: fjwd * rrbl +nzvh: sdrl - rvrf +mvjb: 7 +dhbq: sdzv * clvs +cwsm: 3 +bwqz: 6 +nzsc: 2 +frzf: 2 +gdjg: qtbp + qhfn +qgdn: 5 +jmsz: bmfv * fqgz +nmpb: 3 +dhpt: 2 +mjsq: 4 +lcpv: 2 +pbsn: qwlz + zshr +zlcw: mnrm - rpsw +hdbv: hmps + fwgr +jlhj: qrff * rdng +trnt: 7 +ztlj: 4 +lwpf: 1 +cbpv: zmdn + gdtr +zgsf: gcnj * vnss +vjts: 2 +ssrh: vphp * ccvz +nvhz: wvrh * qcmq +vpzn: 4 +gmlz: 2 +gmdz: rrms + qcnz +nrhw: 12 +ltgt: zfsv * rthf +wpcv: 1 +bzwg: vddb + svjq +mnjn: gsdt * pdtw +gfpr: cbpv + hnbd +lrjr: qnlc * pgnc +lsnz: 4 +zjlv: twwt * prfp +dggb: gmlz * vrbc +fnfr: 9 +czrj: hqrh * gwjm +vjcs: 3 +tpzq: 6 +msbc: gmjc * rzqz +pfcb: 3 +vfdg: mqbm + hhsz +plgj: znhn * dvlj +fpfv: cgbs * rlfp +fmnc: 2 +drrf: 3 +spdl: 11 +lghs: lchp + qszs +shfj: mzzq + chnv +mhbf: ndmz + fpfv +cwrd: 4 +fpbr: ztsb / tttp +mwhz: vqmq + wvts +mhrn: 2 +fgff: 2 +nwqp: gbtq * dlmq +rbbv: 3 +rvgp: jmrd * lhwh +lrvl: 3 +tdbt: 1 +cgbs: 2 +qgvl: tdnf * pbsn +plrv: 6 +bbsr: zsjj * rcjm +qwdh: vcnz * brwq +brqt: 8 +szvv: brnz + mrsr +rtln: 2 +fngh: wsjc + jzpz +nvgv: pjdc + vjvp +lrvz: 4 +lsnf: 10 +ndwr: hrgv - wtdc +tmdd: 2 +lhjv: nggs * rggm +gdnh: hhjq - rpts +whpp: pspv * gwjz +lzrs: 18 +ffwr: mdfb * pwcr +dpdc: qcbn * jlvt +hwjm: jsbm + wqvs +vfqn: 17 +dtfw: 9 +gbbf: 2 +nqmm: dhpt * dbpj +dgzj: bzlc + qspm +vbdw: 2 +tlrd: gzcn * qsmr +rfpp: 6 +jdvp: 6 +nhfp: qqhw / ztql +tcfd: jgbw + zcqw +cldq: zgct * ftcz +lfmf: dqrr * bbvr +fwnb: rzsc * gccv +rttz: tsfs * frfr +dvww: hzdf * cqrn +nzts: 3 +jtzq: 4 +ghsb: 2 +vqnh: 2 +pqtr: 2 +bggl: lbmr + vsjt +drlv: 2 +ddds: wvhb + hcbj +pnlq: 2 +zlqh: bwfq + fbrq +hssw: ftff * jwqc +ppww: 1 +zdjs: 2 +wzrl: gzsw * sgjp +vmgv: llww + vtfq +pbmh: bpbz + lsnz +prws: htbf + sbds +lmpz: 5 +jsnb: 12 +nvdh: 4 +zjzh: cjrv * pzmc +qghp: 3 +pdwm: 3 +zfhb: 5 +wcmd: wngh * btnj +lsmr: 2 +htmq: mmjw + jcvc +wsmv: 5 +tqss: 20 +rlrl: 2 +mdwm: 15 +bhfn: 2 +svhg: 5 +psdc: 14 +vrpg: 9 +pcrt: nzvh * nrfn +ssjf: pshr * tzbg +fbqp: 13 +twtr: jwbt + dblr +fndb: dpgc * bszp +cndc: 7 +qwnt: ffvb + vzgs +bgjh: 4 +gccv: tbzq + mpwp +cgbr: bvfv + dfjj +mpwp: bfjq - gdpf +bpbz: tmdd * hgdj +wcnt: 2 +lblw: 1 +wvjr: 13 +dbtv: frsm - fnbw +jcfw: 5 +rwjl: 3 +wrbg: hrlj * tvgw +hrlj: dndf * ljcm +lbhp: qfcz + qdrg +fzvq: 1 +hbgl: 17 +gbtq: 3 +pgnh: mwwr + hqqr +jfdn: 3 +vbnh: 11 +wjts: ddjb + smph +wfff: crnb + bccs +trpl: ffsd + tfbn +zphp: nhrh / vcrc +nsfl: 3 +gclr: chws + hprw +zfsv: lcrh + tpzq +jlvt: 2 +hdrs: 2 +qjvn: 1 +wqgv: ghlg * wmlg +dzfw: 3 +vbcm: tcrs * scjm +vbwf: 5 +fmrc: cpmd * nwjg +lgsm: jczn / zbwm +vqzh: gvms * gqch +rcfv: 2 +bzmg: 5 +tchl: 15 +gqqw: 1 +pdnz: fmws + lfnv +wnpp: bfvq * dqrs +prtt: mcsl * vhwj +cvhj: 4 +zsts: 5 +qvsf: scmv + ddqs +jmcv: vfpm + lwvh +jqpb: tzhb * rvrw +sgdj: 3 +mnsw: 2 +vzgm: qgdn + pjsn +phlt: vtwm - mmjj +hstf: 20 +tzhb: 15 +jnng: 3 +mtmr: 3 +lldp: hbgl * dzgh +lqbw: 11 +dgzg: 18 +vnpw: 7 +lptp: scnz - tfbl +lzfw: 11 +tfln: plpf * stvg +wfjw: dtsf * gqsw +rjwg: 2 +zsjg: 2 +ftjl: rhnd + hrvc +cwsp: gfrz * pgcm +gzcn: 11 +bspl: ccnl + qcbh +bwvt: hpgp * pldl +qrff: pfrb + hpbd +vddb: 5 +rcdb: gltf * sltl +whvn: 3 +jzrr: 3 +ztth: jvtp - ghrb +mvtj: 3 +bclq: 3 +mjts: wwfl - nnms +ltzq: jntf * rttz +wqdv: gsrq + lnqv +jzhp: shff - qbrj +tmwn: lpzh - tnjc +jpsq: 13 +mrjs: 3 +fzgh: 4 +mnfb: zbdm - whpp +rvzq: qftv + jpwc +mppj: 6 +jbfc: szng + blfj +tmzz: tlrd / thzr +mmmz: mcpd + qngv +bzlc: lqvg * fzgh +jsjp: bwqz + dfvh +ttrc: 2 +sltl: 5 +mzjl: gggh * hsgm +bbbq: mpsc * ghsb +crnb: snwl * wsqc +ggwb: zmdj * lwbf +rnnr: wpvd + qqwf +djcl: 2 +ghhs: smgf + jbfg +wjff: pdnz + llrp +gfml: zphp * rdnd +ngfm: vlvr * ppml +hfqj: hpsj + fgnb +tgfh: 16 +bblb: jzhp * nzsc +nzjn: jmcv + bdql +lqvg: 3 +zgct: rcnz / jssb +jwbt: vfmh * dtfw +zqqp: 5 +mzjr: 19 +cwpz: crnt * whvn +pbcc: 2 +rmnc: nmgq / bdvs +rvzm: wnnc / rdhb +dzsz: 4 +scsq: wwjq + jmvl +wcjj: scrp - cjcd +pzgq: trtr / wprb +rnjm: 3 +mqld: 17 +zqbc: 2 +ssdv: nllb + pmnq +tpwj: htvc * rbws +dvtb: 2 +bpdf: wdwr * jnsr +ptsp: mzjr * gdfr +lrdm: gwqg * blrj +hbww: 2 +cqrn: 3 +vqdf: 1 +jvhw: swqj / fndz +sdzv: 5 +bvnf: 10 +nlcp: pjsm * vqzh +mcmj: glvr * pdhz +rpbf: 5 +zgvp: 3 +vcdj: vctd / htlr +qbgr: 6 +twnc: zplv + fffw +wphv: 4 +fzdr: wlvh + pmpc +ffzv: 4 +prlf: tljf - tprs +bqdj: 3 +qdrg: dbwl * gbbr +qzdn: mhbf - snwt +dpgs: 2 +bzcz: wwth - cwsp +whlg: 4 +wlgw: 16 +nlpd: hbww * bbqm +rnps: 16 +tpgd: jnqh + vvcv +rlqv: 18 +dqrr: 3 +wljl: 4 +sdrl: bdqb / jfdn +hvbj: 2 +jplb: 3 +vbsr: tdlt * nlfb +vnbj: 2 +vcms: bvnf * vzgm +zwcj: fgdd + jsss +plpf: 8 +sslb: 10 +dblr: chst + vnmz +qmmb: 7 +vfpm: hlfr * vdvw +tldh: 17 +pqsl: gsvr - wbdj +zgdj: 1 +mgql: 3 +fhvg: 3 +qcnz: 4 +rrms: 5 +zmgz: wsmr / gbbf +dsdz: 7 +wqvs: 8 +zcwc: 7 +jfsd: 16 +pwfc: 7 +gsvr: jrhz * cvzp +ldsc: zqvc * bwhq +mjmn: psrf / dbrq +rzsc: 2 +hcbj: 4 +dbrq: 5 +pcsw: 7 +mwdw: 5 +sbpv: 2 +lhrj: gzcl * rfdl +mfnb: lncl * dgcm +ctfs: fcsb + jdbc +pdld: 9 +whqj: fnbm * cslt +zltg: rsrs + tgsg +qdmz: wtgw + rwjl +spbl: 5 +jbfg: tprn * prlf +crwb: 2 +htrd: fzdw * mhsc +wbpr: bmvq * mhmn +qcrq: 2 +twwt: dtgs * rgbz +fnfb: nmlf * vwns +jcwv: 2 +zgrj: fgfm * hfqj +jwjv: jfsd + gcgv +vrgh: hztf * tqcc +hnhl: 3 +zjtr: 5 +wfpl: rvrm * mnsr +lflg: nqwn * jwcb +nltv: rbnj * zsts +pgwj: dnrb * hdbv +nmjg: flwb + qbht +fzzl: vqll - phnr +ttvj: 5 +rnqn: 2 +vzhw: bbnd * svhg +gwgq: 4 +rbdz: 8 +lclr: 7 +vsfj: 2 +wpvw: bzzq + lvhw +pldl: mnjn + gjwr +lqmm: bhzz + ltzq +mzzq: 8 +jdlr: gbnn * wghw +shfh: 3 +prmq: 8 +wfgb: ctgr * sbsc +rmhg: lplp + fzdr +dfwr: bnwm * stbr +thlc: rnqn + zmnn +tprn: lmfr * hfwj +hnbd: 15 +lvqr: 2 +rqzl: tchl * zqbc +zbwh: rjhn * bdjs +sbmj: bdws * lbvm +wdbw: jnng * mhdq +fgbv: 12 +blgz: 3 +mdhf: zwhb + zjlv +jntf: 4 +cjcp: 4 +fhvc: 5 +nssj: 3 +pcrp: prtt - gmsl +qdvm: jrvh * rbcw +ngwc: 2 +tpbs: dhcp + crpd +nqjz: 4 +ndcp: nqmm + rlpp +qcbj: shbh * zstc +nfsr: pvrh + ttbm +bhcj: fcmm + hjdm +jjcm: 3 +nnlt: pgsq * mgql +njvr: zdhd * mppj +vjbl: 2 +qbqz: 5 +pdhz: dnvl * rnjm +jpfj: 6 +gsdq: 7 +gbtv: 2 +ppml: 2 +bmvq: qbgr + rdqq +mjpp: 3 +rbws: 3 +hzzt: 3 +chqt: 7 +fgqw: hwjh * vbhb +gqvt: 5 +fclm: qlvr * fwmq +vrtw: 2 +cncw: 2 +gbfp: ndlv + nmdm +rgsm: 4 +hsbl: jfhp + mpvd +dthg: qsfv / stpw +fzlr: 4 +mnbp: 8 +rlcv: hsgq * wzrn +cgcl: 1 +smph: wfhr * zsfn +gwqj: 3 +zrvl: 4 +nfrb: 2 +gcbd: mtmr * bfrd +vlnz: rwrz * jgcc +hgcb: qnjz * gqvt +znsh: 3 +pjdc: 5 +mwwr: 9 +pmcc: htmq * znsh +stbr: 5 +dqrs: qlwp * qrnb +jzpz: gfbm * bzml +gppr: jcbj * hmhf +gsns: pnsg / wvzv +nrjs: 5 +whvl: vwvg * vwvd +rhzg: 2 +pvmh: dvsf + jlrh +lgvw: tfpp * sfrd +lhzg: 12 +cslt: cggm - hqpc +pgcm: gqqw + nnqn +pvqc: 2 +qqgw: 2 +hsgq: 2 +vjtt: 2 +mcmg: 8 +gbjd: 2 +tthw: mffh * fzmg +nrjj: 3 +ljgd: 5 +qmpz: 3 +wvcs: 2 +wwjq: lfhd * wtdw +cltv: 3 +qstr: mqld + gclr +rqqp: 2 +nllb: sqts + qvfr +dgpw: 6 +psng: zzjt * zrgn +dvtt: 12 +jvhf: zjlg * nbmt +fgfm: 2 +nswn: mglh + tlzv +ddjb: tsbf * sgdj +pwbq: 14 +blgd: twss * wpnr +dwsz: 4 +rjtt: 7 +snwt: bhgg * vfcw +dmhl: wvrb - gdmm +jqvm: 4 +ftff: 3 +bzsv: 2 +jwcb: 3 +lvmh: gdtb / mzrn +dzpd: 2 +vwfh: lnzv - mhrn +vndp: mljg + hwjm +zlbg: ffmg * fnql +zgrl: 3 +gdqg: 2 +ptvm: wrzq * qzcg +bfbb: 4 +zclr: 7 +btfh: 3 +frbs: 5 +frsr: 6 +ntcg: 2 +wtdc: mdwm + hnbl +qrzz: pmfw * cbrg +psrf: gdzq + bwvt +smlz: 2 +twss: vqpz - cwrd +tmlq: phvs * mjnz +tcmj: fjcf / fjvm +mhmn: 2 +jtjp: hqhp * mdbn +hhsl: 1 +brnz: 1 +mhrc: dvww + gbjd +lnqv: 3 +tmrv: 2 +vgqj: 2 +ggqd: dtzf + prvc +qgph: 13 +crpt: ljgd + vtvg +zddt: jfzt + dcjh +qwsj: shfh * zwlf +lhsj: sbmw - trnt +shrd: 2 +ncjj: wsrl + lhjd +ghsj: hzgj * nfqd +gnfs: 4 +bqpg: vtgz + jjcm +lchd: pdsj * dmhl +zdcs: 2 +cwmb: 1 +vdjb: jvcn * fnfb +tdjh: 1 +pdvz: 2 +hlsc: htms + tsgd +rvrf: jwnq / tmfc +pdsj: 3 +qwzn: bmgw * msps +nlfb: lgjs - fdwm +wgbg: zlcw / cjrl +lcrh: 5 +wmhr: vgfb + pwbq +mqbm: whfr * crwb +wjqb: 1 +mjgh: mrjs * mjjf +gnjj: 2 +bdjs: 17 +bmgw: 14 +slhz: 3 +jpnw: qrjz * bqrr +lzzg: tgjq / ccfn +vvcv: rtjh * rmhg +nlln: 2 +zghj: 4 +pmpc: hmqj + bqqw +rwhz: 3 +fjhh: 12 +fwwc: 1 +jnsr: dgpw + zlbg +chws: scgv + jdlr +jbsh: 5 +ffzn: rhsr + tsjw +jssb: 4 +zjcq: 5 +pmlb: bpth + czqq +jrhz: nwrw - gppr +dwlh: 7 +svbs: 10 +wzvq: bclq * bjcv +zzjt: thds + lhhc +fctb: 5 +czqq: 8 +rmvr: 7 +wrcg: qtgm * sclj +qclr: pgmt * bjpj +splw: mjpp * ppbl +flsr: mvjb * wvcs +tjrl: 5 +hvmp: lrgp * llpg +spwh: 3 +jslv: hgmp * rbwf +qqhp: 2 +fwgr: 5 +gqcj: 2 +qspm: 1 +rvrm: 7 +pmvr: qqgw * rwhv +jsbl: 9 +brzt: zpqs + vlvf +zpnz: zhqr * clrl +dpgc: ldsl * bdrh +ztcr: 2 +rqmc: 2 +qnvl: jgvj + mggd +mnzd: jsnb + nbfd +jtdm: 2 +lvdt: 13 +zqvc: rhph + fplt +gbgh: vgpz + gnqj +mlbh: trwd + fnrf +drrw: 13 +lzmd: 5 +vzgs: blrb / zdjs +jnqh: jjfj * vrgh +btsd: vbbd * cqbc +vnwb: bhgf - vbfg +sqpl: 3 +cghr: tjvq * cndc +rwtg: 2 +mnnl: 6 +nqmf: 2 +nlrl: lvww + gfml +pltv: 11 +dlwz: 19 +tljf: clwd / wvjq +gfqw: 2 +cnsg: 2 +jwsf: 2 +qngq: zjzh / fmnc +hphl: 2 +szcq: jftb + pnlq +scpz: hsgw * pcnh +dtsf: dhbq + bgcv +tgsg: vfdg + smsc +htbf: mzdh / nbtz +mncz: 12 +snhf: blgz * pnmh +pnmh: 3 +wlvh: qbqz * fqdw +cjrv: 13 +rggq: mzgw - bqfs +fjps: 3 +czcv: vqqb - rvvz +qfsn: 4 +dqdj: 7 +ctlw: rqzl * zpbm +whds: 3 +qtbp: ptgr * tgqq +qlvr: 3 +pmnq: zvjv / nncw +hbqp: lhzp + rbdz +tlzq: bhfn * qzjm +gjwr: 19 +wqnd: 2 +jbrf: 7 +fwmq: zrtl * gwqj +mfmd: 5 +bbcp: bblb - zhmb +rhph: vcsz * cdwm +crnt: 5 +ttcv: 3 +bdql: mrwh * slhz +dgcm: dbtv + lvld +htcl: rhdp * tplc +fswh: 2 +qcmq: 6 +qgzj: fjfn + bttn +mmjj: 6 +rpsw: fwqz * gpzf +dhvt: qgcp / dzsz +bjts: 2 +vswv: 2 +zsfn: 6 +wzzz: 3 +mffh: 3 +zvwf: 3 +qfcz: rbdj * jmbb +nwjg: 11 +vnmz: hqtl + rbst +qsfv: ndcp * glfb +fwqz: fndb + tlzq +psjz: 11 +ffdz: lbqb + ntht +lltz: 2 +tmwm: lqpz * shfj +smgf: mmqs * vnbj +vqmq: hfnz * ptlm +mdfc: 2 +hrjg: 13 +ncbn: 7 +qqcj: smbz + hmwt +lqsz: 3 +lncl: 2 +ghlg: 3 +dhbz: 2 +frsm: gcbd + dblq +fffw: ngmv + lfqf +tqmz: 12 +qlnh: 1 +wfvt: 5 +tbzq: cmnr * qrcr +hjdm: tlft + wrjq +bjcv: dndb + frdq +fmzq: 4 +pshr: 13 +hhgs: tvvz * zhcb +vphp: glmz + qmbs +mnsr: nqjz * smsz +ljtl: 2 +hfns: vpbs * hqfh +hzlp: 2 +gmtm: 5 +lvhw: lllb / vrsf +hcph: zvwf * rjtt +tplc: jsdv * mdpw +dbvz: cndw / zddc +tnhc: llmq - mpzm +tpfj: 2 +zznl: 4 +nwrw: prpg / jjjr +rmpq: 2 +zrtl: 7 +fsvn: dzpc + jslv +qrqh: rvgp + btfb +llww: nltv + drrf +wrzq: 2 +bvfv: lptp - zvpb +sdzj: qwqz * pcqw +tdlt: 2 +jpwc: hwnz * hzfp +dbpj: 13 +fcgc: 13 +tbpl: 5 +zqdq: bgnf * nqhd +spcp: 2 +bmrl: 4 +lhhc: 19 +ctlf: 5 +svpr: slqd + jdqb +jdcs: 10 +zbwm: 5 +hfnz: 2 +vwss: 2 +qrnb: 5 +gmjc: sjwc + mrwq +bcvq: 8 +bhpl: 7 +lvld: 3 +nnms: dtcv * qgzj +jjmv: 19 +dvbv: gghf - mmcp +mwsz: 6 +lzsn: 5 +mjnz: rtql + dvtt +hqcf: mmrq / cfsl +ncrt: tsvp - ndwr +rcpv: wlgw - dcjg +vpbs: pbbg + lwpf +nstv: nclh + wvmm +cngh: cgps + qngq +sllr: 3 +qvsw: dtfz + dvjh +thsd: 4 +hcjs: 11 +pvrc: nvgv * btnn +hzgj: 7 +zqzl: rnps / qhqj +tdnf: 5 +rbpp: nrjj * jsjp +qpqz: 3 +bjmr: 1 +fbpw: phbj - nthd +vjvp: 6 +zqmj: 5 +qhqj: 2 +pdsq: qtrn / wsmv +frlb: 4 +jbvn: vwmp * cfth +pgff: 2 +hgjg: 5 +lgdl: ddnw + sslb +szbv: 5 +htms: lfsc * mmwv +rrhp: 3 +cpmd: njtp / gzpd +fzdw: ffvt * nnjp +btnm: hcbb * qfwm +rmtj: rjwr + hvdl +zhlp: gclb * pdwm +nbfd: 1 +wtgw: 4 +humn: 3640 +swqj: tzrs + htcl +zgqq: drbh + lzmd +glvr: 2 +hpbd: gjmw / lvds +wljt: wtlb * sgpp +dtfz: rnnr / fqdf +vqgl: 3 +zbdz: 4 +vsjt: zvzs - scds +trnz: 15 +zvpb: dlwz * srnw +mrwq: 4 +wghw: 11 +dcjg: 5 +ltph: 2 +qrcr: 10 +lwbf: 11 +zcbm: tjrl * dhrv +qgpj: lrvl * nnlt +qzgt: 4 +ljbp: 20 +jgrp: vvqr * ngfm +ldjp: 1 +mvhv: cnhp * rgsp +sqzr: 2 +lchp: 2 +cslb: 4 +clvs: 5 +qwfw: qgpj + lgdl +hmqj: cpfs * ctlf +svrh: 7 +wnnc: zvbd * ltrc +fmng: 3 +rcnz: jpsq * blwg +mzgw: jvhf * vqvw +znmp: fjns * nlpd +rndh: ncbn + wbdm +zzrt: 2 +tfbl: pcrp * gdqr +ttdl: mfnb * llpw +cfth: jrrv + lbhp +qwtg: ghhs + qfmz +swqb: 17 +nngb: 3 +zglv: bmsg * thzv +wpnp: 5 +njgp: nlrl * vstj +ppqs: lrgg - tdbt +vgpz: vpvr * bbbq +zbzz: pmcc + mrrh +ddbq: 15 +rhsr: 3 +vqqg: 3 +sdzp: nbdg - nppp +phcw: 5 +bpng: mwhz * mllb +lfqf: 8 +rjfd: 9 +mrrh: ncrt / ntdn +zvbt: cqcl * mfnd +bbqm: 3 +zmnn: 6 +zplv: 1 +cspt: 2 +rvvc: mtnh + dvbv +jfnw: 17 +frfr: 3 +wzrq: 3 +wdwr: 2 +gjmw: rmtj + hlsc +dzcq: rrgf + tngq +fhhh: 1 +bmfv: 8 +dljw: 17 +slvh: 5 +wjhm: 4 +rbdj: lqpq + drsz +fmhq: 4 +bzml: 5 +fhfj: hhhg + bgsg +zpdh: 3 +mrhf: 5 +svjs: 2 +tjjz: cjfs * qmpz +bwtn: ssjf + dmhf +hgtg: hvbj + nljv +jwqc: njgp + zcbm +qrjz: 2 +cbjz: 2 +tjfz: szwd + zrss +shtz: fnwz + qdhm +bcmb: qrqh * lrvz +wpnr: nbvt * jcql +lllb: gvdm * tqnh +gvms: zvbt + zqmj +srnw: 4 +dhdf: ztmg - prdq +cfsl: 6 +gwlh: 5 +fwvt: 4 +pmbg: 2 +snwl: pmvr / mfmr +bpdn: mcmj + lcjl +prdq: 2 +gbnn: 4 +zdzg: 1 +tmfc: vrtw + thsd +wjnt: 3 +shhw: 3 +ljsw: wcjj * pltv +hqrh: 4 +npnz: lwzp - nqdt +zlfm: rdwq * jbrj +dtzf: 4 +bppd: 3 +dtvd: 3 +vcnz: rcdb + fzdf +qtrn: jlrt * lqbs +ppzw: trnp * zssp +bdnp: 3 +zdrw: 3 +brwq: 3 +tpjj: drbq + swlb +wdmv: 3 +zmdn: 3 +ttbm: 5 +bfjs: 2 +pfdm: 5 +vpvr: vbdp * ndfn +gzsw: qpqz * nzgv +mfpp: 5 +qnlh: bwtn - qmbm +fnlj: rmhb * cngh +mmhf: jgrp / mvbd +mdqw: 4 +dhcp: zrgr + frqd +rcjm: pprt * ddds +wrjq: vbdw * cldq +bdws: 5 +tgjq: jrnj * bbgz +btld: 5 +rbst: 6 +swqf: 2 +mvql: 2 +zpls: 4 +rdhb: 2 +wcvl: 3 +zddq: pfdm * frsr +vvqr: 4 +hbns: 5 +mmnc: 2 +qprl: wpnp * wwwt +brjz: 13 +gqsw: 10 +cvzp: ljbp + swdz +wvrh: 14 +rthf: 5 +jjjr: nzts * mvql +wmlg: thlc * rwtg +jrdg: dbnf + btmz +mlrp: hrjg * sdsj +cjgl: gfpr - zbhh +cgtp: ldnf + wmzl +vtvg: qdpz * nfsr +hmps: zpdh * wncv +wvzv: 2 +rtql: 1 +pjlj: ddtw * lhlc +shbp: 7 +nbvt: 5 +vtwm: 19 +llrm: 5 +ngmv: shbp * whds +wtdw: 11 +ccvz: 11 +wtlb: dzfw * bmvr +nclh: smwf * zqdq +sfqw: 4 +zpqs: 5 +ddbs: 12 +dpft: flsr / mcsm +jrtv: lzfw + vpqn +dzcl: vqgl * wcnt +ncml: 5 +zvmw: frzf * vtfn +qftv: ptvm * rlvm +wnjg: zfqf * vpzn +qvcz: cjzc * gmtf +jfzt: 1 +mjjf: 2 +hsst: wdmv * vjmz +ljcm: 4 +rgbz: 2 +lmft: 9 +qtmn: 2 +wsdr: lhcs + mmmz +plgt: tldh + lchd +wvjv: 3 +dljs: 11 +nljv: wpcv + nsmd +pgnc: swqf * fpbr +zjqg: fctb + bzmg +vdnq: tmwd + ppdm +lhjd: 4 +jsdv: 2 +vqll: pzcw * bjts +hztf: 2 +mqlf: 5 +mrsr: szbv + zcdh +dnrb: ptjb + tgjn +fjcf: shtz + mhcj +nhcp: 8 +cjfs: 12 +wdwh: hrqt * prws +mglh: 17 +thds: gjwj * tmrv +scgv: nhfp * hzfl +mhdq: 2 +ndqd: cvdq + wcrb +qfwm: zgsf / llzt +vqpz: lsmr * qwnt +gsrq: fcgc * bwwv +gmvr: 12 +hgdj: brjz + tmhp +qqmc: qnlz * vqnh +pprt: 2 +zwhb: nbvf * vbsr +szwd: qgjm * ggqd +dtng: 9 +nmvh: 17 +nthd: wsdr * jcwv +lmjq: 6 +nrfn: bpbt * jpgs +hlrm: 7 +rlfp: zgrj + jcvs +pmll: 3 +jrrv: wbpr + ppqs +plfc: 13 +jqfl: 2 +ztql: 2 +bfvq: lhjv / jwrd +gqch: 2 +sbsd: rtjv * nngb +cgps: jdgm * dnlz +dqqh: phjf * tpjj +cbrg: 2 +gdtr: qmnr * fqfs +zvzs: 16 +gndt: 3 +zbdn: 2 +vbhb: 2 +swdz: qjrt * zghj +rfjd: 5 +dsjh: gqnj * clzg +cjcd: nfrb + gwgq +mtnh: mqcw * nwzv +cgrj: 13 +fgpw: nrhw + wzvq +chst: svbs + cbqw +fglb: 5 +prqf: 2 +rrbl: 2 +hbfw: dsjh - bpdf +fvcb: vlgh * qvsw +jgvj: ttrc * jmsz +sbmw: rbmp * twpr +qgcp: jlhj - gzqj +ztmg: gswq + trld +nmhl: hnhl + dfmf +ppdm: pdsq * wnjg +hqpc: qhtc / pqtr +jfhp: hqfz * nmpb +jpbn: rbpp - llqp +qdpz: 2 +vzwr: 12 +gbzg: 14 +lqpz: 2 +wfrj: cnzt * tmwn +tsvp: ssdv * cvhv +vjnj: 1 +tprs: 5 +bjpj: 3 +wfhr: 5 +tsbf: 7 +dqpz: qzpd + lsgd +smwf: 14 +vnss: hzlp * wrsd +srwm: 3 +qgrp: 5 +lwzp: nhcp * jqvm +chfh: tpgd * wqdv +brgv: 3 +ztlf: 7 +vbfg: tgfh * nlln +bqqz: ncjj * fwvt +hpsj: 2 +gcgv: 9 +dmfb: drjn + lsbp +jllf: 18 +zqsj: mfws * bgjh +vlvf: dmcg * wdgd +ndff: 4 +pbtd: 2 +tmlh: 2 +bbvr: ppzw + cwpz +sjtg: znmt + lvlz +tmwd: fwnb - zvmw +wqpv: 2 +zrss: 9 +twmh: 2 +ptlm: jbsh * zgqq +sqts: 3 +zzrp: 3 +bmvr: 9 +fphz: 13 +vnmb: 3 +zntd: jzgv - lrjr +rdvs: 2 +zrtw: 3 +vhwj: 3 +qrss: 2 +jsfg: wljt - tmwm +qqbn: 14 +ffmg: 7 +zfqf: lprr + gmtm +drbq: 5 +smsz: 2 +fjvm: jsbl + fswh +ctgr: 3 +qwhv: lfnh * mtzz +zptm: 3 +sddw: ljsw + ljgj +jlrj: qgvl + mnbp +dmjl: 5 +bgnb: 2 +rdng: 9 +blwg: 4 +dzpc: zjtr * gmmg +gmnj: 6 +sfrd: vfqn + pvqb +lbmr: rmvr * szcq +gdmm: 2 +dwff: 3 +sbsc: 6 +jjws: 2 +fzmg: 6 +hpgp: 2 +gjwj: 5 +hqhp: mmln + ztth +pcnh: 13 +blrb: zpfd * pjlj +wrsd: wptn / lvqr +lfnv: 5 +lhrh: zglv / wzrq +spvn: 12 +mhnq: fngh * jlnl +pcfd: 2 +lsgd: hphl * sqpl +fqdw: 5 +cbqw: 19 +nqdt: 2 +rhrf: zzhc + chfh +sgml: tfln + spwh +tsgd: npgm * plfc +vdfg: zmgz - vlnz +rmbh: 2 +nqwn: 2 +zjlg: 11 +hmqq: mlss * lsnf +nnlw: 5 +whhp: hfns + dwlh +rbgq: ddbs + qbqq +czvn: 3 +qmbm: cwmb + fjrc +hqfz: 19 +tmdp: 2 +smbz: qwtg + lghs +lhcs: wmhr * dgzj +drbh: 18 +sppw: mvlr * vsss +prlm: rrcd + bqqz +whfr: rcpv + qmpb +pdtw: 4 +hrqt: hcph / bdnp +lgjs: ltcz * jlqg +rpjv: zhmg * mfjd +lgvq: pbmh + rtqj +djml: lhzg * lbsq +mnds: ftjl + plrv +rgmd: 6 +mqcw: czwp * jcsp +vwvd: lcbb + vjnj +qtmd: 3 +wwsp: zwcj + wjff +jvtg: pmll * dtvd +hwcl: fvcb + hcct +znhn: 6 +tqnh: 2 +btmr: 3 +bpbh: 12 +tcgf: 2 +lzrl: qgph * nnwb +qbht: nsfl * cwsw +hzdf: 2 +bbjz: wfpl * twtr +bqrr: 13 +qhtc: dzdq * jdcs +cndw: wjts * nvdh +dtgs: pprm + pccw +nnqn: bfjs * qghp +nsmd: jtdm * pwfc +vlvr: gdjg - vdwb +rqpr: 5 +hqhs: cncw * jcfw +hqfh: 3 +btnn: qnlh / ljtl +rbpv: 16 +rsrs: bbjz + bpdn +gdzq: drwj * snhf +jmrd: 3 +chhj: 17 +brfl: nstv * qprl +tlft: pcsw * czrj +shqj: sjgr * zgvp +bspf: 2 +qntf: twnc + frnf +fcmm: 9 +pjnv: bptw * sfqw +pwjz: dblj * whhp +jcpv: prmq * dwgv +clwd: ftlw * frfp +gfrz: 3 +vsss: 19 +pfrb: rjfd * mtgr +tdtf: rscv + rvzm +mmjw: tnjz + mnzt +lvpb: 3 +wcrb: shps * rmbh +cqbc: 2 +bfcb: 3 +lfnh: mlrp + sbmj +dgmb: pltr + bqdj +pfst: 3 +pprm: rrhp * nqmf +zhmb: dthg / mcwh +vqqb: bftd * vdfg +nnjp: mbrh + qdnr +lcdv: sqtr * tsvl +nrwl: 3 +ptnt: 3 +trls: 17 +zdhd: tpzl * zdcs +lmjf: 3 +cmmc: bhsc * fhfj +gwqg: 2 +rbmp: 17 +nbrz: 3 +cnzt: 14 +mmwv: bzwg + nrpl +hnbl: 16 +mslz: 5 +dqrf: cqsh + rcmg +vfcw: 3 +tsvl: pvqc + hbns +jczn: dplg * nzsm +rrgf: rggq * nlcp +jvtp: sjtg * jbrf +tfll: dwsz + sdqr +mvcl: zhlp * ntcg +wmzl: zntd * gqcj +ddnw: sdzj * dhmm +qdhm: pgwj - lzzg +vhvb: 5 +phnr: 9 +zshr: psdc * cnsg +stpw: 5 +szpd: jbfc + rgmd +lbvm: 3 +swzw: rwhz * crpt +ffvb: zrdv * wdbw +ltdc: pzwl * cbwh +zmdj: qrfz * msbc +hzfh: 2 +dfmf: 4 +qdnr: 6 +rlpp: gndt * rsww +rtdw: gmdz - wcvl +hmpb: hntj * jvtg +gzvl: 4 +gfbm: 2 +sntz: 5 +qwqz: 3 +rwrz: 3 +mqfv: whqj * mmhf +ltrc: cmmc + wvqz +jftb: 9 +bfqs: tqqd + lmft +lcbb: 6 +wvjq: 2 +ndsw: 14 +nbgq: 2 +blrj: hhgs / brqt +hhjq: rcfv * djbc +rtqj: ffwr + fclm +wbbj: dzbt + zcfc +rscv: bblp * fpgb +fphb: 5 +dhrv: mlhm * frlb +ccfn: 2 +vgzz: 5 +cqsh: rqnb + zpfc +gdpf: 12 +rvrw: 2 +fmtw: hbmr + ptnt +bdrh: 3 +pvqb: mctz * fsfn +lrgg: 9 +cnqp: vnmb * fbpn +tvsv: zfnp + cdrn +qzhb: nmjg * jqfl +tzbg: 2 +wpdr: 3 +gmsl: 6 +grgl: jcpv - jpfj +wvts: splw + vrpg +wdgd: 4 +pvrh: 8 +vlgh: 5 +dlmq: bfhv + lldp +tsjw: 4 +hfwj: 4 +ddqs: mdqw * mrhf +wbdm: 2 +rtjv: 2 +mwfz: qrzz + jqpb +vcsz: 2 +bblp: wgbg - qqcj +jlrt: mnbr * vmzh +rdqq: 1 +zlgb: 18 +dzgh: 5 +slqd: gqgw * fjhh +lmdc: mlbh * grwr +mrfd: spvn + fwwc +mhss: lqmm + njvr +rdnd: jswl + bpng +dvjh: hfnb * zzrt +pbcs: lcdv / zddt +ntdn: 4 +nvjn: dmjl * qgrp +tzrs: shrd * vwfh +zdcc: 4 +dzzd: ldjv - vjbm +trtr: dljw * zlgb +btmz: cghr - bpbh +bqqw: ptsp + zlqh +bgcv: dqqh / smlz +lfhd: 2 +mgjl: 5 +llrp: lggh + fwgl +zfpz: 7 +htvc: 2 +fjht: 2 +lqsp: 3 +sjjm: tvsv * sbpv +sfwz: 12 +mtsj: slsh - pwjv +nzcs: 2 +hdzt: pgnh * tqmz +lhlc: 5 +wvrb: 9 +bnwm: 3 +nmgq: lhrh * cjpr +wprb: 6 +qmbs: 4 +dfvh: zlfm + swqb +zpbm: hgcb + mqrz +ffvt: 5 +frfp: 8 +ljgj: dzcl * whvl +nncw: 8 +dnvl: ndsw + gcnf +gggh: 2 +glmz: 15 +dhqt: 4 +rtjh: wfgb + qstr +jgbz: 2 +ldsl: fbsf * shws +vfbw: llrm * sppw +pmfw: wqgv + nvjn +wcpl: 19 +vdwb: bfbb * fdgr +cwfd: 1 +rbwf: 2 +svjq: 8 +dzbt: 7 +vgqm: 14 +hwnz: 5 +vdvw: 3 +vqvw: 5 +lmfr: 2 +qvgf: 2 +mljg: 3 +hhpp: 3 +cmqs: cgtp / wzgm +jwmp: rbbv * tzgg +cjzc: rdcv * zsjg +fbvq: 2 +vjmz: 4 +bwwv: 3 +cvgc: 1 +rfdl: 3 +mvbd: 8 +pjlw: 3 +bszp: 5 +scds: 5 +jcsp: 4 +mcph: 4 +wzrn: rjbw + jwmp +pznn: 3 +ghrb: trnz + fmzq +bdrd: pnqr * hsbl +zstc: 3 +mbrh: vwhb - rgsm +fjns: tdjh + mncz +vjrn: cslb + qcws +shps: 11 +glfb: 20 +cgpz: 7 +dftn: 5 +rjhn: 5 +tnjz: jfnw * mvlc +dsfh: 3 +tsfs: 3 +zpfc: tcfd * vljr +jcvc: rjln * qqhp +hgmj: 3 +tqcc: ctlw - jlrj +mqzd: swzw + vdjb +fzdf: tpwj * mtsj +hsgm: crgt * qzqh diff --git a/src/bin/2022/day21.rs b/src/bin/2022/day21.rs new file mode 100644 index 0000000..dec8b5a --- /dev/null +++ b/src/bin/2022/day21.rs @@ -0,0 +1,227 @@ +#![allow(dead_code)] +#![allow(unused_variables)] + +use advent_of_code::prelude::*; + +#[derive(Clone)] +pub enum Monkey { + Num(i64), + Add(String, String), + Sub(String, String), + Mul(String, String), + Div(String, String), + Human, +} + +pub struct NamedMonkey(String, Monkey); + +impl std::str::FromStr for NamedMonkey { + type Err = Error; + + fn from_str(s: &str) -> Result { + let cap = regex_captures!(r"^(\w+): (\d+|\w+ [+*/-] \w+)$", s) + .ok_or_else(|| anyhow!("failed to parse"))?; + let name = cap[1].to_string(); + if let Ok(n) = cap[2].parse::() { + Ok(NamedMonkey(name, Monkey::Num(n))) + } else { + let mut parts = cap[2].split_whitespace(); + let monkey1 = parts.next().unwrap(); + let op = parts.next().unwrap(); + let monkey2 = parts.next().unwrap(); + match op { + "+" => Ok(NamedMonkey( + name, + Monkey::Add(monkey1.to_string(), monkey2.to_string()), + )), + "-" => Ok(NamedMonkey( + name, + Monkey::Sub(monkey1.to_string(), monkey2.to_string()), + )), + "*" => Ok(NamedMonkey( + name, + Monkey::Mul(monkey1.to_string(), monkey2.to_string()), + )), + "/" => Ok(NamedMonkey( + name, + Monkey::Div(monkey1.to_string(), monkey2.to_string()), + )), + _ => unreachable!(), + } + } + } +} + +impl Monkey { + fn eval(&self, monkeys: &HashMap) -> Option { + match self { + Self::Num(n) => Some(*n), + Self::Add(n, m) => { + monkeys.get(n).unwrap().eval(monkeys).and_then(|n| { + monkeys.get(m).unwrap().eval(monkeys).map(|m| n + m) + }) + } + Self::Sub(n, m) => { + monkeys.get(n).unwrap().eval(monkeys).and_then(|n| { + monkeys.get(m).unwrap().eval(monkeys).map(|m| n - m) + }) + } + Self::Mul(n, m) => { + monkeys.get(n).unwrap().eval(monkeys).and_then(|n| { + monkeys.get(m).unwrap().eval(monkeys).map(|m| n * m) + }) + } + Self::Div(n, m) => { + monkeys.get(n).unwrap().eval(monkeys).and_then(|n| { + monkeys.get(m).unwrap().eval(monkeys).map(|m| n / m) + }) + } + Self::Human => None, + } + } + + fn is_num(&self) -> bool { + matches!(self, Monkey::Num(_)) + } + + fn invert(&self, monkeys: &HashMap, mut val: i64) -> i64 { + let mut monkey = self; + loop { + match monkey { + Monkey::Num(n) => panic!("found num?"), + Monkey::Add(n, m) => { + let monkey1 = monkeys.get(n).unwrap(); + let monkey2 = monkeys.get(m).unwrap(); + if let Monkey::Num(n) = monkey1 { + monkey = monkey2; + val -= n; + } else if let Monkey::Num(n) = monkey2 { + monkey = monkey1; + val -= n; + } else { + panic!("not simplified?"); + } + } + Monkey::Sub(n, m) => { + let monkey1 = monkeys.get(n).unwrap(); + let monkey2 = monkeys.get(m).unwrap(); + if let Monkey::Num(n) = monkey1 { + monkey = monkey2; + val = n - val; + } else if let Monkey::Num(n) = monkey2 { + monkey = monkey1; + val += n; + } else { + panic!("not simplified?"); + } + } + Monkey::Mul(n, m) => { + let monkey1 = monkeys.get(n).unwrap(); + let monkey2 = monkeys.get(m).unwrap(); + if let Monkey::Num(n) = monkey1 { + monkey = monkey2; + val /= n; + } else if let Monkey::Num(n) = monkey2 { + monkey = monkey1; + val /= n; + } else { + panic!("not simplified?"); + } + } + Monkey::Div(n, m) => { + let monkey1 = monkeys.get(n).unwrap(); + let monkey2 = monkeys.get(m).unwrap(); + if let Monkey::Num(n) = monkey1 { + monkey = monkey2; + val = n / val; + } else if let Monkey::Num(n) = monkey2 { + monkey = monkey1; + val *= n; + } else { + panic!("not simplified?"); + } + } + Monkey::Human => return val, + } + } + } +} + +pub fn parse(fh: File) -> Result> { + Ok(parse::lines(fh) + .map(|NamedMonkey(name, monkey)| (name, monkey)) + .collect()) +} + +pub fn part1(monkeys: HashMap) -> Result { + Ok(monkeys + .get("root") + .ok_or_else(|| anyhow!("couldn't find root"))? + .eval(&monkeys) + .unwrap()) +} + +pub fn part2(mut monkeys: HashMap) -> Result { + monkeys.insert("humn".to_string(), Monkey::Human); + simplify(&mut monkeys); + let root = monkeys + .get("root") + .ok_or_else(|| anyhow!("couldn't find root"))?; + let (monkey1, monkey2) = match root { + Monkey::Add(n, m) => { + (monkeys.get(n).unwrap(), monkeys.get(m).unwrap()) + } + Monkey::Sub(n, m) => { + (monkeys.get(n).unwrap(), monkeys.get(m).unwrap()) + } + Monkey::Mul(n, m) => { + (monkeys.get(n).unwrap(), monkeys.get(m).unwrap()) + } + Monkey::Div(n, m) => { + (monkeys.get(n).unwrap(), monkeys.get(m).unwrap()) + } + _ => panic!("wrong root"), + }; + let (val, monkey_human) = if let Monkey::Num(n) = monkey1 { + assert!(!matches!(monkey2, Monkey::Num(_))); + (n, monkey2) + } else if let Monkey::Num(n) = monkey2 { + assert!(!matches!(monkey1, Monkey::Num(_))); + (n, monkey1) + } else { + panic!("wrong monkeys") + }; + Ok(monkey_human.invert(&monkeys, *val)) +} + +fn simplify(monkeys: &mut HashMap) { + loop { + let mut found = None; + for (name, monkey) in monkeys.iter() { + if matches!(monkey, Monkey::Num(_) | Monkey::Human) { + continue; + } + if let Some(n) = monkey.eval(monkeys) { + found = Some((name.to_string(), n)); + break; + } + } + if let Some((name, n)) = found { + *monkeys.get_mut(&name).unwrap() = Monkey::Num(n); + } else { + break; + } + } +} + +#[test] +fn test() { + assert_eq!( + part1(parse(parse::data(2022, 21).unwrap()).unwrap()).unwrap(), + 10037517593724 + ); + assert_eq!( + part2(parse(parse::data(2022, 21).unwrap()).unwrap()).unwrap(), + 3272260914328 + ); +} diff --git a/src/bin/2022/main.rs b/src/bin/2022/main.rs index d13e807..25e7c34 100644 --- a/src/bin/2022/main.rs +++ b/src/bin/2022/main.rs @@ -31,6 +31,7 @@ mod day17; mod day18; mod day19; mod day20; +mod day21; // NEXT MOD #[paw::main] @@ -57,6 +58,7 @@ fn main(opt: Opt) -> Result<()> { 18 => advent_of_code::day!(2022, opt.day, opt.puzzle, day18), 19 => advent_of_code::day!(2022, opt.day, opt.puzzle, day19), 20 => advent_of_code::day!(2022, opt.day, opt.puzzle, day20), + 21 => advent_of_code::day!(2022, opt.day, opt.puzzle, day21), // NEXT PART _ => panic!("unknown day {}", opt.day), } -- cgit v1.2.3-54-g00ecf