summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2022-12-21 15:10:59 -0500
committerJesse Luehrs <doy@tozt.net>2022-12-21 15:10:59 -0500
commit950e109848a2981ad979171e810ae7b6e12d77b2 (patch)
tree0587739e6b1a9657aec5975da4c4bc590ed661e7
parent8993cfce890c9e38e450fcf4e1a94488ccf5c94a (diff)
downloadadvent-of-code-950e109848a2981ad979171e810ae7b6e12d77b2.tar.gz
advent-of-code-950e109848a2981ad979171e810ae7b6e12d77b2.zip
day 21
-rw-r--r--benches/2022.rs5
-rw-r--r--data/2022/21.txt2087
-rw-r--r--src/bin/2022/day21.rs227
-rw-r--r--src/bin/2022/main.rs2
4 files changed, 2321 insertions, 0 deletions
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<Self, Self::Err> {
+ 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::<i64>() {
+ 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<String, Monkey>) -> Option<i64> {
+ 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<String, Monkey>, 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<HashMap<String, Monkey>> {
+ Ok(parse::lines(fh)
+ .map(|NamedMonkey(name, monkey)| (name, monkey))
+ .collect())
+}
+
+pub fn part1(monkeys: HashMap<String, Monkey>) -> Result<i64> {
+ Ok(monkeys
+ .get("root")
+ .ok_or_else(|| anyhow!("couldn't find root"))?
+ .eval(&monkeys)
+ .unwrap())
+}
+
+pub fn part2(mut monkeys: HashMap<String, Monkey>) -> Result<i64> {
+ 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<String, Monkey>) {
+ 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),
}