From dc46c9af3228d250b23fe250fa5297d7eaa13859 Mon Sep 17 00:00:00 2001 From: Seth Etter Date: Sun, 13 Dec 2015 08:59:36 -0600 Subject: [PATCH] Day 5, part 1 --- index.js | 12 + input/day5.txt | 1000 +++++++++++++++++++++++++++++++++++++++++++++ lib/day5.js | 41 ++ spec/day5.spec.js | 54 +++ 4 files changed, 1107 insertions(+) create mode 100644 input/day5.txt create mode 100644 lib/day5.js create mode 100644 spec/day5.spec.js diff --git a/index.js b/index.js index 030464e..d624afa 100644 --- a/index.js +++ b/index.js @@ -23,3 +23,15 @@ var day4Part1Answer = Day4.adventCoinSecret(day4Input, '00000'); var day4Part2Answer = Day4.adventCoinSecret(day4Input, '000000'); console.log('Day 4, Part 1:', day4Part1Answer); console.log('Day 4, Part 2:', day4Part2Answer); + +/** + * Day 5! + * ---------------------------------- + */ +var Day5 = require('./lib/day5'); +var day5Input = fs.readFileSync('./input/day5.txt', 'utf8'); +var niceStringCount = 0; +day5Input.split('\n').forEach(function(str) { + if (Day5.isStringNice(str)) niceStringCount++; +}); +console.log('Day 5, Part 1:', niceStringCount); diff --git a/input/day5.txt b/input/day5.txt new file mode 100644 index 0000000..7bc179c --- /dev/null +++ b/input/day5.txt @@ -0,0 +1,1000 @@ +uxcplgxnkwbdwhrp +suerykeptdsutidb +dmrtgdkaimrrwmej +ztxhjwllrckhakut +gdnzurjbbwmgayrg +gjdzbtrcxwprtery +fbuqqaatackrvemm +pcjhsshoveaodyko +lrpprussbesniilv +mmsebhtqqjiqrusd +vumllmrrdjgktmnb +ptsqjcfbmgwdywgi +mmppavyjgcfebgpl +zexyxksqrqyonhui +npulalteaztqqnrl +mscqpccetkktaknl +ydssjjlfejdxrztr +jdygsbqimbxljuue +ortsthjkmlonvgci +jfjhsbxeorhgmstc +vdrqdpojfuubjbbg +xxxddetvrlpzsfpq +zpjxvrmaorjpwegy +laxrlkntrukjcswz +pbqoungonelthcke +niexeyzvrtrlgfzw +zuetendekblknqng +lyazavyoweyuvfye +tegbldtkagfwlerf +xckozymymezzarpy +ehydpjavmncegzfn +jlnespnckgwmkkry +bfyetscttekoodio +bnokwopzvsozsbmj +qpqjhzdbuhrxsipy +vveroinquypehnnk +ykjtxscefztrmnen +vxlbxagsmsuuchod +punnnfyyufkpqilx +zibnnszmrmtissww +cxoaaphylmlyljjz +zpcmkcftuuesvsqw +wcqeqynmbbarahtz +kspontxsclmbkequ +jeomqzucrjxtypwl +ixynwoxupzybroij +ionndmdwpofvjnnq +tycxecjvaxyovrvu +uxdapggxzmbwrity +csskdqivjcdsnhpe +otflgdbzevmzkxzx +verykrivwbrmocta +ccbdeemfnmtputjw +suyuuthfhlysdmhr +aigzoaozaginuxcm +ycxfnrjnrcubbmzs +fgbqhrypnrpiizyy +taoxrnwdhsehywze +echfzdbnphlwjlew +jhmomnrbfaawicda +fywndkvhbzxxaihx +aftuyacfkdzzzpem +yytzxsvwztlcljvb +iblbjiotoabgnvld +kvpwzvwrsmvtdxcx +ardgckwkftcefunk +oqtivsqhcgrcmbbd +wkaieqxdoajyvaso +rkemicdsrtxsydvl +sobljmgiahyqbirc +pbhvtrxajxisuivj +ggqywcbfckburdrr +gmegczjawxtsywwq +kgjhlwyonwhojyvq +bpqlmxtarjthtjpn +pxfnnuyacdxyfclr +isdbibbtrqdfuopn +vucsgcviofwtdjcg +ywehopujowckggkg +mzogxlhldvxytsgl +mllyabngqmzfcubp +uwvmejelibobdbug +brebtoppnwawcmxa +fcftkhghbnznafie +sqiizvgijmddvxxz +qzvvjaonnxszeuar +abekxzbqttczywvy +bkldqqioyhrgzgjs +lilslxsibyunueff +ktxxltqgfrnscxnx +iwdqtlipxoubonrg +twncehkxkhouoctj +bdwlmbahtqtkduxz +smbzkuoikcyiulxq +bjmsdkqcmnidxjsr +icbrswapzdlzdanh +eyszxnhbjziiplgn +pdxhrkcbhzqditwb +nfulnpvtzimbzsze +glayzfymwffmlwhk +bejxesxdnwdlpeup +ukssntwuqvhmsgwj +hoccqxlxuuoomwyc +rapztrdfxrosxcig +cxowzhgmzerttdfq +yzhcurqhdxhmolak +kqgulndpxbwxesxi +yjkgcvtytkitvxiu +xnhfqhnnaceaqyue +qkuqreghngfndifr +xesxgeaucmhswnex +occbvembjeuthryi +dmefxmxqjncirdwj +ystmvxklmcdlsvin +pplykqlxmkdrmydq +cbbjkpbdvjhkxnuc +embhffzsciklnxrz +asrsxtvsdnuhcnco +xcbcrtcnzqedktpi +mglwujflcnixbkvn +mnurwhkzynhahbjp +cekjbablkjehixtj +kbkcmjhhipcjcwru +usifwcsfknoviasj +rsfgocseyeflqhku +prgcyqrickecxlhm +asbawplieizkavmq +sylnsirtrxgrcono +nzspjfovbtfkloya +qfxmsprfytvaxgtr +yckpentqodgzngnv +ycsfscegcexcnbwq +kbmltycafudieyuh +tpahmvkftilypxuf +qivqozjrmguypuxu +gdhbfradjuidunbk +vxqevjncsqqnhmkl +rpricegggcfeihst +xucvzpprwtdpzifq +egyjcyyrrdnyhxoo +kfbrzmbtrrwyeofp +qpjdsocrtwzpjdkd +reboldkprsgmmbit +vwkrzqvvhqkensuy +ydvmssepskzzvfdp +vqbigplejygdijuu +mzpgnahrhxgjriqm +uiejixjadpfsxqcv +tosatnvnfjkqiaha +yipuojpxfqnltclx +pcxwvgcghfpptjlf +shrudjvvapohziaj +jdckfjdtjsszdzhj +hgisfhcbdgvxuilk +gytnfjmrfujnmnpp +ohflkgffnxmpwrrs +jzxajbkwwjknasjh +xrcxfollmejrislv +djjlwykouhyfukob +rittommltkbtsequ +lpbvkxdcnlikwcxm +vkcrjmcifhwgfpdj +dkhjqwtggdrmcslq +swnohthfvjvoasvt +yrzoksmcnsagatii +duommjnueqmdxftp +inlvzlppdlgfmvmx +xibilzssabuqihtq +inkmwnvrkootrged +ldfianvyugqtemax +gbvwtiexcuvtngti +temjkvgnwxrhdidc +askbbywyyykerghp +onezejkuwmrqdkfr +kybekxtgartuurbq +ubzjotlasrewbbkl +stueymlsovqgmwkh +lhduseycrewwponi +yohdmucunrgemqcu +onnfbxcuhbuifbyc +odrjkigbrsojlqbt +imqkqqlkgmttpxtx +sxmlkspqoluidnxw +akaauujpxhnccleb +xvgpghhdtpgvefnk +jdxeqxzsbqtvgvcq +mdusenpygmerxnni +agihtqvgkmgcbtaw +dovxcywlyvspixad +uulgazeyvgtxqkfz +ndhmvrwuflhktzyo +hcaqkmrbvozaanvm +tvfozbqavqxdqwqv +rlkpycdzopitfbsv +dmyjtmjbtnvnedhs +fmwmqeigbzrxjvdu +twgookcelrjmczqi +grxosmxvzgymjdtz +zsstljhzugqybueo +jpeapxlytnycekbd +iasykpefrwxrlvxl +azohkkqybcnsddus +aoaekngakjsgsonx +awsqaoswqejanotc +sgdxmketnjmjxxcp +ylnyuloaukdrhwuy +ewoqjmakifbefdib +ytjfubnexoxuevbp +ewlreawvddptezdd +vmkonztwnfgssdog +ahbpuqygcwmudyxn +kmahpxfjximorkrh +otjbexwssgpnpccn +aewskyipyztvskkl +urqmlaiqyfqpizje +nrfrbedthzymfgfa +vndwwrjrwzoltfgi +iiewevdzbortcwwe +qiblninjkrkhzxgi +xmvaxqruyzesifuu +yewuzizdaucycsko +hmasezegrhycbucy +dwpjrmkhsmnecill +hnffpbodtxprlhss +avmrgrwahpsvzuhm +nksvvaswujiukzxk +zzzapwhtffilxphu +vwegwyjkbzsrtnol +qurpszehmkfqwaok +iknoqtovqowthpno +brlmpjviuiagymek +efxebhputzeulthq +mzkquarxlhlvvost +xsigcagzqbhwwgps +qufztljyzjxgahdp +dlfkavnhobssfxvx +hgdpcgqxjegnhjlr +fboomzcvvqudjfbi +wnjuuiivaxynqhrd +nhcgzmpujgwisguw +wjeiacxuymuhykgk +qmeebvxijcgdlzpf +nmmnxsehhgsgoich +ejluaraxythbqfkl +mdbsbwnaypvlatcj +nnfshfibmvfqrbka +dvckdmihzamgqpxr +foztgqrjbwyxvewk +okpryqcbvorcxhoh +fpiwsndulvtthctx +zrbiovlmzdmibsiq +setwafbnnzcftutg +nyvqghxhgkxfobdm +enpvqadzarauhajl +twblhpvkazpdmhmr +lbhlllsgswvhdesh +tdfwkgxnqjxcvsuo +lnvyjjbwycjbvrrb +jsxqdvmzaydbwekg +xirbcbvwlcptuvoa +hwnukxenilatlfsk +khwopjqkxprgopmd +sljzdoviweameskw +stkrdmxmpaijximn +fdilorryzhmeqwkc +mfchaaialgvoozra +gjxhoxeqgkbknmze +beowovcoqnginrno +mkgmsgwkwhizunxo +phnhfusyoylvjdou +csehdlcmwepcpzmq +pgojomirzntgzohj +fkffgyfsvwqhmboz +mrvduasiytbzfwdn +epzrmsifpmfaewng +ooqxnoyqrlozbbyf +ahcxfmgtedywrbnx +ibqktvqmgnirqjot +xarssauvofdiaefn +xradvurskwbfzrnw +nxklmulddqcmewad +twichytatzoggchg +qmgvroqwrjgcycyv +yvezgulgrtgvyjjm +jgmcklzjdmznmuqk +bytajdwwconasjzt +apjttucpycyghqhu +flfejjzihodwtyup +gmrtrwyewucyqotv +nlohdrlymbkoenyl +wxcmqwbrwgtmkyfe +njtzlceyevmisxfn +htbbidsfbbshmzlt +gxhjeypjwghnrbsf +cifcwnbtazronikv +ezvjijcjcyszwdjy +srffeyrvyetbecmc +xpjefrtatrlkbkzl +yhncvfqjcyhsxhbb +pqhcufzlcezhihpr +qtdsfvxfqmsnzisp +dfonzdicxxhzxkrx +mqqqzhxkyfpofzty +dodjadoqyxsuazxt +jjwkrlquazzjbvlm +ttosfloajukoytfb +llateudmzxrzbqph +criqihrysgesmpsx +npszvlittbcxxknj +qmzojrvraitrktil +cfyoozzpwxwkwoto +daxohtcgvtktggfw +vthkpkoxmiuotjaj +pkfkyobvzjeecnui +ojcjiqrfltbhcdze +scbivhpvjkjbauun +ysowvwtzmqpjfwyp +laeplxlunwkfeaou +jufhcikovykwjhsa +xrucychehzksoitr +pyaulaltjkktlfkq +oypfrblfdhwvqxcv +zybrgxixvhchgzcf +puoagefcmlxelvlp +xjnhfdrsbhszfsso +ocgvzryoydaoracw +bxpnqllmptkpeena +pziyeihxlxbbgdio +bvtrhtlbfzmglsfc +ggpuvtseebylsrfk +pukenexjqecnivfj +jswabfbzpnhhdbpn +enojrtwqpfziyqsv +rjtmxudgcudefuiz +iqmjxynvtvdacffc +uheywxlsusklitvl +kwhxduejafdpmqdc +rspgblenbqlmcltn +rczhurnrqqgjutox +dqhytibjzxkdblzl +hpbieadydiycvfys +pucztfoqvenxiuym +nqpfzgpblwijiprf +ltgseeblgajbvltk +mwxukbsnapewhfrc +dvxluiflicdtnxix +pexfbpgnqiqymxcq +dakudfjjwtpxuzxy +letlceyzlgmnrewu +ojktahbsdifdfhmd +anezoybbghjudbih +sawxtlvzysaqkbbf +ttnkctcevpjiwqua +edrwrdvbaoqraejd +wnbfilvuienjxlcr +wqhzwvyybyxhhtsm +jxbgvyaqczwdlxfo +wbypqfmbwrsvfmdv +izdxjyfpidehbets +vbxbggqseurknjor +egpmpoxickhvwdlz +ivfrzklvpwoemxsy +xkziseheibmrpdww +xnrmtoihaudozksa +efemdmbxdsaymlrw +yjdjeckmsrckaagx +vlftqxxcburxnohv +fwyquwgajaxebduj +dwpmqvcxqwwnfkkr +isduxxjfsluuvwga +avdtdppodpntojgf +vrcoekdnutbnlgqk +kbhboxjmgomizxkl +cgsfpjrmewexgzfy +usdtnhjxbvtnafvp +bjoddgxbuxzhnsqd +hoyqdzofddedevsb +rwiwbvqfjajotaoj +iabomphsuyfptoos +bubeonwbukprpvhy +xurgunofmluhisxm +puyojzdvhktawkua +dbvqhztzdsncrxkb +oaeclqzyshuuryvm +nmgwfssnflxvcupr +vjkiwbpunkahtsrw +romyflhrarxchmyo +yecssfmetezchwjc +qwtocacqdslhozkd +mesexvfbtypblmam +mtjucgtjesjppdtt +pvodhqqoeecjsvwi +vvlcwignechiqvxj +wiqmzmmjgjajwgov +kwneobiiaixhclev +lkdeglzrrxuomsyt +oqovuwcpwbghurva +lfsdcxsasmuarwwg +awkbafhswnfbhvck +sztxlnmyvqsiwljg +hozxgyxbcxjzedvs +oifkqgfqmflxvyzn +mfvnehsajlofepib +delgbyfhsyhmyrfa +uenimmwriihxoydv +vjqutpilsztquutn +kfebsaixycrodhvl +coifyqfwzlovrpaj +xiyvdxtkqhcqfsqr +hoidcbzsauirpkyt +fiumhfaazfkbaglq +fzwdormfbtkdjgfm +faxqrortjdeihjfv +ljhaszjklhkjvrfi +pzrxsffkuockoqyl +immbtokjmwyrktzn +lzgjhyiywwnuxpfx +vhkocmwzkfwjuzog +ghntjkszahmdzfbl +gbcthxesvqbmzggy +oyttamhpquflojkh +nbscpfjwzylkfbtv +wnumxzqbltvxtbzs +jfhobjxionolnouc +nrtxxmvqjhasigvm +hweodfomsnlgaxnj +lfgehftptlfyvvaj +ccoueqkocrdgwlvy +euhgvirhsaotuhgf +pdlsanvgitjvedhd +seokvlbhrfhswanv +pntdqaturewqczti +jkktayepxcifyurj +dhzzbiaisozqhown +wehtwakcmqwczpbu +zwvozvspqmuckkcd +efucjlrwxuhmjubr +lzodaxuyntrnxwvp +qdezfvpyowfpmtwd +mizijorwrkanesva +txmitbiqoiryxhpz +xhsqgobpouwnlvps +muixgprsknlqaele +disgutskxwplodra +bmztllsugzsqefrm +ymwznyowpaaefkhm +ebfifzloswvoagqh +pkldomvvklefcicw +ziqzbbfunmcgrbtq +iuekfpbkraiwqkic +jflgjidirjapcuqo +achsfbroyrnqnecg +udbhouhlgjjzapzr +arerrohyhhkmwhyo +txyjzkqexgvzdtow +ogzrjwibvzoucrpg +rfdftaesxdnghwhd +axdhwmpuxelmpabo +gtktemowbsvognac +wkfuclilhqjzxztk +qbwjouutzegaxhrz +opfziwqqbwhzzqhj +pvcvcsupfwsmeacs +xsbohvbguzsgpawn +sczoefukwywxriwj +oqkhcqfdeaifbqoc +vtsrholxbjkhwoln +yuvapljnwbssfbhi +dxdfwccqvyzeszyl +gdbmjtonbiugitmb +qunirtqbubxalmxr +zzxsirhdaippnopr +fibtndkqjfechbmq +gqgqyjvqmfiwiyio +ihwsfkwhtzuydlzw +eygyuffeyrbbhlit +zdlsaweqomzrhdyy +ptbgfzuvxiuuxyds +llxlfdquvovzuqva +wfrltggyztqtyljv +kwipfevnbralidbm +gbhqfbrvuseellbx +obkbuualrzrakknv +hlradjrwyjgfqugu +vtqlxbyiaiorzdsp +tedcbqoxsmbfjeyy +cxdppfvklbdayghy +gjnofexywmdtgeft +ldzeimbbjmgpgeax +egrwsmshbvbawvja +vadfrjvcrdlonrkg +mojorplakzfmzvtp +jyurlsoxhubferpo +ijwqogivvzpbegkm +cnmetoionfxlutzg +lawigelyhegqtyil +mqosapvnduocctcd +eqncubmywvxgpfld +vigfretuzppxkrfy +ncwynsziydoflllq +cbllqinsipfknabg +ndtbvdivzlnafziq +iqrrzgzntjquzlrs +damkuheynobqvusp +jxctymifsqilyoxa +ylritbpusymysmrf +paoqcuihyooaghfu +obhpkdaibwixeepl +igrmhawvctyfjfhd +ybekishyztlahopt +vkbniafnlfqhhsrq +kltdigxmbhazrywf +ufhcoyvvxqzeixpr +klcxdcoglwmeynjt +funpjuvfbzcgdhgs +akgyvyfzcpmepiuc +zhlkgvhmjhwrfmua +ibsowtbnrsnxexuz +vpufbqilksypwlrn +ngrintxhusvdkfib +ziuwswlbrxcxqslw +sucledgxruugrnic +zwnsfsyotmlpinew +oaekskxfcwwuzkor +qjmqwaktpzhwfldu +tmgfgqgpxaryktxo +qfaizepgauqxvffk +addkqofusrstpamf +shdnwnnderkemcts +gwfygbsugzptvena +fpziernelahopdsj +bkkrqbsjvyjtqfax +gxrljlqwxghbgjox +ipfwnqaskupkmevm +nnyoyhnqyfydqpno +lgzltbrrzeqqtydq +fgzxqurhtdfucheb +jvpthtudlsoivdwj +bmlhymalgvehvxys +fhklibetnvghlgnp +hfcyhptxzvblvlst +donanindroexgrha +oqawfmslbgjqimzx +jzgehjfjukizosep +bhlgamcjqijpvipb +jrcrdjrvsyxzidsk +ouwfwwjqezkofqck +wrvsbnkhyzayialf +knhivfqjxrxnafdl +hbxbgqsqwzijlngf +qlffukpfmnxpfiyq +evhxlouocemdkwgk +baxhdrmhaukpmatw +nwlyytsvreqaminp +ljsjjzmlsilvxgal +onunatwxfzwlmgpk +njgolfwndqnwdqde +ngdgcjzxupkzzbqi +ieawycvvmvftbikq +ccyvnexuvczvtrit +enndfwjpwjyasjvv +tcihprzwzftaioqu +bkztdkbrxfvfeddu +qkvhtltdrmryzdco +rurtxgibkeaibofs +mjxypgscrqiglzbp +unpkojewduprmymd +csqtkhjxpbzbnqog +mednhjgbwzlhmufi +sfrwfazygygzirwd +ijqeupbrhhpqxota +cmhpncanwudyysyh +wwcxbwzrplfzrwxd +jriomldifuobjpmq +radonyagpulnnyee +ryqjwxsspbbhnptd +yeoqpnsdhludlmzf +qsqlkeetyalenueh +qnnedenwsjdrcrzt +lejkuhsllxbhfcrx +anddbvllrrqefvke +wdtljquijaksvdsv +adslgvfuqqdkzvbc +whbccefjpcnjwhaq +kqrfuankaibohqsg +fyxisfwihvylgnfd +rwqdrddghyqudcif +syhzowthaaiiouaf +zjmrtgrnohxmtidu +deecwkfvjffxrzge +dztmvolqxkhdscxe +cdghcrgavygojhqn +pepqmdbjhnbugqeu +pnumdjpnddbxhieg +jzfhxeyahiagizfw +hdkwugrhcniueyor +gmgudeqlbmqynflu +toidiotdmfkxbzvm +pyymuoevoezlfkjb +etrbwuafvteqynlr +usvytbytsecnmqtd +dfmlizboawrhmvim +vrbtuxvzzefedlvs +vslcwudvasvxbnje +xdxyvoxaubtwjoif +mduhzhascirittdf +cqoqdhdxgvvvxamk +dshnfwhqjbhuznqr +zimthfxbdmkulkjg +luylgfmmwbptyzpj +iujpcgogshhotqrc +caqcyzqcumfljvsp +sprtitjlbfpygxya +fnconnrtnigkpykt +irmqaqzjexdtnaph +bbqrtoblmltvwome +ozjkzjfgnkhafbye +hwljjxpxziqbojlw +zahvyqyoqnqjlieb +dptshrgpbgusyqsc +uzlbnrwetkbkjnlm +yccaifzmvbvwxlcc +wilnbebdshcrrnuu +evxnoebteifbffuq +khbajekbyldddzfo +kjivdcafcyvnkojr +wtskbixasmakxxnv +uzmivodqzqupqkwx +rxexcbwhiywwwwnu +rowcapqaxjzcxwqi +fkeytjyipaxwcbqn +pyfbntonlrunkgvq +qiijveatlnplaifi +ltnhlialynlafknw +urrhfpxmpjwotvdn +xklumhfyehnqssys +civrvydypynjdoap +fvbmxnfogscbbnyd +oznavyflpzzucuvg +iyshrpypfbirahqo +qmzbfgelvpxvqecy +xkkxaufomsjbofmk +irlouftdmpitwvlq +csjoptbdorqxhnjg +bkryeshfsaqpdztm +guxbdqzfafsjoadl +tgrltexgrzatzwxf +cwsgsijqdanubxad +xafnexgturwrzyrg +apcrsqdbsbaxocxr +pspgxnzcevmvvejk +szephmeegvegugdt +ndjsoloeacasxjap +bdnfksliscnirjfu +ehglacmzpcgglpux +jwweijomqfcupvzw +yesblmmkqhbazmdu +sjsmalypmuslzgac +fkiqatyttlnuhdho +tlhnyuzdocvfdihq +ngehtjmycevnybga +obxodzcdgtrycgry +stkyrvdfbwovawmk +bdkhqcfrqaxhxloo +gpvumnuoiozipnrk +jbhanddinpqhxeol +hwkzkmbmsrvunzit +rfuomegkxbyamjpw +yzbljuksletipzwm +eafedkagwitzqigl +prenqvsbotqckgwy +spedpbwzphdrfxfz +cmsuqwemhwixkxet +xgdyeqbqfldvaccq +eooxgsrfsbdaolja +kyhqylxooewrhkho +mswieugqpoefmspt +uszoqundysdyeqlc +hkmjdggxefdyykbq +dtuhjnlaliodtlvh +oalbueqbhpxoxvvx +oowxtxsoqdwhzbya +lclajfsrpmtwvzkm +fxmjufpqtpyazeqo +ozlmreegxhfwwwmf +mqzrajxtxbaemrho +nfglecsyqduhakjr +nkxqtmasjjkpkqbp +jjfonbqimybvzeus +vjqkhkhjlmvpwkud +wxxhnvfhetsamzjr +pladhajujzttgmsw +dbycgxeymodsdlhm +qxszeuaahuoxjvwu +adultomodzrljxve +dmhgrbhvvpxyzwdn +slohrlwxerpahtyp +mngbocwyqrsrrxdb +facyrtflgowfvfui +hyvazpjucgghmmxh +twtrvjtncmewcxit +uejkrpvilgccfpfr +psqvolfagjfvqkum +nvzolslmiyavugpp +lpjfutvtwbddtqiu +fkjnfcdorlugmcha +eaplrvdckbcqqvhq +xrcydhkockycburw +iswmarpwcazimqxn +kicnnkjdppitjwrl +vwywaekzxtmeqrsu +dxlgesstmqaxtjta +pmeljgpkykcbujbb +vhpknqzhgnkyeosz +jprqitpjbxkqqzmz +fiprxgsqdfymyzdl +dzvfwvhfjqqsifga +aeakhfalplltmgui +frqrchzvenhozzsu +hsvikeyewfhsdbmy +puedjjhvxayiwgvg +zmsonnclfovjoewb +bnirelcaetdyaumi +szvudroxhcitatvf +sccfweuyadvrjpys +yiouqrnjzsdwyhwa +xyjhkqbnfmjjdefz +fjwgemkfvettucvg +aapqpwapzyjnusnr +dytxpkvgmapdamtc +hgocpfoxlheqpumw +twzuiewwxwadkegg +qdbosnhyqmyollqy +fclbrlkowkzzitod +sgxnrrpwhtkjdjth +xckvsnkvnvupmirv +nioicfeudrjzgoas +lcemtyohztpurwtf +oyjxhhbswvzekiqn +idkblbyjrohxybob +rthvloudwmktwlwh +oyzhmirzrnoytaty +ysdfhuyenpktwtks +wxfisawdtbpsmwli +vgmypwlezbmzeduk +rpepcfpelvhzzxzj +zxbovsmixfvmamnj +cpkabmaahbnlrhiz +jvomcbqeoqrmynjj +iqdeisnegnkrkdws +ilhemlrtxdsdnirr +fjimtscrwbfuwmpo +lmfiylebtzwtztmx +ddouhysvomrkcpgu +xtjwvzdhgnwwauwi +cntzuwcumbsebwyy +hieqvdlvnxkygeda +hushfszxskjdrjxi +xvdfzqblccfoxvyq +nldnrtieteunyxnb +vszpidfocenlhzqb +ofcuvtwhortxesoq +bwniqemqwxlejcfq +wkqiwdjnytjnomps +rbadoommlmrictte +nsmxhpothlulxivt +bvzbfcvenskqxejr +sdqeczmzpqqtqabq +bjveyzniaaliatkw +zxsqlntyjajjxytk +jkoxlerbtidsuepg +ewtlibdkeqwgxnqt +lmrshemwxrdwzrgc +nekcdyxmftlymfir +edaqvmulzkskzsfy +znmvqaupykjmyebx +ximtebuxwhqpzubd +rrlstppkknqyxlho +uyibwcitxixjfwcr +chrvoierkimesqmm +dltxmwhheldvxwqe +xfuthxjuuizanfjy +vtiwavmxwonpkpug +phchnujfnxewglht +owvmetdjcynohxtw +cbtujdrumixxatry +iirzildsfxipfipe +sqxcscqyofohotcy +sbubnekndkvovuqg +jzhsqqxqdrtibtcd +mscwasyvxkhlvwbn +bpafxtagbuxivbwz +uhvueesygaxrqffw +trrxlibhtmzuwkkl +yktkmkokmfslgkml +gfzzzdptaktytnqg +pgqmaiwzhplnbyhg +qjiptlkwfshunsfb +lewvlpescsyunxck +tywsfatykshogjas +qtrnwjjgxdektjgi +arypcritpwijczkn +jwxvngigbhfpiubf +upsjdctitlbqlnhf +lvpjlrpnmdjiscrq +jvzchdrsnkgpgsti +wuoesbwunpseyqzu +xuqspvoshgxmrnrb +icdawnmfnpnmyzof +hwcwtibgpvctznuo +bzdjrniddyamfloq +hffkxtzuazageruv +deixfxjvzbitalnc +zihsohukiqrgsnvw +nwoondfnlgowavkg +qnuulsywgnoillgn +koozejhfjyzuhviy +oetcoipohymhpump +cizwpfczfoodwuly +jghlinczhtaxifau +svjejifbidnvvdvy +rxmbsnaqhzcnbfcl +vveubmiecvdtrket +sbihpvrcnzjtgfep +iqbuljuxkwrlebvw +ptrhvxrpezqvmmvv +duwzugnhktpiybjw +lijafjnujfeflkva +coylvegferuuyfop +fowsjrgammrqkkof +pgmcruaioccmbrbz +osejwflxagwqtjoi +otqflckqgxzvtper +slwyntdcrncktoka +hzcdzsppcfkrblqg +jksdmmvtzkqaompg +galwwwgugetdohkg +zbghtjvuikmfjuef +dmqwcamjtlcofqib +zbczldlfdzemxeys +mdlqoklybhppdkwe +tuyajhkexrrrvnlb +ylfolaubymxmkowo +nnsyrfnoyrxswzxn +zkhunhhhigbsslfk +spbokzdfkbmflanz +zmzxvrwdhiegfely +imywhfczvmgahxwl +fnvabvxeiqvsarqq +yschramprctnputs +ubyjrgdzsvxzvouj +qnvdhpptympctfer +smipxcntyhjpowug +ouhjibgcmotegljy +zpflubaijjqqsptz +fgysnxrnfnxprdmf +pbpznrexzxomzfvj +thhzjresjpmnwtdv +sbmokolkhvbfqmua +sxxpdohxlezmqhhx +pevvsyqgoirixtqh +wdxrornmhqsbfznb +zjqziqbctxkshqcn +nbqcwpzfwfaahylk +bxbvkonpcxprxqjf +xplbpqcnwzwqxheb +prsakggmnjibrpoy +xoguxbpnrvyqarjl +ilrgryrmgwjvpzjy +efwrmokaoigjtrij +yhcncebopycjzuli +gwcmzbzaissohjgn +lggmemwbbjuijtcf +fkqedbfrluvkrwwl +jcbppekecevkwpuk +onvolrckkxeyzfjt +zzousprgrmllxboy +cajthmamvxuesujl +rmiozfsikufkntpg +lvekypkwjbpddkcv +dwaqzfnzcnabersa +pcdsskjopcqwhyis +uabepbrrnxfbpyvx +yxlgdomczciiunrk +ccerskfzctqxvrkz +edvmkntljlncwhax +xtcbwecdwygrvowo +axqgqjqkqwrgcqot +tyjrynolpzqwnjgj +thrtmlegdjsuofga +mpgoeqkzzqqugait +emuslxgoefdjyivl +klehpcehdznpssfb +xfgvugyrdxolixkc +acenyrbdwxywmwst +yqgperajsfsamgan +dbjxlnumrmhipquw +hsnhirmswcenewxm +qehqkbhmgucjjpwo +gprjdglsbtsfzqcw +wvqkyrkoratfmvfi +myhzlerupqbduqsl +couyazesiuhwwhht +scxzehubxhkfejrr +gqlitwfriqkmzqdd +pxtbmqelssoagxko +dzhklewjqzmrfzsw +yxgeypduywntnbji +kwzbgzhkzbgedlfh +vukmuyfstgmscuab +vcmaybfvdgwnasgt +qmybkqqdhjigzmum +cbnuicuncvczyalu +qdgpsdpdlgjasjqr +kdzxqqheurupejjo +mcatrxfchbqnxelm +badunwkeggdkcgco +ntaeanvcylpoqmxi +ghnyfytpzgvuokjn +ozepydixmjijdmts +qefcfwzdhwmcyfvp +ycyktmpaqgaxqsxt +edpizkxnsxeeebfl +uwciveajsxxwoqyr +rbvjkljpxtglqjsh +nbplrskduutrptfk +vewrbadvkseuloec +upaotnjxquomoflx +qfwxkinrousqywdd +mqzxvvskslbxvyjt +oxicszyiqifoyugx +bkitxwzjpabvhraj +ydrbyjecggynjpir +hezyteaublxxpamq +hxkuektnoovsehnd +cwtbbavnhlpiknza +qrwvkhbyasgfxwol +qryjbohkprfazczc +wjksnogpxracrbud +znmsxbhliqxhvesr +gkippedrjzmnnwkp +pklylwsnsyyxwcwg +osdpwbxoegwaiemr +kpslrrrljgtjiqka +vuqkloqucpyzfxgk +bvtdsisgvkuzghyl +qlcayluuyvlhdfyy +kbimqwnzanlygaya +nvoeanlcfhczijed +kqvcijcuobtdwvou +pmhdpcmxnprixitl +yueilssewzabzmij +zqxhafrvjyeyznyg +mhdounmxkvnnsekx +hnacyglnzicxjakg +iaxfdqibnrcjdlyl +iypoelspioegrwix +uiqouxzmlnjxnbqt +kslgjfmofraorvjo +bgvotsdqcdlpkynk +huwcgxhvrrbvmmth +vpqyfnkqqjacpffw +hpjgdfovgmrzvrcl +vbntbhbvdeszihzj +nrbyyuviwyildzuw +wckeoadqzsdnsbox +xgsobwuseofxsxox +anvhsxdshndembsd +iygmhbegrwqbqerg +ylrsnwtmdsrgsvlh +zvvejnrarsavahvc +yncxhmmdtxxeafby +kekgiglblctktnes +uoqgymsrlrwdruzc +saaoymtmnykusicw +bqvcworpqimwglcp +zbpgtheydoyzipjv +pkykzslwsjbhcvcj +jhwxxneyuuidrzvl +pafeyajcrlehmant +klszcvtmcdeyfsmj +ledsltggvrbvlefn +hubpbvxknepammep +gthxhaapfpgtilal +jtfhbozlometwztj +jrhshycyenurbpwb +fyaxbawrsievljqv +lgfcgbenlqxqcxsd +dhedabbwbdbpfmxp +mxzgwhaqobyvckcm +qboxojoykxvwexav +jcpzfjnmvguwjnum +ohpsxnspfwxkkuqe +nyekrqjlizztwjqp +thuynotacpxjzroj +wymbolrlwosnbxqx +iyaqihnqvewxdtjm +hdvdbtvfpdrejenu +gtjscincktlwwkkf +wtebigbaythklkbd diff --git a/lib/day5.js b/lib/day5.js new file mode 100644 index 0000000..570ee38 --- /dev/null +++ b/lib/day5.js @@ -0,0 +1,41 @@ +var VOWELS = ['a', 'e', 'i', 'o', 'u']; +var BAD_COMBOS = ['ab', 'cd', 'pq', 'xy']; + +module.exports = { + isStringNice: function(str) { + return ( + this.hasThreeVowels(str) + && this.hasDoubleLetter(str) + && !this.hasBadCombos(str) + ); + }, + + hasThreeVowels: function(str) { + var count = 0; + + str.split('').forEach(function(char) { + if (VOWELS.indexOf(char) !== -1) count++; + }); + + return count >= 3; + }, + + hasDoubleLetter: function(str) { + var lastChar = null; + var chars = str.split(''); + + for (var i = 0; i < chars.length; i++) { + if (chars[i] === lastChar) return true; + lastChar = chars[i]; + } + + return false; + }, + + hasBadCombos: function(str) { + for (var i = 0; i < BAD_COMBOS.length; i++) { + if (str.indexOf(BAD_COMBOS[i]) !== -1) return true; + } + return false; + } +}; diff --git a/spec/day5.spec.js b/spec/day5.spec.js new file mode 100644 index 0000000..5f8d27b --- /dev/null +++ b/spec/day5.spec.js @@ -0,0 +1,54 @@ +var expect = require('chai').expect; +var Day5 = require('../lib/day5'); + +describe('Day5', function() { + describe('#hasThreeVowels', function() { + it('checks for at least 3 vowels', function() { + var niceString = 'axcejill'; + var badString = 'aell'; + expect(Day5.hasThreeVowels(niceString)).to.equal(true); + expect(Day5.hasThreeVowels(badString)).to.equal(false); + }); + }); + + describe('#hasDoubleLetter', function() { + it('has at least one double letter', function() { + var niceString = 'asddfmn'; + var badString = 'bniosdnf'; + expect(Day5.hasDoubleLetter(niceString)).to.equal(true); + expect(Day5.hasDoubleLetter(badString)).to.equal(false); + }); + }); + + describe('#hasBadCombos', function() { + it('does not contain "ab" "cd" "pq" or "xy"', function() { + var niceString = 'aosidfjo'; + var badStrings = [ + 'oisdjfoiab', + 'ajossdjfcd', + 'ajossdjfpq', + 'ajossdjfxy' + ]; + + expect(Day5.hasBadCombos(niceString)).to.equal(false); + badStrings.forEach(function(str) { + expect(Day5.hasBadCombos(str)).to.equal(true); + }); + }); + }); + + describe('#isStringNice', function() { + it('checks for all three nice conditions', function() { + var goodStrings = ['aeibb', 'oouidd', 'lkajlsdffie']; + var badStrings = ['bbbbbbb', 'abbei', 'aeiobx']; + + goodStrings.forEach(function(str) { + expect(Day5.isStringNice(str)).to.equal(true); + }); + + badStrings.forEach(function(str) { + expect(Day5.isStringNice(str)).to.equal(false); + }); + }); + }); +}); -- 2.51.2