From eac460417c7ee06bc4af4d26191036a4c14c4980 Mon Sep 17 00:00:00 2001 From: Keenan Tims Date: Thu, 14 Dec 2023 22:07:49 -0800 Subject: [PATCH] day15: problem 1 & 2 solutions --- 15/Cargo.lock | 7 +++ 15/Cargo.toml | 8 +++ 15/input | 1 + 15/src/main.rs | 165 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 181 insertions(+) create mode 100644 15/Cargo.lock create mode 100644 15/Cargo.toml create mode 100644 15/input create mode 100644 15/src/main.rs diff --git a/15/Cargo.lock b/15/Cargo.lock new file mode 100644 index 0000000..2473428 --- /dev/null +++ b/15/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "day15" +version = "0.1.0" diff --git a/15/Cargo.toml b/15/Cargo.toml new file mode 100644 index 0000000..f52c8dc --- /dev/null +++ b/15/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day15" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/15/input b/15/input new file mode 100644 index 0000000..1c4be4c --- /dev/null +++ b/15/input @@ -0,0 +1 @@ +dcf=3,hp=9,kjfhxf-,hpmvrg-,pnb=7,zxz-,vrmt=4,ghrx=7,fz-,vdx-,pbft-,sxlz=7,pdh-,bdm=3,tp=1,bpf=6,ftx-,vc-,bc-,jcm=9,kfgm-,jlfmd=4,bgc-,fs=4,bsqpf-,hsk=5,cr=9,dn=1,xs=8,qdht=1,gtd=6,ccd=4,ngk=1,fp=8,vhf-,hvd-,kxssfz=5,ks=2,llnh=9,rv=8,mj=8,bf-,jrdv=5,jf=9,lpkjx=6,bnf=8,fz-,zxz-,nxsx-,rz-,mkt=1,db=2,lmvv=5,hgnj-,xlh-,mz-,ghcf-,fm=3,lsz-,mqgk-,ldxvr=9,kqkxm=8,gkc=3,rkl-,jxv-,fmgd-,dmbgc=2,sdp-,xv-,zsf=6,gbfp=6,tjbpt-,cs-,ks=1,nct=4,qlv-,jrdkpm=1,nm=3,pncdx=6,xg-,zq=9,kmxnp-,lfqd=5,vp=1,rdl-,fz=3,mbt-,sdp-,vhx-,jcm=5,skz=1,fzq-,fvzbl-,kbtbvk=6,tpv-,gbfp=9,gbfp=3,xnz-,djl-,nb-,nzh=1,zgcr=5,fmgxs=8,tk-,skh-,fvqx-,jsbjs-,cc-,fvf-,mqgk-,mjrkp-,qz=3,db=1,gm-,vckn-,bf=2,cp-,qnjf-,fm-,kzt-,kdt=5,nm-,bnf=8,xnt-,rtf=5,qsvbm-,ngj=5,vp-,mxnm-,kgg-,btd=1,ghcf-,mrm-,nct-,hpj=8,ntrxnc-,dbh-,jld-,nclb-,mkt-,vckn=1,hpmvrg-,rsn=3,jzr=8,gf=9,sff-,jlfmd=1,fc=8,bnl-,jrdv=1,cr-,bj-,zl-,vv-,qkdghh=3,rdl=2,fthhk-,btbbbg=2,qsvbm=3,jfjn-,qsvbm-,vc-,cn=4,zdjz=5,tjbpt-,xj=1,qhzp-,gnknqg-,rvcl-,kz-,xzbk=9,vqs-,zlss=3,rld=5,rtf=7,qp=5,gtp=4,chsk-,mr=4,tp=2,dcb-,zcm-,jnr=7,pld-,czlvx=9,mlgj=6,bm-,grn=5,gct=9,xd-,ks-,mlgj-,jxv=1,gbfp=9,vckn-,cqn=6,jjfth-,hksq-,lpkjx-,rl-,cl-,br=8,jpm-,pg=1,czlvx=3,qdssh-,cx=5,sdp-,hr-,pg-,brn-,xr=7,qd-,hpgq-,nbvjjn-,qkdghh=4,fvzbl=1,sjd=7,qm-,nz-,jcm-,dk=5,bgj-,cnspxc=9,ls-,zhbz-,rsnmqs-,bhv=6,sp-,csr=8,fvqx=3,lmvv=2,bzqbb-,qzf-,tx-,gpl-,xlh-,pg=2,xcc-,rl=2,kbtbvk-,xg-,sp-,sz-,mz=9,bp-,rtf-,bsvql=6,pncdx-,lr=7,gpd=6,srtdk=9,kgtg-,mhz=6,dh-,gkc-,tvhg-,gxx-,tt=3,dj-,rhj-,zcm=4,nq-,xr=9,rtxm=5,br=4,hg-,rv-,ppt=5,df-,jn-,ks=7,qgg=1,zgsvvh-,hpmvrg-,hsk=5,cx=4,dlc-,jpm=4,jm=2,tt=6,mz=7,vf=3,jpm=2,jlkf-,lr-,sjd-,jxjns-,fpj=6,qlv-,jnr=6,dd-,rp-,xf-,npvb=2,qxm=8,br-,sp-,fm-,mf-,rsn=1,pclz-,qxm-,mj-,chsk=5,zq-,lsz-,jfnt-,bpf-,jgkvdq=4,pz=4,rv-,bsvql-,rhj=8,ppm=7,fz=5,fkg=3,cr=3,mvbgm-,xlh=9,frszb=5,sff-,qv=2,mhz-,hv-,xlh-,grn=2,hnqsn-,rsn-,hds-,sjkxq-,pld=7,qlt-,grn-,rc-,tft=7,nztgd=6,fhxq=4,jbn=1,fc=1,fmgd=7,mbnpqk-,mlg=4,ls=8,zmj=1,txvfx=8,gxp-,mjbcps=4,rz=4,qv-,fp=8,hxr-,lhd=1,rhj-,lhd=5,hm=8,njg-,btbbbg=5,sdp-,lnkkl-,jrk=3,sjvs-,btd=8,hgx-,gjtq=1,tk=1,vj=7,tnf-,ck=5,dprj-,lr=9,ngvmt=5,jk=2,sff=9,frszb-,dkhv=4,xq-,dlc=6,hp=6,psh=4,nlmjb-,hfr=2,zcz=5,xcbsp=6,jlhx=5,txc-,tn=6,lpkjx-,bj=4,nhzcjt-,bzqbb=2,brh=1,drdn=7,vhx-,lfz=8,dkhv=1,gxx=5,zlc=5,qz=7,kzt=5,dsxdt=2,gbfp-,fmg-,gjtq=2,jn-,lmbhsl=5,qm=8,ccd-,ldxvr-,mbnpqk-,vg-,dn-,bj-,bp=8,qhzp-,mqgk-,btvq=8,fzq-,htf-,nnfmq-,ck-,bzqbb-,bshcdm=2,dsxdt=6,lhc-,rvcl-,jgvk-,cc-,tvc=2,fs-,qcn=9,qff=6,dmz=5,kqmx-,qgg=3,mr=3,jgknh=2,gknp-,rpq=1,hksq=6,tsg-,bf=8,dcb-,qdht=5,fc-,mfjf=9,qdssh=3,htf-,qgp=8,rf-,kk=3,sn-,bshcdm=7,nclb-,hgnj-,xtd=6,jk-,jtkj=9,nhzcjt=6,xt-,hsk=5,bf-,zl-,cc=1,phxt=8,bj=4,lhd=9,zgcr=6,qf-,bj=8,bhb-,ks-,cx-,czlvx=9,lvh=7,jrdkpm=7,rv-,rkl-,jrdkpm=7,gf-,bgj=4,qdssh-,hd=3,kc=8,jzr=7,cl=7,gtd=8,fc=2,rpq=6,jkh-,zxz-,fksj=4,sxlz-,xj-,vckn-,dj=5,zb-,hds-,bgn-,ngk=6,hfr-,vrmt-,knv=6,pncdx=9,kbtbvk=1,lj=1,zkj=7,jpv-,rv-,smk=6,gndr=8,thddd=9,kp-,rsnmqs-,mj=6,fthhk-,bjgh=3,xj-,vnqslq=9,npvb-,pvn=7,kdj=8,lclv-,pclz=1,skh=5,xd=2,rld=1,bj=9,lqbq=9,vzm=5,srtdk-,kc=2,xdhk=2,kdj=3,lmvv=1,plc-,gknp=9,xbddc=1,jrdkpm=9,vm=6,xv=6,hksq=7,djl=2,hg=9,hk-,khcq-,zlc=7,tvc=4,qf-,qnjf-,nq=7,vm-,frszb=8,jqx=6,jtm=7,bsqpf=2,rdl=6,gtd-,sxlz=7,ls=5,hr-,th-,vbt-,bpf-,xv-,pd-,kgtg-,xtd=7,kkt=5,skz=4,vhx-,dcb-,rzk=4,dcf-,pbft=8,zd-,mqgk-,rvcl-,rv-,nclb=9,mjbcps=1,pclz=4,psh=4,jgkvdq=3,bhps=8,bjgh-,jtm=1,csr-,mlg=7,vdkm=2,jcm=4,smk=6,bdm-,gknp=7,rg-,gxqs=8,rl=1,hsk=9,kt-,jbn-,zcm=8,rhr-,fmgxs-,bhv-,hzh-,vt=9,txvfx-,mf-,rg=8,fmg-,cl=2,hd-,fz-,lv-,xgsr-,fp-,hp=1,rg=1,gtd-,gknp-,hpmvrg=9,tzdg=6,rpq=4,htf-,tq=3,dcf-,dk-,hlrzf=3,vdx-,hpgq=5,kc=8,fhxq=7,cr-,gpd-,snf=7,tqt-,vbt-,hlrzf-,hzrv-,ck=1,jf-,zcz-,fh-,zcm-,rvcl=1,gbv=2,cfx=5,ndhh=8,xks=6,tx-,zm-,dk=7,dbtq-,qlt=9,kcgg=6,mbnpqk=1,qhzp-,vs-,tqt=2,lnkkl-,cx-,jsbjs-,nbvjjn=7,dk=2,jf-,rg=3,rhj-,jdvx-,bpg=7,mbt-,phxt=7,lqbq=2,kkt=9,ldxvr=2,pd-,jgvk=3,hzh=4,dmbgc=4,jrk=5,nm=8,rzk=1,zq-,jsbjs=4,jlfmd-,gpb-,lsz=1,kpz-,rtf-,mjrkp=7,zg=7,xm-,sjvs=3,lnkkl=4,gxqs-,xcc-,tq=9,dndnrr=7,qsvbm-,qsvbm=8,zg=4,ppt-,lv-,gnknqg-,br=9,rtf=2,kjfhxf-,fc=2,jrk=7,bzqbb=4,xpt-,qff-,rp-,bnf=2,dlh-,zcm-,zmj=1,bshcdm-,fmg=6,nkbb=2,bn=7,zdjz-,snf-,ldxvr=2,tzdg=1,lhc=1,xv-,pvn-,dh-,mqrr=8,hpmvrg-,bh=5,jk=4,mvbgm-,zdn-,xnt-,rtf-,tzdg-,vzm=6,lhd-,nz-,mf=1,bgn=7,txvfx=2,nm=6,nq-,pvn=6,jxjns-,zmj=3,kpz=4,kpz-,xcbsp-,nrfpf-,lv-,dj-,jn-,btbbbg=4,cf-,nm=1,mqrr-,nb-,gbp-,bj=6,xdv-,bh-,jzr=7,gkc=6,zhbz-,hx=6,lr-,bz-,bfhqb=6,kfgm-,xf-,tzdg-,xf=5,csr-,xzbk=6,hnqsn-,djl-,jf=1,mbnpqk=1,jt-,zmj=3,kkt-,cs-,ngj=1,lgc-,jf-,lhd=6,llr-,nct-,kxssfz=1,xr=9,gnknqg-,zg=9,lfz-,jk-,rxc-,sjd=8,bzq-,tpv=9,pvs-,vch-,fmgxs-,mlgj=7,qr=8,rl-,zgcr-,nrfpf=9,nhzcjt=5,dcb-,mr=1,kgg-,srtdk-,xlh=5,btd=8,vp=6,xv=2,vnqslq-,xcg=8,rz-,mv-,sjd=9,czlvx-,hx-,gknp=8,zcz=7,jdvx-,pclz-,hsk-,sl-,vg-,lv-,gpb=4,zcm=4,zlj=6,db-,dd-,nlmjb-,fc=1,jtkj-,qgp=9,vm=2,ntrxnc-,hds-,qdht-,rldfx=4,lvh=1,dlc=8,sn=6,gjtq-,cf=1,fvzbl-,jkh=9,snh-,jms-,xpv=6,mvbgm-,lt-,jbn-,rx-,lvh=1,lsz=4,zb=2,ftx=8,fgbjn-,qm-,btbbbg=1,xm=6,hqzl=2,xj-,hvd-,sxlz-,rhr-,jnr-,snh-,cdj=1,vdx=5,hzrv-,pd-,hqtr=9,sql=7,ccd-,jlkf=3,sz=2,gvzt-,smk-,ndhh=6,fk=2,rsn-,jgknh=8,sjd=1,tjbpt-,jlhx-,hk-,tp=9,brh-,qcn-,bsvql-,xm-,rz-,ldxvr=4,hlrzf=4,pbft=4,bnf-,ngc-,hd=8,ptr-,pclz=8,bnl=9,xpq=4,nnfmq-,zkj=9,plc-,bpd=3,dhct=4,cf=3,btd=7,tvmgv=9,xks=7,qkdghh=2,ppt-,kk-,ks-,hgnj=6,drdn-,kxssfz=6,bnf-,tj=6,qcn-,dkhv=5,qr-,rd-,jpm-,tq=6,hzrv-,mbt=2,hzh-,dmbgc-,jld-,vgdb-,sg=4,jh-,hlrzf-,ppm=7,gndr-,npvb=4,mkt-,lfz-,vt-,vs=8,xpq=3,hv-,sjm-,vckn=9,pncdx-,jrk-,frqh=6,vgdb-,pncdx=1,xlh=9,xf=6,fmgd-,lhc-,vc-,js=1,qf=7,md=6,bnl-,kjfhxf-,mdp=4,cq=2,nfq-,zkb=9,glqxjt-,rzp-,jxv=4,xbddc-,bnf-,vhx=8,czlvx=4,xcg-,hxr=6,gvzt=3,pn=4,rf-,xks=1,ch-,vj-,gcc=8,dcb=8,fcpm=7,jl=4,jjfth-,rp=2,cdj=8,zq-,rrcx=8,bhv-,gpd=7,jbng-,vgdb=9,pq=1,hgnj=7,xg=9,hzg=7,lr-,hgt-,jnr=9,ht-,jdvx=7,xm-,jlkf-,nlmjb-,vt-,fmgd=9,kmxnp-,hnqsn-,fs=5,psh=8,gknp=5,qd-,srtdk=8,btd-,mdp=1,rldfx-,mfjf-,bpzlm=7,jlfmd-,db=1,nhzcjt=4,mbnpqk-,sg-,nd-,tjbpt-,jdvx-,rz-,ccd=3,rtxm-,tk-,gbp-,pn=4,sj-,cqn=7,rg-,xs-,dmz=6,xg-,xdhk=9,cq=8,hsk-,rv-,fk=5,rtxm=5,gvzt=8,fq-,ldxvr=1,lj-,htf=1,hfr=1,qr-,vt-,ntrxnc=6,mz-,glqxjt=8,snf=7,dtpzc=8,ftx-,vds-,dhct=1,jrdkpm=3,lt-,bvm=8,xjs-,vf=4,fp=1,bpgjt-,jpv-,ngj=7,lfqd=7,dbtq=1,rz-,gbv=7,kpz=8,fvzbl=6,njg=4,mlg=8,dmf-,rtf-,xnt-,grn=5,cn-,rvcl-,rsn-,vhf=4,jvbr-,jxv-,jsbjs=1,qdssh-,vdkm=4,fcb-,qf=1,kxh-,qkdghh-,xnt=4,krsn=7,jsbjs=6,xd=7,kb-,gxqs-,jgkvdq-,nbvjjn=3,djgv=5,mz-,nxsx=6,rpq-,kt=7,gbv-,ngj=9,hpgq-,df-,tvc=5,hzg-,fk-,xlh=7,njg=4,khcq=4,ngc=2,lpkjx=4,mv-,lfz=6,hdlp-,npvb-,bvm-,kcgg-,lmbhsl=2,zkb=8,rf=3,nrfpf=6,sql=3,xdv-,zt=3,qkdghh=1,pg=4,lmrl=5,bj-,bpzlm-,nkbb-,xdv=5,kc=6,cdj=4,rzp-,jk-,gm=3,qzzdfc-,txvfx-,bp-,hkdl-,kx=8,bhb-,hp-,tt=1,cb-,mlg-,fpj-,sp=1,kxh=2,gkqs=9,xnz=8,qnjf=1,bnl=4,jfnt=4,xcc=4,zlc-,knv-,ls-,jh=8,mhz=3,dprj-,kb=9,lmbhsl-,rzp=4,dd=2,nxsx=7,lqbq=5,vch=5,htf=5,sjvs=3,pnb-,vp-,djl=8,lmvv=8,gtd-,gvzt-,dlmm=5,txc-,mbnpqk-,flb=3,zt=6,vzm=3,hp=7,kdt=1,cdj=4,glqxjt-,fthhk=5,qff-,lnkkl-,jgknh=7,dc=4,xpq=8,jm-,xbddc=4,ccd-,gxp=7,pvn=7,jgvk-,bnl-,vdx=6,nct-,skh=8,hfr=9,bdm-,qn-,qdssh-,jjfth=9,jdvx-,jfnt=2,kzt-,dq=1,hx=6,lpkjx-,dn-,rc-,vbt-,vm-,ppt-,kxh=5,xnt-,mbt=4,xd=5,xcc=7,ht=2,qp-,fs=2,sdp=7,js=7,kgtg=9,lk-,zd=5,sff-,hqtr=9,tft-,zgsvvh=8,plc=5,dnr=1,bsvql-,kg-,nclb-,rl=8,bgn=1,zkb=4,tqt=6,njg-,dbtq=1,hx-,pnb-,sn-,fmgxs=5,xlh=7,tvz=3,hk=6,jlfmd=8,ngdqv-,ggdh-,zlc=6,ch=8,hqtr-,cqn-,fvk-,ngj-,gd=5,sn=4,lpkjx=4,qxm-,dtpzc-,pn=5,mqgk=2,fmgd-,xpn-,kqkxm-,jt=2,txvfx-,snf=2,qxm-,jqx=7,kgtg-,xv=5,cdj=8,lpkjx=4,cx-,mdp=3,llnh-,vds-,hqzl-,lclv=6,hqzl-,kdhp-,djgv-,xcbsp-,dd-,jbn-,fvk-,vbt=2,jd-,hk-,kdhp=8,xg-,btvq-,gkc=4,gd-,jlfmd-,dlh=5,qgp-,mjbcps-,cs-,qgg-,kkt=3,vx-,lqbq=3,zsf-,rz=7,bpg=7,skh-,njg-,dh-,zq-,bpgjt-,fsx-,cr=1,cp=5,kzt-,sxlz-,xnt=7,jgknh=8,brh-,sjm-,gknp-,tsg-,rxc=5,cb-,gt-,zdn-,bz=4,jld=1,zhbz=5,jcm-,pvn=8,frszb=9,ghrx-,fx-,mz=3,bfhqb-,vc=2,dhct=3,gnknqg-,xg=5,zq=5,snf=5,dlmm-,rf=8,bshcdm=2,zgcr=3,jtqb=9,gbv-,zlj=8,kxh=3,zhbz=6,mjbcps=4,kgg-,plc-,qdssh-,rv=2,jfnt-,fmgd-,jzr=6,vm=8,gtp=3,fm-,bnl-,kb=7,brn=7,sdp-,vdx-,snf=3,dbtq=4,kzt=7,xbddc-,vj-,qsvbm=8,qnjf=8,qz-,jzr-,qm-,qp=7,qz-,mrm-,xjs=4,nzh-,qcn=1,sn-,nclb=9,kt=3,mxnm-,ldxvr=7,vx=6,rldfx-,qlv-,knv=6,bpg=6,pz=3,qp=5,fds=7,thddd-,gndr-,vbt=3,bhv=1,flb-,sp-,kpz-,qlt-,jgkvdq-,fmg=1,jh-,db=7,ht-,lv=8,nxk-,rvcl-,sjd-,jtqb-,jrdkpm-,gvzt=1,vds-,jlfmd-,qgp-,mxnm=5,vg=4,tzdg=1,vdkm=2,llnh-,jxv=1,mbnpqk=6,rvcl-,tvc=7,gt-,nbvjjn=2,lzqxj-,glqxjt-,dbh=6,zdjz-,gkc=6,hnqsn-,zdn-,fgbjn=5,kzt=4,cs-,fsx=3,vj-,xq=8,jvbr=7,vj=6,xbddc=9,gnknqg-,cq=8,vds-,hgx=4,zlj-,br=4,lfqd-,qxm=3,zbnl-,bshcdm=5,vckn=7,qz-,flb-,qf=3,tsg=8,qz-,xgsr-,jlhx-,vqs-,ngk-,nnfmq-,zcz-,vds-,ngdqv=9,qgp=1,rzk-,sp=4,xdv=1,nkbb=5,bh=4,xgn-,czlvx=9,hsk=7,jk-,vj-,rg-,ntrxnc=3,rtf=9,bpzlm=6,fmg-,xgsr-,lgc-,jlhx=2,tx=3,nxk=3,fmgxs-,mr-,vx-,nhzcjt=9,gxp=2,brn-,rz=2,bf-,nj-,ls=2,jrdv=8,kx-,rsn=6,hds-,tp-,nztgd=6,phn-,tnf-,smk-,fh=7,vj=8,ppbqks=9,ht=4,qgg-,fk-,jgkvdq-,kpz-,kklrf=7,rv=9,nxk=1,hr=1,dj-,jtm-,kgg=9,nfq=7,ls-,zlj-,tk-,phxt-,fksj-,nd-,zcm-,tx-,jbn-,kjfhxf-,kmxnp=2,zxz=2,vds-,fthhk-,dcb=1,flb=8,fcb-,gndr=6,jsbjs=7,jgkvdq-,xgh-,zlj-,jxv=1,nhzcjt-,jgvk-,mf=6,rtxm-,dmz=5,bzqbb=5,kg-,htf=5,fds-,xv-,frqh-,xjs=2,sjm-,jrdkpm=4,mxnm-,lfz-,btbbbg-,tt=8,hzg=4,kb=9,hpmvrg-,fcpm=7,fs=6,ggdh-,ldg-,gpb=3,nbvjjn-,db=6,frszb=3,cn=4,zlj-,kqkxm-,hlrzf=7,tjbpt-,gpb-,mqgk-,fzq=5,xgn=7,lzqxj=9,mqrr=9,xtd-,lclv-,bsvql-,ftx=1,xj=8,qsvbm=8,lsz=7,nb-,tzdg-,sn=9,fzq=4,qcn=4,kmc-,jt-,jjfth-,cr-,jlfmd-,ppt-,fthhk-,kb-,pz-,hkdl-,jd-,hxr=9,vg-,bpg-,tft=4,ht-,xjs=1,cc=5,sl-,ht-,xj=2,hp-,btvq=5,cfx=8,nnfmq-,qzzdfc=2,mhz=1,vhf=7,tsg=5,jqxdvz-,glqxjt-,kxssfz=9,hlrzf=7,hkdl-,zmj-,kklrf=1,cb-,fmgxs=3,pg=1,qsvbm=7,tt=3,gbv=2,dd-,vt-,xnt=4,xs-,qp=1,fthhk-,dkhv-,rzk=1,zlj=6,nct=3,ntrxnc-,dndnrr=3,fvzbl=6,dh-,brh=7,vbt-,thddd=8,kqmx-,ghcf-,rtf-,kx-,qgg=5,vv=9,fz-,zcz-,hdlp=4,flb=7,bpgjt-,zdjz=8,bpf=8,qnjf-,gbfp-,cb-,cq=5,gpd=7,lnkkl=2,bpd=8,ntrxnc-,xgsr-,cs-,lj-,smk-,rg-,dsxdt-,mjrkp-,jdvx=6,lnkkl=4,tvc-,mrm=5,zhbz-,vrmt=2,cfx-,jn=2,cq=8,tfp-,bjgh=1,mqgk=5,hgt-,tmxl-,vhf=8,zgcr=8,mxnm=3,bdxx=9,xnz-,dkhv-,vt=4,qz=6,zd-,xgn-,fp-,pbft-,nkbb=8,tfp=3,lmbhsl=8,nd=6,xcg=6,bm-,hnqsn-,fthhk-,hpmvrg-,qgp=5,phxt=4,fcb=2,hm=7,jgknh=8,jrk-,fh-,bjgh-,ngj-,nz=2,vs=1,xcbsp-,dmbgc=1,fthhk=7,xjt-,gbfp=7,hv=8,ks-,fkg-,kzt=5,zkj-,xtd-,mxnm=4,kgtg=2,fvk-,vds=8,glqxjt-,tnf-,hds=9,jrk-,ngdqv=8,pslp=3,nj-,jvbr=1,gtp=4,hmnr=6,ghrx=7,bhps-,jld-,vp=1,gnknqg-,kk-,kfgm-,jlfmd=2,rsnmqs-,kdj-,sg-,xd=6,fc=2,rldfx-,kfgm=1,csr-,ln-,cc=3,zq-,kmxnp=3,nj-,xlh=6,fcpm-,jms-,nlmjb=8,nclb-,vckn-,hr-,gct-,krsn-,vds=6,zg-,ngc-,hv-,jl=1,llnh=3,czlvx-,tvhg=2,rtf-,cnspxc=4,ngvmt=2,tfp=6,hx=7,kxssfz=2,pg=5,kp=2,lk=4,mxnm-,qnjf-,bsqpf-,fc-,xpq-,vf=3,njg-,bzqbb-,mfjf=8,tq-,jlhx=9,fl=1,vhx=7,jpm=1,vc-,gtp-,lr=8,qdht-,lhd-,pclz-,drdn-,vqs=2,jrk-,xm=8,fc-,rd-,zsf-,cn-,bfhqb-,ngc=9,jrdkpm=5,cr-,gtg-,vc-,xpv=7,sjvs=8,fvf-,vds-,ppt=2,vs-,rg-,hksq=9,zgsvvh=6,bv-,vf=6,vf-,pq=1,mz-,skz-,dn-,jk-,mlg=3,gknp=5,qzf=4,bdxx-,qv=8,pdh-,nnfmq-,fpj-,ldg=5,zkj=8,hds-,kb=9,gxx=3,bj=7,qkdghh-,xgsr=2,xr-,fcb=7,nnfmq=9,dlh=4,dsxdt-,lsz=1,pn=5,jpm-,kmc-,lsz-,lfz-,sjvs=1,tsg-,kkt-,xpv-,btd-,sj=1,dlc-,gxqs-,cc=4,mqgk-,vhf=1,lhc-,xnz-,nb=4,dj-,nxk-,nct-,fx-,qd=3,cqn-,drdn-,fksj=1,kfgm=8,jlfmd-,psh=3,fcb-,xg-,zt-,vhf-,cb=4,mjbcps-,jkh-,cb=4,lmvv-,fkg-,bpzlm-,jrdkpm=2,bshcdm-,zd-,qf=5,skh=6,gm-,qzf-,kg-,jkh=5,phn=9,fzq-,lv=1,kcgg-,pq=6,zhbz=6,gct-,krsn=8,qr=1,xks=5,frszb=3,mlgj=4,txc-,rsn=5,bpf-,tvmgv-,bpgjt-,cc=4,csr-,llnh-,ck-,xm-,ntrxnc-,xcc=1,vqs=9,hgx=9,nlmjb=3,fz=2,kgtg=9,kxssfz-,nbvjjn-,mvbgm=4,rz=4,kb-,ghcf=8,ln=6,kcgg=8,xt=6,fzq-,fgbjn=8,fvzbl-,lmrl=3,bn-,lmrl-,nlmjb=9,nxk-,mkt-,qd-,jxv=8,hgt-,kt=7,fc=3,ch=8,zt=3,lnv-,xjt-,knv-,sdp-,khcq-,gxx-,grn=2,zg-,vgdb=9,mvbgm=4,sjm=4,bpgjt-,gxx=1,ls-,ls=8,qn=7,kt-,rzp-,sj=9,bf-,fpj=4,bdm-,bpzlm=3,mbt=5,mlgj=5,lmrl=1,lgc-,fgbjn-,nkbb-,xpt-,rsn=2,jdvx-,zbnl-,lj-,sn-,xjt=3,dndnrr-,fmgd-,bdxx-,qr=3,jtkj=8,tt-,rkl=7,hqzl-,qd=5,glqxjt-,lfqd-,vv-,hqzl-,ntrxnc-,xf=8,fs=3,xnz-,mhz-,cq=3,rp-,tvmgv-,fs=4,tvmgv=6,dlc=2,hd-,frqh-,jtm-,nz=2,mkt-,bv-,vdx-,mr=8,pvs-,jdvx-,khcq-,jlfmd=4,gxqs-,jtkj=4,jjfth-,xks=9,bzqbb=2,ndhh-,sjm=4,btbbbg=9,psh=8,ppbqks=1,ldxvr-,thddd=1,bn=3,fksj=5,vv-,fm=3,xf-,btvq-,dk-,xnz-,ldg=6,bzqbb=5,zcm=2,xs-,tpv=3,mz=9,jgkvdq=9,vgdb=5,nztgd=6,sjkxq=7,lt=3,tvz=4,htf=8,fhxq-,ggdh=5,psh=4,cf=3,lclv-,bfhqb=8,rhr-,tvmgv-,xj-,dsxdt-,kdt-,fs=2,hp-,rkl=3,zgcr-,zq-,jzr=9,jxjns-,bpzlm-,vx-,mj=4,lclv-,hzrv-,tvc=1,jjfth=9,fs-,xq-,fgbjn=4,hk-,xg=5,nd=1,cb=7,tft-,sjd-,dlmm=8,bnl-,tsg-,jl-,khcq-,jh=4,lclv=7,gt=3,kfgm=9,sdp=1,xr=7,xdv-,dmz=3,pd=5,sl-,xj-,rl-,txc-,tsg-,rtxm=5,qkdghh=8,jpm-,zhbz=7,jgvk=7,gxx=8,pncdx-,plc=2,tp=8,zkj-,ghcf=8,nd=9,tmxl=6,btbbbg=9,kdj=5,qcn-,djgv-,jpm-,mrm-,pvn=7,djgv-,xs-,jjfth=6,kpz-,vqs-,hqzl-,bgc-,pnb-,jh-,fgbjn=2,kg-,ccd-,kx-,hvd=8,rl-,lv=3,thddd-,bgn=6,nbvjjn=6,pncdx=5,fmg-,zcz-,snh=8,dcf-,jgvk=2,ppt=5,bpg-,bsqpf-,js-,jpv=4,xcc=3,fthhk-,vzm=4,rg=3,rg=8,qnjf=3,xg=2,dd-,jrdkpm=1,rldfx=9,hzg=5,md-,bsqpf=8,xg=8,qxm-,cn-,htf=1,snf-,jt-,gpd=7,jl-,zkb-,knv-,hxr-,pn-,jbn-,hpgq=5,xnz-,ngvmt-,rldfx-,lclv-,qf-,vch=4,gvzt-,kp-,jtm-,kgtg=3,vds=9,sz=8,bn=8,rrcx-,jtkj-,bdm=3,fpj=5,rtf-,kk-,dmf-,tt=5,sfhd=7,bh=8,jld-,dj-,kdj=2,hds-,js=1,kp-,pg-,pg=8,zhbz=8,lmrl-,xj-,dndnrr=6,cr=6,qd-,bgn=5,tvz-,xg-,jtm-,rp-,gkqs=9,hgt-,csr-,pdh=2,rp=6,fh=4,qn=2,bp=5,zcm=1,hpgq-,qsvbm-,hd=1,kpz-,tfp=7,dj-,cr=7,fcpm-,fnkf-,btvq=9,jm=9,qz-,cfx-,gxqs-,sql-,bhv-,bgc-,zcm-,jqx-,ln=3,smk=7,fs-,lfz-,czlvx-,qcn=9,vj=1,sl-,vds-,hv=5,kzt=5,cb-,smk-,zhbz=9,rp=9,fkg=4,zlc-,tjbpt-,mvbgm-,rz=5,mqgk-,htf-,khcq-,vv=7,ht=5,zb=4,csr-,jrk-,nbvjjn-,hkdl=1,hfr-,pld-,skh-,rxc=1,gf=9,rzp-,jzr-,nd=5,dc=1,dlc=8,ht-,qd=4,xr=3,zxz=6,rp=2,fbd=3,sn=7,kx=1,bf=2,vx-,pz=5,jnr=9,jkh=9,vzm-,pdh=3,flb-,kz-,nzh-,hp-,hzrv-,cf=3,bpzlm-,xgn=7,fnkf=9,drdn=9,hv=2,hx-,gcc-,qsvbm-,kqkxm-,mdp-,sz=3,mbnpqk-,qz=7,lqbq=3,chsk=5,gkc-,db=7,gct=7,sff=4,hx=2,txvfx=1,fnkf=9,sz-,kmxnp=7,fk-,lhc-,kfgm-,jt=7,sff-,hqzl-,nhzcjt-,vx-,cqn-,dbtq-,pvn=6,fl-,fq-,rl=1,flb=3,gpl-,nm-,sql=3,cl-,psh-,jrdv=8,mxnm=8,br-,rtxm-,hm=7,cf=9,cq=2,xnt-,qr-,sxlz-,hk=1,vbt=2,rx=8,gd=2,qr-,hpgq=3,rqvjg=7,drdn=6,srtdk=1,zgcr-,bp=9,mbt=1,lj=9,gbfp-,sff-,ln=5,jrdv=9,sjkxq-,kgtg-,kxssfz=8,vc-,jlfmd=1,tt=7,jjfth=9,kx-,qd=6,vx=7,btd=2,xdhk=1,xbddc-,dmz-,jfjn=4,dbtq=9,kt-,rxc-,vgdb-,zd-,mkt=8,chsk-,dlmm-,fbd=1,ghrx-,rzp-,xcg=2,fds-,rrcx=5,tzdg-,jl=9,krsn=6,gknp=2,vj=8,dd-,zhbz-,zlss=5,vf=5,sjm=6,hqzl=9,rzp=7,hqtr-,bpzlm=9,gkqs-,js-,jbng-,nnfmq-,xs=2,ld-,rpq-,md=5,jn-,cb-,dhct-,dq=8,xgsr=5,szr-,nrfpf-,tq=7,fsx-,knv=2,mv=6,lvh=4,djl=8,zsf=2,vt=2,jlkf=9,ck=1,vbt-,hlrzf-,zb=8,zd=5,qcn=1,bc=7,mqrr-,vs-,tp=1,fpj-,lvh=9,bsqpf=5,kmxnp-,lfqd=7,rhj=3,qf-,dcb=4,bgn=5,mxnm-,bp-,ck-,dprj-,nz-,xlh=6,tvhg=4,xnt-,qdht-,mxnm=3,cs=3,fbd-,jxjns-,rx-,vf=2,fx=5,smk=3,bfhqb-,mhz-,kp=7,bv-,jgknh-,qzf-,nnfmq=1,gcc-,zsf=2,fcb=6,fz=1,txvfx=2,mrm-,bp-,bvm=6,rx-,qlv=3,xnz-,bpf-,bc=6,hpj=6,kz-,ck=7,dmf-,hzrv=2,xpt-,sg=1,xjt=9,vgdb-,zmj=5,tnf=6,dndnrr-,txvfx=4,ld-,pn-,sjm=9,xm-,frqh=2,drdn-,jrk=4,gd=4,djgv-,kmxnp-,gnknqg=9,sdp=5,fksj-,pn-,hds=9,hgnj=9,qkdghh=8,tvz=7,vg-,sj=5,krsn=7,tn-,cp=9,tzdg-,rsnmqs=5,gkc=5,zz=1,tjbpt=1,mjrkp=2,nq=4,vp=7,jrdv=8,hm=1,dk=7,kbtbvk-,kqmx-,rsnmqs-,zl=6,fnkf=3,ldxvr-,df=8,dj=8,ggdh-,bm=2,gtd-,ftx=1,bpzlm=8,hnqsn-,hzrv=8,bpgjt-,rl=2,qnjf-,xq=7,bfhqb=7,dsxdt=7,zlc=7,fx=1,dlmm-,hdlp=9,lt-,hpj=1,vm-,fp=4,ftx-,cb=5,rf-,ntrxnc-,rp-,cnspxc=7,vdkm-,zgsvvh-,zdn=5,rpq=6,drdn=1,zb=6,qn=7,zm-,qz=5,smk=2,gknp=2,pslp=4,rp-,pvs-,dj=1,rqvjg-,jcm=3,mqrr=5,kdj-,mqgk=6,sn=7,bsqpf=8,zdjz-,kx=2,zkj-,xgn=3,mhz-,cnspxc-,dn=2,mlg=6,kqmx=2,jgvk=9,rtxm=7,cfx=7,sz=4,bjgh=3,phn=3,gbp-,vnqslq-,bm=5,vv-,llr=2,tk=4,tmxl-,psh=2,zmj=4,zgcr=4,dlc=8,gtp=7,rzk-,lmrl-,cx=3,cqn=6,xcc-,qzzdfc-,bh=8,pbft=6,sff=3,nd-,jtm-,jdvx=1,jfnt-,jt=6,kc=4,bdm-,dk-,cnspxc=4,txvfx-,qzf-,zlj-,vch-,fvzbl=1,cf=8,zlc-,kfgm-,cfx-,bfhqb-,tfp-,cp=1,kxh=6,bn=4,qkdghh=8,gxx-,qnjf-,xnt=1,ht=7,jk-,xgh=1,gtp-,gndr-,gtd=6,nzh=6,vc=3,mj=7,hdlp-,qr=2,jcm=7,sl=6,hm-,lhc=4,hk=1,fnkf-,nnfmq=9,gjtq-,xcg=9,flb-,kdhp=8,xdv=2,czlvx=7,qxm=6,rsnmqs=6,sjd-,hgx=9,xs=6,hx-,rhr-,qz-,zz-,drdn=9,jbng=1,pbft-,zb=3,kmc=2,kk=2,fmgxs-,zt-,bzq=5,brn-,br-,tn-,dcf=6,tvhg-,vdkm-,vzm-,khcq-,mkt-,kpz=4,dj=2,pn=8,nct=1,sdp=8,vbt=1,xcbsp-,ggdh=3,fz-,phn-,vzm-,jjfth=3,jqxdvz-,ht-,snf=8,zg-,jgknh=2,qff-,sff-,vdx=4,lmrl=4,zz=2,skz-,bgc=8,pg=9,cn-,xlh-,jfjn=2,hqzl-,vhx-,kbtbvk-,ls-,ngc-,zm=3,sp-,vhx=4,vbt=8,rc=8,dc-,rg=3,tzdg-,lhd-,hksq-,ptr=9,hgnj-,bn-,ftx=3,jl-,dbh=1,gt=2,qkdghh=7,mbnpqk-,xpt-,qdssh-,cb-,dd-,tk=4,dlh=4,ks=1,th-,dcf-,nd=3,jqxdvz=9,gknp-,qzzdfc=7,mlg-,jbng-,bnf-,cq=1,qm=1,cs-,kfgm=8,cx=9,bpgjt-,vdx-,sjd=9,xd-,lmbhsl-,nb=8,zsf-,gkc-,xjs-,bpd=1,hzg-,jlkf-,hm=9,llr=6,vs=1,fhxq-,kzt-,gvzt=4,pn=2,czlvx-,kxssfz=5,jdvx-,jdvx=8,nxsx-,qgp=1,krsn=3,qlt=9,vckn=7,csr=5,nj-,cc=4,bn-,zdn-,mbnpqk-,nlmjb=4,hp=7,xf-,qdht-,qv=2,tmxl=3,ggdh-,xpt=3,ggdh-,sjvs-,kbtbvk=5,sl-,bgc=1,dmbgc-,jgvk=6,gtp=2,qgg-,mv=3,qdht=7,frqh=7,bj-,bpgjt=5,nlmjb=5,fhxq-,bvm=7,cn-,qxm=4,rd=4,zxz-,jqxdvz=9,zsf=3,xm-,jjfth-,xgh-,jxjns-,sj-,btvq-,pnb=3,psh-,hpj=1,tvz=4,bpzlm=7,xm=5,bshcdm=9,bpd=4,lmrl=1,cqn=3,lmrl-,mkt=7,vrmt-,gkc=4,hsk=7,gct-,xf=3,jlfmd=3,jvbr-,df=6,xbddc-,gtd=6,vgdb=9,txvfx=7,ngdqv=8,md-,rg=7,zgsvvh-,xdv-,mjbcps=3,jt=5,bzq=5,mfjf=3,jld=5,fvqx-,jfjn=7,jrdkpm=8,lk-,lclv=3,xzbk=5,jld=6,qzzdfc=7,glqxjt=9,fc-,cq-,mf=5,xzbk=4,kb=3,cx-,vnqslq=6,tfp=7,cn-,bv-,skh=7,jzr=1,qgg=6,qlv-,jcm=3,jlhx=3,lv-,bm-,nct-,mf-,xcc=1,nfq=4,njg=5,nrfpf-,hdlp=9,qm=7,rhr-,lt=4,cdj=8,bh=1,bhps=8,hgnj=7,bz-,kpz-,dk=2,jxv-,cb-,ccd=4,dmz-,lhd-,vzm=6,tsg-,bjgh=1,md=8,hpmvrg-,vqs-,cs-,srtdk=3,bdm=8,jqxdvz-,vbt=4,vdx-,jlkf=7,rld-,hzh=3,cdj=3,xnz-,mvbgm=2,fzq=8,xg-,gjtq=4,gtg=5,vgdb=3,cdj=3,sz-,gnknqg-,xd=3,fksj-,nrfpf-,hzrv=8,htf=7,dj-,dcf-,jh-,lnkkl-,dbh=5,jms=1,hgt-,fpj-,ngj-,bpzlm-,fs=3,hpj-,brh=1,pld=1,tft-,xpt=8,dndnrr=8,ppm=1,mjrkp=9,qcn=5,brn-,gm-,mrm-,lmrl-,sjm=1,rx-,hqzl=3,kdt=1,vbt-,hxr=7,zz-,cb=4,bp-,zkj-,gbp-,gbp=6,vs=3,njg=2,cs=2,rvcl-,mhz-,lk=6,ftx-,ngk-,ngj=5,fk-,bsvql=6,qz-,btbbbg=3,jtm-,rv-,vdkm-,sfhd=9,hzg=7,rg=7,qv-,rg=7,thddd=5,fkg-,qp-,skh=2,dd=1,sg=3,bdxx=9,fp-,pncdx-,nd-,qkdghh=1,kmc-,nj-,lr=8,bm-,smk-,bpgjt=4,xtd=7,kgtg-,jxv-,sjd=8,lvh-,tj=7,smk=8,tx=9,jrk-,vckn-,qsvbm-,xq=5,krsn-,gt-,kxh-,dd=7,fcpm-,cn=8,hzrv=2,bdxx-,qgg-,bhps-,tfp=8,nkbb=6,phxt=9,ldg=3,cr=8,phn-,gndr-,vdkm-,rqvjg=5,btd=6,dnr=5,mkt=1,cf-,rxc-,hfr-,bpf-,czlvx-,vds=1,jbn=6,pn=6,zmj=4,vnqslq-,gxp=3,kdt=7,nhzcjt=9,qlt=2,kklrf-,pclz=9,czlvx-,bh=6,zxz=9,zxz=8,ptr=9,vckn=3,zbnl=3,bz=7,skh-,pvn-,pclz-,jrdv=5,dk-,ngvmt-,nbvjjn=4,srtdk-,kzt=2,fvzbl-,kgg-,dq-,xpn=9,xpn=1,jrk-,gndr-,tjbpt-,tvz-,kbtbvk-,pvs-,bc=6,hkdl-,xnt-,zkb-,zkb=9,gm=2,sp-,fgbjn-,sl-,jtqb-,gxp-,dj=2,xcg-,pd=8,czlvx-,fnkf=8,vbt=6,tp-,tvz=8,fpj-,dlh=5,hlrzf-,gbfp=3,dndnrr=5,sjm=7,qgg-,lsz-,sjkxq=7,snh=1,hqtr-,cfx=6,tjbpt=9,pg=7,qkdghh-,zsf=9,zd=3,sff=2,jpm-,cx=8,knv-,xj=7,dbh=7,dlmm-,kklrf-,tjbpt=5,mxnm=9,jrdkpm=7,hgx=8,gkc-,jzr=6,sj=9,xq-,zq=3,glqxjt=4,zgcr-,jgvk=4,lmrl=5,cf-,qcn=7,sjm=8,zxz-,mrm=6,kxh=3,snf-,nkbb=3,lfqd=2,cq=3,jvbr-,kqkxm-,nkbb=4,dcb=5,nclb-,mlgj=2,lv=5,gpd-,mkt-,lsz=6,qff=8,mrm=7,plc=5,rrcx-,glqxjt=6,fp=8,skh=8,jpm=7,jsbjs-,gknp-,hpj-,hp=8,rqvjg-,bjgh=5,jpm=5,nzh-,db-,jxjns-,zxz=9,bgc=4,vgdb=6,cq=3,jtm-,dcf=9,mz=5,xpn-,zm=5,xnz-,bhv=6,jcm-,jfjn-,gtp=3,sjm-,xs=6,dbtq-,jnr-,ptr=2,hxr=7,bpd=8,mr-,xjs-,ppbqks-,fk=5,nb-,bf=7,qgp=8,vdx-,sdp-,rqvjg-,txvfx=1,phn=2,hv=1,gct-,jk-,dndnrr=1,rldfx=6,lnkkl=1,qkdghh-,fzq-,dh-,bpg=4,phn=9,kdj=9,skh=8,dlh=2,lzqxj=1,jqx-,nfq=2,fds-,hsk-,pz=1,psh=1,dtpzc-,kjfhxf-,cnspxc=7,vf-,xm=9,jl=3,tt-,xpt=5,xs-,snf-,bpzlm=7,gvzt-,sdp-,xm-,lqbq=4,brn=1,bv=2,xgh=3,zlj=2,ch-,dprj=3,bn-,mlg=4,kfgm-,ppm-,djgv=5,zkb-,xt=2,kdt=5,dmbgc=1,gd-,gpl=6,zcz=2,vj=9,kxh=2,gm-,nhzcjt=7,jpv=7,qv-,fds-,gm=1,djgv-,mvbgm=5,fc-,nct-,sdp-,btbbbg=3,lpkjx-,zm-,zl-,htf=5,rtf-,skz=9,rxc=5,dq=8,nnfmq-,mf=1,ht-,vp=8,ldg-,pslp=3,djgv-,vbt=3,ptr-,fp=2,mbnpqk=9,kfgm=9,nclb-,bhv-,jtqb=4,jgvk-,vg-,qr=4,ldg=4,vc-,rpq-,tsg-,xpn=1,jsbjs-,rzp-,tvmgv-,jfnt-,xr=4,mlg=2,vhf=5,rv=4,nm-,zkj=8,xdhk=9,lv-,zxz=5,qkdghh-,dd=4,hnqsn=9,kz-,jgkvdq=6,pq=2,jd-,zb-,tn-,lmbhsl=6,jn-,lqbq=4,gpl-,hk=1,nq-,sff-,lhc-,llnh-,hqzl-,fmg=2,gkqs=6,mjrkp-,tnf=7,hpgq=3,gxp-,snf-,jt-,lmvv-,mbt-,kqmx=1,kc-,bgn-,xcbsp=3,fthhk-,bpg-,hd=4,csr=8,xcc=9,cc-,dndnrr=1,fcpm-,rrcx=6,gknp-,fhxq-,gbfp-,lmvv-,rpq=9,srtdk-,df=8,tn-,zd=5,fpj-,hv=1,pq-,ht=8,lnkkl-,frszb=2,mbnpqk=6,nm=9,ghrx=8,dcf=3,lfz=7,xf-,mf=5,gct=7,bshcdm-,dprj-,rsnmqs-,tft-,fthhk=6,vhx-,sn-,bm-,qn-,rg=2,frszb=7,jlfmd-,bf=2,xlh-,bhv=7,jtqb=9,pncdx=6,rtf=9,nxk=7,gm=8,ppt-,vdx-,hqzl=4,vckn=3,drdn=1,bp=3,jtqb-,krsn=2,jlhx=2,sjkxq=2,tnf=8,rtf=7,nztgd=4,fzq=9,ldg-,hds-,btd=2,szr-,ck-,fvk=2,fmg=8,mqgk=6,xr-,knv=7,kdj=3,qhzp-,zg=9,xcc-,dtpzc-,jtkj=4,hgnj-,th=9,pvn-,gbp=6,nbvjjn=5,rldfx=8,mv-,phn=5,ftx-,bsvql-,tt=7,jqx-,lv=2,mjbcps=9,qzf=8,nxsx-,mfjf=2,xq-,pvn=7,btd=7,xlh=7,zdjz=4,xjs-,krsn=9,lhc-,mkt-,ptr-,bnl-,skz-,vrmt=6,qhzp=9,tfp=5,qdssh=9,fnkf=5,bsqpf-,mlg-,rzp-,mqrr=8,szr=9,kzt-,chsk=9,lzqxj-,gbv-,qr=4,nxk-,fc-,dhct=8,gtg-,gcc-,sl=5,xcg-,vnqslq=5,kkt-,vs-,bz=4,rqvjg=2,ck=5,hsk-,dcb=5,bvm=5,tsg=6,dmf-,bdxx-,dbtq=4,jrdv=8,lnv=5,pncdx=9,jbn=3,qd-,fds-,mbnpqk-,xpn-,hp=9,tmxl=7,lhd-,phn=4,tfp-,hp=4,gtp-,bnf=4,hsk=6,ht-,gd=2,cc-,jgkvdq=9,zb=2,fds=2,jtkj=2,cdj=8,fzq=1,kqmx-,hx-,rsn=3,vv-,hd-,hk=4,bnl-,gbp-,vgdb-,gtd=9,hlrzf=2,btvq=1,gcc-,gpl-,srtdk-,pbft=9,pg-,nhzcjt-,djl-,dhct=7,ggdh=1,nrfpf-,gm-,kg-,br=8,ngj-,xq-,bnf=1,lvh-,bpg=7,hzh=9,hm-,glqxjt-,bzq=4,nq=5,fgbjn-,fksj=6,qgg=3,vc=8,hzrv-,pbft=2,kjfhxf=7,sn-,rp-,xt-,dh=3,zl-,vf=1,nclb-,fvf=6,qm=7,fk-,kcgg-,hpmvrg=9,hgnj=9,nxsx=6,tn=4,tjbpt-,fvzbl=4,gbp-,jxjns=4,gbp-,krsn=1,tvc=9,vgdb=7,vv=2,jqxdvz=6,jfjn-,kx=5,llnh=4,rpq-,jdvx-,dprj=7,cb-,hm-,skh=3,bnl-,tft=2,mlg=6,zxz-,vj-,mkt-,lk-,mdp=1,gm=2,hpmvrg=2,btd-,dbtq=5,vc-,tq-,gxqs-,vg-,bzq=1,sl-,vhf=7,qsvbm=2,zm-,qlt=6,bh-,fcpm=1,xnz-,vs-,rdl-,gbv=3,gtg-,ks-,ldg-,nlmjb=2,qzzdfc-,tnf-,cs=7,ppbqks-,dmbgc-,brh-,czlvx-,gknp=8,hkdl=4,skz=8,hdlp-,khcq-,bh-,cf=3,xs-,tqt=3,vdx-,mfjf=2,fvqx-,phxt-,frqh-,xgh-,hxr-,hg-,mqgk=4,bnl=4,xpt=2,dprj=8,rtf=8,dbtq-,gknp=4,bv-,bz-,fl=1,bv=4,smk-,frszb-,rl=4,kfgm-,jtm-,nxk=7,qdht-,jzr=7,szr-,zt-,dcf-,dk-,vc-,jm-,hfr-,qd=7,lpkjx=8,ch=3,kp-,lqbq-,hp=7,lpkjx-,th-,hpmvrg-,hv=4,jms=8,zkb-,fcpm=2,qkdghh=5,vnqslq=6,sql=4,zg-,xgn=1,nd-,fvqx-,bh-,gtp=8,qff-,nm=6,dq=6,pslp-,df=1,pn=5,fnkf-,dmz-,gtg=3,qv=6,jjfth-,hxr-,nxk=9,snh-,rrcx=3,vhf-,tvz=6,pslp=2,tjbpt=1,nzh-,rd-,xq=9,dn=5,jkh-,kfgm=4,xks=8,dcf-,bpd-,vzm-,hxr-,bgc-,kzt=4,dkhv-,rz-,vrmt=7,hk=1,kgtg=9,hgnj-,pvn=9,kp=1,fds=7,ls-,df=1,ggdh-,bj=9,vp-,gct-,hdlp=7,fmg-,sjd-,nhzcjt-,rdl-,srtdk-,tk=1,jxjns-,mlg=7,qdssh=9,tk=7,pn=9,hgx=1,ngvmt-,sxlz-,skz-,cx=1,qz-,pz-,jm=4,vdkm=5,nxsx=6,xf-,jgknh-,lj-,fhxq-,kjfhxf=5,ln=5,pclz-,hx-,kkt-,qv-,cx-,nrfpf=7,mfjf-,hpgq-,pg=3,xcc=4,qhzp-,rl-,mqgk-,gxx=6,jzr=3,mbnpqk-,jfjn-,gpd-,fz=3,fs=8,nnfmq-,cr=3,gxx=8,hk-,vdx-,mf=3,jtm=9,qdht-,tpv=9,xpn-,kcgg-,gkc=1,lclv-,jtkj=6,dd=8,mqrr=7,ghcf=3,xnz=9,sz=8,xzbk-,xtd-,bm-,xcg-,xpq=8,sff=3,hnqsn=9,llr=5,nrfpf=7,tqt=7,rxc-,tvhg-,tq=4,tq=8,nkbb=8,jbng-,xf-,ppm=3,bh=3,qm=2,qff=3,ccd-,jms=4,snf=1,ppt-,hp-,qzf=3,szr-,cb=5,xd-,xpt-,thddd-,hzrv-,jlhx=1,fmgxs-,sfhd=7,lk-,jt=1,rhj=1,bpd-,htf=8,tvmgv=6,jkh=3,jqxdvz-,lt-,xdhk-,dmbgc=7,fx=5,tmxl-,ht=7,rldfx=3,pg=3,vqs-,dsxdt-,zl=1,zsf-,ntrxnc=8,pncdx-,fksj=8,fds-,lmbhsl-,rl-,lt-,gjtq=5 diff --git a/15/src/main.rs b/15/src/main.rs new file mode 100644 index 0000000..eb4a526 --- /dev/null +++ b/15/src/main.rs @@ -0,0 +1,165 @@ +use std::collections::HashMap; +use std::fs::File; +use std::io::{BufRead, BufReader, Lines}; +use std::time::{Duration, Instant}; + +// BOILERPLATE +type InputIter = Lines>; + +fn get_input() -> InputIter { + let f = File::open("input").unwrap(); + let br = BufReader::new(f); + br.lines() +} + +fn main() { + let start = Instant::now(); + let ans1 = problem1(get_input()); + let duration = start.elapsed(); + println!("Problem 1 solution: {} [{}s]", ans1, duration.as_secs_f64()); + + let start = Instant::now(); + let ans2 = problem2(get_input()); + let duration = start.elapsed(); + println!("Problem 2 solution: {} [{}s]", ans2, duration.as_secs_f64()); +} + +// COMMON + +fn hash_string(s: &str) -> u64 { + let mut val = 0u64; + for c in s.bytes() { + val += c as u64; + val *= 17; + val %= 256; + } + val +} + +// PROBLEM 1 solution + +fn problem1(mut input: Lines) -> u64 { + let line = input.next().unwrap().unwrap(); + line.split(',').map(|s| hash_string(s)).sum() +} + +// PROBLEM 2 solution + +#[derive(Clone, Default)] +struct LensBox { + // lenses k: lens label v: focal length + lenses: HashMap, + // order is the lens stack, values are labels into lenses + order: Vec, +} + +impl LensBox { + fn add_lens(&mut self, label: &str, focal_length: u8) { + // If there is not already a lens in the box with the same label, add + // the lens to the box immediately behind any lenses already in the box. + // Don't move any of the other lenses when you do this. If there aren't + // any lenses in the box, the new lens goes all the way to the front of + // the box. + if self.lenses.insert(label.to_owned(), focal_length).is_none() { + self.order.push(label.to_owned()); + } + } + //If the operation character is a dash (-), go to the relevant box and + //remove the lens with the given label if it is present in the box. Then, + //move any remaining lenses as far forward in the box as they can go without + //changing their order, filling any space made by removing the indicated + //lens. (If no lens in that box has the given label, nothing happens.) + fn remove_lens_if_present(&mut self, label: &str) { + if let Some(_) = self.lenses.remove(label) { + self.order.remove( + self.order + .iter() + .position(|s| s == label) + .expect("We had the lens in lenses but not in order?!"), + ); + } + } + + fn total_lens_power(&self) -> u64{ + self.order.iter().enumerate().map(|(lens_idx, label)| (lens_idx+1) as u64 * self.lenses[label] as u64).sum() + } +} + +enum Instruction { + Replace(String, u8), + Remove(String), +} + +impl From<&str> for Instruction { + fn from(s: &str) -> Self { + let op_pos = s.find(|c| c == '-' || c == '=').expect("No operation?!"); + let op = s.chars().nth(op_pos).unwrap(); + let (label, op_focal) = s.split_once(|c| c == '-' || c == '=').unwrap(); + + match op { + '-' => Self::Remove(label.to_owned()), + '=' => Self::Replace(label.to_owned(), op_focal.parse().unwrap()), + _ => panic!("unexpected op {}", op), + } + } +} + +impl Instruction { + fn execute(&self, boxes: &mut [LensBox; 256]) { + match self { + Self::Remove(label) => boxes[hash_string(label) as usize].remove_lens_if_present(label), + Self::Replace(label, focal) => { + boxes[hash_string(label) as usize].add_lens(label, *focal) + } + } + } +} + +fn print_boxes(boxes: &[LensBox; 256]) { + for (idx, b) in boxes.iter().enumerate() { + if !b.order.is_empty() { + print!("Box {}:", idx); + for label in &b.order { + print!(" [{} {}]", label, b.lenses[label]); + } + println!(); + } + } +} + +fn problem2(mut input: Lines) -> u64 { + let line = input.next().unwrap().unwrap(); + + let instructions: Vec<_> = line.split(',').map(|s| Instruction::from(s)).collect(); + let mut boxes: [LensBox; 256] = std::array::from_fn(|_| LensBox::default()); + + for inst in instructions { + inst.execute(&mut boxes); + } + + boxes.iter().enumerate().map(|(box_idx, b)| (box_idx + 1) as u64 * b.total_lens_power()).sum() +} + +#[cfg(test)] +mod tests { + use crate::*; + use std::io::Cursor; + + const EXAMPLE: &str = &"rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7"; + + #[test] + fn problem1_test_hash() { + assert_eq!(hash_string(&"HASH"), 52); + } + #[test] + fn problem1_example() { + let c = Cursor::new(EXAMPLE); + assert_eq!(problem1(c.lines()), 1320); + } + + #[test] + fn problem2_example() { + let c = Cursor::new(EXAMPLE); + assert_eq!(problem2(c.lines()), 145); + } +}