diff --git a/Cargo.lock b/Cargo.lock index d6500a6..1f6e5a6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12,6 +12,7 @@ dependencies = [ "num", "petgraph", "rayon", + "xxcalc", ] [[package]] @@ -300,6 +301,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "smallvec" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c8cbcd6df1e117c2210e13ab5109635ad68a929fcbb8964dc965b76cb5ee013" + [[package]] name = "tap" version = "1.0.1" @@ -314,3 +321,12 @@ checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" dependencies = [ "tap", ] + +[[package]] +name = "xxcalc" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c2725420f62b8c706cd7f710b45bc30a702de16b092114b84bd0bb6d9cccdbc" +dependencies = [ + "smallvec", +] diff --git a/Cargo.toml b/Cargo.toml index 0be3bff..70d8474 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,3 +12,4 @@ nom = "7.1.1" num = "0.4.0" petgraph = "0.6.2" rayon = "1.6.1" +xxcalc = "0.2.1" diff --git a/inputs/day21.txt b/inputs/day21.txt new file mode 100644 index 0000000..b9daf1a --- /dev/null +++ b/inputs/day21.txt @@ -0,0 +1,2399 @@ +zsdb: gqzc + wrwl +hlgq: tdbl + nhvq +gmmb: 3 +mrzs: cjqw * rjbf +pgrc: nqdc - hrsg +wclq: tmcg * jrvf +zbtn: 7 +gbqg: mhqc + lmpd +ztch: 2 +gffd: pllp + fmhd +cvcn: 5 +swvf: mrwq * pvfm +scsr: dsqb + mhjq +wtct: twzc * dtvs +jvhl: 2 +ssfb: hdlp / fzdq +bpmw: 5 +rnpf: fsnw * ctql +fnph: glmv * czjs +jbfc: fjqb * vmcv +nlhn: wlth + smsl +cjhz: blbz + zdtq +vsng: lllm + mccv +rslz: fztm + wlmp +gqzc: fnwl * wmbm +wdvq: vfqb * fqgt +vrsq: hwgw / ptql +sfcz: nzgc + hgpf +nvth: 5 +qvnf: 3 +lqjr: zbbw * qtvs +sddl: bqlf * bqml +lnwc: hblf + lmsz +hwwf: lmjb + lptl +zvws: 2 +lslm: pszd * lwsm +chbt: cwjf + bpmt +mtbl: fqhn - nbrv +hnbq: 5 +thdf: czlj + ntrv +rjrl: wmcn * zsqf +zlsd: ztqf + nqrb +lvsv: rstc + psvj +plqw: dqqz + tjds +hcvm: 3 +dcll: mtql * cmns +dtpd: lcpr - csjp +jsfc: 13 +cmns: 3 +cdhn: dscg + hgsj +sjbr: 2 +ldrn: lvrz + hdhz +fjlj: 4 +tmmh: 16 +qgzd: 2 +lqzv: 2 +mbjc: 3 +fqws: cspz + bchp +fsnw: 4 +rfcg: gftf + jpcr +rmbm: 15 +jnzd: 5 +csbg: bfls + rrhc +hbtj: 5 +cpdc: 11 +fztm: 3 +rmfs: zgsp + vwbw +fwrs: 2 +mznn: pbbs * wwsc +rjbf: 3 +lcth: wnfb * wbjd +wgwb: 4 +vgth: qjgf + jmnr +qmnc: 15 +cnfz: 2 +wrtq: 4 +hggh: 2 +ndcz: 3 +qgsh: 4 +hddg: 8 +vmcv: 2 +pgwf: 2 +tdbl: 12 +vhgz: wrqs / zzcv +hfpp: gtlh + fgqc +blvh: pphm + dvtz +csdv: vvvr + ccbz +mmgv: sdzv + qgqc +rgjb: 4 +wwrz: 2 +vncb: 3 +qnsc: dwfb + shbc +gmlt: mstv * sggp +fjvg: 3 +hgwh: lnbh - zcwv +bdlb: 8 +hdsc: jlpn - tgrl +rbzd: szsp + jssf +vqgz: 2 +qrmr: llqn + hmtp +swrr: zjps / pjrs +nbrv: qwgw * mghq +blmg: vvqw + nnhz +bjlr: pgrc + lqjr +jclr: 3 +ttrd: 5 +schf: 2 +pnpr: 2 +vfvw: 13 +qzss: 4 +vfhb: 4 +cbrp: 2 +hhpn: wpqb * hdsr +frgt: 5 +zctj: sbvs * ghtz +cdvc: 3 +wwsc: 2 +mblg: 2 +llzv: blmg / hmdc +rqch: vbtq * vsbg +nqhz: fsws + fhnv +qvbp: 2 +hlcg: dlsm - jwjl +jzdj: 3 +lmsz: 7 +vhpt: gcwp * fqwm +pzdn: 9 +lvsz: btjr * fvlc +fwjw: brhb * bvzq +gssz: 13 +tjdp: rhqm * ncjv +nrvn: hdsj * chsg +sjqw: 5 +fdbv: zzqd * njjj +jmbh: ncbd + jtsn +wmwb: 4 +jdff: qlws / dwtg +bqrh: 3 +fnwl: mrvw + zssw +gfdj: rnnc + vtcf +chsv: 9 +sqvd: 11 +gndr: lghr * bvlf +rtnd: 2 +wlbj: wgwb * nfvc +mnsf: rrcf + rnpf +pllt: tmmh * jrqq +qnsp: 2 +jvgr: dnnl * ttzg +tpgm: zzsn * rhbr +sljz: 2 +bhlm: ftrn * rqvt +swmp: ljlm + dgcz +whvz: jszl / svhr +sbhc: 2 +mjbb: 3 +wnct: 14 +jfdz: zccl * gfdj +fglq: 2 +vrqq: hrfd * tdbr +hlwg: mcln + chfh +rrrw: 4 +jwqt: ddcf + gdpf +pjcg: 4 +dpwn: 2 +gtlh: 4 +djvg: mmgv * hvbz +vvqw: wtfm * cbtr +dcvz: 2 +tqwq: crsn + zwdc +fqgt: 10 +tqrp: zpbp * cdvf +wmcn: 2 +tpnp: bjth + gvpl +gtln: lcdl * dvql +lpls: 3 +fndf: 3 +wffl: 16 +bpmt: jrwv * ddsl +gngh: mplr * mmfb +cwjj: 5 +cnqp: bmnl + rhbc +fvsn: 5 +vlrn: wfqb * wmwn +fwrh: jlpw + drnn +hpdf: gpwb * dwzn +lsdp: wlqf + tcdj +phqh: gbsd + bdqz +jvrd: fftt + njzq +mvml: 3 +njjs: swmp + rgfb +hbcs: stwd + twdn +ptzt: 2 +scmg: 11 +nhjc: mpzv + bjsp +gjsr: rbgd * dtmp +mwbz: 9 +rvdr: pvhc - qmtf +bchp: 4 +ptbq: 2 +fcrg: 2 +fzms: 2 +pmvs: hgln + lbjj +lqtd: wzsb * gcps +vflj: 2 +gpns: gfrp + csbb +trbt: mgpd + rmfh +fsbj: 14 +cqwr: cgtn * ndwz +bvbc: dwrn + jqjs +srgz: 3 +dfdl: 3 +ncwc: 2 +fgqc: bnhf + qsrq +jjbb: vtgh + rlst +qtsm: fvcz * tvmf +jrqr: hbqh * nqnt +zbjb: jvbf * rnql +zdtr: hmwm + djmm +mtml: 8 +ghsf: 4 +sbnd: 3 +wtfd: fhqd / ccjn +tcdj: cnmf * cvlv +ljlm: 3 +cpfl: 2 +vnsr: qrgd + btqm +sjjh: rfzl + gpns +qvrd: 3 +gqnm: 9 +mmtt: tfnl * fphb +mqzj: 4 +lwrq: qdbr * jnct +vpqd: 3 +scmm: 5 +fhqd: znsl + nhgn +wgtd: mblg * qjvz +fnjt: gpbq + gzlj +zcvs: ffsm + qnsv +shvb: 2 +nnjj: prtc * ldrn +nlfc: 2 +qpzd: 2 +qwmd: 2 +vdml: 5 +wwdh: tnjv + tmnc +npgh: 10 +gtch: zgzc * tfgm +jvpb: lpfs + jprp +gtrh: dbdd * qblw +nsnn: qgnw * pzrl +zjvw: tdfw * sbnd +htmt: jhdw + qjpd +mzrl: nshw / bznr +swwq: 3 +hjzw: dmvn + cdwq +ccbl: 3 +ctql: 12 +fgfp: 18 +nftp: fmgs * dtpp +vggp: 13 +cpnj: nhwc + rpwg +zcwv: dgvb / hnlv +drbh: fchq + zzjd +zcll: 3 +vhtw: vgcz - snvm +llnn: sttc + gwsc +qjnr: 18 +bhvb: prpq * ztln +bdjp: hgjw * gzjd +trsl: 5 +llqn: 8 +nhjn: fqvv * dhfw +gfdg: 4 +fthr: 2 +qrgd: 18 +pcfs: 1 +pphm: 4 +mqss: 12 +zwlh: whts + vrtd +qgfs: 2 +ncml: thpm * jdff +zffw: 2 +dbdz: 7 +mpzv: 4 +qjvz: fwjw - pbbf +qfgt: gfzg / rzzr +bcht: rgvc / smfc +cjqg: lfnq + pztj +sgwn: plqc * vnbz +gplq: hqvg - bplh +gmst: 15 +gvhp: wshj / qpzd +zvdz: 5 +fpqn: 10 +hgsj: 5 +dtvc: wvww / cbrp +cdrv: sdqm + tnfh +bgww: 3 +vcrr: 11 +ttmh: 4 +bnlz: rvvm * cblp +wjrb: mbsc + nphf +gjvs: 6 +lzmh: nbjr * wlbd +bvdc: ftmp * jwhj +lvdd: mgfj * vslb +lbtc: hfpp + wrtz +wpqb: 2 +tmvj: bbfv / bcdt +brhg: 2 +lhss: 17 +wrrd: rhrh * hrns +lbtd: 7 +dzqm: 9 +zbbw: rmrq + zcfq +vpfc: rfpj * wpnj +vrtd: 4 +qqcf: 2 +dssj: 3 +sthg: vmwp + fhdq +dtzl: wwrz * zdgv +hpng: hjfc * ncwc +bsgl: 3 +tptp: ztch * dlhr +rvvm: 2 +tbhf: 6 +tlcd: 4 +gnvp: cbsf - sfmc +nfjg: rscv * gwpl +sjvr: tzpv + vrsq +fzqc: hbvq * gzfb +lbnw: 5 +jvtc: 5 +mvrf: vhmw / tzqd +dwmd: blvh * dzqm +tvzw: 2 +qhhd: wfpj + dcll +jmsp: 4 +qppt: chjt + hlmh +vqqm: bljf + ddfm +hvvb: vqqm / qtnw +fppz: 20 +cjvm: bjgc + vwzq +qvbg: 10 +twdg: trsl * wclz +bgzv: 5 +mmcd: 8 +chzg: 4 +qqmr: 2 +jlnt: 2 +ztmb: bnqd - vdzc +bmbm: 5 +mwmf: ppcw + mppq +rlcb: 5 +tvbl: 13 +zvvw: nsgt + fvhl +tccq: zcll + hhpn +jrdf: rmtf * bhlm +ztln: gmvn * zcnd +lmdm: 2 +scrs: 3 +mgpd: 4 +sjdg: qzjr * mrzp +nplh: pfzs * zsts +hmdc: 2 +wcwv: zmmc / gfgw +rrfp: vgth + tzrd +wtpn: ddfl / rwww +whfq: jtsq + ddgd +rbwd: 16 +hblf: rqtz * sjbr +pzlm: 7 +czgb: nvft * vnsr +pldc: gnvp + mvsz +wmwn: 3 +nfps: 3 +tlfq: jlfg * plbz +gcwp: 5 +fbwm: 4 +hdwg: 4 +zthn: 2 +gflj: lmsp * hrdh +nftc: 2 +vqpq: 18 +jhqn: 3 +nwhr: 11 +sjdn: 4 +nlsq: htwt * hrcm +cblp: blbn / qsqd +jswm: 2 +dmvn: 2 +wfvp: csdv / vzgl +zgtc: wcvq * vqfb +vrqj: sdgs / fzms +crsn: 9 +bzmf: 5 +zgcs: 5 +pqbm: 2 +jtbd: hgsb + bvtw +jqjv: 2 +gnmv: lbqz * jzqh +zdpv: sjfz + lnbg +gfml: fcln * sfgv +qpbn: 2 +rljm: 1 +qjtl: wcwv + njjs +qmqn: wzgn + ltbf +qddr: rmbm * btht +bvsq: 9 +ftmp: 3 +gqqp: 5 +rzwv: 2 +ghqg: 5 +fbgh: 5 +hjfl: lqdw * dwvn +cwmb: zqrb * nwpc +qqcj: ndwl * lzqs +nfvc: 2 +hljr: 11 +qfrr: gbzv * mhfw +bghl: lzjm * lthd +jgtj: rgnz * zwjm +ndld: 3 +mrmw: 2 +cqqw: jjjb - smqd +wbdp: 5 +hnzl: ctpz + qjtl +sfmc: 4 +crwg: sjjh * jtrn +gglv: 2 +fdtm: 2 +lmmq: qjgp + hjfl +hwbl: 6 +hmtp: hhjj - fdlh +dwvn: 2 +gzds: 2 +hbtv: jzfg * lqzv +hrvm: 2 +cncv: qzct * vflj +wzsb: 5 +wwcr: 4 +wpwj: jspd * wsfj +rbff: 2 +wfbs: tfzf - ztjz +qdjj: 13 +ncdd: 3 +whnd: swwq * bbff +bjph: vggv * wnjs +vfwp: 3 +plqc: nwhr * zjzv +fpwj: 2 +nbqc: 3 +jztc: 7 +dvpd: zfbs * ltnj +zcmq: 3 +mcln: 5 +zsqf: qdzh * jnwh +gpqt: 18 +lzmw: wjdd * zffw +sqrm: 3 +zhwv: tvrb - lzmw +bjvm: 3 +wlmp: 8 +rfqr: 5 +mwsw: sglg * btlh +rqlj: 4 +qmnp: 1 +rdsb: jbfc + cwgq +zdfz: fdvj + swsh +gftw: gmwq - rmfs +rvhf: 2 +thdw: whtg + phvs +bcsw: 14 +nmqw: 5 +jsdt: nfst + bvrc +vpbv: 3 +gvpl: vnst + gscf +tznc: 3 +zssw: sdjd + fghp +hhps: 3 +frrb: 3 +sfcs: grmm + wtjz +chnj: 4 +ztdr: tstv + gtjv +gwzj: cmtl + swtj +jnhp: jvtc * bvnn +mgds: 10 +rhmc: 8 +jmnv: mcps + scsr +nlsl: 2 +pvgq: jmbh * tqzj +glct: 2 +bfrj: 8 +zzms: 2 +jdgc: 5 +tbtm: cmms + mqzj +nthr: 4 +dqhv: svvs * ztdr +lnbg: 12 +tdql: cghc * crwb +zsnh: gmst + chvw +zhnq: 3 +rhfw: pzmp * bnlm +bzmv: nghr * mghd +mtql: grcq + qjll +hsgl: 1 +hvsn: zsdb / qgsh +bnrs: fpwj * svjs +pnbw: njcz * wcvm +zhmq: 18 +dwbv: 5 +brrc: 3 +rpbd: djlc + nlcb +ghqd: csbg - cmlg +ssss: nbvg * tptp +wghg: 8 +chvw: rvhf * qlqc +pzrz: 11 +smqd: 9 +prpq: 2 +cghc: 3 +lncv: pmrf * dwmd +tmbq: dlcs + cjqg +cqns: qdhr + fdzr +hqjw: cmfz + gfml +dwfb: rvdr / nfgt +rhbc: 8 +nsmp: 2 +mfjc: 3 +sqjc: sthg * njzd +llsb: gdgb + jppv +qbsp: 2 +spsb: 2 +mvqp: 19 +pbbs: vfvw + drmh +rsdw: tsnn + hfbf +ppmn: 15 +dszf: wjds - twhh +tzcp: 3 +vsbj: sqph * fgpj +wgrn: rpwt * ghsf +bqlf: 3 +zgqq: tcgc * gbbg +nfql: 3 +mrwq: 4 +nqhd: 16 +mmvg: zrcw / nlfc +thsw: hnzl + wsvf +sbbt: 2 +hfww: 6 +tlzz: 5 +mjpt: 3 +zwsj: 12 +wvpr: mwmf * zwjj +hfpd: trfp + wbbz +wwcw: 3 +lpdz: 5 +hsds: 2 +rsmt: fbpz + fdbv +vsnl: qdtf - qnsp +mjnw: blbb * mrmw +pwgd: hpng * gchf +qdtf: clpd + stdn +sbnq: mrrw + vbfl +fftj: 2 +zpbp: zqtz + rjwh +jbtc: bdwl + dnhm +cfng: wvrd * jfsz +pfnw: scrs * bdlb +cwtp: 4 +trzh: 5 +rngn: 4 +lphp: pvmv + djvg +trrw: tpzn / hdwg +cbqm: wrrd + htcd +zwjj: 3 +mrrw: cfvp + gqlf +hdhz: zqfq * hzrf +drsz: gzds * whrn +rpwt: 4 +fdfr: hphn * cblf +wzsz: vcrr * cpfl +lzvv: 2 +lgdw: 15 +rnfh: 5 +gdsj: cgqs * dmgw +mszm: ctsg * czfh +hrns: 15 +vnst: 8 +bfvz: jtbq * rqdz +dflq: wqtq + vqjq +lvsw: hlgq * cfrb +qzjr: tmbq / nrmj +njfq: 7 +lshc: 5 +wlth: crwg - mdnh +qmdt: 3 +zrmc: 3 +qmhl: 4 +vstl: 3 +cwtm: 2 +wmpp: qqmm * llzv +wnjs: dgqb * rlfr +rqsb: 2 +qcwv: zpqg * cjvm +vfqb: 3 +bhfj: vncb * pldc +fgqf: wwtw * drzc +jsln: 3 +qnsv: 1 +pqjn: wnct + lgdw +grgr: 4 +rrnl: bfrj + llwp +trmw: 3 +cmfz: hcww * zfth +cjvf: zlcr * jrmp +vsql: lgzm * bbbl +gvzt: rpbd * wjqz +qdzh: zlwp + njcr +jjww: 2 +bsnq: nsqd * rsgj +bvlf: 2 +bsrm: lvdd + wjdr +tpvh: 2 +wctr: 5 +wgvm: wzll * dcvz +bplh: 6 +tqhf: pfzr - hrsv +nbll: 14 +srcp: 6 +jppv: sblh * bfpl +nlzq: 20 +fnnd: 1 +rwhs: 2 +jwlw: gffd * snbm +ztcc: jmrp * mhcw +vjlv: rhnp * wwdh +gqhh: jlrf * bzmf +rbgd: 4 +bvlc: 2 +ldqh: 2 +rqts: 3 +brhb: zqjb - sqng +swsh: cqwr / tptt +qbrv: rwwg + jmtb +clbn: 2 +tfwn: ncps + cwsw +nggd: bvlc * mfrj +fvlr: rvlg * nscb +svhr: 3 +rqvt: jdch + vsql +cgtn: mcpf + fjvg +fmsh: 3 +snsm: wghg * rhgv +wtjs: dzhc / qpbn +sglg: 2 +bdqw: mhdh * dqvd +zvrp: 3 +ftrn: 3 +nrdh: 11 +dwrp: mndt + bplr +pclh: jglg * rqlj +llrb: rgmh * jpgb +pvww: 13 +bbmm: 5 +svjs: nrqh + bvbc +fqwm: svmh * sdsm +ghbw: 11 +bgss: 15 +tzlb: 13 +jwls: cppr / sdmn +jrqq: 2 +hphn: bvfg + gfvw +mqms: zznv + dflq +jwwd: 2 +bnqd: ncml * gjbz +bvgg: brrc * lqnw +mbbl: jwdc - tffz +ncjv: 2 +zgzc: 4 +gqls: mpfc * hvts +tjhj: fsdz + sfpr +fsws: rhvr + jqpw +gncz: 3 +swzr: 2 +fdrb: 10 +bbbl: 2 +gvlh: 2 +sdgs: lrml * nsgv +zbzr: 9 +jsgh: 4 +fvgv: 2 +whtg: tjpm + nggc +szsp: 6 +wvrg: cnhq / mszm +qpsl: 5 +bzbr: vbmh * gwzj +tmws: 11 +ddgd: 2 +vvwq: 5 +lbgc: dmvs * cnfm +hjqj: 17 +llcl: 4 +hbvt: svwl - nhhj +sjhc: 2 +mjzj: 2 +mccv: nzcg * gqmz +gzsd: rfmh + gpqt +nrqh: tbqs - qmnc +qlvn: 2 +vzqq: 4 +nvbs: bzfh * bvfv +wrrg: fshf / fvlj +rpcg: mlgn + sslw +jfnb: 1 +lmrf: cptb * fdbc +llqj: 5 +mwfz: trzh * zfjd +mmrf: phgz * ttmh +ddfm: wlst + bbmm +sdlr: 1 +fmlb: rncn * llth +qprd: rbhb * hfww +hsjf: fdrh + gdnv +rhrh: 4 +wdtp: 7 +lhbm: fzqc + mpwv +clzj: 2 +lmrl: dnsf + jblq +jtrn: 2 +ghjb: 2 +pmrm: 17 +pnjw: 2 +nnnb: 4 +wfmj: gcnr + mmvg +jpvf: gzdd * cfln +snls: pwvz + bcht +brcj: 3 +fmzf: 3 +ztqf: 5 +tvmc: 3 +zwnm: vqzh * dwnl +cfwn: 20 +vsbr: cmhm + qjmb +gqtf: hsjf + rwzn +gjbl: 7 +gdgb: nllb - qmsh +smfs: vqgz * tlrl +rnnc: wbdp + rqzs +zmwb: zgtc + stmz +cbbd: 2 +lbpn: 3 +hzrf: jlzn * sqgs +hfcs: hbcs / cvwz +lljz: 4 +gzmr: 3 +rgvc: tqrp - sqjc +hgjw: sgbg * qdvn +bzsm: 2 +crvq: 5 +vdzc: znnl * znfp +wsws: 4 +hnmw: pzdn - sjhc +pszd: 9 +hfdd: lqqh / gpnh +rwww: 7 +dpgg: 2 +bnbr: jvpf + gnmv +czqb: 2 +hqgv: 4 +ttqg: 2 +drzd: jclr * mwsw +cscg: bnqb * dppc +wtmb: fnqr + cvbb +csjp: dmmb * zfst +tfrw: 2 +fnmj: 3 +mghd: 4 +bplr: 13 +pdsw: nfql * gwgw +wncj: 2 +smfc: 2 +bzfh: 5 +hgln: bgzv * lgzn +ddtr: 3 +gpwb: 2 +nrmj: 2 +zpdw: 2 +zlnl: zdps * hwnj +vcwv: 2 +fqbt: 1 +rmtf: 10 +bqmc: thsw + smhn +njpc: 12 +dhwd: gmqc - bvvb +fdrh: fjjw * trdv +ghqw: 2 +nbjr: zdvd - lbhr +pmjz: 7 +zqnh: sdww * wgnw +ndnq: jcqf * bnbr +qtqz: vttq * jhqn +pvcv: 5 +zcnv: 4 +zgsp: lmdm * nbtw +qgjh: fsbj + chsv +qhpm: 2 +vvqz: 13 +nrgn: 5 +tqzj: 8 +lcdc: 3 +znmh: 5 +qjmb: mgqp * bdjp +pmqv: wlrv * wvgj +rwcz: gllq + frjc +cdtj: ngjl - mmwl +gldw: 5 +nbnb: 2 +pvhc: wfnb * qpzp +qmbd: bnnb + wzhv +bqml: 3 +rgwl: dpwc * lpgj +frjc: 6 +ctnl: 3 +zvwq: gflj + whnd +gzjd: 2 +tvpc: 2 +rmsq: 5 +ntrv: csnm * gfdg +crwb: 4 +ffsm: 5 +fbhl: sprj * hcvm +sjfz: 11 +btgg: 2 +jjjm: zzwz - ttrd +lzqs: 3 +ghln: gclh * zfqq +zgfc: bsrm - vdqp +cvbb: hbvt - njpc +tdbr: mnjz + wqzm +jwdc: mtml * ncdd +mhjq: wzgz * qbnb +jnhf: 6 +crsj: cbnq - qbrv +rqvc: bmcf + vsgg +hwlz: cssg + dtjt +mmnm: 4 +srvp: gzzn + qpsl +ggwv: 5 +gbmj: ztss + gwjj +hqvg: 20 +dppc: 2 +vtcf: rwcv * rmsc +qtbq: 18 +zqll: bdpl * gqbg +lllm: dvmr * gfdh +dntv: mjpt * lnbd +mpwv: 4 +wpnj: 2 +zdtq: zqll / rwhs +ngpl: bvqs * jrpq +gzvd: 3 +blbb: 5 +bcbl: gqtf * lpdz +llns: 1 +dpvr: mhsq + cjbd +pprw: wdtp * gjfg +thdg: 7 +sscn: gtch * trjl +gbvz: 3 +csbb: 13 +cqfz: lbgc + wvrg +mfmf: 5 +jfsz: 4 +nqdr: 4 +nqjz: nrjj * jjww +wcvq: 2 +qlws: bjph + mcfw +slpn: mswc + bqnb +cpbz: 2 +hgbb: 7 +mhdt: 3 +csnm: 2 +dtvs: lzfd * tgww +root: pvgq + ngpl +qnmg: dhgn / jsgh +hjdt: jmdz / mfmf +mvsz: wfsp * phdz +hlrj: 4 +fthv: 5 +trfp: vnrn + jjns +wvmj: lmrf + gvzt +dmrn: gglr * sswg +thjf: mmrf * jzll +rzcp: 2 +qjlj: fvgv * dvnp +qmfr: nfjg - swdl +wdll: sbnq + gjsr +ffgm: 2 +crvt: gbcd + zpgv +dlcs: tlch + fhfb +cccf: 8 +lvrz: hfpd * ggcp +zdgv: qjlj / qqmr +vttq: 3 +rmpz: bnsb * zmvt +vnbz: psgl + fqbt +vvtd: jvrd * fvvr +dgjc: 5 +dvnp: phjq + jwls +lfdp: cpdc * nfps +grmm: gcfw - vvwz +wmmm: 13 +nlcb: mlcq * zlsd +jlzn: 2 +zqtz: sndz * nqdd +qtvs: 2 +rzmc: zjvw * rgvp +hqpn: lpls + rrrw +rdhv: tjsv * cwjj +gzts: dtvc + sbnm +nfst: rgwg + hwsh +lqvc: 11 +gmvn: 2 +hwnj: 2 +dpwc: 4 +mhqc: 5 +zgcz: mgpr + wjjg +tnst: 2 +mpfc: 3 +trcs: ccbc * phjv +vhpf: ppmt * plqw +mrvw: wctr * qdhf +cbzc: 4 +wgnw: 3 +jmdz: jdgc * vsph +tdvb: 16 +ctpz: pdnp * stjn +tjdw: zvvw + whzj +wswt: 2 +jqgl: tqsw + zlbl +sbvs: 2 +dpnw: 3 +clnq: 2 +sqls: 3 +drmh: pbcj * jqjv +mntr: qmhl * ggsq +fsrp: 2 +nnhz: ngqm * stbv +zzcv: 2 +ppcw: 2 +gqmz: gnbb + pbbj +bjsp: 7 +tcrn: 3 +bznr: 2 +gmpd: 3 +bcdt: 4 +mcpf: 4 +rlst: hbtv * zrfs +sfgv: gzmr * vtbf +hdsr: 17 +vpqr: 3 +zjzv: 3 +bqrn: 2 +tgmp: 4 +dnpq: 3 +fbch: 10 +bqlh: 2 +fqvv: zwsj + hvsr +cmhd: 7 +lhwj: wzwd * wrmg +vsbg: 5 +fbwr: njng * hmpl +wcvm: 4 +sgcg: tpgm + gznt +qzfw: 11 +jmrp: 2 +vbqg: 2 +bmcf: hfmc * gzzl +njzd: qqwh * fmzf +szqv: 2 +pzrl: 4 +lclp: jfdz + hvsn +cccj: 9 +dzhc: ncrq * dlml +jpsm: 2 +tbwg: wrtq * wbqm +vhqn: 2 +rgnz: 3 +pqdj: lntp * pzql +wcnh: 7 +rqmp: 2 +wbqm: tzcp * ndcz +scgl: 5 +jnwh: 5 +qtgs: zpth * qbfb +nfcr: 4 +lrhq: gqls * rqdv +zzrw: 6 +hdlp: bspl * ftlm +wrrv: rtnd + trcs +ptdv: grgr + zvlv +qmgs: 2 +wvww: mcch + cqdr +jmmg: 2 +fdlh: gzvd * zgdw +tmhd: 17 +hjcs: 18 +rqzs: sbmb + nsnn +svdv: mphp / rlcb +hqfd: bcjm + pclh +gqbg: 2 +nfgt: rcbb + rljm +lppq: 3 +rvrl: 3 +gglr: 3 +bpjr: 5 +tzlj: 6 +tnjv: 5 +wfsw: 12 +svjq: ctfp * sjtd +zlnd: 15 +gmlr: dsvn * vfhb +mwmr: 4 +cbsf: clbn + pprw +plmn: 12 +bnhz: 2 +hjwm: 4 +bdnj: sqls * nbqc +rzcv: swlb / lvll +nqct: 2 +rrcf: gndr + pltr +whrn: 12 +gdnv: 1 +sqcn: 5 +cmms: 6 +tddg: fmsh * bpjr +hncd: tvvw + hrtb +fdzr: 9 +wrmg: mddt - qtmd +rhnp: wthh * zmmd +ttzg: ghqw * cstn +zbtw: 16 +vsgg: 8 +rhgj: 8 +ssrw: 1 +vsft: tnpn * qnmg +jzll: 2 +pgsl: hcsd + bsgq +zmgr: 4 +hvtg: 1 +qjpd: fzfb * bcwh +lnpw: dldb + vwsc +cdvf: mwnw * jvgg +jszl: wwgn + hgwh +bnqb: pdsw + wfqw +tfpd: czqb * qdjj +ctfp: qnsl + mprv +njvp: 15 +psvj: ghqd * nrjr +rgmh: 2 +dzwm: gzsd + tfbw +gbsd: 15 +nhhj: dgjc * ngbv +crbh: qphw * rmpz +jlqp: gqcg + dphf +vqjq: bwbm * qdnf +zhcl: trbt * czsq +tlrl: tqqf * zcvs +gqsr: hfzh + qgbr +vdtd: bjdf - dfdl +pbbj: hdsc + mdrv +rdnq: fpqn + czvf +mqdt: sfcz * mhsb +snbm: tsnq + rssq +whwd: vvqz + fnfh +dtlm: 2 +hnlv: 2 +fgpj: 2 +tcjv: 2 +pctt: 5 +vbtq: phgd - scgl +mwhv: fbhl - fnmj +gnbb: 8 +qgqc: 6 +clfg: dcfb * ghln +tgww: 2 +rzzr: 2 +nrjr: nbsg + vpbv +gjbz: fsbs * bcsw +vwmh: 2 +wtfm: 3 +wfqb: 3 +fflj: rgnm + rjfz +zcvj: 2 +bvtw: 16 +fzdq: 5 +ncwm: 5 +stdn: npgh - crbj +tvrb: dtpd * dmvw +bsgq: dsfs * rnfc +nqrb: 2 +tpnz: vfwt * gmlr +qznm: 7 +cmbw: 5 +cvwz: 2 +frbj: 2 +hvtm: ssfb * nhcw +wbrr: 5 +ndmr: 2 +fggw: 2 +tnpn: wdvq + hvtg +sdmn: 3 +lzpg: 13 +fcll: vhqn * vhtw +zrcw: whfq + vqqf +cpjc: zgcs + fbfl +gwgw: 2 +cmpc: 2 +jtsq: 5 +fvhl: cpnj / rzcp +jwjl: fbch * qhpm +jcrb: 2 +tgfd: 3 +fzwn: hhfq * bntc +gzlj: 2 +wtjz: zgmp * fbbb +lmhg: 5 +cgqs: 8 +cnmf: 4 +wrwv: 2 +ncbd: lwrq * gpff +pbsm: ljjv + qqcf +fggf: gssz + cncv +dwzn: gldw * rslz +qmns: tvpc * sqrm +wmbm: fgfp + plqg +bwdr: cddf + mvrf +tpgq: 5 +tfnl: 2 +mmsg: 2 +ltnw: zcvj * pmjz +vggd: zhfm + gvbd +bspl: qzmg + mggh +qphw: 8 +mphp: tgtb * zvdz +wwtw: bpmw + wglj +blbn: nqhz * wzrc +vhpc: 3 +hdsj: 4 +nqnt: smfs / pgwf +gfvw: 7 +dmzm: qgjh * rvrl +znnl: 3 +lvll: 2 +jpqm: 2 +cmtl: ntlf * vcwv +rjsf: 2 +tlch: ctvb * rpcg +wrqs: rngl + smsq +qdhr: 2 +njzq: qddf * hmzr +mmfb: 3 +grcq: qlmg * vthq +zzjd: 1 +zccl: 8 +nglj: mrrq / mvml +bvzq: 7 +nflj: 2 +pntf: 13 +vqjc: dwrp + qpsf +hwzj: 2 +cssg: 1 +nqdd: 2 +sfpr: 4 +fsmz: sjqw * hhbc +mbnw: 3 +trzc: 3 +rplz: 3 +zjwg: 5 +ddcf: zvwq + llsb +vgcf: pzfb + ssrw +sjtd: 13 +jwhj: 19 +hznb: 17 +rjnd: fvlr + hwlz +zpgv: 3 +cfvp: dmrn + gtzc +wrml: 4 +lhgs: 18 +fplt: 4 +jblq: 20 +gdpf: rcsl * pzrz +zhfm: 13 +pltr: 3 +gbpn: hwwf + gnfw +jwpn: 2 +jqfn: 8 +pjzz: 2 +hwsh: hnmm * rsjs +gbzv: jwqt * zdpv +nzcg: 5 +bljf: llns + qrmr +rnfc: qslr / zgmm +gndw: wzsz + llwg +rngq: 12 +lghr: fnrr * tglj +fgjp: 4 +blbz: lpsj + mffw +ttdg: lsdp * rzwv +frtd: ftwc * zrpf +gdgq: vcnl * fdtm +nmbn: hzpl / qbsp +psmj: wtfd - bnrs +nbvg: 3 +vvwm: 17 +cmhm: swrr * lmrl +vzfr: gscz + whrq +pwlb: hljr * bqrn +hlnv: zqmm - ssss +dfmj: wbtb * fsrp +ssmg: hjdt * nqdr +hhwv: 3 +lmpd: 2 +wzgn: lfrv / wjsj +tjct: 2 +hrdh: dtzl / brhg +nqht: trzr * tdvb +thmr: 13 +vslb: 3 +mgfj: 2 +vwsc: tlfq / vfpm +nhwc: glgf * pllt +gtvt: cmbw * gcdv +cttt: vwhl + lzsg +nrtd: 2 +tmcg: zcmq + hqpn +czvf: vvwm * hggh +tjfc: 8 +wlnv: 5 +gpff: jvgr + htmt +djmm: nflq * tgmp +wrlz: 13 +qwfj: 3 +trdv: 2 +hrpj: jrqr / jwbw +gtcs: 4 +lqnw: 11 +vsph: llnn * vbqg +sqng: thjf + wmpp +vggv: dqhv + tjdw +wfqw: 1 +jlfg: 2 +tctz: 4 +trjl: gncz * cwtm +ngrj: rsdw + rngq +czfh: 2 +gjfg: 3 +tfpm: zlnl + vtpj +dmgw: 3 +tnfh: rggf * qwfj +fqbd: 2 +mgnf: 2 +wzll: 3 +qlcr: 2 +qcqv: 2 +jglg: 2 +rctj: 4 +zmvt: 2 +gchj: vvdq * cttt +dbdd: wwqj * pjpc +jmgg: 3 +qgbr: 5 +mswc: fppz * vrqj +pbpt: tvbl * psrj +phjq: mntr / pjzz +lcpr: qnsc / jbbz +rhbr: bvgg + mqdt +fhzs: rsqs * tdvz +hgsb: vntl + mjrw +lrbq: dpvr + twzp +wjsj: 4 +wbbh: 14 +mbgr: nnnb * jmsp +lqdl: 3 +jshj: 1 +tjcf: lqdm * pjfb +hwgw: jcrb * pqjn +qdvn: 2 +rhgv: 16 +lsdw: 2 +wrtz: 1 +sdsm: 3 +gwsc: wczc * ggts +jfvm: rqds + rjmh +swlc: 3 +tpzn: cblq * ndpf +mplr: wfbs + lzmh +dstz: cdrv + vsbj +fmjq: dmrb * cmpc +gbbg: 5 +sdjd: qqpv + gcfc +btqm: 3 +vwpd: 7 +vpqt: 7 +zdvd: 9 +gclh: gdgq + pdsp +rqds: 1 +ndmn: nhjc + mwhv +hcww: 3 +fqnb: 5 +wtmh: 9 +gmwq: zvbb * lhlv +hpbc: zltn * zjzt +fhdq: 16 +dtzt: 2 +lcdl: ccbl + mbgr +ctvj: 2 +qcwf: gfcz - tvfs +wvgj: pcvl * jnhp +nhvq: 1 +sndz: hpdf / zfnq +qbnb: 3 +nqrs: 3 +dlsm: mmzm * dbdz +bfpl: 11 +rsjs: 2 +tjpm: 4 +cgqq: 2 +jrpq: ndnq * cbsb +gmhw: jqmz * cfbw +svwl: trzc * drqd +dwtg: 2 +vdzw: mhbc * fzfv +ptff: 2 +pvwf: 20 +hmwm: ztcc + ngqv +sdgv: 19 +zfjd: 5 +bnjj: vbsz * tmjn +rgvp: sdfb - lrhq +rwcv: 3 +qwgw: 4 +bffr: zgcz * jdfg +wmmh: bsnq - fnjt +spqr: 2 +fvlc: 3 +stns: vsnl + nvrq +jfwh: mmnm + qvpv +tnpp: dhfh + pvcv +tsjn: 3 +gzdf: humn - rjrl +ccjn: 7 +jnct: 6 +stbv: 3 +gbtl: csgw * zmnq +rnql: qhhd / chzg +qgnw: 2 +qpsf: 3 +mcps: wfvp * cbgh +hpqq: 5 +jzqh: hrpj + gndw +ztjz: 2 +mlpj: lbtd * sjzb +tmnt: 2 +jrvf: btvq + wrrg +hbvq: tnzs + sbvh +zrfs: 10 +nrpd: qchm * nqgg +shhw: 5 +pbbf: mnsf * lpbm +mfrj: vswl / tnst +rjvh: zsnh * tfwn +ncrq: 2 +fjqb: gwws / wrml +lswq: 3 +dtpp: rhgj * cgqq +tvfs: 4 +jhlq: 2 +rjwh: sqgn / wnzt +dvgt: fwwc + tfpd +lrqf: 2 +snvm: 10 +fqff: jshh + qfrr +tcmg: 1 +zpqg: 2 +gcrz: tjdp + gfjh +rncn: 5 +pscd: zgqq + gtrh +btjr: pnpr * fvsn +zjmn: 14 +fmwt: bhff * lpfr +wjdd: swvf + brgm +cbtr: 5 +lbhr: 2 +jjsq: vpfc * tdql +thpb: jqbh * wfmj +rrzr: 5 +brgm: 1 +swtj: hlnv - qrmd +zncr: 5 +smdw: 4 +cwwr: sfsb * fbgh +rgwg: 9 +rpvt: 3 +ngbv: 5 +chfh: wtmh * mcbq +ztcm: mgnf * wsgl +gflc: 8 +lqdm: 2 +bhfv: 4 +jsll: rhdb + cwth +zfth: 3 +qvpv: 3 +fvdr: 5 +vddj: 4 +sggp: 5 +bqtc: qmdt * qjwh +smhn: zhwv / dplm +qwtl: cdtj - bnws +ncmw: 2 +phgz: whwd / btgg +bgmn: 4 +jbsl: sqwq * sqsw +wlst: 2 +wsfj: 3 +vwbw: 5 +ftlm: 5 +fdvj: 2 +bnws: nlhn + vqmw +mtps: 2 +lpfs: mwtv * cbzc +nqdc: tnpp + lvsz +nbtw: 3 +zmnq: 9 +bvfg: rfmt * glbr +crfg: nrtd * zdtr +mcfw: qdvv * wdll +nsgt: qprd + bwqw +plqg: 5 +qrmd: 2 +dvtt: 4 +dmvw: 7 +jmnr: 5 +rlvm: 7 +fhnv: 6 +dscg: fvpg + sgfw +dgcz: vddj * tclt +vjcs: 7 +fzfv: 8 +hwmn: jbcl / ctnl +wlbd: 4 +mffw: fvdr * tvjl +zllc: zncr * fsmz +vzgp: 2 +vvdq: mtdq * wsws +njcr: qznm + jztc +gfzg: rmhr + lhzl +jcqf: 2 +wzjw: 4 +vntl: fftj * djzw +plbz: vdtd + fgqf +lrzp: 2 +gnhr: mzpv * tczs +rmhr: 16 +lvfd: 2 +rwzn: tgzd * rbwd +mtmc: 8 +tlnr: 5 +fmgs: 2 +wzgz: 9 +prwg: 5 +fsbs: ldcq + mpgl +hhbc: 5 +wzwd: ssqr + swzr +hgct: 5 +mdnh: cqqw - jlnt +csql: 6 +jlpn: nwmp * vpqr +twhh: tpnz + czgb +vcnl: 3 +ntlf: 13 +vpzb: hsgl + plmn +wsvf: prlg + cszg +wvtr: 2 +vjpq: wwcr * bdjm +htcd: 1 +tzvf: 17 +zqmm: rgrc + frtd +jvbf: 2 +lnbt: 3 +vgwc: 3 +rjmh: 12 +bddw: vgcf * llqj +dnnl: 4 +tllb: 3 +szqn: nqjz * tttp +lnbd: 5 +fzvv: 9 +bjth: zqzt * hnph +tptt: qggp + smdw +gwws: ntfr * ssgt +cfbw: lhqd * zmwb +tclt: tmhz / qvrd +cmlp: lcth / pnjw +fdsb: 2 +hqsm: 2 +gfrs: 2 +jvgg: 2 +qjgf: 5 +ndwl: 3 +nzfw: 4 +nblb: pdqj / nrdh +vnrn: wgtc * vsng +sgbg: mbbl / dpwn +jqmz: 2 +gwwj: fmlb * bqmc +fbdr: spvq * flcb +qlhw: 19 +fmhd: zvfh + wwcw +zzdq: 2 +vpfb: 3 +mzlh: 3 +hrdn: rlzn + pnbw +zpvq: nplh + fgjp +jmjw: fnnd + tbtm +jprp: rcpj * lwgl +frmc: 3 +chvv: 17 +sdfb: lhwj / dtbt +rssq: 4 +vjtd: 2 +zvbb: ljwf + msmb +cqdr: 19 +lqdw: fftw + frmc +lthd: 2 +rfzl: 6 +mggh: ptnb * zrmc +qmpt: 3 +qlln: qhcg * qmfr +phdz: 2 +mrzp: qmbd + gmlt +qmsh: tzsp * vhpc +dlml: nsrb + rfcg +zrlb: hrvm + gjrz +ssgt: llrb / flhr +cbrz: qlvn * gcrz +dzhv: jwws + bhcg +mmzm: tjhj * rfqr +qbfb: 2 +tvvw: 10 +glcv: 3 +wczc: 2 +nphw: 4 +stwd: jzdj * fqff +sttc: vqjj + jtbd +zzzf: gngh / vrvh +vqjj: jwpn * fmhl +fvlj: 2 +qhcg: 2 +mjrw: 1 +qblw: 2 +btwz: nnjj / szqv +gcnr: 17 +zsts: 2 +fjtr: bhfj / ndld +zqzt: gwfd * zvws +tjsv: hncd + pwlb +mgpr: cccj * hfcs +gftf: wmmh + vvhz +swfc: hlwg + bzjf +zqfq: 2 +fszv: qmqn * tcjv +vdqp: 4 +lgzn: pvwf + gdzm +sdzv: 2 +sblh: 2 +qtsp: 3 +ddfl: nrpd - ztnd +nvhl: 2 +mlpr: jppf + nrmv +bbfp: 18 +jbbz: 5 +rdjj: rctj * gqrl +jzfg: tzlj + sjff +ctts: 6 +btvq: rmzr * mbnw +dplm: 11 +pcvl: 5 +whrq: 4 +mncl: 2 +tzrd: 1 +dptn: 2 +fjpp: 17 +thpm: wsgn + mgll +tmpn: 2 +znps: 9 +sbnm: bqpl * szqn +vzgl: 2 +dqvd: fwrs * mlpr +hdqs: lczt / ztvv +wplr: 3 +njjj: 2 +bdpl: wfff + cdrd +lzsg: 4 +stjn: pscd / jvzt +vfwt: 7 +jfrn: 1 +mwnr: lqdl * rjvh +gscf: dnvp / zlhh +ztnt: hlrj + wdmq +sqph: wfsw + trmw +rmrq: bnhz * qvbg +gqlf: tzlb * zltf +zgdw: 3 +wshj: vqpd * ddtv +wsgn: 11 +vqhl: fjzf * mhdt +hsjp: 2 +zcfq: 9 +tmjn: frgt * lbnw +mrdv: zwzm + nlsq +hztp: nglj + jbsl +bnnb: fnsd * mpzl +crbj: 3 +lpfr: 3 +vbmh: 2 +bwqw: wrrv * dtlm +fdbc: 3 +nscb: 5 +nvrq: 2 +hstq: jhlq + fggf +tzpv: zhmq + bgss +qpzp: 2 +vvhz: 13 +gwpl: 2 +ctfr: ggwv + srcp +bbsp: 5 +vtpj: 3 +sqsw: fmjq / gglv +dpmb: 3 +nsqd: vqpq + pcfs +tfgm: 3 +mppq: tmvj - hpqq +hrsv: 3 +lntq: 3 +wqtq: zzmq * mbjc +shbc: zsfc + gmhw +fvvr: 2 +crwc: 4 +lrml: 3 +dzzh: hlcg + nrvn +zltf: zpvq + wwvq +hfnn: hdjf + dzwm +mnjz: 5 +jlrf: jvpb + gbtl +llwp: hjcs + qmnp +wlrv: bwdh + zzzf +ljwf: hjqj + glct +rhqm: njvp + wmwb +lmsp: 2 +jvpf: pctt * tqwq +hflz: 2 +flcb: hbtj * thmr +rprf: 8 +vvvr: gfpz * chbt +czlj: 17 +ppmt: 4 +jdfg: 2 +qsrq: flzv + mbpc +ccbc: 2 +fzfb: 5 +hhjj: jbtc + cwwr +gscz: pmvs / tvzw +prlg: crbh / njdw +srqt: fhzs + sjdg +jppf: pqbm * vpqd +dqqz: 4 +jpcr: bzmv + cqfz +qlqc: cnfz * hjzw +mhsb: 2 +lbqz: 2 +ggts: fjlj + lhss +dldb: 3 +fwvb: lfdm + nscf +jlqv: 4 +wdmq: 2 +btlh: 7 +wclz: whvz - njpm +tnzs: wrwv * jnhf +hfmc: jsln * rjsf +vbsz: hgtn + cfng +rmfh: jmmg * cvcn +tsnn: qhmb * nvbs +lczt: tfrw * qlln +cmlg: 12 +rhdb: sdgv * dfmq +nrmv: 7 +qggp: 3 +fshf: mwnr + gzdf +rgnm: 5 +dwjp: vwmh * tctz +nhgn: hvtm - bcbl +pjnl: 3 +spwv: vsbr + nhjn +jmtb: bnlz + bwdr +jdwj: zrlb * lnbt +dpjf: 5 +dmrb: vqhl / jpnh +mtdq: hgct + qwmd +wfsp: 5 +zlwp: swfc + bbfp +qdvv: dtmj + lhbm +shzz: sdlr + tprb +qdhf: szrd * gbqg +gqdf: rsmt + lmbq +sbvh: 1 +jwrt: nvhl * lntq +tdfw: 2 +rjml: znps - wvtr +gllq: 1 +dcfb: 13 +bjgc: jwpw * lnwc +bjdf: qmns * ptbq +czsq: 11 +hzpl: pzlm * mrcf +cwth: gqsr + hznb +mghq: pjcg * whqh +njpm: sfcs * bbsp +hlmh: gdcb * vstl +qtnw: 3 +pztj: mvqp * pjnl +fjjm: psmj / bdnj +njdw: 6 +phtb: 4 +zfnq: 2 +gfgw: 2 +clvm: hnmw * tpvl +nsrb: fcll - nphw +zfst: 3 +cwjf: 3 +gjbt: 2 +lwsm: 5 +mstv: 5 +pqwc: 5 +whts: znhb * jmgg +hfcf: cvrz - wttw +pmrp: mctc + ttvd +ddsl: 4 +hgbl: qmgs * nmqw +rpwg: dpgg * wtjs +nlqd: 5 +ptnb: 5 +wncw: 2 +wvcp: 19 +vswl: 12 +jssf: 5 +rfmt: 4 +vtbf: 3 +mndt: qcwv / qbnr +vscs: snls * qgzd +jpnh: 3 +ldcq: slpn - jlqp +hcwp: ptdv * scmm +zthh: qtqz + tcmg +mdrv: vgwc + zqnh +rhvr: 4 +fslt: lbtc + wgtd +fjzf: wplr + nlzq +flhr: 2 +hrfd: mjnw + ttdg +zwjm: 2 +ztvv: 2 +ndwz: mwbz + mfbv +ttcb: 2 +zfqq: 2 +jtzg: 2 +wwqj: 11 +vtgh: qtgs - lvsw +wnfb: 2 +vwhl: qtvt * qqcj +rcbs: bvsq - brcj +mbsc: thdf * sbhc +sbmb: dpmb * tjfc +djlc: zpdw * phqh +smsl: svjc - fmwt +mgll: 2 +mbpc: nqrs + cwtp +ggcp: 5 +ccsl: 4 +qjwh: 3 +lgzm: 13 +tzqd: 5 +bwdh: nlqd * tlcd +zqjb: gzts / nrgn +wmnq: 2 +jshh: wspf * jfwh +hhfq: 5 +qmtf: rdsb * chvv +jhdw: rdjj + hrdn +dnsf: 17 +btzd: 8 +bvvb: 1 +lpsj: msff - bqnn +cfpf: 2 +bvnn: 3 +cmtc: ppmn + jrlb +ctvb: wncj * ctts +twzc: 2 +bhcg: 9 +pjfb: hpbc + wjrb +gcfw: htlw * ztdj +cblf: ltnw / qlcr +mzpv: 3 +nzgc: 16 +llwg: 7 +njng: qtsp + tllb +wfnb: gbmj + bwnc +llrg: rgjb * spqr +pdsp: 2 +sjff: qlhw + wmsz +srtd: 2 +psrj: 2 +dnvp: rqqz * vjtd +zlhh: 2 +htwt: 9 +lfrv: qzss * jsll +prtc: 2 +cspz: 7 +fchq: mdbh * nflj +cwvg: mgds * gtdn +mrcf: 2 +wrwl: vrqq + drhs +jwpw: 2 +sslw: 1 +mpqq: 2 +rsqs: fjmq + wfwl +dsvn: 11 +ldch: 3 +gcps: jsdt * bbwd +phbm: 4 +gpbq: 8 +phvs: cmtc * wmjt +ndpf: 12 +zhhw: 2 +vcct: 2 +lqqh: gbpn + vzfr +bvfv: 3 +bbfv: ztcm * dvtt +dppn: 7 +znhb: 3 +jcrp: mpqq * hswr +htlw: 3 +zlcr: 3 +zdps: lrzp + chhz +vvwz: 17 +rfmh: pwwh + tfpm +bqpl: 17 +mdbh: 3 +rqdv: 3 +gssb: scmg + qfgt +vqpd: 2 +tpvl: 3 +dmmb: nftp + vlpd +ltbf: fwrh + dvpd +jtsn: ztmb / jphw +lpgj: 4 +rbhb: rfgs + mfjc +jjjb: zjmn + mrgd +jwbw: 4 +hdjf: cmhd * cdvc +vhmw: rrzr * vrpf +lmbq: 3 +mddt: 14 +sqgs: bffr / tmnt +vmqp: sdtg + svdv +qsqd: 8 +pmrf: lclq * rwcz +dhfh: 8 +lfdm: nbnb * qfsf +zqrb: 5 +mhfw: 5 +dfmq: rqmp * wlbj +jmpq: 19 +tstv: hqzh * pdfb +nllb: nmbn * lswq +chjt: cmpd * crvt +lbgd: 15 +npmb: wvpr / qvnf +tgrl: 10 +glgf: sscn / zzdq +mppp: mbpl * gndl +bwbm: bfqr * lcdc +qddf: 2 +psgl: jvhl * bmbm +hnmm: 11 +qjcf: 3 +ngqv: gqdf + wswt +cdrd: zctj + lphp +cjbd: ctvj * hhwv +cnhq: bvdc * mtmc +fphb: 8 +fjmq: znmh * vrjr +hfbf: gjbl * dwbv +rgrc: 13 +qhmb: 3 +jzgg: hfnn / nsmp +nwdq: mglt - gmmb +jdzt: 1 +llth: 3 +cvlv: 2 +qdnf: 3 +vmjm: bgww * vpqt +glbr: 18 +rggf: qvbz + tpgq +glmv: schf * zspp +wtnh: 8 +bhff: 7 +mhcw: gqqp * zjwg +swlb: qtbq * zzrw +wfwl: nzwf * mznn +gpll: 1 +zpth: vhgz + zwnm +hvsr: jfvm * pqwc +vqmw: rzcv + wtmb +fsdz: 3 +mhdh: 11 +wjds: tpvh * mrdv +mmwl: tjcf / shvb +pdhv: pgsl * clvm +dvql: 2 +vqzh: 3 +gcdv: 2 +wvrd: 2 +znfp: nblb - lvsv +qnsl: vqjc + fwvb +dlhr: 4 +rnfj: 5 +svvs: 5 +dwnl: qtsm + gtpl +mcch: twdg + gchj +slmj: zfzn + bnjj +hvbz: 5 +njcz: 2 +jjjv: crvq + phtb +dgqb: 4 +mrrq: pqdj + pflr +zjps: spsb * jmpq +qtvt: 3 +mprv: drzd + wmct +lntp: 11 +gznt: dszf / tznc +jqsv: vzgp * lclp +cbgh: 4 +hrcm: rhqr * bqlh +gtdn: 4 +gpnh: 2 +sdtg: 2 +hbqh: 8 +hcsd: qcqv * rnfj +zjpn: mzlh * wtnh +gbcd: 4 +twzp: lnpw / rqsb +gvbd: lljz * hqgv +rqqz: dppn + ccsl +rvlg: sjvr / ttqg +sqpn: fjjm + vqnn +rrhc: njfq * bhfv +lhlv: 2 +jnjz: wvcp + lrbq +cddf: gftw / twfh +zgmp: 2 +rgjz: 9 +mwtv: 7 +fgbw: 3 +tvjl: 15 +bdjm: 2 +wzrc: crwc * gjbt +cjqw: clfg + thdw +stmz: 5 +zznv: rrfp + dvgt +hqzh: jmnv - jcrp +wzhv: 19 +hczj: 2 +gjrz: gssb + lhgs +fnqr: ncmw * jsfc +nggc: cjvf + bfvz +hswr: 11 +gfjh: dpjf * zvrp +qrrn: 2 +nflq: dczb * hllj +rqdz: mlpj + vjlv +scfh: 5 +gqrl: 2 +qdbr: 3 +ljjv: tqhf + lzvv +qqwh: 11 +vqnn: mqbq - gtvt +rbvh: 2 +mctc: rgwl + zwlh +wglj: qvbp * tsjn +pvfm: 4 +qchm: qddr / nqct +ncps: 6 +bnhf: qcwf * lbpn +lbjj: mjzj * cdhn +msmb: jgtj * rprf +jbcl: jdwj * qmpt +wfch: lmmq + ffsc +mlgn: 6 +nshw: tcrn * vzqq +zjzt: 3 +szrr: 14 +jpgb: 11 +tffz: 2 +wbtb: 4 +qjgp: 2 +fghp: 20 +nhcw: gflc * vjpq +lvtn: 7 +zwdc: fbwm * jwwd +gdcb: ptzt * rmsq +cmzz: sgwn + fdfr +rfgs: hlcq * pjvs +hfmw: 3 +lhzl: lrqf * cvmz +pzql: 2 +fnsd: 3 +fbpz: 4 +gtjv: bdqw / rbff +zsfc: mtbl * zhnq +gmqc: 8 +cblq: 7 +wsgj: dptn * lppq +mwjb: zlnd + zllc +nphf: rdnq + vfwc +nfdt: ndmr * tmhd +vgcz: tpnp + pvqp +qslr: 14 +phgd: vjcs + jjjv +qlmg: 2 +bhth: 5 +bmnl: tlnr + zwrd +hnph: 3 +hmzr: 3 +tzsp: 2 +dhgn: jjjm * ldqh +tfzf: bhth * jnzd +lclq: 5 +pllp: 3 +cmpd: 3 +wmjt: 2 +ctsg: 3 +bdns: jpvf + drbh +sqgn: gwwj - hqsd +tdvz: 2 +pvqp: 10 +wmsz: 4 +mgqp: 10 +cgfw: 2 +zzmq: 2 +nbsg: 4 +szrd: 2 +fbfl: 1 +gfdh: jjbb / crjv +ddtv: 11 +ngjl: clnq * fzvf +crjv: 2 +ztqd: 2 +wbbz: pmqv * svjq +ssqr: hqjw / zthn +bvqs: btwz * fqbd +drnn: ldch * hnbq +zqmf: 3 +qswp: 4 +pfzr: lvfd * wcnh +gtzc: fqws * lmhg +lnbh: rshw * rqpn +bzjf: dpnw * hwbl +tsnq: hcwp + qrrn +rtwj: ncvj + cjhz +gzdd: 7 +cbnq: dftp * sqpn +fwwc: 3 +zvfh: 7 +rgfb: rplz * lzpg +gdtc: 2 +brlz: 7 +rjfz: ddtr * frbj +jdch: 3 +gfpz: 3 +drhs: zgfc * rgjz +svmh: rssg / frrb +cszg: 9 +dtmj: 16 +pjvs: 3 +vmwp: 2 +wfff: pwgd / mzrl +pggq: btzd + wrlz +vqfb: 6 +whqh: 2 +dsfs: 4 +rqwl: sjdn * fggw +dhfw: rjml * hfgs +bvrc: 12 +nscf: hflz * cscg +pjpc: 3 +gmsh: 19 +wjqz: 2 +fsfz: bqtc + cwvg +nwmp: 19 +qqmm: 3 +vwzg: wbrr * qzfw +gzfb: 2 +dmvs: 13 +dphf: rzmc * rjnd +bqnb: vdzw * cmzz +ggsq: bdns + hgbl +bfls: bsgl * ncwm +gnfw: hgbb + tzvf +jlpw: 1 +btht: 2 +ztss: zjpn * drsz +dvmr: 2 +cnfm: shhw + mncl +bntc: pwfn - zbjb +lzjm: 6 +tprb: dfmd + pbpt +pbsf: 4 +ptql: 2 +drzc: 2 +rcpj: gqnm + ffgm +ftwc: 4 +jwws: 2 +cwgq: bjvm * hfmw +fdwq: dnpq * wsgj +frfh: 1 +gndl: 5 +zfbs: 3 +fvpg: 13 +ztdj: hdqs / qgfs +vfwc: 9 +chsg: lqvc + ghjb +jjns: mwjb * mrzs +pdnp: pntf + tvmc +msff: dmzm - qzgn +flzv: zbtw + jdzt +sdqm: 14 +jtbq: 2 +rshw: 4 +lfnq: sbbt * wmmm +swdl: 9 +ttvd: 2 +qtmd: 4 +mfbv: fthr + qjnr +twfh: 3 +sswg: qwtl + vhpt +zfzn: jrdf + vsft +tttp: 4 +hqsd: fbwr * npmb +tqsw: ztqd * ngrj +rngl: zthh * rngn +zrpf: fndf + hqfd +pmmg: nfdt / ttcb +lcpf: lslm + ndmn +dvtz: 3 +jqjs: rqwl + rbzd +tbqs: bzbr * hsjp +dtbt: 2 +tgtb: vvtd + srvp +pjrs: 2 +zgmm: 2 +dftp: fzvv * zmgr +sqwq: gnhr + nqhd +tgzd: 2 +bzlr: zdfz * fjpp +jrlb: hstq + rpmd +wttw: wbbh * sddl +lzfd: 4 +qfsf: 11 +ngqm: hjwm + lfdp +glpv: jzgg / tmpn +ftsz: hddg * dwjp +vbfl: spwv + rtwj +dwrn: cbrz / nvjd +qzct: jfnb + mppp +gqcg: bzlr * tccq +rstc: wffl * jmjw +tmnc: lsdw * dssj +qzwf: wgrn + pggq +cvmz: cpbz * fflj +mhsq: tmws + jwrt +hgtn: dntv + rqvc +sgfw: zbzr + mmsg +rmsc: rhfw / wncw +hfzh: 11 +zhrd: gdtc * flzc +fnrr: 2 +cbsb: lqtd + dzzh +bwnc: nzfw * sgcg +nghr: pmmg * bgmn +jphw: 2 +whzj: jqsv + lncv +lmjb: 7 +fnfh: srgz * cqns +mlcq: 7 +mpzl: nbll + ddqd +lwgl: 3 +bnsb: hqsm * wgvm +phjv: 5 +zzwz: lcpf / zhhw +flzc: hbrd / jpsm +vlpd: tlzz * pmrm +cptb: thpb / hsds +ldng: 3 +hrtb: 15 +qzmg: 2 +rlfr: 12 +nrjj: 4 +hmpl: 4 +wqzm: rpvt * vwpd +mcbq: 2 +gchf: jfrn + hvvb +zcnd: rrnl - phbm +gwfd: 3 +drqd: vggp * jtzg +zzqd: 17 +mdst: stns - cfpf +gdzm: 12 +vqqf: dzhv + csql +ccbz: 13 +gfrp: 18 +jqpw: 3 +bbff: rnfh + gdsj +tfbw: zqmf * srtd +dtmp: fgbw * hztp +bdqz: ztnt + fqnb +zmvv: 2 +fhfb: jqgl / gtcs +hbrd: vggd * dtzt +vfpm: 2 +chhz: 5 +sdww: scfh + jswm +cvrz: fslt / zmvv +ghtz: 5 +hllj: 2 +qjll: 2 +vrpf: shzz + szrr +dfmd: 2 +wfpj: fplt * ghqg +ddqd: vfwp + nggd +fwhq: gplq / hwzj +bbwd: 5 +gzzn: cpjc * cgfw +gwjj: vhpf * sqvd +ncvj: lscj * zbtn +csgw: 2 +wlqf: 4 +pbcj: 5 +djzw: 3 +wwvq: nwdq + gtln +clpd: thdg * ptff +cfln: 3 +pvmv: gmpd * jnjz +mbpl: 2 +qqpv: 5 +pzfb: 6 +svjc: trrw + cnqp +pdqj: vscs + vwzg +vwzq: 1 +jqbh: 6 +sfsb: 5 +mqbq: cwmb / lshc +humn: 1163 +bqnn: 4 +bcjm: 4 +nqgg: 15 +jrwv: 2 +fzvf: gqhh + snsm +dczb: jqfn + lbgd +zlbl: 4 +nvjd: 2 +dnhm: ldng * hczj +bdwl: 1 +jspd: 3 +tmhz: mjbb * pmrp +czjs: fdrb + gphc +sjzb: 2 +vthq: 3 +vrjr: qppt + pfnw +fbbb: 5 +jvzt: gpll + rcbs +zmmc: hfdd * fglq +rscv: 16 +ntfr: 4 +tglj: 5 +pwfn: glpv + vprj +rwpb: 11 +jrmp: frfh + tbhf +cppr: bqrh * brlz +tqqf: 2 +wgtc: hwmn + fzwn +mhbc: fsfz - tddg +pzmp: 18 +rmzr: bhvb - wpwj +hfgs: 4 +pflr: cbbd * cbqm +fcln: 3 +bcwh: 2 +qbnr: 2 +nzwf: ftsz - cfwn +zmmd: 3 +jvdm: 2 +wspf: wfch * lvtn +tcgc: 5 +wthh: 3 +wsgl: ctfr + rbvh +pwvz: fjtr * bghl +rqpn: wclq + jwlw +nwpc: ssmg / rhmc +hlcq: 2 +mrgd: clzj * rlvm +wwgn: sljz * wvmj +twdn: mqms * fszv +dtjt: qswp * fwhq +dsqb: 12 +lpbm: 7 +wjdr: fthv * dhwd +sprj: mtps + prwg +zltn: wzjw * rqts +fvcz: zhrd / jvdm +fjjw: 4 +hgpf: jjsq / dfmj +tjds: 2 +mglt: mmtt * fcrg +tczs: 5 +zwzm: crsj / chnj +rsgj: 3 +ztnd: vlrn + rqch +cdwq: 5 +hvts: 3 +qvbz: psrg * pbsf +gtpl: vmjm + gbmq +rwwg: rdhv + bddw +vprj: fdwq * zcnv +rpmd: mdst * gbvz +pdfb: mqss / wmnq +nsgv: slmj * nftc +ltnj: wtpn * vvwq +wbjd: 7 +wjjg: nqht * crfg +wnzt: 6 +fqhn: bzsm * dstz +smsq: gjvs * mmcd +rcbb: vdml * gvlh +bnlm: vpfb + nfcr +vrvh: 3 +fftw: 4 +rcsl: 9 +zzsn: 5 +ffsc: wlnv * rwpb +rssg: glcv * vmqp +dgvb: fnph + zhcl +hjfc: 12 +gfcz: hhps * nvth +gzzl: 2 +rhqr: cmlp + tbwg +tvmf: 4 +pfzs: 13 +gbmq: 2 +mpgl: srqt + fbdr +rlzn: 3 +cstn: 3 +rqtz: nthr * tjct +mwnw: 15 +gphc: 1 +spvq: pdhv - bjlr +wmct: mwfz + jshj +qzgn: gvhp * zzms +rfpj: pbsm + jpqm +fftt: gmsh - llcl +psrg: 2 +hrsg: 12 +lptl: ghbw * nlsl +pwwh: qjcf * vcct +bfqr: 7 +zwrd: tgfd * wtct +znsl: fdsb * hfcf +cwsw: 1 +fmhl: 3 +trzr: cccf * vpzb +zspp: gfrs * qzwf +cfrb: 12 +zvlv: 3 +gcfc: 6 +nvft: swlc * sqcn +lhqd: pvww + jlqv +lscj: llrg * mwmr diff --git a/src/bin/day21_1.rs b/src/bin/day21_1.rs new file mode 100644 index 0000000..86a9064 --- /dev/null +++ b/src/bin/day21_1.rs @@ -0,0 +1,8 @@ +use std::fs; + +use aoc2022::day21::process_part_1; + +fn main() { + let file = fs::read_to_string("./inputs/day21.txt").unwrap(); + println!("{}", process_part_1(&file)); +} diff --git a/src/bin/day21_2.rs b/src/bin/day21_2.rs new file mode 100644 index 0000000..2d87a2b --- /dev/null +++ b/src/bin/day21_2.rs @@ -0,0 +1,8 @@ +use std::fs; + +use aoc2022::day21::process_part_2; + +fn main() { + let file = fs::read_to_string("./inputs/day21.txt").unwrap(); + println!("{}", process_part_2(&file)); +} diff --git a/src/day21.rs b/src/day21.rs new file mode 100644 index 0000000..b21b90c --- /dev/null +++ b/src/day21.rs @@ -0,0 +1,128 @@ +use std::collections::HashMap; + +use nom::branch::alt; +use nom::bytes::complete::tag; +use nom::character::complete; +use nom::character::complete::{alpha1, newline, one_of, space1}; +use nom::combinator::map; +use nom::multi::separated_list1; +use nom::sequence::separated_pair; +use nom::IResult; +use xxcalc::calculator::Calculator; + +pub fn process_part_1(input: &str) -> i64 { + let (_, monkeys) = parse_input(input).unwrap(); + monkeys["root"].calc(&monkeys) +} + +pub fn process_part_2(input: &str) -> i64 { + let (_, monkeys) = parse_input(input).unwrap(); + let expr = match monkeys["root"] { + Monkey::Add(a, b) | Monkey::Sub(a, b) | Monkey::Mul(a, b) | Monkey::Div(a, b) => { + format!("{}={}", build_expr(&monkeys, a), build_expr(&monkeys, b)) + } + _ => unreachable!(), + }; + // Lazy man, i am + xxcalc::linear_solver::LinearSolver + .process(&expr) + .unwrap() + .as_f64() + .unwrap() + .floor() as i64 +} + +fn build_expr(monkeys: &HashMap<&str, Monkey>, name: &str) -> String { + if name == "humn" { + return "x".to_owned(); + } + + match monkeys[name] { + Monkey::Number(x) => format!("{x}"), + Monkey::Add(a, b) => format!("({}+{})", build_expr(monkeys, a), build_expr(monkeys, b)), + Monkey::Sub(a, b) => format!("({}-{})", build_expr(monkeys, a), build_expr(monkeys, b)), + Monkey::Mul(a, b) => format!("({}*{})", build_expr(monkeys, a), build_expr(monkeys, b)), + Monkey::Div(a, b) => format!("({}/{})", build_expr(monkeys, a), build_expr(monkeys, b)), + } +} + +#[derive(Debug)] +enum Monkey<'a> { + Number(i64), + Add(&'a str, &'a str), + Sub(&'a str, &'a str), + Mul(&'a str, &'a str), + Div(&'a str, &'a str), +} + +impl<'a> Monkey<'a> { + fn calc(&self, monkeys: &HashMap<&str, Monkey>) -> i64 { + match *self { + Monkey::Number(i) => i, + Monkey::Add(a, b) => monkeys[a].calc(monkeys) + monkeys[b].calc(monkeys), + Monkey::Sub(a, b) => monkeys[a].calc(monkeys) - monkeys[b].calc(monkeys), + Monkey::Mul(a, b) => monkeys[a].calc(monkeys) * monkeys[b].calc(monkeys), + Monkey::Div(a, b) => monkeys[a].calc(monkeys) / monkeys[b].calc(monkeys), + } + } +} + +fn parse_operation_monkey(input: &str) -> IResult<&str, Monkey> { + let (input, lhs) = alpha1(input)?; + let (input, _) = space1(input)?; + let (input, op) = one_of("+-*/")(input)?; + let (input, _) = space1(input)?; + let (input, rhs) = alpha1(input)?; + + Ok(( + input, + match op { + '+' => Monkey::Add(lhs, rhs), + '-' => Monkey::Sub(lhs, rhs), + '*' => Monkey::Mul(lhs, rhs), + '/' => Monkey::Div(lhs, rhs), + _ => unreachable!(), + }, + )) +} + +fn parse_monkey(input: &str) -> IResult<&str, Monkey> { + alt((map(complete::i64, Monkey::Number), parse_operation_monkey))(input) +} + +fn parse_input(input: &str) -> IResult<&str, HashMap<&str, Monkey>> { + let (input, monkeys) = + separated_list1(newline, separated_pair(alpha1, tag(": "), parse_monkey))(input)?; + Ok((input, HashMap::from_iter(monkeys.into_iter()))) +} + +#[cfg(test)] +mod tests { + use super::*; + + const INPUT: &str = "root: pppw + sjmn +dbpl: 5 +cczh: sllz + lgvd +zczc: 2 +ptdq: humn - dvpt +dvpt: 3 +lfqf: 4 +humn: 5 +ljgn: 2 +sjmn: drzm * dbpl +sllz: 4 +pppw: cczh / lfqf +lgvd: ljgn * ptdq +drzm: hmdt - zczc +hmdt: 32"; + + #[test] + fn day1() { + assert_eq!(process_part_1(INPUT), 152); + } + + #[test] + fn day2() { + assert_eq!(process_part_2(INPUT), 301); + } +} diff --git a/src/lib.rs b/src/lib.rs index a6bed16..8623deb 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -21,3 +21,4 @@ pub mod day17; pub mod day18; pub mod day19; pub mod day20; +pub mod day21;