aboutsummaryrefslogtreecommitdiff
path: root/2023/15-Lens_Library
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--2023/15-Lens_Library/example1
-rw-r--r--2023/15-Lens_Library/first.hs38
-rw-r--r--2023/15-Lens_Library/input1
-rw-r--r--2023/15-Lens_Library/second.hs89
4 files changed, 129 insertions, 0 deletions
diff --git a/2023/15-Lens_Library/example b/2023/15-Lens_Library/example
new file mode 100644
index 0000000..4f58f74
--- /dev/null
+++ b/2023/15-Lens_Library/example
@@ -0,0 +1 @@
+rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7
diff --git a/2023/15-Lens_Library/first.hs b/2023/15-Lens_Library/first.hs
new file mode 100644
index 0000000..86cca87
--- /dev/null
+++ b/2023/15-Lens_Library/first.hs
@@ -0,0 +1,38 @@
+-- requires cabal install --lib megaparsec parser-combinators split
+module Main (main) where
+
+import Control.Applicative.Permutations
+import Control.Monad (void, when)
+import Data.Char qualified as C
+import Data.Either
+import Data.Functor
+import Data.List qualified as L
+import Data.Map qualified as M
+import Data.Maybe
+import Data.Set qualified as S
+import Data.List.Split qualified as DLS
+import Data.Vector qualified as V
+import Data.Void (Void)
+import Text.Megaparsec
+import Text.Megaparsec.Char
+
+import Debug.Trace
+
+exampleExpectedOutput = 1320
+
+compute :: String -> Int
+compute input = sum $ map (hash 0) items
+ where
+ items :: [String]
+ items = DLS.endByOneOf ",\n" input
+ hash :: Int -> String -> Int
+ hash i [] = i
+ hash i (x:xs) = hash (((i + C.ord x) * 17) `rem` 256) xs
+
+main :: IO ()
+main = do
+ example <- readFile "example"
+ let exampleOutput = compute example
+ when (exampleOutput /= exampleExpectedOutput) (error $ "example failed: got " ++ show exampleOutput ++ " instead of " ++ show exampleExpectedOutput)
+ input <- readFile "input"
+ print $ compute input
diff --git a/2023/15-Lens_Library/input b/2023/15-Lens_Library/input
new file mode 100644
index 0000000..8e476ce
--- /dev/null
+++ b/2023/15-Lens_Library/input
@@ -0,0 +1 @@
+zx=2,cq-,vz-,txz-,fvbk=9,ll-,dg=6,tpjh=5,fsn=9,jn=4,jgj=7,cfxrz=9,thgnk=4,bf-,nr=3,bqb-,bss=1,rgk=8,sd=9,shbr-,pm-,pp=1,pjh=4,hbj-,fq=1,vvk=4,vjt-,tpr=8,rtt=5,sj=7,qch=2,bqb-,bpzj-,cbsr=4,pvp=4,ds=1,ng-,sp=7,bqb-,rhz-,kgq=3,jmc=1,xz=5,nl=4,hff=1,lvg=8,nbxmg=1,qnqmt=3,br=6,zzjmn-,cvr-,kfrvf-,nfp-,rsx=8,ltndms-,thgnk=6,blqp-,bzz=1,vxr-,gt-,hkh-,ljngt-,hff-,cpq=8,fsj-,dq=5,bd-,pf-,pt-,zvkm=3,vnbz=4,jbcf-,sj-,lfn-,gjk-,bv=3,fkq=8,zs=7,nhzs=4,ch=1,xjm=3,vz-,tz=9,ng=6,blq-,vm-,fmg-,trvnb-,fsj-,gn=7,kgq=7,shbr-,hkg=8,jvk=2,bcdft=1,vptqjk-,tgx-,jj=1,kr-,sgrzqk-,lk=8,drrzc-,bpzj=7,hkhv-,zhb=2,fjz-,jplrg=3,prbl=7,mtnb-,nzkz=2,hvf=8,cv=5,thgnk-,zx=5,gn-,fcqmj-,xfmq=1,zhb=9,lprk=4,fnc=2,lhn=5,srjqs=4,lq-,shfvt-,jbcf-,jvdj-,tnv=1,tbmbg=6,mc=8,znjv=9,nf=3,tnc=3,txk=1,hv-,bv-,hkg=1,vs=1,lk=8,vvg-,dk=3,pm-,ds=9,sv-,svnr=8,zf-,sm-,hm=5,lq-,lrfn=9,gk=3,fd=3,fb=1,nd=2,mt-,cfcbr=5,jp=5,pg-,jfdf=2,nbxmg=6,fvh=9,px=1,ddzb=6,mhdml=8,gmt-,shfvt-,rnnznj-,sv-,zm-,crm=2,mhdml-,vvk=7,qpc-,nhzs=4,chmg-,fhs=2,xztd=9,jvk-,bst=7,zdfmb-,rkx=1,pslh-,nfv-,mk=4,znjv-,mczf-,nd-,kz=3,mcv=3,hdr-,zvjf=7,kzc=9,rpb-,hvx-,trvnb=9,vjn-,tm=9,svnr-,xztd=3,tscv=6,qnqmt=9,qhh=9,nhzs=3,vs=2,kz-,hjc=6,vhthjz=5,pjh-,lj-,djz-,fvh-,cpq=4,fhjd-,jcj-,lcsbk-,sx-,ht-,qf-,mtnb-,ns=1,xzsl=8,pp-,jj-,rtt=6,jjp=5,nb-,px-,lvg-,bqb=1,jn=2,frk-,dxjs=6,hkh=8,fjz=5,fgp=7,mvq=7,ltndms=6,xfx=8,fsrf-,gt=7,fhjd=3,hz=5,gc=2,kl=5,hrv-,rgf-,mlhd=9,xhhk=3,rb=6,kbq=5,qpl-,fsn=9,bp=5,pdhg-,nl-,sh=3,ndfns-,tkldj=4,nl=5,cq=6,vhthjz=9,xc=4,rvd-,gmj=6,pzd=4,zns=1,dk=2,sflsx-,nfp=2,df-,jplrg-,krlc-,tqp=3,nc-,ncqx-,mb=4,bpzj-,fd=7,mrn=9,fd=6,dklvgl=1,pbtc=7,ncqx=5,glfk-,mhdml-,vsmfb-,ddm-,zdlz=4,cbsr-,vptg=3,rsx-,vkv=4,df=3,msx=8,fsrf=6,vb-,cl=9,vsr-,px-,kfrvf-,lxqmg-,mtnb-,bpzj=3,rzvrf-,lgr=8,jvdj-,sf-,xfk=5,vvk-,lvg=3,mds-,bckpqr=9,kz-,vsm-,pm=2,lfl=7,bpn=7,vptqjk=8,vr-,txtxp=1,nf=5,nghp-,vkv-,sj=2,gc=3,pcf=7,hm=4,dklvgl-,qlt=9,rtdqm-,nf=7,vcs=8,pxl=5,xh=9,kpz=5,cbsr-,tscv=7,vjt=5,pdns-,ssn-,pm=2,js-,zdt-,dxq=8,jb-,js=1,rdr=4,qsmsdk-,zzjmn=5,bqb=8,bcdft-,nghp-,qhql=1,vhnjj=6,rgk=1,hj-,sflsx=9,hbr-,mt=8,flfqp-,pjh-,fd-,mcf-,msmd=6,bngz-,vrrzmh-,jvdj-,vmnp-,xzsl=6,zvv=9,qc=6,gpr=9,drrzc-,tqp-,vr-,sbvc-,kcd-,vsm=2,rgk-,js-,jvdj-,tn-,bxlc=2,kvq=4,htcfbt=9,tv=8,js-,qs-,bckpqr=6,nqk-,tm=7,dhl-,ch-,rkx-,br=3,hkg=4,vmnp=2,zjfj-,mcf=7,jp-,mgk=3,txghhg=1,bpv-,pdj=8,lcsbk-,dq-,gmj-,pcf=8,qpv=7,fh-,hv-,pt=3,vrrzmh=3,lvg-,mczf-,sc-,zk=7,chmg-,tnv-,dctfmj=2,mb-,jjd-,sgrzqk-,zf=9,hm=3,zvjf-,vr=1,dxq=1,zdfmb-,bngz-,xq=5,ct=7,mtnb=8,jl=3,xz-,xfmq=6,lfl=9,vnbz-,hq-,vsr=1,dhkg=6,mds-,qz-,rz=4,qhql-,js=9,xfk-,gtc=7,krv=1,pqgsjl=9,lhn-,bpzj-,rrjn=1,hff=9,pd=8,qzgx-,tnc=4,hbj-,thgnk=2,ggdv=1,fhs=4,zdlz-,sss-,vmnp=2,qqkfjl=5,qzgx-,vmnp=8,jcj=5,sn=8,zhg=2,zhg-,ttrz=6,jb-,jn=3,hj=2,fvh=6,chbl=8,khq=1,zszjhl=3,brlsh=3,ndfns-,lxr-,zk-,cqt-,dblt-,ns=9,mlhd-,gc=3,thgnk-,mrn-,dnv=1,sp=1,ssn-,rdr=8,fk=5,vsmfb-,dblt-,js-,qnqmt=5,lpkx=2,km-,vhnjj-,fjz=8,sj=7,fqtd=7,bd-,br-,mhdml=5,vrrzmh=3,rh-,db-,kz=2,chbl=8,zm-,mcm=7,chbl-,kjq-,txk-,chbl-,vdrg=7,bzz-,jbcf=1,gmt-,jfdf-,gngzf-,mhdml-,tsn-,cgsrz-,sj=4,vj-,nf=3,njkfx=7,rpg=5,bf-,jkvsr-,shbr=7,ssn=3,txghhg-,xkgx=6,xc-,fz=7,mlhd-,zhg-,vdrg=6,pp-,qjqlk-,nzkz-,ttq=8,lrfn=9,chbl-,zvkm-,zk=4,zhb=4,dblt-,qz=4,djz=9,sbvc=3,jj=7,mqbt-,bv=7,rtqb-,cz-,hgn=2,bd=1,dg=5,qnm=3,rhz=1,gtc=8,hz-,snfh=4,mds-,kr-,jxd=4,tg=4,nvj=6,tn=4,vcs=3,krlc=5,bbkqq=3,zq=6,bbrdsx-,hq-,hm=7,bpn=1,jmt-,hpt=8,sgrzqk-,hz=6,km=5,zd-,hgk-,tsn-,vsmfb=5,bspz=8,xfd=2,xpzlm=5,pk=5,pdhg-,shbr-,tzv-,gq=6,msx-,hvx=1,zm-,fn=9,zdfmb-,rgk=9,mlf=9,mxq=1,ncqx=3,mt-,znjv=7,xfld-,xfmq=7,fkq-,fh=5,jm=7,lgt=3,ddzb=6,ltndms=4,jpcgqx=9,bqh-,hpt-,qltnl=8,zbsk-,lxqmg=2,djz-,njkfx=3,ht-,mcf-,pzd=2,tmsq-,nhzs=1,mct-,nc=4,lr=5,lprk=8,fsn-,xh-,ljngt=4,txghhg=9,ht-,fzk=6,fzk-,fgp=1,zszjhl-,rqj-,zns=3,txghhg=8,rzf=4,xhhk-,pqgsjl-,bv=3,ssn-,lg=6,dq-,rqj=8,lj=7,kz=1,vrrzmh=4,sr=3,nc-,pj-,sg-,vjt=4,pp-,hj=6,jjd-,sd-,vsmfb=3,brlsh-,bxlc-,mqr=3,rvd=2,chmg-,lxqmg=7,xkgx=5,blq-,df-,dklvgl-,cm-,ps=2,bf-,jvdj-,hgp=5,rzvrf=6,lml=8,zpn=4,tj-,jfdf-,jb-,vhnjj=9,bx=2,jvdj-,blq-,jpcgqx-,mlf-,kbq=5,pdj=4,xjdmx=8,chbl-,mxl=1,pf-,gnf=7,nhzs=3,blq=3,vgfg-,vvg=8,rvd-,dnv=4,dnv=9,ddm=3,qz-,zbsk-,rhz-,zns-,pks-,qms=5,dxq-,rkvp-,xzsl-,sc-,xkdczc-,zszjhl-,cz=4,zq=1,bcdft-,cm-,xfk-,lxr=6,blqp-,rz-,cfxrz-,pj-,rrjn-,vs-,lgq=9,drn-,trvnb=1,kzc=1,qltnl=8,pzd=6,cq=4,zpn=8,dctfmj-,xfx-,tj-,njdh=2,qz-,zx=2,ls-,jjd-,cgsrz=1,zm=9,ct-,bst=8,xc-,rzf-,tkldj=6,blqp=1,jh=6,hvx-,br=2,mkx=1,ttrz=4,flfqp-,zpn=5,pxl=6,nv=5,vpj=5,gh=9,msx-,jxd=7,sd=9,mxq-,kfrvf-,sg=8,vhthjz=3,dzrkt-,dk-,tqp-,hz-,szpm=3,jfzcz-,lrfn=1,sv-,rgf-,tcfvqf-,fz=6,qpl-,rhz=1,gr-,gt-,sqqpv=3,cl=6,svnr-,nc=1,rqj=2,rtqb=9,lq=9,kgq-,ct-,ht-,jjp=5,lfl-,zszjhl-,rgf-,fjz=2,kbq-,rgf-,gjk=4,xfld-,jbcf=4,crm=7,jplrg=9,jgj=6,js-,zd=3,rrjn=9,sfs-,xc=4,cl-,ht-,dxjs=4,xfd-,nbxmg=2,tscv=4,zzjmn-,dhkg-,sflsx=6,kjq=8,fk-,gbg-,kzc=2,ffk-,pt-,jkvsr-,vb-,ps=8,csss=1,krlc-,fvh=2,tscv-,tpr=9,bst-,bv=3,xzsl=2,ffk-,mtnb=7,tpj-,ttq=8,qpc=6,qpl=6,kbmct=3,rs-,lvg=6,mqr=9,zszjhl-,vm=5,khq=6,zk-,jbcf-,nbh=4,rgk=1,ch=3,rr=4,xztd=2,sgrzqk=5,msx-,vjt=3,fzk-,cc-,km=9,qltnl-,njdh-,dklvgl-,sh=5,dzrkt-,bd=6,pz=3,qcn=2,vgfg=7,rn=5,fhjd-,xfk-,zq=3,jjd-,gpr-,bst-,gc-,pks-,chmg-,tkldj=3,vfb=8,vppxc=2,kbq-,tj-,jz=2,fqtd-,cqt=4,xfmq=1,kh-,qnm-,tz=3,mf-,fb-,bbrdsx-,kqgdb=7,zs=4,br-,msx-,jtz=5,kvq=4,khqkt-,zhg=6,srjqs-,jn=7,hkh=8,vvk=3,jjd=2,dklvgl=8,prbl-,dbd=3,shbr=2,pslh=5,znjv-,tn-,nl-,nbh-,tlpf-,jm-,xcvl-,sj=3,zjfj-,bbkqq=6,njkfx=1,tlpf-,zjl-,ch=8,rgf-,qltnl=9,sfs-,qz=4,lfl-,rkvp-,mgk=3,dq=5,pslh-,krlc=5,dklvgl-,zmrnkd-,fn=9,vsm=7,bngz-,mvq-,tg-,ttrz=4,mczf=1,hq-,jbd-,jzbz-,sgrzqk-,zx-,tnv-,lfn-,mcv-,ct=4,rtqb-,dgtv=1,snfh=9,pj=5,prp-,hdr-,khq=9,tpjh-,hdr=2,drrzc-,qlz-,pk=7,pg-,blq=9,nf-,tpj=7,msx-,bv-,gbg=6,mczf=4,hjc-,rgf-,ndfns-,vgfg=9,gnc=6,sss=7,gjk=8,mrn=4,bxlc=3,nl=3,mtgr=9,vs=9,hgf-,fnvq-,hgk-,trvnb-,tjp=2,shfvt=1,bdz=5,shbr=7,svnr=5,xjm-,clk=6,zvkm-,zdt=8,fcqmj=7,fh=4,rzvrf-,tz-,blq=6,tgx=9,hz-,pj-,vbdqt-,fqtd=1,qzv-,jfzcz=5,hkh-,fd=7,pjj-,mds-,txghhg-,khjxhb=2,nbh-,df=4,rpg-,tpjh-,bpn-,tz=4,rh-,zns-,dzrkt-,qs-,xpzlm-,vcs-,crbxtd-,hff=5,nvtg=3,hqm=6,gpr=7,ndfns=1,sflsx-,hdr=7,qhql-,pzd=7,pd=2,csss-,rhz=5,jc=6,bzz-,bxlc=4,zkbs=7,njkfx=7,pxl=9,zbsk-,jvk=3,gtsn-,gk=1,rhz-,gnh-,hkh=6,mtgl-,tpr=1,js-,ckgtlf=9,cc-,sr-,rrjn-,mvq=8,nfv-,zs=2,krv-,ll=8,nhzs=4,csss=3,mkx=1,mth=1,nbxmg=7,rz-,kj-,vptqjk=6,gnc-,bst=4,xjphkq=8,hkh-,jjp-,bgs-,ttrz-,xkdczc-,dhkg=9,mlhd=4,lvg=3,zzbl-,pcf-,kbq=6,htcfbt-,mds=9,chbl=8,bf-,krlc=2,qpc=5,dsf-,vsmfb-,rtql-,fjjp-,jh=4,cqt=4,kqgdb=6,dv-,xjdmx=6,jtz-,cv-,mcm-,dmbj=6,ch-,pqgsjl=1,rz=9,fnvq-,cqt-,pcf-,zhb=9,gr-,pslh=3,kpz-,pk=1,bpv=3,nd-,mxq=3,zhg-,lml-,kpgm=7,gmj=3,vrrzmh=9,pks-,vcs=4,flfqp-,qz-,fsj-,cl=2,pdhg=1,mq=6,nzx-,fqtd-,fhjd=2,mrn=7,vz=9,dk-,tnc-,zmrnkd=3,bzz-,mrn=4,prbl-,mct-,dbd-,mtgr=4,rh-,xztd=6,snfh=6,rqj=4,kqjt-,rkqgj-,nhzs-,fq-,rgf-,nhzs=3,kx=8,csss=9,jtz-,vhnjj=7,lxr-,xnxl-,jxd=9,rnnznj-,bckpqr-,vdrg=3,fmg-,sbvc-,fjjp-,qj=3,db=1,sp=1,ggdv-,xnxl=6,fkq=6,sbvc-,jxd=2,hgp=1,xz-,fzk-,nb-,rh-,sbvc-,kfj-,rkx=4,bql=1,jcj-,fjjp=9,drn=7,cm=4,vxr-,dblt-,ft=5,nz-,gr-,ffk=6,qpl=3,nfp-,vb=9,fcqv=5,mt=7,nghp=9,xhhk-,sb=8,lk-,zq-,khq=5,krlc=4,lcsbk=6,bspz-,bbkqq-,zh=4,frk-,jpcgqx=4,ltndms=8,bd=5,fjjp=3,xz-,hz-,cv-,sr-,lk-,pks=7,hgp-,sflsx=7,dblt-,pjj-,bbrdsx=9,mcv-,mtnb-,jpcgqx-,ttrz-,jfdf=8,mcm=4,zf=8,vcs=5,rzvrf=8,jc-,hgn-,htcfbt=9,lxr=8,rh=3,lq=7,qltnl-,crbxtd-,fd=4,hj-,rzf=1,tcfvqf-,pks=5,fs-,cz-,jn=9,xfd-,nf-,mrn=6,rz=3,vvk-,kzc=8,sx=3,bckpqr=7,szpm=9,lgt-,kcd-,kl=7,kpgm=9,ndfns=4,fz-,xz-,bpv=6,sd=4,gt-,tnc-,db-,xfx-,jtz=3,hbj=8,pjh=2,lvg=6,cdtx=2,bf-,tjp-,sbvc=1,sd-,nf-,qt-,tm=9,bf-,xfx=4,jvdj-,hkhv=2,hgf=4,blq-,bspz=9,lgt-,brlsh-,hpt-,thgnk-,vcs-,rvd=1,bd=5,zjl-,kpz=4,fmg-,jxd=1,gr=6,hgp=4,hjc-,znjv-,lg=5,zpn-,mtgr=9,ddzb=2,rpg-,xpzlm=7,jbcf=2,frk=7,hdr=9,nbh-,zhb=3,tmsq-,lxr=8,kh=8,hvx=6,blqp-,zdlz=4,tnc-,qzgx=2,jl=8,blq=9,qb-,txghhg=9,tpr-,qz=1,zmrnkd=9,bx-,gnh=1,mlf=7,hvf-,bxlc-,hqm-,ffk-,kqgdb-,xfd=3,bv=5,zf=5,rhz=3,vsm=2,km-,dxq-,gbg-,dqb-,qpc=5,jgj-,rvd=4,kqjt=4,tmsq=8,rzf=8,kfj=2,dmbj=3,rhz=6,nvs=5,nd-,tg=7,qcn=2,blq-,sss-,xjm=8,ktc-,ldl-,tcfvqf=8,kcd=3,tj-,jvk-,vsr-,kqgdb-,ssn-,zdt=2,txk=5,db-,vjt-,bngz=6,vhthjz-,hdr=3,bd-,jfzcz-,pk-,hdr-,lfn-,rtql=1,ll-,px=8,qb-,vnbz=6,vvg=7,qqkfjl=2,zzjmn=9,sp=9,lprk=6,hz=8,hm-,dqb-,lml-,lxr-,zszjhl=1,dqb=7,hvx=9,sh=5,mb=2,cqt-,nv=5,qpv=2,gk=4,qt-,lprk=6,ls-,gn=6,khq-,mrn=2,lprk=3,ht-,nr-,fq-,clk=1,cv=4,znjv-,fcqv-,dctfmj-,gn-,mds=6,vhnjj-,hff-,zh=1,kfrvf-,hpt=3,xfd-,dzrkt=2,nhzs-,jjp-,vrrzmh=5,rpb-,hrv=2,chbl-,gmt=6,fj-,vptg=4,nzx=4,vfb=9,srjqs=3,kpz=7,jkvsr-,hqm-,tgx=7,rkvp=7,jgj-,fcqv-,xh=2,lprk=7,dctfmj=8,bqh=5,ljngt-,bcdfq=9,vr=7,sf=5,nj=6,zpn-,kbq=2,pt=8,bxlc=2,ch-,lvg=8,dxjs=5,pbtc-,tcfvqf=2,rvd-,vhnjj-,vpj=2,rq=3,pp-,ndfns-,rrjn-,pcf=2,zzjmn-,tbmbg=5,bf=2,fh=1,rpb-,msmd=1,nb=2,rgf=5,frk=8,lml=5,mct-,brx-,snfh-,rkqgj=2,jzbz-,rdr=4,tzv-,qzv-,tnc-,hvf=1,lxr=9,lgq-,rz-,dhkg=8,ps-,mtnb-,bp=3,mcm-,pxtk=4,qlt=6,fnvq-,nfv-,lj=9,xjdmx-,xfd=9,dgtv=4,br=8,tcfvqf=3,nz-,bbkqq-,gtsn-,dg=7,bpn-,sss-,dzrkt=5,mvq-,dnv-,khjxhb=6,mkx=6,gh=5,lxr-,gtc-,brx=6,nqp=3,xztd-,clk=2,nzx-,xcvl-,nghp-,km-,dqf-,pd-,jzbz=8,bv=1,fj-,nb=7,tz=1,zhb-,msx=9,cbsr-,srjqs=3,jp-,tzv-,lxqmg=7,qz-,fzk-,fs-,dzrkt=1,tkldj-,tjp-,trvnb=1,xfmq=3,clk-,hvf-,tj=3,dhl=7,tmsq-,zh=6,nqp=1,jfzcz=6,nvs=7,bdz-,dg-,qpc-,bdz-,lhn-,qpl-,rtt-,vjt=8,rr=3,zszjhl=5,cdtx=9,thgnk=7,dzrkt-,zd-,qz-,hkg=2,sb-,mrn-,sc-,sgrzqk=2,jkvsr-,nvj=6,zm=8,chbl=9,sc=5,hz-,sb-,csss=6,ndd-,jp=8,qs=3,dgtv-,dhkg-,tlpf=1,xz=8,jcj-,tbmbg=6,pks=1,mlf=5,gnf-,kfrvf-,qzv=8,mtnb=7,ls-,fsrf-,qjqlk-,txk=5,px=8,mk-,nc-,bngz=4,drn=6,fsrf-,znjv=3,flfqp-,vkv=9,vptqjk=9,rtqb-,zdfmb=2,tnc=6,bv-,mcv-,qhql=7,pjh-,ltm-,tnv=6,vppxc=4,gnf-,tpr-,fsj-,cm=9,dv=8,nb=3,nqp-,kbq-,bv=9,rh-,sb-,fzk=3,kr=3,tmsq=8,txghhg-,jjp-,hbj=9,mcf-,sm-,bqb-,bcdft=5,dblt-,fkq-,tz=1,pvp-,cvr-,txk-,qt=6,gf-,mtgl=6,ggdv-,dxjs-,gngzf-,mxl-,dnv-,xfx=8,xfd-,kvq-,dctfmj-,pk-,lgt-,msmd-,sflsx=9,tgx=6,xjm-,tpj-,vmnp=1,ls=8,dnv=9,cdtx=4,sfs-,mrn-,fh=5,zhg-,bgs-,fsrf=2,hz=7,bpn-,jfdf=9,tzv=7,mvq=6,bgs=8,qnqmt-,nb=6,mvq=9,jfzcz-,mtnb-,ls-,sg=1,kfrvf=4,fvh=6,jb=1,rvd=7,nghp=4,mtgr-,pp=3,hbj-,kcd=8,txghhg=1,pzd-,mgk=6,nghp=3,mcf=6,dmbj=6,qs=3,nvj=5,df-,nfp-,rkqgj=3,fzk-,ncqx-,bpv-,zx-,rz=5,fd-,cv=7,tpj-,sflsx-,hvf=4,vptqjk=7,xdc-,kqjt-,flfqp-,jpcgqx-,cfcbr-,kj-,nj=6,qzgx-,fb=9,zdlz=1,gbg=7,zpn=6,vsmfb-,fvh-,rkvp-,lxqmg-,jm=2,xztd-,lxr=6,sf=9,fgth-,dmbj=4,kcd-,clk-,rkvp=5,dhl=7,cc=6,db-,sf-,xkdczc=7,gpr=1,jvk-,vjn=9,xkdczc-,dqf=6,kcd-,xjdmx=1,jpcgqx-,rq=2,qz=4,nhzs-,tg-,lhn-,fkq=3,kgq=4,xpmsx=3,nbh-,pdj-,ck-,nhzs-,ft-,dr=9,rtql=1,vfb=6,pt=1,vhnjj-,fgp-,zmrnkd=5,qlz-,jvdj=7,pxl=8,mkx-,fsj=1,tz-,ggdv-,hq=5,qhnj=5,sn=3,mtgr-,ct=1,lgr-,bpn=4,nv-,shbr-,br-,rtt-,fkq-,pjj=4,jb=4,bbkqq=2,xfk-,mxl=7,srsd-,xfd=5,nvs-,gmj=4,vxr=9,fsj=3,djz-,zpr=8,tsn=9,cq=6,vrrzmh-,lfn-,bckpqr-,gpr=8,sb-,sd-,jzbz=7,ll=9,sb-,kzc=8,mct-,xkdczc-,ffk=7,ljngt-,bf-,bzz-,rb=7,tqp=5,fcqv=3,qqkfjl=4,qf=5,ns=8,px-,rtql-,ps-,kbq-,sg-,gc-,khqkt=4,fj-,fjz-,ltndms-,ns-,vb=7,jjp=7,nb=8,kqjt-,dhkg-,sgrzqk=1,qpl=5,lpkx=3,cvr=1,mcf-,mxl=4,mgk-,bdz=9,kvq-,bst-,qpc-,fgp-,br-,xjf-,jb-,vsm-,bngz=1,mxl-,dxjs=4,khjxhb-,pdns=3,tv=5,bmgl-,mqbt-,mcv=7,zhg=6,rn=2,mqbt-,dhkg=1,mk-,gtsn-,mn-,csss-,ttq=6,sp-,lg=7,gtsn-,fjjp-,pjj=2,qhh-,rpg=3,ssn-,srsd=9,jb-,fmg=9,mn-,jvdj-,gf=3,kj=8,rs=5,mcf-,sm-,jvdj-,sr-,hq-,pxl-,txtxp=4,mb-,ltm=7,mb=9,xjdmx=7,zvv-,mkx-,qz-,brx=7,znjv-,hbj=5,trvnb=5,cv-,txz=2,hq-,hz-,xq=7,tpj=6,jmt-,nv-,jc=4,vptg-,cfcbr=8,fhjd=9,zh=6,chmg=2,dhl-,pk=7,kj=3,tj=3,txghhg-,nvj-,vj-,jkvsr=2,fh-,jkvsr=7,fnvq=1,gpr-,tz-,jvdj-,dxq-,mxq=8,qzv-,vjt-,pk=8,qhnj-,fvh=3,qlt=5,qcn-,ckgtlf=7,nfv-,gtc=9,jp-,kqjt-,ddzb-,dnv=9,tm=3,qsmsdk=1,lgr-,bqb-,kbq-,zzjmn=8,xkgx-,qcn-,hkhv-,pdhg-,rtdqm=7,dblt-,nqk-,rrjn-,nghp=6,vptqjk-,vppxc-,sfs-,thgnk-,rq-,ktc=2,dzrkt-,cgsrz-,hj-,svnr=1,fh=6,ckgtlf-,gr=4,pd=5,zd-,xjf-,fb=3,fvh=8,hjc-,fcqv=8,gf-,rtql-,jl=5,jjd=5,gngzf=9,xjdmx-,hgf-,fb-,dhkg=2,rzvrf-,khqkt-,flfqp-,rtt-,rn=3,lj=6,xkdczc-,lhn=6,sv-,znjv=2,tm=5,qcn=7,ls=4,xzsl-,qcn-,ttrz-,sj-,hj-,zkbs=9,dq-,shfvt-,ck-,jmt-,ll-,lpkx-,qms-,vptqjk=9,jbcf=6,vgfg=7,vgfg=1,gf-,pxtk=8,jzbz=6,qhql-,vsr=4,pdhg=4,bqb-,ddzb=3,nbxmg=9,ch-,sd=1,js=6,nvs-,fnvq=1,khq=2,pf-,bqh=6,lpkx=1,dxl=6,pbtc-,djz=9,vkv=3,cm=1,msmd-,sh=5,rgk-,qc-,mlf=4,vhnjj-,cqjt-,kjq=9,vj=8,khqkt-,csss=5,pbtc-,chmg-,mrn-,qms=6,htcfbt=6,bf-,dklvgl=5,vs-,gh-,lgq=7,pdns-,mq-,kz-,cm-,kqgdb-,dzrkt-,bst-,dk=5,mcf=2,zkbs=9,cv-,vfb=3,pdhg=6,dqf=7,pbtc=3,bcdft-,ps=1,gf-,xjphkq-,fq-,blqp-,hqm-,sd-,fkq-,rsx=4,rn-,gbg-,rkx=2,fsj-,tpr=9,hgf=8,bngz-,lrfn=8,kz-,qzgx-,qpv=5,bmgl-,gnh=5,jbcf=4,jp=4,jcj-,zns-,hkg=1,hkg=3,zzjmn-,tnc-,kj-,vhthjz-,ffk-,jbcf=8,sd=8,jgt-,rq-,xq=3,zf=8,kr-,vgfg=7,bv-,rb=7,zdlz-,zm-,qjqlk-,df-,ffk-,ljngt-,dzrkt-,mth=5,sfs-,xnxl=1,kjq-,nc-,qltnl=6,pk=4,kvq=3,jc=6,vjn-,dhl-,khqkt=9,sh-,kjq=3,rpg=9,drrzc=3,sn=5,pg=7,nbh-,prp=3,hz=1,bql=1,zjl-,ng=3,shfvt=5,xpmsx-,gt-,cfcbr=9,gtc=2,js=3,xcvl=1,zdt-,xkdczc=2,bspz-,jl=1,vhnjj-,tlpf-,qch-,nd-,qlt=1,nc=4,vnbz=8,fcqmj-,xh-,msx=9,sqqpv=4,dzrkt=7,krlc-,tz-,gnc-,bbrdsx=5,kqjt-,sb-,xzsl-,chbl-,rhz=3,dqf-,qf=4,lhn-,srjqs-,bv=1,fcqv=8,ck=5,fn-,kcd-,lg-,mtgr-,vm-,kzc=7,zx-,zf-,qc=1,hbj=1,hq=2,qc=1,nfp=3,rgf=3,hgp-,qj=3,zkd=7,lprk=8,shbr=2,ltm=6,rtqb-,fnvq=3,gnf=9,thgnk-,hgf-,gr=4,kqjt=3,znjv-,fgp=9,blqp=6,cqt-,ltm=6,tjp=7,blqp=2,fz=4,mxq-,tsn-,nv-,nqk=9,tpjh=2,tpr-,kl-,rtt-,jtz-,qlt=7,sj-,sj-,xhhk-,vsr=3,njkfx-,gtc=5,pbtc-,dhkg-,qq=5,mq=8,kjq-,zvv-,kvq=8,rqj=2,bckpqr=8,sd-,tkldj=7,qj-,pdns-,fgth=2,ttq=9,dg=3,dctfmj-,ltndms=7,khjxhb=4,mrn-,qf=3,jvk-,hff=1,cc-,cvr-,bql=7,rtdqm-,ch=5,cc-,gngzf=4,tlpf-,xcvl=2,pj=8,jfzcz=7,szpm-,kgq=3,mds=1,thgnk-,dctfmj=5,dctfmj=4,vmnp-,tbmbg-,dklvgl-,pz-,sj-,svnr-,pdhg=5,cfcbr=9,qt-,xpmsx-,fjz=1,tgx-,sp-,pjj=1,zns=8,mgk=3,hjc-,pd=5,xnxl=3,mct-,zdfmb-,bngz-,vr=2,rkx-,pk-,jzbz-,cpq=1,vj=4,ldl-,qpc-,rr=9,tzv-,jb-,fcqmj-,db=7,mf-,rtt-,ltm=5,hff-,lxr=4,zvjf=6,mq-,dctfmj=1,xfx-,tlpf=3,hff-,vm=9,vgfg-,jtz=4,qz-,bst=8,tkldj=7,mq-,jfzcz-,pks-,nzx-,zzbl-,pdhg-,vm-,srsd=5,srsd-,kr=2,dv-,xpzlm-,sx=2,khq-,jgt=7,fgth-,xkgx=7,lprk=1,lpkx-,sfs-,qnqmt=5,dblt-,bf-,zx-,bzz=9,bgs-,nqp-,vz-,jbcf=7,sss-,lgq-,zpr-,lk=8,zkbs-,nfv-,vm-,krv=1,ndfns-,tnv=6,kr=9,bd=5,kpgm-,vr=3,nbxmg=6,zdlz-,vbdqt=4,jp=1,djz=9,znjv=9,srjqs-,mlf-,hm-,zns-,zm-,lgt-,dq-,kgq=6,pg-,rrjn-,nqp-,mtnb-,qf-,sss-,gmj-,sx-,cc-,rhz-,vptqjk-,lfn=2,ps=3,kh=9,fmg=3,jmc=7,chmg-,fgp-,pks-,rh-,rsx=9,ddzb-,dhkg-,sd=2,pf=8,mqr=3,sqqpv=8,kh-,ck-,zdfmb-,xzsl=2,fjz-,tnc-,nghp=3,dxq=5,pcf-,ds-,tcfvqf=2,qhql=6,gmt=4,lfl-,kh-,nd=3,sgrzqk-,cbsr=4,sqqpv=2,tj=6,jmt=2,gr-,mlhd=7,fh=7,fjjp-,km=4,kpz-,kr-,tsn=4,qzv-,xjf-,gn=1,jp-,rb-,qs=3,kfrvf-,hj-,rsx-,rq-,gbg=6,kgq=3,ltm=9,sx=4,pqgsjl-,lq-,vfb-,bpn-,pg-,vsr=5,mth=1,msx=9,pjh-,hz=8,cpq-,qq=5,ckgtlf=1,prp=7,blq-,lgr-,mkx-,dhkg=6,jc=2,hq-,cbsr=1,fjz-,tcfvqf-,dzrkt=5,vs=3,ht-,fq-,pf=8,gnf-,rkx=1,jzbz-,pqgsjl-,zzjmn=4,pdhg=2,vjt=9,bbrdsx=9,mtnb=9,jpcgqx=9,fb=2,lfn-,ltndms=5,km-,jzbz-,dklvgl-,txtxp=7,vfb-,pvp=4,hbr-,lgt-,vgfg=3,ht-,vhthjz-,zm-,nbxmg=1,zdlz=5,gh=9,vrrzmh=1,sb-,rpb=6,qqkfjl-,ljngt=9,pjj=9,dsf=1,sp=6,jbd-,kgq-,kvq=7,hkg-,cv-,nqk-,vppxc=1,zhb=1,tkldj=8,rgf=1,gf-,vptqjk=2,khq=6,bdz-,jp-,hgn=5,sc-,gq=2,crm-,vsm=6,cc=5,qltnl-,xjm=9,xzsl-,kfrvf-,sp-,nvtg-,lxqmg-,fjjp-,pd-,vpj=3,pbtc=8,jjp=7,nvs-,bd-,mxl=7,nb-,fhjd-,zh=8,qch=8,jplrg-,jt=7,qch=8,nj=6,kvq=2,kfrvf=7,zszjhl-,pf=7,fsrf-,fmg=9,sqqpv=9,dgtv-,lxqmg=2,gh=9,tmsq-,hbj-,bqh-,rpb-,pd-,pg-,vsm-,zx-,lj-,nf=1,qqkfjl-,vj=8,kpz-,srsd-,jxd=2,jcj-,sm=2,kfrvf-,dzrkt-,dzrkt-,nghp=2,ps=1,txtxp-,fjjp=4,fnc=6,bss-,hdr-,qzgx=4,djz-,bdz-,vsm-,hgp=4,nv=8,qzgx-,sm-,rdr=4,tm=3,gr-,tnc=4,zdt-,qpl=4,bdz=1,ttrz-,tz=3,vkv-,mqbt-,crm=7,txz=5,tj-,kgq-,dctfmj-,nv-,dctfmj=1,zdt=1,pvp-,qhql=8,qcn-,kh=5,xpmsx-,jpcgqx-,qltnl=3,xc=7,dmbj=2,vmnp=7,dklvgl-,sgrzqk-,js=3,szpm=2,nhzs=4,gmj=6,zvkm=4,kx=9,kz=3,hgp-,bpzj-,flfqp=7,tjp-,tj-,hz-,kjq-,dxjs=9,pzd=3,gbg-,xpmsx-,kx-,brlsh=1,kpgm-,nvj=8,cv-,vjt=3,lml=1,vs-,bpn=3,qt=2,hrv-,trvnb-,vjt=5,rkx=6,gjk=7,tsn-,khq=3,zns-,tzv-,kpgm-,gtc-,hgk-,cv=5,ldl-,jl=4,kpgm-,mrn=7,lgt=7,mxl=3,qnm=1,nqk-,khq-,mlf=3,hkmr-,kjq=1,hz-,vsmfb=3,lml=1,dg-,rr=9,dsf=1,zm=8,kpz-,htcfbt=8,bcdft=4,lj-,zkbs-,bqh-,zszjhl=5,qltnl=6,pdj=9,tnc=1,pcf-,zjl-,zvkm=7,kx=7,kh-,sf=6,pjj-,bspz=5,dhl=9,pqgsjl=2,hvf-,vjt-,qb-,rf-,xjdmx=6,dqb-,hbj-,qms=7,jvk-,kfj-,sn-,vsr=5,gnc=6,tnc-,rtqb-,cm=6,qzgx-,nzkz-,flfqp=2,brx-,bqh=8,pdns=4,ls=1,lxqmg=6,pjh-,nvs-,vgfg-,fnc=4,pjj=8,zvkm-,rr-,ttrz=7,zh-,hvf=8,xpzlm-,zhg-,zszjhl=3,xnxl-,rkx-,jzbz=1,nz-,dhl=9,pslh-,rs-,vkv=6,sfs=4,lprk-,vm=5,jvdj=7,glfk-,mt-,mcf=7,flfqp=1,njdh=5,zszjhl=8,bpv=3,tqp=3,sb=6,df-,kh-,tgx-,xh-,bpv=2,vgfg-,dsf=9,jjp-,bngz=4,ddzb-,mf=4,gnh-,xnxl=2,sj=2,bgs-,lfl=2,jjp-,jb=1,bqb=7,gnc=7,hkh-,trvnb=9,fz=8,hj-,jbd-,ft-,lr-,bspz=8,shfvt-,srsd-,jgt=4,zh=9,gngzf-,zhg=5,qlgthd=9,mhdml-,jz=8,rgk=4,xfx=8,fgth-,qpc-,jl-,mlf-,vdrg=8,pxtk-,ch=7,vj-,ps-,vptqjk=9,bcdfq=4,gmt-,jjp-,ndfns-,mt-,fj=9,vsm-,vpj=2,qt-,jjd-,xfk=8,jcj=8,mth-,zvkm-,rq=2,jj-,djz-,zbsk=4,rvd-,tkldj=7,gnh-,fvbk=2,dsf-,dhkg-,mds-,drrzc-,bxlc-,gpr=2,tnv-,tv=7,rr-,kqgdb=7,hkmr=6,ddm=3,vdrg=4,hbr=9,kgq=9,bx=9,krv=3,qlt-,zjl=4,tjp=9,zszjhl=2,xfk-,msmd=5,nd-,mk=6,rtdqm-,msx=6,rqj-,jjp-,rkvp-,xjf=2,dhl=6,lj-,mgk-,fzdb-,hbj-,blqp-,pjj=7,kqgdb-,brlsh=4,brx=3,ch=5,jzbz=9,xfd-,kfj-,svnr-,nqp-,zkbs=4,mtgr-,vbdqt=1,lg=3,fd-,jmt=1,bdz=2,fk-,qz=8,hvf-,xkgx-,vhthjz=1,mn-,lgq=1,szpm=6,sm=5,zvkm-,jgj-,xfld=2,zvv=3,bcdft-,sflsx=2,vvk=8,zhg=6,ps-,pjj=8,cdtx-,qc-,fjjp=5,thgnk=7,vppxc=2,tbmbg-,fk=8,vfb=7,tnv=6,qs=1,tbmbg-,fd-,bst=9,qhh-,jvk=3,sv-,vj=9,rqj=8,xz-,mf=8,sflsx=9,fvh-,km=5,ldl=3,sqqpv-,vj=7,lxqmg-,vpj=8,ltm-,kpz=5,vpj=4,fvh-,ds-,mqr=5,cvr-,chmg-,xkdczc-,cpq-,rzf=1,jxd-,lxqmg=8,chmg-,qhh-,pdns-,rtqb=3,jkvsr=6,vptg-,fd=8,kl=4,bqb-,nzkz-,fmg=4,sb=9,xpzlm=9,fq-,qnm-,vsmfb-,pt-,tlpf=2,tsn=9,qjqlk=2,gnc=8,jpcgqx-,jbcf=3,ft-,pbtc-,jt-,fsrf-,sc-,bp=8,tnv-,fk-,fh=8,lg-,bcdft-,tm-,tg-,khjxhb-,qpc-,hgf-,tscv=1,prbl=7,gjk=7,zpn-,kbq-,qq=1,zjl-,gnf-,cvr-,fsrf=8,mrn=9,cc=6,jp=9,dk=1,zpn=1,xjdmx-,rn=2,pvp=6,sb=4,kpz=3,tg=5,bv=3,gtc-,jbd-,nbh-,nvs=9,rh-,zvkm=8,hj=1,bngz=9,zd=5,rzf-,pdhg=1,mkx-,tnc-,mcv-,hkhv=4,qlt=1,bpv=4,csss-,gtc-,txz=4,hq=7,cq=9,vj=9,ggdv-,pdj-,jj=6,qlgthd=5,qj-,fd=3,zjl=3,zzbl-,qj-,vpj-,xjphkq=7,rnnznj-,fj-,qhh=5,mtnb=6,tkldj-,fsn-,jzbz=2,mxq=5,fnc=1,svnr=7,tbmbg=9,shbr-,cfxrz-,xjdmx-,hqm=3,vbdqt-,zf=6,kz-,fzk-,rkx=6,jjp=5,ckgtlf-,nj=2,zm-,br-,mct-,zhg=7,jgj=5,vpj=9,dqb=7,cl=4,lg=9,nvs-,dctfmj=7,xz-,lg=6,pz=7,pxl-,sflsx-,jmt=8,pvp-,dbd-,hqm-,tpjh-,xnxl-,pcf=8,jft-,htcfbt=2,ps=9,tz=9,nghp-,blqp-,vpj-,hq=5,fhs-,sd-,rkvp=8,vhthjz=4,cdtx=3,hjc-,dq-,lfn=9,ddzb=7,fh=8,zx=9,jvk=6,nv=6,mf=2,mtgr=2,vpj-,zf-,jft=8,rtqb-,jb=6,vs-,pxtk-,bzz-,rtqb-,vs-,rqj=9,dv=1,dv-,hgn-,dg-,cfcbr=4,rpb=3,nhzs=2,xz-,qhnj-,ttrz=5,rgk=8,nbxmg=5,bss=5,rsx-,mn=7,pt=5,khq-,mb=8,pxtk-,cfcbr=2,pbtc=4,zk=3,mlhd-,ndd-,hvx=8,sm-,vpj=3,bdz-,jmc-,lk=5,fgth-,prp=6,qf=8,qlz=6,rpb=1,hgf-,jc-,nj=2,rq-,kr-,vsr=9,jz-,xq-,lvg-,rpg=1,hj-,bp=4,zvv-,dqf-,vj-,ltm=6,lpkx=5,fz=4,qhql-,rpg=1,trvnb=6,msmd-,fz=2,xfmq-,blq=6,xpzlm=6,sbvc-,pdns=2,mb=7,cz-,rrjn=8,zdfmb-,xz-,kzc=8,bgs-,ds-,mq=8,fb-,jvdj-,tn-,mxl=8,xfx=3,bqh=3,pbtc-,lhn-,cvr-,hj-,tbmbg-,jjd=9,zvkm=4,xfld-,sd=6,rkvp-,ls=9,kqgdb-,ncqx=4,bxlc=7,gjk-,ct-,ffk=1,nr=8,cvr=8,mq=5,jj-,nfp-,zszjhl-,xfk-,vj=5,ng-,sx=5,kqgdb-,gt-,sgrzqk-,mhdml-,lk-,nl-,blq=6,rsx-,fhs-,qhql=1,zvv-,jtz-,hgk-,flfqp=9,ft=8,gr=4,hgf-,vjt=9,mgk-,xdc-,xkgx=5,vz=3,szpm=6,fvh=3,ft=6,br-,fsj=8,lr-,fqtd=8,lxr-,gmj=6,qt=8,zs=9,pt-,xfmq=5,fk-,xc=2,kpz-,zdfmb-,rkx=9,rtqb-,mvq-,zmrnkd-,jz=7,qlz-,ltndms-,zzbl-,kr=4,ns-,ckgtlf-,vb-,tqp-,qzv=4,hkh=9,txk-,bmgl=2,fhjd=3,xjdmx=3,rkvp=9,gngzf-,djz-,nqk-,ndd=5,xfk=3,bf-,nvj-,gnc-,xhhk-,fsrf-,ll=9,qlz-,lxr-,bckpqr=7,bbkqq-,ddm=9,chbl=6,sr=7,sm=5,tpr=2,tcfvqf=3,jfdf-,hkh=2,fsrf-,jjd-,ll-,nqk-,txtxp=4,ng-,pcf-,jtz=6,shfvt-,hvx-,qc-,qlt-,zm-,ct-,db=8,dzrkt=7,khqkt=8,rtqb-,nvs-,jpcgqx-,pj=5,cq-,sn-,njkfx-,nv-,szpm-,fcqv=6,kbmct-,sr-,crbxtd-,qqkfjl-,jjd=4,qch=3,csss-,vdrg-,jjd=4,vdrg-,rf=2,cl-,lk=2,gbg=4,pzd=8,rgk-,qpv=3,jt=4,tlpf=9,dv=1,rvd=4,vppxc-,sqqpv=8,kbmct-,fcqmj=4,fb-,pm-,lr=9,zq=8,mczf=3,zh-,tgx-,vcs-,xjphkq-,lpkx-,vjn=3,fsn-,chbl=9,sqqpv=3,bbkqq-,zszjhl-,nzx-,rtt=9,nd-,bckpqr=4,rtt-,jp-,vrrzmh=6,vdrg-,vhthjz=9,bss=5,sn-,xpmsx=1,tpj=9,sj-,qnqmt=9,rf-,qcn-,vbdqt=3,vptg-,nc-,fmg=1,jn-,zd=5,nghp-,vsmfb=3,tcfvqf=9,zhg=4,vptg=2,pd=9,szpm=2,ndfns=1,krv=8,zm-,znjv-,kqgdb=6,fkq=8,bcdft=1,vdrg=6,lfl=4,ljngt-,hgp=1,xjphkq-,lfl-,mcf-,qjqlk-,zkbs-,vfb-,kcd-,mqr=4,zhg=5,vptg=6,sh-,srjqs-,pjj-,tpjh=4,sgrzqk-,mt=1,srsd-,vhthjz=7,qlgthd-,sc=3,xcvl-,nqp=3,hq-,mxl=5,pz=8,fvbk=8,rdr=8,txz=6,nbxmg-,bgs-,tkldj-,txtxp-,nc-,lml=2,rvd=2,jp=4,xfx=1,pdhg=6,rkqgj=6,hgn=5,lgq=6,sd=1,hv-,pdj=6,sn-,tkldj=9,fjz-,fgth=7,bbrdsx=2,rrjn=7,qc-,tbmbg-,rz-,mlhd=7,kl-,pd=1,lgr-,bckpqr=2,pf=1,sx-,dbd-,ltndms-,ggdv=8,mkx-,jpcgqx=8,dctfmj-,lprk=5,nbh-,kx=3,mhdml-,msx-,bbkqq-,vj=8,fn=3,tn-,zm-,khq-,mkx-,vj-,pdhg=1,vcs-,rb-,gk=4,trvnb=4,jft=9,bgs-,nbxmg=9,brlsh=9,ffk=4,jz=1,fsrf=7,jfdf-,rr-,ljngt=8,flfqp-,kl=6,gc=2,rr-,zm=7,lprk=6,tj=2,dqf-,xc-,xpzlm=1,jc-,nj-,zs-,hkmr=8,ltm=2,tz-,xc-,xfx=1,dgtv-,qzv=4,brlsh-,hgk-,vz-,hvx=7,srsd-,kjq=1,ht=7,vm-,bzz-,sv=4,vppxc=7,tqp-,mtnb=8,ttq-,hgn-,zf-,zjl-,qhql-,dxjs=4,gmt-,gh=7,kpgm=2,rtt=2,nv-,fvh-,vjt=3,gnc=3,qch-,rpb=6,rgf=9,fj=7,hpt=9,jfzcz=5,qt-,txghhg-,tj-,jjd=7,mtgr-,ktc=3,srsd-,vrrzmh=4,bspz-,kqgdb-,mcv-,fjz=7,nvj-,nv=5,prbl-,xztd=6,mc=3,zm=8,cfxrz=4,sr-,fzdb=9,jt-,hgk-,fgp-,fkq-,db=9,fd-,hkhv=5,pzd=7,fkq=9,rs=3,jm-,vkv=9,jft=2,flfqp-,rdr-,mgk=1,dnv-,jbd=2,njdh-,bf=4,ndfns-,bv-,ll-,jpcgqx-,nbxmg-,jgj=6,qq-,jzbz-,zm=7,znjv=9,nz-,ng=3,lrfn=8,lfl-,dk-,xh-,gpr-,blqp-,jcj=3,mlhd-,jz=5,dhkg-,rkx=3,xh-,zf-,ds-,cbsr=2,msmd-,zhg=9,vxr=8,pm-,xq=8,nqk=9,sqqpv=3,rn-,rtt-,ch-,vnbz=8,cpq-,zmrnkd-,qpv-,kl=9,fz=6,mlf=3,dv-,rz=2,lprk-,js-,cm-,rq-,sc=8,fd-,szpm-,sss=2,pm-,znjv-,chbl=8,nfv-,xdc=7,fgth=7,px-,vfb-,vkv=4,vsm-,kh-,cq=7,xpmsx=5,gnc=2,jmt=2,sx-,rkx=5,zzjmn-,mvq=1,qqkfjl-,khqkt-,sv-,zdfmb=5,cc-,hkhv=4,xfk-,tsn=3,tbmbg=9,xfmq-,qt=8,bngz-,gmj-,tpr-,zjl-,pk-,gt=9,nv=6,bxlc-,fcqv-,gt-,vvk=3,xjm=6,tscv=3,mt=7,zpr=1,qpl=6,lq=7,jj-,tsn-,pf=1,nfv-,qnqmt=6,bf-,fkq=9,rsx-,pzd-,dxl-,fcqv-,dxl=3,khjxhb=2,gmj-,bqb-,mqr=3,rq-,mrn-,kzc=4,rtt-,jz-,zpr=9,kbq-,lvg-,djz-,mlhd=4,mcv=8,qhnj-,fb=6,sqqpv=5,rsx=3,qlt-,fmg=8,xjphkq-,mvq=4,hgp=2,xjphkq-,hz-,khqkt-,snfh=7,rnnznj-,zjfj-,lg-,fq=2,tpjh=9,qzgx-,hpt=1,xfd=8,sf=1,nqp-,bv=1,sh-,hdr=9,dsf=6,vjn-,bpn=6,lml=3,mhdml=8,sgrzqk=6,jn-,bmgl-,drn-,vptg=6,lgr=8,xpmsx-,cfxrz=4,zdfmb=7,kbmct=6,fq=4,qt=2,sflsx=2,rs=6,ps-,krv-,gr-,msx-,gnf=2,djz=2,qnqmt=3,jmt=9,pjj=8,pqgsjl-,vz=9,znjv-,lxr-,jft-,jmt=9,sf-,vnbz-,tnc=5,nc=1,lcsbk-,ls=7,jfdf-,mqbt=9,rb=7,tzv=4,kh=8,msx-,xfd-,fsj-,ndd=5,rz-,nzkz=4,ll=9,mds-,pjj-,bcdfq-,nd-,dctfmj-,qzgx-,qz-,zmrnkd=3,gnc=9,hv=5,ht=2,lpkx-,lgq-,hkh-,krlc-,gnf=3,fnvq-,jjp=5,hkhv-,lq=3,vsm=4,vxr-,tjp-,hkmr=9,vhthjz=1,pcf=6,vr=8,tn-,lpkx=2,pz=1,vbdqt=4,zdt-,vsmfb-,zkbs=6,gf=1,svnr-,gnc-,znjv-,kfj=7,tz-,rtqb-,kpz-,vb-,vpj-,jtz-,vkv=8,jmt=8,ktc=2,cbsr-,bst=8,khjxhb=9,cv=5,kr-,dbd=7,lfn-,jc-,hgn-,kqgdb-,gnc=4,trvnb-,sf=8,tlpf-,rz-,msx=1,ht=4,hz-,qnqmt=8,khq-,lfl=3,hbr=2,rb=9,ct-,qpl=7,bbrdsx-,zbsk=3,xkdczc=1,vhnjj-,ttq-,ddzb-,pdhg=6,shbr=7,krlc=9,htcfbt=7,jh=6,ffk-,sj=2,qc=2,fkq=8,rsx=2,jtz-,ndd=9,rq=5,vptqjk-,lk-,ssn=2,lg=9,jplrg=3,qqkfjl-,pbtc=6,gt=3,cc-,lfn-,ltm=6,qpv=4,gjk-,sm=9,fgp=9,nc=1,vsmfb=8,pf-,fjjp=4,krv=5,nf=6,sp-
diff --git a/2023/15-Lens_Library/second.hs b/2023/15-Lens_Library/second.hs
new file mode 100644
index 0000000..c7b3f53
--- /dev/null
+++ b/2023/15-Lens_Library/second.hs
@@ -0,0 +1,89 @@
+-- requires cabal install --lib megaparsec parser-combinators
+module Main (main) where
+
+import Control.Applicative.Permutations
+import Control.Monad (void, when)
+import Data.Char qualified as C
+import Data.Either
+import Data.Functor
+import Data.List qualified as L
+import Data.Map qualified as M
+import Data.Maybe
+import Data.Set qualified as S
+import Data.Vector qualified as V
+import Data.Void (Void)
+import Text.Megaparsec
+import Text.Megaparsec.Char
+
+import Debug.Trace
+
+exampleExpectedOutput = 145
+
+data Op = Equal Int | Minus deriving (Eq, Show)
+data Step = Step String Op deriving (Eq, Show)
+type Input = [Step]
+
+type Parser = Parsec Void String
+
+parseNumber :: Parser Int
+parseNumber = read <$> some digitChar <* optional (char ',')
+
+parseOp :: Parser Op
+parseOp = char '-' $> Minus
+ <|> char '=' *> (Equal <$> parseNumber)
+
+parseStep :: Parser Step
+parseStep = Step <$> some letterChar
+ <*> parseOp <* optional (char ',')
+
+parseInput' :: Parser Input
+parseInput' = some parseStep <* eol <* eof
+
+parseInput :: String -> IO Input
+parseInput filename = do
+ input <- readFile filename
+ case runParser parseInput' filename input of
+ Left bundle -> error $ errorBundlePretty bundle
+ Right input' -> return input'
+
+data Lens = Lens String Int deriving (Eq, Show)
+type Box = [Lens]
+
+compute :: Input -> Int
+compute input = sum $ zipWith (curry score) [1..] $ L.foldl' step initialBoxes input
+ where
+ score :: (Int, Box) -> Int
+ score (i, lenses) = sum $ zipWith (curry $ scoreLens i) [1 .. ] lenses
+ scoreLens :: Int -> (Int, Lens) -> Int
+ scoreLens i (j, Lens _ k) = i * j * k
+ initialBoxes = replicate 256 []
+ step :: [Box] -> Step -> [Box]
+ step boxes (Step label Minus) = take i boxes
+ ++ remove [] (boxes L.!! i)
+ : drop (i+1) boxes
+ where
+ i = hash 0 label
+ remove :: Box -> Box -> Box
+ remove out [] = out
+ remove out (l@(Lens ll _):ls) | ll == label = remove out ls
+ | otherwise = remove (out ++ [l]) ls
+ step boxes (Step label (Equal f)) = take i boxes
+ ++ process [] (boxes L.!! i)
+ : drop (i+1) boxes
+ where
+ i = hash 0 label
+ process :: Box -> Box -> Box
+ process out [] = out ++ [Lens label f]
+ process out (l@(Lens ll _):ls) | ll == label = out ++ Lens label f : ls
+ | otherwise = process (out ++ [l]) ls
+ hash :: Int -> String -> Int
+ hash i [] = i
+ hash i (x:xs) = hash (((i + C.ord x) * 17) `rem` 256) xs
+
+main :: IO ()
+main = do
+ example <- parseInput "example"
+ let exampleOutput = compute example
+ when (exampleOutput /= exampleExpectedOutput) (error $ "example failed: got " ++ show exampleOutput ++ " instead of " ++ show exampleExpectedOutput)
+ input <- parseInput "input"
+ print $ compute input