aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNat Lasseter <user@4574.co.uk>2022-12-21 15:19:10 +0000
committerNat Lasseter <user@4574.co.uk>2022-12-21 15:19:10 +0000
commit6734e8dee0ff45229100bfbed9935ce080639981 (patch)
tree32373e1eb73eaaef7040c8751cd7ad067bec85d4
parent05d62a081d1cc9ea50a0ec5b1bb7ce3f6c726545 (diff)
Day 21
-rw-r--r--day21/input1619
-rw-r--r--day21/part1.rb34
-rw-r--r--day21/part2.rb78
-rw-r--r--day21/test15
4 files changed, 1746 insertions, 0 deletions
diff --git a/day21/input b/day21/input
new file mode 100644
index 0000000..c441f08
--- /dev/null
+++ b/day21/input
@@ -0,0 +1,1619 @@
+cgrb: gzwb * rcfd
+gfbz: bwgp - qlfm
+jrbf: 2
+gvvg: rjch + tjdp
+vwsh: grwp * ddsv
+tpwb: 1
+vjtv: 3
+msjg: tdml * mrgt
+snmc: gqls * hcpg
+vhps: dmmr * ggfh
+mmtm: vmvg + nrvn
+ppgv: jjcs + wwbd
+bpfp: 2
+qbqs: pqsn * gqmd
+dtqj: hwqn + vmlg
+ppfj: 2
+wncv: dpzh / jghw
+bsfb: 11
+jftc: 2
+cndz: 3
+pnvj: tnfn + tpmn
+sbqn: lhcd + tbqv
+dprz: 2
+ztlv: vvvw + vlmw
+grvf: 13
+pjcd: 2
+tfdp: 5
+dmmr: 4
+twts: 7
+trbj: nzrj * jcjm
+fsnr: 3
+ttws: whhz * ljnv
+jjqd: nvhn + bsfb
+smcn: 3
+jcjm: 7
+zqjm: 2
+cggq: snzc + glmg
+wqlv: 5
+gzbv: vjjv + fmzz
+mvwl: hbbt * mbcs
+rhrv: chhr * rqfs
+bjfp: 15
+fzhh: 2
+clrz: 3
+tjrw: wshw * qvwn
+tjlt: 4
+dmfn: ngtj / bwtf
+fplt: nvdw * qnvj
+stms: 3
+sslh: hgqw * tgcb
+wdwn: ltnn * cfbh
+nbgv: npwd * pqrt
+hpzs: cdsp - jvpm
+mcjt: ngqt * qdcf
+pdpn: 12
+hnpp: 9
+ffwm: 6
+hhpg: 3
+zwcl: mbpm + nrmd
+zqbv: 2
+trqr: 3
+brlr: 2
+nswj: 1
+hfpt: mhpj + mdbm
+bjqq: 4
+jhhz: 2
+qmmf: 15
+nwds: 5
+nmqc: 1
+npmb: tbfw * hzjl
+qzjj: 7
+vnzw: 13
+hdrw: zngj + sqdg
+pgpb: 14
+ztgb: 2
+lrjl: jcrv + fdll
+gqsl: pmpp * cnwr
+vbtw: 3
+wpzj: 2
+hvjb: qrqb / brlr
+spwc: 2
+htmn: 15
+zmmr: 2
+tspd: jlvw * nprf
+zwgf: fdzw * ffdp
+gtmh: 5
+qzcv: 2
+tqwm: lhnq + lffd
+ntrm: ftlv + pnrw
+hqjb: 2
+hbww: ztlv * dwnc
+jdms: rbjm * zvzf
+zlrn: fmjm + zlwr
+rhnp: vrmz + vnzw
+bncr: 10
+nnzh: wcgl / cvtz
+bqqz: 5
+czpn: qpgr + hflr
+hdlj: ljfj * fmgb
+cqlb: 17
+wpzr: mfwq / rdlj
+snzc: qgfd + nmls
+zdcf: ctlp * nptz
+djbr: dbcf - msjg
+zjcc: nrhh * ddqb
+rdgh: 9
+lhjl: lvml * qbps
+flfj: 2
+nwwq: 2
+hsqn: 3
+hvlz: gdrq * mqvd
+gfzg: 2
+qrpm: 4
+ljfj: 11
+hdzg: 3
+qgln: 12
+wmld: 9
+vsnq: mlrh * cbwl
+mqvd: 13
+cwft: 2
+nssp: 8
+wpzw: clzz * vdhn
+rlrt: 6
+pslc: hrdw * dvjb
+lffd: bnff * svsm
+rzct: 1
+qhdj: 10
+bdwg: cctg * zvjt
+nflt: ggpq + csln
+fjdr: tdgm + gnjn
+wqnv: bfms / lrnn
+hzjl: 5
+vszz: 18
+mjhj: 3
+trts: przz + hrqz
+ljdc: 3
+jghw: 2
+hmqf: 2
+fjvr: 2
+qtch: ltft / nflj
+ffvf: 1
+pdbh: 13
+jncj: cbzf + tshw
+grwp: tjlt + pgpb
+tsnw: humn + sslh
+llnz: dphw * lqjs
+bbhd: 2
+rmwv: tzwl * qthg
+mlvm: 3
+bpmg: jqnq + qjgz
+pjpz: 4
+hbbt: 2
+wmtp: 16
+spnw: 6
+rwtw: rlqz / rrjn
+bhtl: 8
+vbmj: jbtq / hqjb
+tjfs: 2
+dwjs: rbbm * fmjq
+strh: grcb * smsd
+pnnc: cfjf + rhrv
+mfsv: hqfh + tmhz
+ldwr: 13
+nrvn: vbnf + lljr
+rsgn: 2
+fmzz: tzdw * vcbr
+tdml: 3
+wgvd: tgmh + lnvp
+zjjd: 5
+nlcm: lfpm / hfng
+vpmh: tnfw * twts
+ljfq: 2
+swzm: 4
+rcfd: 3
+wmhm: jrhj + qfld
+zdmw: wrbz + bdwh
+rczv: ggtj * ttff
+djhn: 17
+nghf: 4
+nqbv: 3
+dpmj: tjmj + rcpv
+rdlj: 3
+tdgm: djbr * zqbv
+rshb: jncj + npws
+jpsh: 10
+shvt: 2
+mrgt: wbfn * wszg
+mjbr: rmhc / wchb
+jbln: jnsw * zdtc
+hmtl: 3
+qdcf: 9
+pthw: 2
+fmgb: 2
+sqhn: fcjw + qtfw
+rwpc: jrhz * fjcm
+mrzf: 2
+rfnz: 3
+tzdw: 2
+dwrj: tjfs * msns
+phlg: jlss + jrfr
+wtvd: ctqt * cctn
+gjjl: lprh + gzlf
+zdlw: zfgn + pprr
+fnll: tqvg + ddlb
+ftpz: 2
+vcbr: lclb + tqlj
+nhzg: 13
+hwvl: dmpf + gwhd
+fhvq: mngn / zjqh
+mhdh: 2
+cmbl: 15
+dhzt: 9
+zbdm: dqcc + slld
+trfn: nfpd * bgqg
+pvqr: fvln + bjll
+smlg: 3
+pbpf: 11
+gzjr: 2
+tqmm: 3
+phnj: 12
+phfv: blpp + mbgm
+dzbz: 5
+tlsj: 5
+vbnf: 3
+vfbc: 3
+cvzg: 4
+rpqt: 5
+wnsr: 3
+pmwt: 14
+dlbr: hhjv + jpcr
+cbbh: rfzd * gwrh
+stdj: 3
+jzzp: 3
+wjfz: 11
+jjrc: htjj + wqdn
+ccgr: 2
+sppm: thtt * nvbb
+blvh: jcjf + zbmp
+wtzp: 2
+swlb: rjzp + qffj
+dszm: 4
+rndr: qbnh * hcsl
+lbts: bdng + brwc
+tvzv: rwtw + brvj
+rjzp: plbn / rwhw
+vdhn: fnll * qnnr
+fpch: 19
+wwzl: 2
+wgnc: 2
+lmfz: 9
+cndr: glpw + hlsm
+lnvp: 5
+gvzt: 6
+shjg: 5
+tjht: 1
+zsbn: lsnh + dptl
+ltrw: btvs - nzqv
+tlqh: bzpt * qmmf
+jvpm: 2
+cvpt: 2
+gfmz: 6
+phrq: vnwg * qsjw
+ndzf: hnpp + rvfg
+snvw: 2
+lnrq: nbtl + vszz
+tmhz: 6
+lcsc: 2
+tmhs: 5
+glsg: 3
+jzff: zdlc * hjpt
+chvw: 4
+pzsv: 7
+sqcg: 2
+wnml: 11
+bjjn: cbtg * lczq
+lzfw: jmbp - nwwd
+fvvn: 10
+vrmz: 18
+qfhp: 4
+szjb: wwwv + vrpc
+htch: 2
+dvps: 4
+qctd: 5
+rcmp: bqwt * dczs
+fpgn: dtpm + vlgl
+vbvm: mtjt + tthm
+gzgg: 5
+hvgb: 6
+mdbm: 12
+dfnd: 3
+qmvh: 14
+bwtf: 2
+bllg: 7
+nzhv: 2
+mlwh: 14
+vgbr: 3
+svsm: rvdr + hdwp
+nvhq: hsrh + qnpj
+sjqq: 3
+gtwc: cvfg - lnrq
+twww: zrmh * zsgf
+gjqf: 4
+mhrs: bmlr * sqjd
+vrpc: 7
+swsb: tlsj + szww
+lhcd: mnwb / pdcp
+hgqq: zqvv * bnfw
+frdf: 2
+dmnv: pmgh * bqpl
+qvqt: 16
+jpvw: scvl + nvtd
+tjdp: 2
+fmgj: ndzf / spsh
+qhgp: gvvg + rgwv
+fqbt: gzsr - zwcl
+dztv: 4
+dqlh: 1
+ljbr: 5
+cvtz: 2
+dnwq: pvts + pwhd
+fbgg: zwjl * nfvl
+zzgb: 3
+pwpw: pprn + llzn
+wwwv: gbgl + vtfn
+jjrh: 8
+qnvj: qtcc + ptld
+fqsl: 3
+gdbc: 2
+fstq: ngcc * qqzf
+bdth: rzct + hbqr
+hptn: vtdr + mcgv
+ntll: wqmf * swzt
+fzmq: dlzs + sqsp
+bnpt: bpsl * pllf
+mlbz: ncrn * mmnh
+mlns: 2
+ctcs: ttzd * pbqv
+tvhr: fdfl * sdjs
+mzrp: gndt + pnnc
+ngcc: 2
+jtfj: mvwl - zrdf
+ttff: zwcv + dwjs
+prjz: zrfh + jrjs
+nvcq: hngp * qhdj
+tfwt: gdwm * bjfp
+ssnf: 5
+bpbz: 3
+bghs: 3
+dmmw: 1
+tmtl: bpfp * nflt
+gmjw: dsrv + dstb
+jdnd: tvld + wmtp
+rpjn: 3
+qcdq: fzhh * hmtl
+jcjf: 11
+sqqh: 3
+wdtq: qvqt + tztb
+shhg: 10
+vclb: dclb * mtlb
+swqj: 2
+mlwj: vglm + trbj
+lfpq: gstj + dhzn
+dqcc: 14
+spsc: 8
+rtbm: 2
+gntr: cnvs * jnht
+tnfw: 2
+gstj: cmgs * mhth
+pqsl: 8
+vlvr: nnzh + cwcj
+bnhw: cvrr * hsjc
+wtsf: 2
+lnzc: lqft * qmvh
+mmfp: wtsf * qjdb
+qcvv: 2
+cmvj: jtpg / njcm
+rlbv: 2
+gcwr: gqsl + tnnv
+wjpz: 6
+gjvt: 2
+tnnv: ffbw - hpsb
+hgqw: cdvb + rqnr
+ptdp: 4
+lrth: 17
+jdrl: 5
+tvct: sjbd + vsnq
+jndd: 3
+dcfd: 13
+cbdl: cqcr * cttg
+zbbm: 16
+mwdh: nbzm + jgdd
+gstb: 2
+gblj: 7
+hjpt: 7
+njnw: tpwb + sdvs
+vmvg: 4
+qpgr: bcmd * cjmh
+jrfr: 2
+nzhb: 2
+qlnv: 2
+wqdn: 3
+jfjt: 7
+cbtg: mfhj - czsg
+fmqb: gmgr * nhnp
+lwnc: 17
+wlzq: 5
+wwbd: 12
+gqmd: 3
+lwzs: 5
+vtfn: 3
+sbft: 9
+hhjv: 13
+vlgl: mrsd + sppm
+hfbp: rcrf - hnpn
+wbcr: gflt + nsqg
+lbdp: 1
+hgdh: zbbm * qnhb
+prnm: dhft * swqj
+gwrh: 11
+pfbp: 17
+ltnn: 2
+jrjs: wgqw * whbw
+ngqt: 16
+qzrh: fmqb + cbbh
+vnqn: fjvr * vmqc
+gftz: ghvf * rfwz
+hznt: qjwg + qnph
+dtsq: bjbc * rpcr
+jrhz: 3
+mqql: 3
+jnht: 5
+wwhw: 15
+fwgz: 3
+nhdb: pjzc * fnml
+bdwh: 6
+mnwb: bnpt / qjpl
+rqjq: smcn * bzst
+vlmw: 8
+ddlb: twrl + sdfs
+tzqq: 2
+plbn: tbpv * hcsd
+vnqf: rzcf * pthw
+tqbr: blfj * dmfn
+nhnp: lcvp + qfms
+bjfl: 8
+flrv: 13
+zstd: 2
+swhl: 2
+hcsd: 3
+rzcf: pvqr + cbwv
+pssd: twww + ctcs
+qmpz: 12
+mwhj: dwph + szjb
+dptl: zrwg * mwdh
+bjbc: 2
+dwrt: 2
+wnpc: lhbs + tpgw
+trws: lzwt + hmlp
+gzwb: lpml * zhqg
+mjsh: 6
+cnnp: 5
+wlng: jbwt * bpmg
+hhmt: gfbz + hvrm
+qffj: jqhf - pmbc
+cbqp: lnwj * hscl
+mdwb: tcff + ttws
+nrrc: znsn + mcsm
+htjj: 5
+tbfw: 3
+gzsr: tvct / vstc
+fnfl: 2
+mbgm: 15
+tccl: nqcp + wbcr
+wnsv: 3
+rfbj: cmbl * phfb
+phfb: vtzw * lqbd
+dmtn: 5
+brwc: ptbz * dttp
+zbdl: fhvq * wvgf
+ngtj: hwlt * cfdz
+dvvq: vfrn * cqpm
+rfsn: 4
+bqdd: zstd * fnqt
+jrvv: ndhj * vslr
+dlzs: jwrl / vbrr
+jjhd: 6
+lmwn: vbdt + vsrl
+jbfv: 2
+jcrv: fjdr / nwph
+fhwg: hbww + blsv
+jppc: tgnj + lcjd
+jtwn: 9
+jpqm: fbwz + dljv
+cctn: bgws + dmrh
+lcbh: cfpv * bqdd
+jbrc: 2
+gczs: 5
+hdmb: gtwc * qcvv
+ptsj: 2
+rvdr: hvhh + nmqc
+znsn: 4
+gndt: 1
+qncn: frdf + ltdp
+pmbc: vzft * pvrr
+dntg: hdmb / chqf
+jshb: 8
+qfms: cdmm * tnlr
+rvps: 7
+fplf: 2
+plhr: mfsh + prnm
+lqlz: 2
+qnts: vlqq * sgsz
+wwpm: qjdf + lbmd
+tvvl: 1
+phrc: grpr + shjg
+cjrq: 8
+nbmm: 5
+ctqt: ptsj * cwjz
+jbtq: wnpc * swhl
+mfpg: njnw + ntll
+fnfn: sjsf + fdbm
+sbtw: qtch + tztc
+vzwh: wgvd * mpsg
+qsgs: qgln + zdmw
+vlqz: shzv + dnjl
+qnhb: 16
+qtjp: cfqw + dhjv
+mwpw: 7
+vnwg: 2
+rcvc: 1
+gnmm: 2
+ltlg: 2
+tqvg: nfqw * zzqz
+rcrf: tlfr / bllg
+ggtj: rqpw * rdgh
+pdbs: pcwg * lgbs
+pgpz: 3
+tvld: 10
+ptth: cbqw + qwdf
+mhsn: 2
+qnph: htfd * pjcd
+hpvv: sbtw + qdcn
+sqdg: fdfq + tfww
+bbnr: rznq * fhwl
+rvqg: 4
+rfwz: 4
+mvsj: 5
+jmrh: 11
+mdjn: mtgh * wpzj
+vlfr: 5
+ddqb: wmhm + vjzf
+mszq: 3
+whqj: ltpz + ttnz
+cqpm: 2
+rlvh: 2
+ptcp: qbvw * fwjf
+jnbz: 3
+fprr: 5
+wchb: 3
+qqqw: nntf * hhpg
+hnzj: 3
+ggfh: 7
+tqvh: lbts * mlvm
+hdwp: mhsn * tgjv
+qnnr: 2
+ptld: cnmf * ghss
+gpmm: 2
+njvf: qdvl * cjzn
+gdwm: 2
+pbdb: qcrp + sdsh
+sjsf: 7
+zqrp: nbgv + wsnr
+dtpz: scll * sfww
+zrmc: tpvw / sqqr
+dhft: jdgp - rtqz
+bfms: wjlr / lpvw
+dlfm: 2
+chhr: 3
+vlcs: wlzq + frvp
+pvdl: dnrw * ltlg
+dvll: 2
+hhrv: 2
+tndw: shqf * qfjq
+sdsh: ptcp + mdjn
+hzmj: tcfr - clqd
+rqcq: 3
+gqfs: hnnz * fcpv
+mmhg: 4
+vszv: 2
+hnqd: 15
+mjwn: mdlq + pssd
+fdpm: 15
+fpzz: zqjm * vgfw
+zrfh: 1
+ppts: 2
+rmhc: ltvr - snwl
+jttq: gwzh - wtvd
+cpvl: wtrv + ldwq
+bzst: mbst + jbln
+qdjl: 5
+qtzz: crbp * lqcj
+dwdc: 20
+cgnp: nswh * dzdp
+mngn: rgpb * qhsv
+gzlf: vssh * prgh
+jtpg: whwf * dtpz
+pmgh: 2
+pscc: jtwn * ztgb
+brcg: dmcf * jtfn
+gdrq: 3
+dggp: 4
+qsjw: 5
+nvdw: 2
+pdgh: 4
+nrqf: pqsl + dnqt
+qjdp: jrfz * hbbh
+gcdz: qtjp * gjqf
+lhhh: hhmt + nvcq
+phhf: lqzz * szzt
+qjdb: bnvr * nhqr
+cgwn: wqzs * mzjz
+lrnn: vgbr * gmwv
+fcps: mmtm * gfzg
+nwmq: mqsm + hvgb
+ctlp: 2
+mbst: mmbb / jbfv
+dzhg: dpmj + njvf
+pwnp: 2
+ttnz: nmnv * rctb
+ffdp: dsjp * ngbp
+tqlj: qfhp + rmwv
+rvvq: qbpj + pjgn
+jhjp: wqlv + jhmt
+rmhg: 3
+clrl: nwds + dtsq
+lgfj: vccd / fjls
+hpsb: 15
+cjmh: 2
+swml: htgf + gzgg
+mdlq: psbd - svpl
+mpsg: 4
+fnbf: 2
+spwv: pjgv * dvll
+slrp: tjsp * fgvw
+sqjd: lrll + mmgr
+djws: zscl / lpbw
+shzv: tlzj + ncvz
+llwj: 2
+gmdw: 3
+vqtr: tsnw / fvbf
+ncvz: 3
+bdng: 3
+ftdw: ldwr * zjpn
+wvgf: 2
+cdsp: grvf * rqcq
+pgtc: 8
+nbzm: 3
+mjzr: nmmd / bzlm
+tlzj: 4
+gbgh: hvjb + cmjf
+wqzs: 2
+bhbt: nqrl * qvnq
+qjgz: rznp / wdqs
+jdls: gtmh + dggp
+hbbh: 5
+gmdt: tspd - vllv
+hbmq: 2
+tlfr: blgm + zqrp
+qcrp: 8
+rfmm: vgfs - dpzm
+mcgv: scbz * mlfv
+vzft: 3
+dzzl: wdtq * nqch
+zlcb: bgww * crgr
+pdcp: 5
+bgww: 2
+rqnr: rcvc + rnfl
+nfpq: 2
+bcmd: cbqp + vslw
+mtbf: 2
+ljjz: pslc - mwhj
+fpcm: fqsl * nwmq
+sgss: 2
+tthm: jvqc - mjhj
+hrfs: dhdm + thlr
+pwls: 3
+humn: 4053
+rjch: 5
+jwpv: jpvw * wnsv
+jtpm: 2
+pvzc: dzqs + phgf
+cbzf: hvnc + tjrw
+wbfn: 2
+dclb: 2
+prqh: 3
+bsds: bvpp * lmtc
+gjsq: ldvq / nbjz
+thtt: 11
+smsd: 4
+fscw: smqh * hqnc
+dpzh: hwvm + vqcv
+spsh: 2
+zdjf: 4
+dqzg: hvlz * pjpz
+lbwp: dwvq + phmc
+nmsp: pbdb - tjht
+lsmb: 5
+tvcv: 5
+dcgn: cdng * wjpz
+wqns: dcgn - btsn
+dhjv: 3
+sznw: dvvg + dwdc
+zwcv: cbdl + fstq
+jbgd: 3
+pvbf: 12
+smnr: dwnz * dhth
+nfrg: tlbr + zsbn
+swdb: rqpf * tqmj
+vtdr: dcfc * tqms
+hrdw: 2
+fqzj: 1
+mqsm: dvvq + sgmq
+mgtl: 1
+dmcf: 5
+zvzf: 5
+scrw: pzsv * gzrq
+mswb: vllh + qtzz
+rfln: 2
+zvpn: 2
+mqzq: 2
+cwqf: sqqh * ttsg
+nnpv: tqbr / rmhg
+zscl: lgfj * bjfl
+bnff: qcdq * dwrt
+dljv: trws + tqth
+gzrq: fqzj + gdgm
+qfjg: 17
+tfvv: 12
+fmjq: bbnr + qdhz
+rrrt: 2
+gnbw: 16
+mrln: 16
+htts: dpfh * nrqf
+mmtz: 2
+mznv: sznw * fzfv
+tthr: 3
+tmqp: 19
+qvwn: 3
+fbwz: hjsb / tjdj
+zfgn: 11
+qtcc: 1
+tgcb: sbqn + mpwl
+qbtc: 17
+nhcm: 2
+zpfg: 1
+gscw: wnsr * rvps
+qbpj: lbdp + tqvh
+fdll: dprz * ddln
+vhbm: rrrr + bbbt
+lljr: rpqt * ftcb
+jpnv: 2
+hfht: 3
+wfdh: dlfm + mrbf
+qvlf: 2
+scpp: 14
+dwcz: 3
+ntjd: 1
+frvp: zsqz * scds
+dtnb: 3
+fgjm: 3
+tbgb: nhcm * bdwg
+srwr: clpr + sfhd
+zwjl: 5
+qcng: 18
+ddln: zbdm + qnts
+hflr: rhtt * wfdh
+rhsr: pmjb * mwpw
+cmjf: tqhw * pvbf
+dphw: 5
+mtlb: flwd - tmwh
+nmmd: rsgn * nmmv
+cvfg: nhlg / hbmq
+lvgq: zjjd * wnml
+vssh: 7
+szpq: 2
+hfln: 3
+pmjb: 3
+nswh: ddjb * jbgd
+nmnv: ffgm * prsl
+fmtb: lbwp - dwrj
+wjwd: 2
+lqbd: 2
+gpfw: 4
+mjdr: 3
+rtqz: rvwq + rvqg
+fdbm: lvzd * rldf
+ppcm: wvdq * lqhp
+vbrr: 2
+tzpn: 13
+tlbr: 2
+qtfw: dtrg + btcr
+vglm: nzhv * fdlh
+fcjw: 5
+fwjf: 4
+cfpv: 4
+fnqt: 4
+flwl: ppts * bjqq
+qjdf: dzbz * mvsj
+mlfv: 2
+ljrc: nvht * frff
+lhnq: jvvv + qgbq
+wpvm: 11
+fjls: wffr - fwgz
+rvwc: lrth * jtlr
+slld: vclh * rjqr
+zjpn: 17
+njcm: 7
+jdgp: nljp + tszm
+pprn: gqvq * hzmj
+lqzz: 2
+swvs: nlcz * lsrl
+ppbl: 3
+lmrt: 1
+dwph: qzjj + lvgq
+hvrm: hfjw * vcdg
+zvfs: 3
+jmfj: 4
+hsbn: 5
+nwwd: 4
+gdsn: 3
+gvgj: 18
+mhpj: zjcc - dzfs
+lrll: 1
+gmzv: 2
+lprh: bwrc - jsjv
+msns: wwnt + vhps
+msrb: 3
+jwrl: trts / dznf
+cpls: 2
+qvsp: 5
+ldwq: 2
+dpzm: gmdt / mqfc
+fjcm: 11
+zqvv: 3
+jvvv: lpcv + mjsh
+rbbm: cqfl + rpjn
+nrhh: 2
+wzzt: 12
+hvhh: bmwf + phrq
+dbsm: whqj * dfnd
+zbmp: 5
+dhzn: ffbq + tthr
+qsrm: 3
+pddh: fzvb + mjbr
+nptz: mnhz + tpgr
+zcwz: 2
+ctts: 2
+pjzc: 5
+dzgc: bghj - fpgn
+zrqb: 7
+qjpl: 2
+whsb: 2
+mrsd: fdrz * thbw
+wgfd: 8
+qfjq: 10
+ddsv: 4
+cmwc: 2
+ndhj: ssnf * wjwd
+qzln: 19
+ptbz: 4
+fhrg: 17
+nhqr: 2
+tpvw: wwzl * djws
+jbwd: 7
+wgqw: 2
+mnqw: smlg * vwsm
+bghj: pddh / fqtj
+bqwf: 8
+wcgl: cggq * pwnp
+jcwh: nslq + tfdp
+gdnd: 7
+fhwl: 5
+pnsl: 2
+nntf: 3
+wqmf: 7
+dttp: 5
+qpzl: 3
+npwd: sbmt + vnfl
+lvch: cppw + vwcr
+gdgm: stms * mqzq
+bwhv: cpvl * pzlt
+fnml: 3
+wzls: bvss * sjdp
+htfl: trqr * dfhn
+tsgs: mbdw * jbrc
+vnfl: stdj * mqjz
+tpgr: mtwc + bqts
+wnmc: twfz + phfv
+gqls: 20
+glmg: 11
+rlqz: plzv * phhf
+hscl: 3
+cnvs: 5
+tjcz: 3
+jmwp: 5
+glpw: 4
+vwsm: 3
+crgr: 3
+pqrt: zcwz * frsb
+ncld: 4
+wmvc: ftdw * jdms
+jlnv: lhrr + mthc
+gmwv: 2
+jbwt: qnwb * hfht
+tztb: 1
+vllv: jbnf * ppbl
+nsqg: qzcj / vsvq
+mfgr: rlfh * ppfj
+fdrz: 6
+mhjp: hsbn + fplt
+btvs: zrqb * jppc
+qbmn: 2
+sfhd: rtlt + gqfs
+vwcr: jdrl * wmzz
+wtft: nhzg + gfmz
+hcpg: bqwf + cmvj
+bcwl: 5
+pjgn: 9
+tfbv: 16
+nvht: gfnr * phrc
+nmsj: 5
+cdmm: pwnt + qfvg
+mlrm: tvcv + dwcz
+bpsl: bnnb * dncv
+gwzh: mvqc / cmwc
+qtmt: wmvc + wpzw
+qdsc: mqbb / pnsl
+gwrs: 2
+crfg: flrv * chvw
+lnwj: 2
+bmwf: 2
+lhrr: 6
+nvtd: 4
+nfqw: wcjr * qvlf
+qjvg: fplf * prqh
+dstb: jzff / zncm
+zbbt: 2
+pthc: rvpr + lvch
+ftcb: 2
+tjdj: 2
+mfsh: 5
+dnrw: wzzt + cnnp
+dpfh: 3
+hwvm: qlnv * cndz
+tbqv: fhrg + tfvv
+cfqw: 3
+mmbb: vrch + gcdz
+cftg: bghs * zbdl
+nszr: bdfb / wntd
+fsnq: 2
+pzfj: rlbv * slrp
+zhfr: 13
+gbfr: nswj + pdpn
+qhsv: 2
+rmcn: chzh * vvvp
+zbfm: frpl * sncs
+sncs: 2
+fvrn: 3
+ctwg: 3
+dhdm: zzgb + ntpp
+bbbt: 17
+cnwr: 5
+czcd: 2
+nvbb: 19
+bjll: nfpq * wrlm
+jrhj: 4
+pvrr: qncn * djsh
+qgpv: 3
+zdtc: 8
+dfhn: 2
+vmtj: 1
+qfld: ncld + dplp
+jsfj: 6
+qdcn: 3
+jpcr: 4
+vjjv: vjtv * gdnd
+nlcz: 5
+lfpm: mfpg * hmqf
+lgbs: 3
+bqwt: cvrb * gzbv
+lzhr: dztv * shqm
+zjdn: 2
+cbbv: 3
+bgqg: hdrw * plhr
+ltft: szpq * pmwt
+ddjb: 3
+rldf: 3
+bsmp: 3
+mlnz: 5
+clpc: 9
+rqpf: 2
+tlvd: 3
+pbvg: 4
+jnsw: 5
+bbcq: vzwh + ntrm
+rqgf: pdbs * clrz
+nljp: zdsl * gdbc
+nzrj: 5
+bdnt: 3
+lvml: tmtl - htmn
+vcnd: rbvp * qmbs
+nlnl: 2
+dzqs: 4
+lhbs: qrpm * fsnq
+mrzs: 5
+vzpz: 1
+hwlt: 2
+zrsm: ptvp * zvpn
+gzzl: bcwl * hptn
+sphn: 3
+wbbv: 2
+vtsf: 6
+lbmd: vcvr * gvzt
+crgd: 8
+ntng: 3
+tfrq: qzdb * gczs
+rhtt: 2
+whwf: 7
+fcfj: 3
+qfvg: 4
+tnfn: 14
+qchn: 3
+bnnb: 4
+qcld: 7
+qbvw: 4
+pmpp: 4
+vsww: lcsc * jcwh
+msqv: 4
+vcdg: qqqw - fzdc
+nbjz: 2
+fzfv: qcng + fwgn
+dtpm: mjzr * gnbw
+vsrd: gftz * gcwr
+qbnh: phnj + bjss
+rbvp: mfgr + dhzt
+tgmh: 2
+cvrb: 2
+llsf: jvgl + jmfj
+ttsg: 2
+qvnq: 2
+cfdz: rndr + mjfc
+mdjv: dzqr + mbtd
+vqcg: vtsf * qfjg
+rpgc: rshb * vlcs
+jtlr: 3
+vllh: 12
+nrcv: hmcw + jjhd
+jlss: dqlh + mlwh
+qgfd: 5
+rqtw: 3
+nrmd: mvbz * gmdw
+clqd: jzzp * scrw
+wszg: tvzv / wsrm
+dcfc: mhrs + tmqp
+dnjl: 1
+rbps: fpzz / rcfm
+nsnw: fpcm - zdlw
+fcrn: sldm + rhsr
+rszj: 3
+rgpb: nfrg + tfwt
+rgpp: 7
+sbmt: sprj + wdwn
+htfd: 14
+plzv: 5
+vpjc: hfbp * fscw
+swzt: 2
+dznf: 6
+snwl: vnqf + rqjq
+prrn: 4
+przz: zhfr * cdcw
+blgm: jsbd + qbhf
+cjpw: 13
+zrqj: 2
+mbpm: snmc / cgqg
+wrbz: 1
+fdzw: spwc * vfbc
+dsjg: trdw * rvvq
+hqnc: 19
+hvhp: dqzg / nlnl
+sqqr: 2
+cwcj: vbmj + wnmc
+flwd: rmsw * fqbt
+qthg: mpgn + fnbf
+dvcv: pscc / qshz
+bzlm: 2
+cdrv: bhhn + vvts
+wffr: 10
+fdlh: rfsn + nhdb
+zrdf: gjsq * rpgp
+dwnc: 6
+sfrr: jhjp + rlcm
+dzdp: 3
+trdw: 2
+vlzn: 4
+gphg: 2
+blpp: dzvs + vcnt
+htfw: qctd + mgtl
+lqjs: 3
+gdjb: 3
+qbhf: vzwb - cgwn
+hrrd: qbqs * mhdh
+pwnt: 3
+gstq: jwpv + jjrc
+npbn: 3
+gdvj: sfrr * rvwc
+bwgp: dsjg / qnhw
+gmgr: 2
+rpgp: 7
+hzmt: 2
+bgws: vwsh - hbqp
+htqd: wtzp * jpsh
+blwj: zrsm + mjgs
+qsgv: zwgf + pthc
+vvvp: nlcm - vdjv
+mnht: qchn * lwnc
+tlvf: 3
+ljnv: 3
+root: vpmn + pqtt
+blsv: nmtr + tfbv
+tqsn: 13
+cqwq: 5
+wcjr: 3
+htgf: 2
+fmjm: 10
+vffb: 5
+mtwc: rwpc - spnw
+wtrv: 5
+vmqc: 19
+fzvb: nmsj * vlvr
+dbdm: 4
+zfnc: 4
+smbw: 13
+qnpj: npmb * lmfz
+wbfs: tvhr + lrjl
+llzn: rjfw * vsrd
+vslw: crgd * qvsp
+qjwg: 1
+rctb: 3
+lnqp: qvgc + spsc
+tnlr: 3
+wrlm: lmbz + tlwc
+mhhd: 12
+fdfl: fpch * qsrm
+mtjt: llnz * zrqj
+tszm: sbft * rfnz
+gbgl: 3
+whbw: 3
+cbwv: 2
+brfw: 2
+nmtr: tqmm * gstq
+qgbq: qzln + mcjt
+wgzh: 3
+rznp: bjjn - fhwg
+rjqr: 2
+mwnf: 5
+wvdq: vlzn + rntc
+sffr: hpzs * fhsc
+dsjp: 2
+rqrs: 2
+pvts: 4
+wcqz: ptth + gdsn
+zncm: wnql + qgpv
+nqcp: nsnw - gspn
+npws: htch * nszr
+lcvp: jrvv / snvw
+ncrn: ffvf + wzls
+thpp: hrfs * rmcn
+gblq: 5
+fvbf: 2
+frpl: lnzc + zpfg
+clzz: dmnv * nmsp
+gfcn: hpvv * zbbt
+bwrc: gzzl / vffb
+nbtl: 4
+hvnc: mmtz * prjz
+gnjn: wbmf + lhjl
+fpdf: zrmc * gdjb
+hmcw: 1
+zfzf: 2
+fvln: tfrq + fbgg
+vclh: gzhg + vqcg
+qnhw: 2
+pttc: hhmh + frgg
+qlfm: mlrm * fsnr
+zsgf: mrzs + dnjq
+cqcr: lmqt + strh
+fhvv: qjdp + lzfw
+tmwh: wmld * hznt
+cjlt: 10
+mvbz: wncv + fhvv
+ldgf: 2
+ngbp: gfcn - lfsg
+nmss: jshb + mzrp
+tzwl: 3
+ntpp: 5
+vvvw: gbfr + vsww
+ftqf: wmpg + dbsm
+lvdw: 2
+vfrn: fvvn + vzpz
+szzt: tzpn * rqrs
+hqfh: 5
+zvjt: 2
+hzct: 8
+psbd: wgzh * nvhq
+twfz: 6
+mmgr: nwwq + zbcd
+ffbw: dtjd * qfvw
+cjzn: pfbp + tsgs
+cvmz: 1
+ftvm: smnr + vcnd
+hlmh: wwpm + jrbf
+blfj: 3
+wshw: 11
+tqmj: 10
+tztc: rgpp * hlrj
+mnhz: mrln + lcbh
+mbtd: 6
+tjmj: vlqz * vnqn
+wnql: 4
+fbnd: jttq * fvrn
+tgnj: fmgj * bbhd
+mqfc: 11
+phgf: zvfs * tlvd
+jrfz: 3
+qwdf: 3
+vqcv: dcfd * llwj
+vzwb: flbl * qdsc
+tpmn: rtbm * bqqz
+ltpz: 10
+mhth: 2
+tcfr: shvt * qsgv
+lmtc: 7
+zzqz: 5
+tfww: dzzl - fmjn
+tcff: rgfz / qlgr
+rlfh: 7
+rjfw: mrzf * dzhg
+vcvr: 3
+vstc: 2
+cbwl: ftvm + jfjt
+zsqz: 3
+cbqw: 4
+hlpr: 3
+sqsp: rfmm / jwph
+fmjn: pwls * flwl
+frsb: 9
+dpvw: 3
+sdfs: bhbt * prrn
+cvrr: nrcv + rjhn
+lpcv: bdth / ljfq
+pzlt: 5
+pjgv: lfpq + shhg
+nslq: jjqd + wjfz
+pqsn: 3
+bnvr: 19
+ttzd: bpbz * jnbz
+zggt: 9
+mlrh: 3
+rjhn: jjrh * hzmt
+lqcj: 2
+clsm: vmtj + qjvg
+rvwq: 5
+lpvw: 2
+dsrv: 3
+vccd: pwpw * swml
+fwgn: wgqr * hnzj
+lmqt: 3
+mjgs: tgnn + bsmp
+qdhz: 13
+qrqb: bqrg * wgnc
+dhth: 3
+vcnt: lnqp * sqcg
+dnqt: trww * mqql
+jqhf: lszm * gwrs
+hnrr: gjph + jmrh
+gspn: ggph * rlvh
+vgfw: gblj * tqsn
+frff: tlqh + dtqj
+zdsl: 5
+qnwb: mtbf * clrl
+hlsm: 3
+mvqc: rcmp + wlng
+nscd: 1
+hllm: 2
+tngw: gjvt * pbpf
+vrch: rlrt * hlpr
+hjsb: wvmt + mjwn
+btcr: pbvg * mlnz
+wgmz: fbnd + swvs
+dczs: 2
+bvft: 3
+tqth: lgqt + mlbz
+qmbs: 3
+sgmq: 9
+cfbh: 4
+qbps: 2
+ggpq: 19
+cfnc: 3
+jbnf: cdrv - sffr
+vsvq: 5
+fzdc: 2
+bdzv: jmwp * gmjw
+fcpv: pgpz * qvns
+hbqr: wtft * bdnt
+shqm: gntr - vlfr
+dwvq: ljvg + rhmg
+jvqc: qdjl * wbbv
+ffgm: 3
+zngj: srwr * mfsv
+hngp: hcwc - pdbh
+sfww: 2
+djdm: 16
+bzpt: 3
+whhz: nrrc + ppcm
+qqzf: bnhw + fcps
+ftlv: qcld * gpfw
+mjfc: rpgc - ftqf
+mcsm: glsg + mprp
+bndl: fprr + tjcz
+zqsv: czcd * cqwq
+cdvb: lvdw * nbmm
+shqf: mnht + swdb
+wwwn: vqtr - cftg
+bvss: mdlw + wlfd
+qfvw: zjdn * blwj
+dbcf: dzgc * npbn
+hgzg: pvdl * nmss
+zlwr: lmbq * gstb
+dwmf: qbmn + scpp
+rfzr: 2
+tscb: 8
+vdzr: dpvw * bwrw
+bdfb: rhnp * rrrt
+bzhz: 2
+jtfn: 3
+clpr: 5
+mfwq: mwvf - wqns
+bbph: mdwb * jftc
+trww: swpp + htfl
+flbl: cvpt * ljbr
+ltdp: dshc + qpzl
+fvwt: wcbz * dbdm
+mbcs: rfgg + sqhn
+rcsc: vclb + thpp
+nfpd: bfnw * pzfj
+qdvl: 2
+msmp: 7
+mbdw: 15
+vgfs: rqgf * nnpv
+dtjd: 3
+hcwc: vszv * mdjv
+tbpv: vhbm * clpc
+wmpg: fnfl * ppgv
+cttg: 3
+jsjv: zqsv * cwqf
+pprr: 18
+rgfz: vpjc - gdvj
+mwvf: wgmz * gnmm
+jwph: 3
+zrwg: 3
+prsl: 3
+twrl: swsb * fgjm
+rbjm: ltrw + njcz
+dmpf: frhz * dntg
+vmcn: 5
+cgqg: 2
+lmbz: 16
+trld: 5
+hlrj: 3
+nprf: 2
+zbcd: nghf * ftpz
+pwhd: 3
+bqrg: lwbb + lmwn
+mqjz: 9
+rznq: 2
+nfvl: 3
+jqnq: hhzw * bbcq
+wvmt: hlmh * wpvm
+fgvw: 2
+rnfl: 6
+mqbb: qbtc * sgss
+chts: fcrn - nscd
+vtzw: bzhz + hzct
+ldvq: 14
+scds: 2
+gwhd: tqwm - jsfj
+mpwl: 2
+smqh: 2
+hhzw: jjjr * ljpp
+lclb: spwv - ltvg
+wsnr: rcsc / zdjf
+dtrg: 15
+dzfs: jpnv + trld
+sldm: 4
+lqhp: 6
+rcpv: tmhs * jtfj
+qvns: 2
+lpml: 6
+snff: 9
+bmlr: 2
+wlfd: flfj * mwnf
+hwqn: 6
+cqfl: zvzg * vghf
+djsh: sphn * mjdr
+ghss: 2
+njcz: vpzd * ccgr
+sdjs: 3
+rpcr: 6
+rwhw: 3
+zjrr: 2
+mtgh: 4
+rhmg: dtnb + swzm
+ggph: 5
+wjlr: hgdh + gjjl
+sgmj: 14
+pqtt: dsnl * rczv
+qshz: 3
+hrqz: bncr + ljjz
+lszm: hgzg + wpzr
+nmls: hvhp + fnfn
+dvvg: wgfd + hgqq
+hnnz: 4
+rqfs: 2
+dsnl: qtmt * hsqn
+vvts: mszq * hfpt
+lgqt: cgrb + qzrh
+jwwh: 3
+pnrw: lwzs * fcmn
+nqrl: fdpm + dvps
+sjdp: 2
+dwnz: 7
+wsrm: 2
+jgdd: 4
+ffbq: 4
+ldss: tbgb + lmrt
+nmmv: djdm + pvzc
+wbmf: wqnv * qhgp
+cfjf: fvwt + dmmw
+ltvr: zmmr * jpqm
+sgsz: vbtw * jtpm
+jqwf: 15
+tgjv: 17
+lfsg: 19
+mfhj: wbfs / clpv
+mmvb: phlg * cpls
+zpwh: 1
+jjjr: 2
+rfzd: zpwh + zlcb
+brvj: bndl * cwft
+vmlg: hhrv * qsgs
+sjbd: swlb / msqv
+bjss: htts / ljdc
+mpgn: fcfj * clsm
+ljvg: htfw * dnwq
+pllf: 15
+lcjd: cndr * tlvf
+gflt: mmbh + hnqd
+bwrw: 2
+gqvq: ljrc + fhrr
+lmbq: hfln * ctwg
+wwnt: 1
+tlwc: 5
+wmzz: 10
+mdlw: 1
+rrrr: jhhz * llsf
+rvpr: czpn + hdlj
+vpmn: mhjp * fzmq
+rmsw: 2
+jvgl: 8
+bjsf: 2
+fhsc: 2
+lsnh: 8
+thbw: 8
+grpr: blvh + smbw
+rcfm: 7
+fwrr: vpmh * rfzr
+scll: 3
+wntd: 2
+tqms: 5
+hfng: 2
+cdng: rszj * tztz
+bnfw: 11
+gpsg: fmtb / zfzf
+vslr: 2
+qzcj: vmcn * tngw
+qlgr: 5
+scvl: 7
+lwmc: cfnc + mmhg
+mprp: pgtc + jdnd
+fhrr: rvtg * cgnp
+gzhg: mmfp + brcg
+hmlp: mmvb + mlwj
+hsrh: cqlb * wwwn
+dvjb: bwhv + gpsg
+wgqr: 4
+grcb: 11
+dshc: 4
+bhhn: dlbr + rbps
+hbqp: cjlt + bvft
+jjcs: 11
+vlqq: nqbv * ldgf
+hsjc: 3
+lwbb: gvgj + ffwm
+frgg: ntng * vbvm
+fcmn: 3
+bvpp: 2
+mmnh: tsdc + hrrd
+ljpp: 6
+dplp: 3
+vjzf: cjpw * whsb
+fdfq: djhn * hnrr
+cdcw: tccl + tndw
+hcsl: wmtw + zggt
+zjqh: 2
+zvzg: 5
+vdjv: 14
+lczq: 5
+chqf: 2
+cctg: 3
+tsdc: 5
+dzqr: dmtn * jwwh
+bqts: 20
+rrjn: 2
+gfnr: 4
+prgh: 3
+ghvf: 16
+jsbd: rfbj / tzqq
+mmbh: sgmj * gmzv
+gjph: rfln * nssp
+dmrh: dvcv * dqqt
+rntc: brfw + snff
+lsrl: pwdp * htqd
+tshw: lzhr / gpmm
+jhmt: 2
+pbqv: 3
+vbdt: 3
+zhqg: 3
+tpgw: zfnc + lwmc
+qzdb: 6
+hnpn: wcqz * pnvj
+rvfg: mnqw + bhtl
+nvhn: 2
+clpv: 7
+dzvs: 2
+rvtg: gbgh * jbwd
+nhlg: hllm * jlnv
+svpl: crfg * tscb
+hfjw: 4
+sdvs: msmp * dszm
+swpp: 1
+scbz: 11
+rgwv: 4
+btsn: mwrn * qvtb
+thlr: 1
+dnjq: 6
+cwjz: 4
+fqtj: 2
+mwrn: ctts + gblq
+mthc: zdcf / bjsf
+mrbf: bsds / lqlz
+dncv: 2
+rfgg: lsmb * wwhw
+qvgc: 4
+vpzd: 19
+chzh: 2
+tgnn: 12
+rlcm: cbbv + ptdp
+wmtw: 2
+ptvp: 14
+tqhw: 3
+rqpw: mznv + pttc
+vghf: 5
+qvtb: 5
+bfnw: 5
+phmc: ldss * gscw
+hhmh: cvzg * mswb
+zrmh: 9
+pwdp: 5
+czsg: bdzv * jndd
+wdqs: 9
+lpbw: 8
+jmbp: pdgh * hdzg
+lvzd: 2
+lqft: 2
+frhz: 2
+vsrl: 4
+wcbz: 3
+mzjz: jqwf + cvmz
+rtlt: qmpz * mlns
+lzwt: zjrr * zbfm
+crbp: 8
+nzqv: fwrr / gzjr
+zdlc: gphg * cjrq
+nwph: mhhd - sjqq
+szww: 14
+nflj: 4
+dqqt: 7
+jlvw: bbph + hwvl
+ltvg: jdls + tvvl
+cppw: zlrn + ntjd
+tjsp: lhhh + dwmf
+sprj: nzhb * msrb
+nqch: 5
+csln: vdzr * rqtw
+cmgs: 3
+tztz: 19
+cnmf: 5
+bqpl: chts / qzcv
+pcwg: fpdf + trfn
diff --git a/day21/part1.rb b/day21/part1.rb
new file mode 100644
index 0000000..4895237
--- /dev/null
+++ b/day21/part1.rb
@@ -0,0 +1,34 @@
+monkeys = $stdin.readlines
+
+nums = {}
+
+monkeys.count.times do |mix|
+ if monkeys[mix] =~ /(\d+)/
+ val = $1.to_i
+ nums[monkeys[mix][0...4]] = $1.to_i
+ monkeys[mix] = nil
+ end
+end
+monkeys.compact!
+
+while nums["root"].nil?
+ monkeys.count.times do |mix|
+ f, a, b = monkeys[mix].scan(/[a-z]{4}/)
+ unless nums[a].nil? || nums[b].nil?
+ case monkeys[mix][11]
+ when ?+
+ nums[f] = nums[a] + nums [b]
+ when ?-
+ nums[f] = nums[a] - nums [b]
+ when ?*
+ nums[f] = nums[a] * nums [b]
+ when ?/
+ nums[f] = nums[a] / nums [b]
+ end
+ monkeys[mix] = nil
+ end
+ end
+ monkeys.compact!
+end
+
+puts nums["root"]
diff --git a/day21/part2.rb b/day21/part2.rb
new file mode 100644
index 0000000..ab88699
--- /dev/null
+++ b/day21/part2.rb
@@ -0,0 +1,78 @@
+def mutate(eqn, tgt)
+ if eqn[6..9] == tgt
+ op = case eqn[11]
+ when ?+; ?-
+ when ?-; ?+
+ when ?*; ?/
+ when ?/; ?*
+ end
+ "#{eqn[6..9]}: #{eqn[0..3]} #{op} #{eqn[13..16]}"
+ else
+ case eqn[11]
+ when ?+
+ "#{eqn[13..16]}: #{eqn[0..3]} - #{eqn[6..9]}"
+ when ?-
+ "#{eqn[13..16]}: #{eqn[6..9]} - #{eqn[0..3]}"
+ when ?*
+ "#{eqn[13..16]}: #{eqn[0..3]} / #{eqn[6..9]}"
+ when ?/
+ "#{eqn[13..16]}: #{eqn[6..9]} / #{eqn[0..3]}"
+ end
+ end
+end
+
+monkeys = $stdin.readlines.reject { |l| l[0...4] == "humn" }
+
+prev = nil
+need = "humn"
+loop do
+ cand = monkeys.
+ select { |m| m.include?(need) }.
+ reject { |m| m[0...4] == prev }[0]
+ cix = monkeys.find_index(cand)
+ break if cand[0...4] == "root"
+ monkeys[cix] = mutate(cand, need)
+ prev = need
+ need = cand[0...4]
+end
+
+root = monkeys.select { |m| m[0...4] == "root" }[0]
+candname = (root[6..9] == need ? root[13..16] : root[6..9])
+monkeys.delete(root)
+
+cand = monkeys.select { |m| m[0...4] == candname }[0]
+cix = monkeys.index(cand)
+monkeys[cix] = "#{need}#{cand[4..16]}"
+
+nums = {}
+
+monkeys.count.times do |mix|
+ if monkeys[mix] =~ /(\d+)/
+ val = $1.to_i
+ nums[monkeys[mix][0...4]] = $1.to_i
+ monkeys[mix] = nil
+ end
+end
+monkeys.compact!
+
+while nums["humn"].nil?
+ monkeys.count.times do |mix|
+ f, a, b = monkeys[mix].scan(/[a-z]{4}/)
+ unless nums[a].nil? || nums[b].nil?
+ case monkeys[mix][11]
+ when ?+
+ nums[f] = nums[a] + nums [b]
+ when ?-
+ nums[f] = nums[a] - nums [b]
+ when ?*
+ nums[f] = nums[a] * nums [b]
+ when ?/
+ nums[f] = nums[a] / nums [b]
+ end
+ monkeys[mix] = nil
+ end
+ end
+ monkeys.compact!
+end
+
+puts nums["humn"]
diff --git a/day21/test b/day21/test
new file mode 100644
index 0000000..e14be60
--- /dev/null
+++ b/day21/test
@@ -0,0 +1,15 @@
+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