Problem Statement
Assuming that each unknown character will be selected uniformly at random from the characters contained in alphabet, return the expected length of the shortest overlapping concatenation of A and B.
Definition
- Class:
- OverlappingConcatenation
- Method:
- shortestExpected
- Parameters:
- String, String, String
- Returns:
- double
- Method signature:
- double shortestExpected(String A, String B, String alphabet)
- (be sure your method is public)
Constraints
- alphabet will contain between 1 and 26 lowercase letters ('a' - 'z'), inclusive.
- The characters in alphabet will be distinct.
- A and B will contain between 1 and 32 characters, inclusive.
- A and B will contain the same number of characters.
- Each character in A and B will either be contained in alphabet or it will be '*'.
Examples
"aa*aa"
"a*aaa"
"ab"
Returns: 7.0
The 4 equal-probability possibilities for the shortest overlapping concatenation (SOC) are as follows: A | B | SOC aaaaa | aaaaa | aaaaa aabaa | aaaaa | aabaaaaa aaaaa | abaaa | aaaaabaaa aabaa | abaaa | aabaaa The result is therefore (5 + 8 + 9 + 6) / 4 = 7.
"**"
"**"
"ab"
Returns: 3.125
There are 16 possibilities for A and B. Of these, 4 give a SOC of length 2; 6 give a SOC of length 3; and 6 give a SOC of length 4. The answer is therefore (4*2 + 6*3 + 6*4) / 16 = 3.125.
"**a*cd"
"cde***"
"abcdefghijklmnopqrstuvwxyz"
Returns: 10.0
It makes no difference what the unknown characters are; the SOC is always the same length.
"h*phz*"
"hzph*p"
"zph"
Returns: 10.555555555555557
"a*a*a*a*a*a*"
"*a*a*a*a*a*a"
"abcdef"
Returns: 23.6983063804134
"********************************"
"********************************"
"abcdefghijklmnopqrstuvwxyz"
Returns: 63.958459262501435
"********************************"
"********************************"
"yz"
Returns: 62.358835095751274
"ngafkhcmriluvssts*qbpoxzdwjsstss"
"sstssq*poxzdwjsstssyeng*fkhcmril"
"ngafkhcmriluvqbpoxzdwjtsye"
Returns: 58.9792899408284
"vnmzifxyrokbdbdbdwejgpuqhabdbdbd"
"bdbdbdwejgpuqhabdbdbdcsltvnmzif*"
"vnmzifxyrokwejgpuqhabdcslt"
Returns: 43.0
"hkizsb*fdtnlx*orefdtnlxqoref*tnl"
"fdtnlxqorefdtnlxq*refdtnlvpaucjm"
"hkizsbgxqorefdtnlvpaucjmwy"
Returns: 63.42250796540738
"devss*grws*sgrw*ssss*rwsssgrwsss"
"sssgrws*sgrwsssssgrwss*grwsssliu"
"devgrwsliuknypxfcamzjbqtoh"
Returns: 60.7603528801326
"qffflfffdffflfffoffflfffdffflfff"
"ffflfffdffflfff*f*flfffdf*flfffb"
"qodlfbwzrxgmvjiuakhcespytn"
Returns: 48.999089667728725
"gwftstitstybzj**k*rxlhnoatstitst"
"tstitstybzjcukerxlhnoatstitstpvq"
"gwfybzjcukerxlhnoaistpvqmd"
Returns: 56.998748293126994
"g*yxhkarjd**eo*wsqzb**tzb*z*zb*z"
"zbuztzbuztzb*ziflmgnyxhkarj**ve*"
"gnyxhkarjdpveocwsqtbuziflm"
Returns: 62.88432983752826
"**ypj*dvxrt*ekmg**ypjqdv*r*ae*m*"
"bcy*jqdvxrtaekmgbc*pjqdvxrtaekmg"
"bcypjqdvxrtaekmgihnwzolfus"
Returns: 63.96153845954638
"wookajoomookaj**mook*joomookaj**"
"oo**j*omo*kajoomookajoomook*j*oy"
"wmkajoyvihbeutlqngfdpszcxr"
Returns: 63.960046084412085
"wccc*cccc*iccc*hk*nccc**cccciccc"
"cc*icc*ccicccuhkg**cc*ccc****ccd"
"wuhkgnicdyzfrxevqbaolstmjp"
Returns: 61.95560817198278
"b***rcqldx*k*u*uvuvumhwpvuvu*uvu"
"*uvuvuvumh**v*vuvuvu**fz*enybsij"
"bsijrcqldxakmhwpvutofzgeny"
Returns: 63.729289877206384
"k**l**e***edbdedtrmcp*ed*d**bded"
"dedbdedbd*dtrmcpdedb*e*bdedyj*a*"
"khvlqtrmcpbedyjiafxogzswun"
Returns: 60.99408250357518
"drc*drchdrch*rapbndrch*rc*d***d*"
"drchdrch*rchdrapbn*rchd**hdrc*dr"
"apbnchdrgiekqujtwyflozvxsm"
Returns: 63.88460663042443
"gzmdiftpy***aop*kpn*rpykp*aop**p"
"*ykpvaop*k*n*r**kp*a**ykpcjeus**"
"gzmdiftnqrvaoykpcjeusblhwx"
Returns: 63.96136694229562
"qkt*n*a**am*ma*ma*aama*aa****ama"
"amaa*ama*mam*amam*amama**a**srxz"
"qktcnemahusrxzwfdjyolvgbpi"
Returns: 60.99998246678082
"e*cjxuay*gfggfgqgf*gf*g*gqg*ggf*"
"gfggfg*gfgg*gg*gqgf*gf*dhow*sbzl"
"evcjxuaymqfgdhownsbzlkritp"
Returns: 63.88017749202402
"ez*jc*ybn**rxvsqgo*ah*itpl**dezd"
"ezdez*jckyb**f*x*s**owahuitpl**d"
"ezdjckybnmfrxvsqgowahuitpl"
Returns: 60.99982931269914
"e*stn**oo*chy*mb*g***ch*xmblgo*o"
"o*oc*yxmb**ooochyx*b*g*oopwdjfar"
"eustniqchyxmblgopwdjfarkzv"
Returns: 62.923076923015046
"b*o*j***w**n*ribi*fe*z*h**t*d*b*"
"*bis*e***hk*t*d**ioujpxcw*m*l*sf"
"bioujpxcwamnlrsfeqzvhkgtyd"
Returns: 63.95567819754211
"*ll*c*ll*cl**iq*n**lllt*l**t*l*l"
"lllt*ll*t**l**q*nogllltcll**c*ll"
"iqknogtclhrvwasufmpbejyzxd"
Returns: 62.92307650100612
"dq**m*cy*f**q*q*bvqq***cya**x*q*"
"qqq*jc*af*xq*qkb***qm**y*f*xqq**"
"dkbvmjcyafuxqzgphowrtsilne"
Returns: 63.92159763313407
"*y*susi*cv**sr****lbo***si*cvs*s"
"*usi***s*sr*w*n***d*us*k*vs*s**t"
"hyfrgwxnlbodikcvusaztqmjpe"
Returns: 63.958579849419614
"*n*o*eg**w**fvd***l**km***gspw*e"
"*e*spw**fvdj**l**k**e********hr*"
"qniofvdjyalbtkmcgspweuhrxz"
Returns: 63.885923323519535
"*n*iazp**k****q**tvey*cxh**gng**"
"g*g****z*jdk*****bftve******mn**"
"mngiazpjdklworqbftveyucxhs"
Returns: 63.955453116918136
"*nx*g*ae*****rm*il*u**f****tza*t"
"zaetz*e***si*yu*cfdza*tzae*bk*pq"
"vnxhgrmsilyuwcfdzaetbkjpqo"
Returns: 63.84615383320533
"*g*eh**gae*s*gayc***ehs**a*h***a"
"qga**sqg*eh**g*ycqgaeh*q***hsq**"
"ycehsqgauxrvzwnpbtmflijdok"
Returns: 63.99555337695387
"*r*z*u**kaaev**i****j*oa*evf*iaa"
"*a*vfbi*a****o*a**f*********m**p"
"grpzyutxkhcjsoevfbiaqdlwnm"
Returns: 63.91863846409709
"hcm*k*i****k******gmd***z*m*kfi*"
"***fi*bmd********m***iz**d*fi*r*"
"hcejpgbmdkfizrlaswonuvtxyq"
Returns: 63.95844647959968
"wrssss*****s*s*g**kss****as**sss"
"*ss****s*sss****k*****sass****nj"
"wrgulkasnjqbpcdiyxhefzvtmo"
Returns: 63.87885828137078
"yfvko****rg*****mq*m*m*r**n*m***"
"****rg**lm**q****qr***lmqm****zb"
"yfvkoxrgunlmqjhezbwpdatics"
Returns: 63.95845926216251
"*ip*w*np**jhf*****qbxv**ygksm***"
"****h*ar*******t*****m******o*h*"
"miplwcnojhfarezdqbxvtuygks"
Returns: 63.95845925903515
"*i***m**ja***ur**y***b**km*****d"
"**x*an*qu*e***s***h******n**vip*"
"vipofqurewyzstbghkmcxjandl"
Returns: 63.95862811399691
"**k**fno**cno*x****x****x***ix*n"
"no*xc*o****o****oix***ix**z*hs*p"
"rwkgefoixcnzlhstpaubqmvjdy"
Returns: 62.99999957917325
"***e****a******o*****oi****p**o*"
"***i*dk******f***oi*******ool***"
"xqgefwiadktpzoljmcruvnbhsy"
Returns: 63.95845968073172
"ktfdc*ag*****l*********w*k******"
"*t*****dcp*g******vi*********o*t"
"ktfdcpagnezrylviuxbjsmhwqo"
Returns: 63.958459262539606
"**e*****o**l*****b**a****w*s***x"
"*****q*****k*n***********f****x*"
"fsevpxqzocmlkunhtbdragjyiw"
Returns: 63.95845927854264
"********a**tp**y*********tp***h*"
"y***d**b******y******b***q*****z"
"rkwxdaebtpgqhyfoznuclismjv"
Returns: 63.96136087264176
"*nk*****k**n*q********k*b***k***"
"***qb***kq****bn******k*b****q*n"
"kqbnreihmlpfxzcgyjatowvsud"
Returns: 63.95845917898664
"**w***hs*kz***i*******tq****n*y*"
"*******s*****u*g***m**t*********"
"sckzrduigaefmbltqxvownjyhp"
Returns: 63.95845925602398
"zyze****z*****xm*******z***ds***"
"**z*******t*h************z***z*z"
"ktvhcxmlinpbqfedsyzojraugw"
Returns: 63.958459276176946
"**r*********s****vhqi********o**"
"*s**s**s***av******s******s***j*"
"tnrkuywavhqiclosfdpjgzbmxe"
Returns: 63.95846784786314
"******p***p*p***************p***"
"q**p***pq****p******************"
"wojpqtianklbmxugcvedhzsyfr"
Returns: 63.95846790339221
"*******i********vev*******v*****"
"*************v****e*****j*w*xs*c"
"ormpuayidtvekjbwlxsqcnzhgf"
Returns: 63.958459262501435
"**ztp************o**************"
"*********************s********z*"
"fdelwomgprhuxsztncyajkbqvi"
Returns: 63.958459262501435
"w********v******************q***"
"**************q*q********e****bp"
"wfzhxmsajviygqutdnoerclkbp"
Returns: 63.958459262501435
"*************n************v*****"
"***************v**t*******v*****"
"ilowjtzngayvpxfbeurkmscqhd"
Returns: 63.958459262501435
"*********l**************v****l**"
"********************************"
"guoxvpltrisamjfwekcdnqbhzy"
Returns: 63.95845926250143
"***k********************w****i**"
"***********w********s***********"
"amgkvyohferqptuncbwdjixszl"
Returns: 63.95845926250143
"********************************"
"********************************"
"gtybjmculkwqivodeashfxnzpr"
Returns: 63.958459262501435
"********************************"
"******************t***k*****i***"
"caltjfrkndobziywesxgpuqvhm"
Returns: 63.958459262501435
"********************************"
"********************************"
"a"
Returns: 32.0
"rvvvyxdvvvgtvvvyxdvvvgtvvvyxdvvv"
"vvvyxdvvvgtvvvyxdvvvgtvvvyxdvvvl"
"ryxdvgtl"
Returns: 33.0
"y*whsejcccoqpidccclkmcccoqpidccc"
"cccoqpidccclkmcccoqpidcccaurnfgt"
"yxwhsejoqpidclkmaurnfgt"
Returns: 39.0
"ydawbtelawbtelpvkongawbt*lawbtel"
"awbtelawbtelpvkongawbtelawbtel*q"
"ydawbtelpvkongcq"
Returns: 56.5
"yoyyoyoyyoyoy*oyyoyyoyoyyo*oyyoy"
"yoyyoyoyyoyoyyoyyoyyo*oyyoyoyyoy"
"oy"
Returns: 52.5
"ywxvpjela*elujelajelajelujelajel"
"*el*je*ujelajelajelujelajelhrnbd"
"ywxvpujelahrnbd"
Returns: 63.72954074074074
"xygsgsgsicvugsgsgsgsgsicvugsgsgs"
"gsgsgsicvugsgsgsgsgsicvugsgsgstf"
"xyicvugstf"
Returns: 34.0
"gyxfffwvbjpfffto*hiunfffwvbjpfff"
"fffwvbjpffftolhiunfffwvbjpfffdmr"
"gyxwvbjpftolhiundmr"
Returns: 52.05263157894738
"xygrp*fqkicnlokikicnlokikicnloki"
"kicnlokiki*nlokikicnlokiabdejstu"
"xygrpmfqcnlokiabdejstu"
Returns: 55.27272727272727
"iyuwtibmhnqpjaedfkcrosglvxiyuwti"
"iyuwtibmh*qpjaedfk*rosg*vxiyuwti"
"yuwtibmhnqpjaedfkcrosglvx"
Returns: 57.998336
"ywafsucttqttttqttilrdkttqttttq*t"
"ttqttttqttilrdkttqttttqttmx*bno*"
"ywafsucqtilrdkmxjbnoh"
Returns: 61.857142857142854
"rytxmvrrytxm*rqocdryt*mvrrytxmvr"
"rytx*vrryt*mvrqocdrytxmvrrytxmvr"
"ytxmvrqocd"
Returns: 62.391200000000005
"jyxhskpgmmrcmmovlmmrcmmovl*mrcmm"
"mmrcmmovlmmr*mmo*lmm*cmmqd*i*btf"
"jyxhskpgrcmovlqdeinbtf"
Returns: 61.79954835735265
"*uuguu*myvu*ugu*uugu*umyvuuuguuu"
"uuu*uuumyvuuuguuu*guuumyvuuuguuu"
"myvgu"
Returns: 60.119808000000006
"yq*vsejm*ocrrrr*drrrrrrrrrdrrrrr"
"rrr*rdrrrrrr*rrdrrrr*ipnbaglktuw"
"yqxvsejmfocdripnbaglktuw"
Returns: 60.66663652584876
"ywxdu*auiauiafrglh*vp**uiauiau*a"
"*iau*auiaf*glhjvpqcui*uiauiasokm"
"ywxduiafrglhjvpqcsokm"
Returns: 63.931972789091716
"xyr*jtpscc***ccc*flccoflcccof*cc"
"ccoflc*cof*ccoflccco*lcckdbig*nq"
"xyrajtpscoflkdbigmnq"
Returns: 61.96062499957031
"xblikg*vublikge*mp*blikgyvublikg"
"blikgyvub*ikge*mpdb*ikgyv*b*i*gq"
"xyvublikgejmpdq"
Returns: 58.46666665964335
"yvxb*anj*jgfphnjnjdc*jnj***hn*nj"
"njnjg*ph**n*dcnjnjgfphnjnj*lkimt"
"yvxbuagfphnjdcelkimt"
Returns: 61.899999992264256
"u*vwlhfg*e**okmcptet*t*okmcptete"
"t*te*kmcptetet**kmcptetea**dbsr*"
"uyvwlhfgokmcpteaindbsrj"
Returns: 63.825032786224774
"y**luqom**mmrmmrmmadc*mrmmr*mrmm"
"mmr*mrmmr*m*d*mmrmmrm*rmmjehk**p"
"yvxluqormadcjehkinp"
Returns: 61.68418750619122
"*ssss*s*sytss**ssssssytsssssssss"
"s*ss**ss*ytsss*s*ssssyt*ss*ss*ss"
"yts"
Returns: 61.75791772850713
"y*xtdha*m**q*qsqm**q*qmq*qmqmqmq"
"qmqm*mqsqm*mqmq*qsq*qmq**ogpelc*"
"ywxtdhasqmogpelcn"
Returns: 60.7647055509194
"xydp*h**pupvhtspokf*vhts*upvh*sp"
"pv**sp*pvh*sp*kfpvhtspupvh*s*ai*"
"xyduvhtspokfain"
Returns: 62.977776753540475
"y*fwafwachgena*w**wac*gena*wafwa"
"a*waf****g*n**wafwac*gen*fwa*w*b"
"yfwachgenb"
Returns: 62.694299998287
"xhqy*v***qnlrfajbmp*ds**qyivkghq"
"h*y*vkghq*lrf*j*mp*d*ohqyivk*h*t"
"xyivkghqnlrfajbmpcdsot"
Returns: 63.908433508640115
"baxwe*q*pm*eeq*pm*eqdpm*ee*dpm*e"
"eeqd**e**qd*meeqd**eeeqdpm*ech*o"
"baxweqdpmchuo"
Returns: 62.92306076267237
"mybuiuituiuis*r**fng*h*uiu**ui**"
"u*ui*u*uisl*q**ngjhou*uit*iui*p*"
"mybtuislrqkfngjhoapd"
Returns: 63.94484368750001
"xhhywr**kpl*ohhs*mhh*w*d*kplf*hh"
"hh*w*du****ohhsgmhhywrd**p*fo**n"
"xywrdukplfohsgmn"
Returns: 61.99609374720603
"ysa*jt**oidt*toidt*t*i*tu*oid*ut"
"t*to*dtu*oid*u*o**tutoi*tu*ecn*r"
"ysavjutoidecnxr"
Returns: 62.99110312799795
"*xvxvxvxvxvx***pi*x**vxv*vx*xv*v"
"xv*v*v*vx*xvxv*imx*xvx*x**v*vxvh"
"yxvpimh"
Returns: 63.167253276764086
"qvq**v**myq*qv*v*v*v*v***vqvqvqv"
"qvqvqvqvmyq*qvq*q*qvq*myqvq**vq*"
"myqv"
Returns: 57.49999046294397
"*eparrb*dkljiv*h*r*r*u***ji**h*r"
"*rbudkl*iv*h*rrr*u*kl*ivmhrro*fq"
"yepabudkljivmhronfq"
Returns: 63.84487534621749
"y*s*c**f*fo*tc*cf***fcfogtcfcfcf"
"cf**c*o*tcf*f*f*f*fogt*fcf*fl***"
"yxsuogtcflmpj"
Returns: 61.98725533264266
"yw***f**acaa***a*aa***a*caaaacaa"
"***a*aac*aaacaaaac*aaacaad*mqg*n"
"ywvetfrcadpmqgsn"
Returns: 63.93199844275758
"uyxvj**m*na*n**nnafnn****q*naf*n"
"n*afnn**n*fn*afnnq***fn**h*to***"
"uyxvjdcmqnafehbtoklr"
Returns: 62.99699999999894
"y*x***ir**hg**m*q*r**h*o*me*i*j*"
"qi**lhgokm**irj*hgok*eq*rjl***dp"
"yaxtvqirjlhgokmefbudp"
Returns: 63.95235524292766
"*yx**wij**eqk*ee*e***hee*e*qkhee"
"*****eeae***h*eaee**heenb*lfod*p"
"tyxsvwijgqkheanbmlfodrp"
Returns: 63.95436788980238
"*qt*waewa*w*h*fk*gl*p*ojew*e*a*w"
"*waew*e**hc***gl***oj****wa***d*"
"yqtaewmhcfknglipvojrdu"
Returns: 63.86542070982879
"ywt***jptu**tjpt*ptjptu*v*j*t*pt"
"t*ptj**u*v*j**j*tjp**cvtj**j****"
"ywucvtjpqb"
Returns: 62.699996984303
"**e*d*m**nlkn*pk****kn*k*qp*n**n"
"k*l*n*pkn***knlknqp*n*knji**yf**"
"axewdbmcqplknjigvyfsr"
Returns: 63.995439632844246
"**v**r**c***c*v*un**c*v**r*****v"
"vvc*vv*r**crvv**vvcrvvcrv**rvv*p"
"ybcrvunep"
Returns: 62.887771146837395
"w*xlpb*d**d*d*ddd***od*dd**dd*d*"
"***dd****ddgqod*ddddd*d*dise*c*h"
"wyxlpbmdgqoiseackh"
Returns: 63.937880110937336
"y***jfq**l*q*fqqhnqqjfqq**q*j*q*"
"*q**q****q*fq**nqq******qqj*q**p"
"ywvljfqhnop"
Returns: 63.87654577886677
"axvbud*fmi***imi***i*ikpmi*i**mi"
"mikpmi**k**im****imi**mi*g*lncyo"
"axvbudhfkpmirgjlncyo"
Returns: 61.99949984390624
"t*nokn*g*h**nok*efno*nw***i*nokn"
"*ok****h*j*ok****o**wgahi**o****"
"tbwgahijoknefmr"
Returns: 63.91999999999885
"******ok*q**li*i**i*a*j***iiilii"
"ii*i**li*****i**ii*li*cdh**b*usz"
"yxwvrfokpqlimagjcdhtnbeusz"
Returns: 61.99556210789113
"y**hgb*ga*o**ng***gb*gal*q*ng*e*"
"**e*a****ngb*ggb*galoqrn*b***m**"
"yvuhaloqrnbegfmid"
Returns: 63.933067203241265
"yx*f*s**iik*lm*gdwi*ike*mngdwi**"
"**ik**mngd***i**l**g*wi*****zjtp"
"yxcfrsbikelmngdwohqzjtp"
Returns: 63.95263039880545
"**uuu*uv**aorf*hlj********eu*uu*"
"u**uuv**a***nhljib*p**d**u*uu**x"
"ymuvqtaorfnhljibkpcgdsewx"
Returns: 63.87667712000001
"****xxw*xxxxx*v*x**wv*xxx***x***"
"***x*v*xx**wvx*xxwv*x*xxwv*x*xb*"
"syxwvba"
Returns: 63.809344900409386
"*xx*xxx*y*c*fb*rl*******xx***xxx"
"x*x**xx*yw*ufb**lot*a**mxx***xxx"
"xywcufbqrlotjahkm"
Returns: 62.882026447456006
"y*u**s**licf******k**k*f**fknfkn"
"f***knfk**k*fk****fkn**oqjb***hx"
"ywuerstmlicfkndgoqjbapvhx"
Returns: 63.99498498457279
"ywvxu*****tb*p*l*ag*n***v*******"
"**u*v*uv*b*p*liag*n*sm*x*v*x***o"
"ywxuvtbqpeliaghnfsmko"
Returns: 63.94761364802748
"*x*g******a**aal**c**a*v**va**aa"
"aav*****vaa*p*cb*aavaav****a**d*"
"yxwgvalphcbftodn"
Returns: 61.999954167793476
"****db*clp*eg*********egrt*b**l*"
"b***pmeg***bu***m*gr*hbu*l*o****"
"yawndbuclpmegrthoqiks"
Returns: 63.95201612300969
"******"
"x***x*"
"hx"
Returns: 10.48828125
"da"
"**"
"tvazgdrm"
Returns: 3.84375
"*v***"
"*v***"
"kqv"
Returns: 9.289894833104709
"hjjjjhjhj"
"jjjjhjhjj"
"jh"
Returns: 10.0
"******"
"******"
"oty"
Returns: 11.31881431805224
"o"
"o"
"o"
Returns: 1.0
"****i"
"*****"
"zxi"
Returns: 9.326169791190367
"y"
"y"
"y"
Returns: 1.0
"*rrrr**rr"
"rr*r*r*rr"
"r"
Returns: 9.0
"emn*p"
"udmae"
"kpngdwiouezfxjtbarmy"
Returns: 10.0
"*xtj*"
"**r**"
"jrxt"
Returns: 9.59375
"f*f*f*ff"
"f**fffff"
"f"
Returns: 8.0
"t****c**f"
"*uu*uu**u"
"feticuk"
Returns: 17.855468558238176
"v*z****a"
"h**a*z**"
"ivzhap"
Returns: 15.911626526539402
"*"
"l"
"ydjwlf"
Returns: 1.8333333333333335
"**"
"*s"
"s"
Returns: 2.0
"zzz"
"zzz"
"z"
Returns: 3.0
"f"
"r"
"karyhpjf"
Returns: 2.0
"ypyypypypp"
"yppyyypyyy"
"py"
Returns: 17.0
"a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a"
"a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a"
"abcdefg"
Returns: 60.61807296755505