Na grupie dla początkujących programistów natknęłam się na prośbę z gatunku: coś jest nie tak z moim kodem. Czy ktoś mógłby mi pomóc go ogarnąć? Program miał rozwiązywać zadanie z jednych z popularnych puzzli programistycznych – Advent of Code 2016 -> Day 4.
Przyjrzyjmy się temu 🙂
Treść zadania tu.
Zadanie w skrócie – jest podany ciąg znaków aaaaa-bbb-z-y-x-123[abxyz]
. Litery tworzą zakodowaną nazwę pokoju, liczby to ID, a w nawiasach kwadratowych podana jest suma kontrolna. Suma kontrolna jest wyliczana następująco: pięć najczęściej występujących liter z zakodowanej nazwy, posortowanych alfabetycznie. Rozwiązaniem jest suma ID z ciągów, które mają poprawnie wyliczoną sumę kontrolną.
Pierwotna wersja kodu o tu. Będę wrzucać komity po każdej zmianie do tego repozytorium (o tu) żeby można było prześledzić spokojnie kolejne zmiany albo po prostu zobaczyć jak to wygląda ostatecznie 😉
Wciągnęłam kod do IDE, popatrzyłam, sformatowałam kod, IDE uzupełniło brakujące średniki na końcach linii. I czytam. Dorzuciłam wypisywanie sumy końcowej na konsolę. Dopisałam też instrukcję, która wyrzuci mi na konsolę błędne sumy kontrolne.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
for (i = 0; i < checksum.length; i++) { | |
if (checksum[i] === finall[i]) { | |
sumId += id[i] | |
} else { | |
console.log(checksum[i] + " <> " + finall[i]); | |
} | |
} | |
// 89274 – zły wynik | |
console.log(sumId); |
Pierwszym problemem, który został poprawnie zdiagnozowany przez autorkę kodu, było sortowanie: w momencie kiedy dwie litery pojawiły się w nazwie taką samą liczbę razy, niekoniecznie były posortowane alfabetycznie. Dla ciągu molgbzqfib-bdd-mrozexpfkd-289[bdfmo]
program wyliczał sumę kontrolną jako bdofm
.
To jest pierwsza rzecz, którą poprawiłam wychodząc z założenia, że moim zadaniem nie jest tworzenie kodu za Autorkę, bo to nie jest problemem zaorać wszystko i zacząć na nowo, ale raczej nikt z tego nic nie wyciągnie.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
return a.sort(function (a, b) { | |
if (o[b] !== o[a]) { | |
return o[b] – o[a]; | |
} | |
return a.charCodeAt(0) – b.charCodeAt(0); | |
}); |
Do sortowania dodałam sprawdzanie, czy częstotliwość występowania liter jest różna. Jeśli jest różna, sortuj tak jak było. W przeciwnym wypadku sortuj alfabetycznie (przez porównywanie kodów ASCII).
Myślałam, że to załatwi sprawę, ale wieczorem otrzymałam feedback, że dalej nie działa. Rano skontaktowałam się z Autorką i otrzymałam zgodę na tą zabawę kodem, którą chcę tu przedstawić 🙂 Dziecko uśpione, lecimy z koksem 😉
Na początku wyciągnę kod js z HTML-a, w którym go na szybko osadziłam, i wsadzę go w funkcję. Stworzyłam folder o nazwie js
, w którym umieściłam plik main.js
. W pliku main.js stworzyłam funkcję solution()
, do której przeniosłam cały kod javaScriptowy. Dzięki temu plik HTML wygląda teraz tak:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<title>Day 4</title> | |
<script type="text/javascript" src="js/main.js"></script> | |
</head> | |
<body> | |
<script type="text/javascript"> | |
solution(); | |
</script> | |
</body> | |
</html> |
W zadaniu mamy podany mniejszy przykład, który możemy wykorzystać jako nasz „test jednostkowy”. Wiemy, że dla takich danych
aaaaa-bbb-z-y-x-123[abxyz] a-b-c-d-e-f-g-h-987[abcde] not-a-real-room-404[oarel] totally-real-room-200[decoy]
suma ID poprawnych pokoi wynosi 1514.
Żebym mogła stworzyć taki test potrzebowałam wyciągnąć z funkcji solution kod odpowiedzialny za wyliczenie sumy dla podanych danych. Nowa funkcja powinna przyjmować jeden argument, którym są dane wejściowe i zwracać sumę ID dla poprawnych pokoi. Stworzyłam funkcję countSum(dane)
, do której przeniosłam prawie cały kod funkcji solution
. Po tej operacji solution
wygląda tak:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function solution() { | |
var dane = "aczupnetwp-mfyyj-opalcexpye-977[peyac] qzchnzbshud-cxd-trdq-sdrshmf-105[jqexn] molgbzqfib-bdd-mrozexpfkd-289[bdfmo] enzcntvat-pnaql-qrfvta-351[antqv] otzkxtgzoutgr-jek-vaxingyotm-670[tgokx] fmsledevhsyw-gerhc-gsexmrk-qerekiqirx-126[ersgh] yknnkoera-zua-ykjpwejiajp-212[rfzym] dfcxsqhwzs-qobrm-gvwddwbu-532[dwbqs] oqnidbshkd-eknvdq-cdozqsldms-261[vygwn] kwvacumz-ozilm-akidmvomz-pcvb-ikycqaqbqwv-538[mvaci] sno-rdbqds-qzaahs-rsnqzfd-599[sdqan] zekvierkzferc-treup-ivrthlzjzkzfe-633[ezrkf] aoubshwq-suu-difqvogwbu-922[uboqs] dpotvnfs-hsbef-kfmmzcfbo-nbobhfnfou-571[fbonh] hcd-gsqfsh-qobrm-qcohwbu-gsfjwqsg-792[qsghb] nbhofujd-cvooz-mbcpsbupsz-649[bocps] pxtihgbsxw-ktuubm-tgterlbl-735[mxauz] mvydjvxodqz-xviyt-hvivbzhzio-369[vizdh] bqxnfdmhb-bzmcx-bnzshmf-cdozqsldms-755[bmdsz] lxwbdvna-pajmn-snuuhknjw-mnbrpw-199[nwabj] molgbzqfib-zxkav-zlxqfkd-ildfpqfzp-627[fzlqb] iuruxlar-vrgyzoi-mxgyy-sgtgmksktz-904[gryik] bkzrrhehdc-azrjds-qdzbpthrhshnm-729[hrdzb] hplazytkpo-dnlgpyrpc-sfye-epnsyzwzrj-457[pyzel] ajyqqgdgcb-hcjjwzcyl-umpiqfmn-366[cjqgm] kzgwomvqk-kpwkwtibm-xczkpiaqvo-772[kwimo] bqvvu-nwilwcejc-ydkykhwpa-ykjpwejiajp-628[jwkpy] amlqskcp-epybc-afmamjyrc-pcqcypaf-574[capmy] gcfcnuls-aluxy-zfiqyl-guleyncha-994[lcuya] zgmfyxypbmsq-djmucp-umpiqfmn-444[qwrxz] vrurcjah-pajmn-ljwmh-bnaerlnb-771[ajnrb] nwlddtqtpo-awldetn-rcldd-opawzjxpye-457[ztsxm] crwwv-bdd-rpbo-qbpqfkd-393[bdpqr] dzczkrip-xiruv-srjbvk-rercpjzj-607[rjzci] sno-rdbqds-dff-qdbdhuhmf-313[orjnb] bnqqnrhud-bzmcx-qdrdzqbg-781[qbdnr] upq-tfdsfu-kfmmzcfbo-tupsbhf-779[fubmp] xgjougizobk-vrgyzoi-mxgyy-yzuxgmk-826[gyoxz] zgmfyxypbmsq-zyqicr-bcnjmwkclr-756[jluaw] joufsobujpobm-cvooz-vtfs-uftujoh-857[mghad] lnkfaypeha-pkl-oaynap-xqjju-ykjpwejiajp-342[ajpky] esyfwlau-wyy-vwhdgqewfl-580[pqlsd] lhkhszqx-fqzcd-rbzudmfdq-gtms-trdq-sdrshmf-859[jzybf] dmbttjgjfe-kfmmzcfbo-eftjho-623[kzlyx] qcffcgwjs-xszzmpsob-zopcfohcfm-246[cfosz] pbeebfvir-ovbunmneqbhf-cynfgvp-tenff-freivprf-273[jlves] dpssptjwf-cvooz-sftfbsdi-727[sfdop] vdzonmhydc-bzmcx-nodqzshnmr-391[dmnzc] ynssr-vahvhetmx-tgterlbl-891[ldyzb] zilqwikbqdm-akidmvomz-pcvb-lmdmtwxumvb-824[mbdiv] qfkkj-nlyoj-xlcvpetyr-379[qsztm] sbejpbdujwf-cvooz-nbobhfnfou-181[bofjn] ipvohghykvbz-ihzrla-lunpullypun-383[jfptx] clotzlnetgp-prr-lnbftdtetzy-665[tlenp] fhezusjybu-rkddo-bqrehqjeho-894[ehbdj] xlrypetn-ojp-lnbftdtetzy-327[uwdtq] ovbunmneqbhf-pbafhzre-tenqr-enoovg-bcrengvbaf-299[benfo] xmtjbzidx-zbb-gjbdnodxn-291[bdxjn] raphhxuxts-ytaanqtpc-stktadebtci-739[tachp] lejkrscv-avccpsvre-uvgcfpdvek-269[vtewy] esyfwlau-xdgowj-umklgewj-kwjnauw-944[zntcg] bnmrtldq-fqzcd-azrjds-rsnqzfd-261[dqrzf] npmhcargjc-qaytclecp-fslr-yaosgqgrgml-184[cgalr] iutyaskx-mxgjk-houngfgxjuay-vrgyzoi-mxgyy-lotgtiotm-280[reypq] mhi-lxvkxm-cxeeruxtg-nlxk-mxlmbgz-891[ymnuv] avw-zljyla-jovjvshal-dvyrzovw-331[vajlo] jxdkbqfz-ciltbo-zlkqxfkjbkq-627[cvump] kpvgtpcvkqpcn-lgnnadgcp-eqpvckpogpv-154[ikqst] eadalsjq-yjsvw-hjgbwuladw-wyy-mkwj-lwklafy-944[wajly] iuruxlar-iuxxuyobk-igtje-iutzgotsktz-644[uitxg] pdjqhwlf-hjj-hqjlqhhulqj-179[hjqld] drxevkzt-irsszk-kvtyefcfxp-997[kefrs] houngfgxjuay-iuruxlar-inuiurgzk-vaxingyotm-644[yiowt] lzfmdshb-bgnbnkzsd-dmfhmddqhmf-755[klhim] mvkccspson-bkllsd-wkxkqowoxd-120[koscd] rgndvtcxr-rpcsn-hpath-245[sitjk] apuut-xviyt-nzmqdxzn-317[mgons] udglrdfwlyh-vfdyhqjhu-kxqw-pdunhwlqj-829[dhlqu] lejkrscv-gcrjkzt-xirjj-drerxvdvek-659[qftns] zotts-mwupyhayl-bohn-uhufsmcm-604[imljo] vcibutulxiom-jfumncw-alumm-mbcjjcha-370[mcuja] nvrgfezqvu-tcrjjzwzvu-avccpsvre-ivjvrity-217[vrcjz] myxcewob-qbkno-bkllsd-nocsqx-744[bockl] zlilocri-pzxsbkdbo-erkq-ildfpqfzp-887[ilpzb] zntargvp-pnaql-pbngvat-pbagnvazrag-377[agnpv] rgndvtcxr-uadltg-prfjxhxixdc-921[xdrcg] pbeebfvir-cynfgvp-tenff-ernpdhvfvgvba-663[fvebn] bqvvu-ywjzu-ykwpejc-hwxknwpknu-290[wkujn] xjmmjndqz-xviyt-xjvodib-vivgtndn-785[vdijn] szfyrqriuflj-srjbvk-tljkfdvi-jvimztv-919[jvfir] ucynmlgxcb-afmamjyrc-pcacgtgle-574[cagml] zntargvp-pnaql-pbngvat-npdhvfvgvba-299[vanpg] gcfcnuls-aluxy-xsy-jolwbumcha-110[cluas] yuxufmdk-sdmpq-nuatmlmdpage-omzpk-oamfuzs-mzmxkeue-170[muade] qfmcusbwq-pibbm-aobousasbh-792[bsamo] zsxyfgqj-wfggny-qfgtwfytwd-515[lmnry] rwcnawjcrxwju-ljwmh-lxjcrwp-anjlzdrbrcrxw-667[rwjcl] ocipgvke-gii-vtckpkpi-466[ikpcg] iruzfrtkzmv-treup-tfrkzex-kirzezex-945[rzekt] drxevkzt-gcrjkzt-xirjj-glityrjzex-659[psznt] htqtwkzq-gzssd-tujwfyntsx-125[tsqwz] wbhsfbohwcboz-qobrm-igsf-hsghwbu-584[bhosw] diozmivodjivg-wpiit-gvwjmvojmt-655[bknca] vkppo-vbemuh-qsgkyiyjyed-478[yekpv] enzcntvat-hafgnoyr-qlr-ratvarrevat-325[artnv] atyzghrk-yigbktmkx-natz-yzuxgmk-644[inshw] votubcmf-fhh-bobmztjt-415[nmolz] pualyuhapvuhs-jhukf-jvhapun-shivyhavyf-773[asijb] zovldbkfz-zxkav-zrpqljbo-pbosfzb-211[bdtuy] ocipgvke-dcumgv-octmgvkpi-180[cgvik] udglrdfwlyh-exqqb-ghyhorsphqw-595[hqdgl] vhehkyne-vtgwr-vhtmbgz-ybgtgvbgz-657[gvbht] bknsykmdsfo-bkwzkqsxq-oqq-ckvoc-458[sxmzy] shoewudys-uww-tuiywd-426[wudsy] krxqjijamxdb-kjbtnc-mnyjacvnwc-979[jcnab] irdgrxzex-srjbvk-tljkfdvi-jvimztv-555[stqrm] bxaxipgn-vgpst-rpcsn-pcpanhxh-869[pnxac] tcrjjzwzvu-jtrmvexvi-ylek-jkfirxv-165[jvrei] ugjjgkanw-vqw-vwkayf-476[qbskp] sgmtkzoi-yigbktmkx-natz-iutzgotsktz-540[tkzgi] wpuvcdng-dwppa-eqpvckpogpv-284[pvcdg] tcfkqcevkxg-lgnnadgcp-ocpcigogpv-700[rcqwm] tfejldvi-xiruv-avccpsvre-ivtvzmzex-503[stzno] oknkvcta-itcfg-tcddkv-fgrnqaogpv-596[zcmwx] udpsdjlqj-fdqgb-uhdftxlvlwlrq-491[hqpoz] bpvctixr-ltpedcxots-rwdrdapit-bpcpvtbtci-687[eklrj] kzgwomvqk-kivlg-bmkpvwtwog-590[kgvwm] tcrjjzwzvu-tyftfcrkv-ivrthlzjzkzfe-607[ztfjr] vqr-ugetgv-hnqygt-fgxgnqrogpv-440[gqvnr] ahngzyzqcntr-azrjds-nodqzshnmr-417[khyzv] gsrwyqiv-kvehi-hci-vigimzmrk-386[ivghk] lgh-kwujwl-uzgugdslw-hmjuzskafy-450[umnbs] xfbqpojafe-gmpxfs-bobmztjt-779[vztym] lzfmdshb-eknvdq-rzkdr-339[dkrzb] dmybmsuzs-qss-qzsuzqqduzs-690[sqzud] nzwzcqfw-upwwjmply-opawzjxpye-925[wpzjy] qvbmzvibqwvit-akidmvomz-pcvb-zmkmqdqvo-954[vmqbi] ykjoqian-cnwza-oywrajcan-dqjp-hwxknwpknu-420[nawjk] gzefmnxq-otaoaxmfq-efadmsq-846[sdilh] dkqjcbctfqwu-lgnnadgcp-ujkrrkpi-830[ckdgj] zilqwikbqdm-kivlg-kwibqvo-amzdqkma-980[ilkqv] dszphfojd-ezf-qvsdibtjoh-883[dfhjo] sno-rdbqds-idkkxadzm-btrsnldq-rdquhbd-339[utyem] ckgvutofkj-igtje-iugzotm-giwaoyozout-514[ogtiu] zekvierkzferc-sleep-jyzggzex-295[hjkop] ktiaaqnqml-akidmvomz-pcvb-mvoqvmmzqvo-226[mvqao] kyelcrga-qaytclecp-fslr-bcqgel-652[cleag] pbybeshy-pnaql-pbngvat-qrirybczrag-715[bapry] pbybeshy-onfxrg-qrfvta-611[bnziy] glrcplyrgmlyj-zyqicr-qyjcq-782[yclqr] nbhofujd-dboez-efqmpznfou-909[clnqa] udskkaxawv-kusnwfywj-zmfl-hmjuzskafy-242[kafsu] hjgbwuladw-vqw-esfsywewfl-476[lcezk] tfejldvi-xiruv-wcfnvi-rercpjzj-477[ijrvc] qyujihctyx-luvvcn-lyuwkocmcncih-162[cuyhi] wlsiayhcw-wuhxs-wiuncha-uhufsmcm-266[qsifr] wkqxodsm-oqq-kxkvicsc-926[kqcos] tfcfiwlc-avccpsvre-rercpjzj-815[crefj] sxdobxkdsyxkv-zvkcdsm-qbkcc-bokmaescsdsyx-614[lmhny] ovbunmneqbhf-cynfgvp-tenff-nanylfvf-845[fnvbe] chnylhuncihuf-wuhxs-lymyulwb-682[bsntk] ckgvutofkj-igtje-jkbkruvsktz-436[kjtgu] vhkkhlbox-ietlmbv-zktll-kxvxbobgz-267[bklvx] oazegyqd-sdmpq-rxaiqd-iadwetab-898[adqei] hdgdovmt-bmvyz-wpiit-hvivbzhzio-993[ljcbw] nwlddtqtpo-tyepcyletzylw-ojp-cplnbftdtetzy-691[mdzsc] ixccb-vfdyhqjhu-kxqw-whfkqrorjb-283[ichrd] pelbtravp-pubpbyngr-qrcyblzrag-143[bprag] kzgwomvqk-uiovmbqk-kivlg-abwziom-200[watbs] vxupkizork-kmm-yzuxgmk-150[kmuxz] xlrypetn-qwzhpc-epnsyzwzrj-847[pzenr] egdytrixat-gpqqxi-gtrtxkxcv-661[txgiq] lxuxaodu-lxwbdvna-pajmn-kjbtnc-mnbrpw-979[nabxd] hqfxxnknji-kqtbjw-yjhmstqtld-125[bfzoy] pyknyegle-hcjjwzcyl-bcnyprkclr-678[cylej] rgndvtcxr-rpcsn-rdpixcv-gtprfjxhxixdc-791[rxcdp] kyelcrga-djmucp-cleglccpgle-834[clegp] oknkvcta-itcfg-hnqygt-tgceswkukvkqp-180[ktcgn] yknnkoera-fahhuxawj-pnwejejc-784[aejnh] jfifqxov-doxab-zxkav-zlxqfkd-lmboxqflkp-731[kreil] tpspahyf-nyhkl-lnn-thyrlapun-435[vtsgw] ktwbhtvmbox-vtgwr-mktbgbgz-631[btgkm] hqfxxnknji-hfsid-htfynsl-htsyfnsrjsy-723[qymsp] shmml-onfxrg-svanapvat-559[amnsv] ugfkmewj-yjsvw-wyy-mkwj-lwklafy-138[wyjkf] zilqwikbqdm-jiasmb-zmkmqdqvo-382[mqibd] vqr-ugetgv-gii-ugtxkegu-414[gueit] nuatmlmdpage-omzpk-oamfuzs-fqotzaxask-846[zpwto] tfcfiwlc-irsszk-drerxvdvek-165[rcdef] ykhknbqh-nwxxep-iwngapejc-368[nehkp] zloolpfsb-tbxmlkfwba-oxyyfq-ixyloxqlov-887[loxbf] surmhfwloh-mhoobehdq-zrunvkrs-127[horms] uwtojhynqj-jll-wjhjnansl-437[jlnhw] ziuxioqvo-ntwemz-lmaqov-824[oimqv] yuxufmdk-sdmpq-nmewqf-abqdmfuaze-794[mdfqu] nzwzcqfw-hplazytkpo-mfyyj-fdpc-epdetyr-951[pyfzc] etyyx-eknvdq-zmzkxrhr-625[iltus] oazegyqd-sdmpq-ngzzk-qzsuzqqduzs-300[osxtp] eadalsjq-yjsvw-kusnwfywj-zmfl-ghwjslagfk-814[jswaf] yuxufmdk-sdmpq-nmewqf-emxqe-378[rqsbf] iwcjapey-ywjzu-odellejc-888[ejclw] pdjqhwlf-gbh-ilqdqflqj-413[qldfh] ide-htrgti-snt-hpath-479[thiad] bnknqetk-azrjds-sdbgmnknfx-209[nkbds] tfcfiwlc-irdgrxzex-wcfnvi-uvgcfpdvek-555[cfivd] clxalrtyr-ojp-epnsyzwzrj-249[rjlpy] aietsrmdih-veffmx-gywxsqiv-wivzmgi-360[imvef] fkqbokxqflkxi-zelzlixqb-cfkxkzfkd-549[afuiz] zekvierkzferc-upv-dribvkzex-347[ekrvz] pbafhzre-tenqr-onfxrg-ybtvfgvpf-507[yrjit] willimcpy-vohhs-guleyncha-240[swucm] gpewwmjmih-veffmx-pefsvexsvc-360[ryciz] amjmpdsj-zsllw-umpiqfmn-418[itmwe] myxcewob-qbkno-lkcuod-mecdywob-cobfsmo-666[obcmd] zsxyfgqj-uqfxynh-lwfxx-fhvznxnynts-515[zymab] zovldbkfz-tbxmlkfwba-ciltbo-tlohpelm-237[ijhlk] nwilwcejc-nwxxep-zalwnpiajp-992[wnpac] amppmqgtc-qaytclecp-fslr-qyjcq-210[sytev] wsvsdkbi-qbkno-cmkfoxqob-rexd-bokmaescsdsyx-302[sbkod] hcd-gsqfsh-xszzmpsob-fsgsofqv-480[sfgho] wfummczcyx-mwupyhayl-bohn-nywbhifias-318[yhmwa] ygcrqpkbgf-fag-tgceswkukvkqp-154[gkcfp] hqcfqwydw-uww-iuhlysui-894[dcqnf] mvydjvxodqz-xviyt-rjmfncjk-421[jvdmx] froruixo-hjj-vhuylfhv-569[hfjor] froruixo-hjj-ghyhorsphqw-855[horjf] vdzonmhydc-eknvdq-qdbdhuhmf-157[dhmnq] cxy-bnlanc-bljenwpna-qdwc-bqryyrwp-901[nbcwy] ocipgvke-rncuvke-itcuu-tgegkxkpi-284[kcegi] npmhcargjc-afmamjyrc-rpyglgle-600[acgmr] npmhcargjc-qaytclecp-fslr-mncpyrgmlq-262[clmpr] sgmtkzoi-xghhoz-sgtgmksktz-176[gkstz] ohmnuvfy-xsy-fiacmncwm-162[mcfny] xekdwvwnzkqo-acc-ykjpwejiajp-706[jkwac] gvcskirmg-tpewxmg-kveww-erepcwmw-256[hvuwt] esyfwlau-usfvq-wfyafwwjafy-398[icojl] ujoon-gpqqxi-rjhidbtg-htgkxrt-349[gthij] votubcmf-ezf-sfbdrvjtjujpo-571[fjbot] zixppfcfba-zelzlixqb-mrozexpfkd-549[yknmt]fbebmtkr-zktwx-utldxm-nlxk-mxlmbgz-423[mxbkl] pybgmyargtc-glrcplyrgmlyj-aylbw-amyrgle-qcptgacq-964[tszdw] sebehvkb-vbemuh-iqbui-920[behiu] lugjuacha-zfiqyl-guleyncha-292[xtqyp] jsehsyafy-wyy-esfsywewfl-190[oztvg] esyfwlau-tskcwl-kzahhafy-918[afhkl] nzwzcqfw-mfyyj-nfdezxpc-dpcgtnp-717[yoapc] dszphfojd-fhh-efqmpznfou-259[igfar] ajmrxjlcren-kjbtnc-xynajcrxwb-823[jcnrx] vehmsegxmzi-nippcfier-pefsvexsvc-594[eipsv] dlhwvupglk-yhiipa-klzpnu-747[taxwo] frqvxphu-judgh-udglrdfwlyh-mhoobehdq-fxvwrphu-vhuylfh-257[mswnl] mvkccspson-pvygob-nocsqx-718[cosnp] avw-zljyla-msvdly-klwhyatlua-955[layvw] ryexqpqhteki-sxesebqju-iqbui-140[tyxfz] ygcrqpkbgf-ecpfa-eqcvkpi-tgceswkukvkqp-856[kcpeg] oazegyqd-sdmpq-nmewqf-ymdwqfuzs-560[qdmef] qxdwpopgsdjh-qphzti-gtprfjxhxixdc-323[pxdhg] zloolpfsb-zxkav-obxznrfpfqflk-783[flozb] xgvnndadzy-kgvnodx-bmvnn-vxlpdndodji-473[xbwpm] muqfedyput-sqdto-vydqdsydw-322[kqmys] jlidywncfy-mwupyhayl-bohn-lywycpcha-838[ychlw] votubcmf-cvooz-mphjtujdt-285[otcjm] etaqigpke-dcumgv-tgugctej-778[getcu] amlqskcp-epybc-pyzzgr-mncpyrgmlq-496[veyij] excdklvo-pvygob-kxkvicsc-380[ckvox] bjfutsneji-idj-xmnuunsl-437[jnuis] crwwv-avb-zlkqxfkjbkq-835[kbqvw] clxalrtyr-nlyoj-nzletyr-dstaatyr-561[lrtya] bjfutsneji-uqfxynh-lwfxx-ijxnls-957[uaybk] drxevkzt-gcrjkzt-xirjj-rthlzjzkzfe-737[zjrkt] lahxpnwrl-npp-jwjuhbrb-329[pbhjl] jyddc-nippcfier-hitevxqirx-646[pyzmv] tagzsrsjvgmk-jsttal-klgjsyw-398[jtkyl] kwzzwaqdm-ntwemz-lmxizbumvb-148[mzwba] jyddc-gerhc-gsexmrk-vigimzmrk-906[zmtql] oqnidbshkd-atmmx-bnmszhmldms-729[vcsyn] hcd-gsqfsh-foppwh-rsjszcdasbh-558[shcdf] fydelmwp-mfyyj-cpnptgtyr-353[udkrq] willimcpy-mwupyhayl-bohn-mniluay-214[lyima] nzwzcqfw-nlyoj-nzletyr-cplnbftdtetzy-925[blcjr] ytu-xjhwjy-uqfxynh-lwfxx-wjfhvznxnynts-567[xnyfh] lejkrscv-vxx-vexzevvizex-373[tgvkh] rnqnyfwd-lwfij-hfsid-htfynsl-ijajqturjsy-229[anmsk] chnylhuncihuf-vumeyn-mylpcwym-162[naygw] xjinphzm-bmvyz-agjrzm-hvmfzodib-239[mzbhi] elrkdcdugrxv-mhoobehdq-vwrudjh-751[dhreo] mbggf-kfl-zopwwpun-721[fzbwt] zilqwikbqdm-rmttgjmiv-mvoqvmmzqvo-954[mqvio] qczcftiz-rms-aofyshwbu-610[cfsza] ibghopzs-qvcqczohs-rsjszcdasbh-272[usani] mbiyqoxsm-mkxni-mykdsxq-oxqsxoobsxq-146[zplsb] zekvierkzferc-irsszk-uvgrikdvek-191[keriv] wkqxodsm-lkcuod-nozvyiwoxd-328[odkwx] frqvxphu-judgh-edvnhw-sxufkdvlqj-387[csdlt] kwvacumz-ozilm-lgm-abwziom-668[mzail] vdzonmhydc-cxd-rdquhbdr-209[dchrb] molgbzqfib-mixpqfz-doxpp-qoxfkfkd-939[fopqx] xzwrmkbqtm-xtiabqk-oziaa-camz-bmabqvo-642[goucj] houngfgxjuay-yigbktmkx-natz-xkykgxin-228[fhiyr] oxmeeuruqp-pkq-abqdmfuaze-612[equam] gpewwmjmih-tpewxmg-kveww-jmrergmrk-542[mwegr] pelbtravp-qlr-grpuabybtl-143[byozf] cqwdujys-rkddo-iqbui-114[hdywo] gpsxdprixkt-tvv-gtprfjxhxixdc-817[xptdg] amlqskcp-epybc-aylbw-amyrgle-qfgnngle-964[laegy] yuxufmdk-sdmpq-eomhqzsqd-tgzf-qzsuzqqduzs-482[tlzym] plolwdub-judgh-fdqgb-frdwlqj-uhdftxlvlwlrq-127[izfao] egdytrixat-ytaanqtpc-detgpixdch-505[tadce] awzwhofm-ufors-gqojsbusf-vibh-difqvogwbu-922[phblt] hafgnoyr-ohaal-chepunfvat-221[ahfno] vagreangvbany-cynfgvp-tenff-chepunfvat-559[nafve] tcorcikpi-ecpfa-eqcvkpi-wugt-vguvkpi-388[cipkv] zloolpfsb-zlkprjbo-doxab-zxkav-zlxqfkd-obzbfsfkd-757[bozfk] ykhknbqh-ywjzu-ykjpwejiajp-966[jkyhp] kwvacumz-ozilm-moo-aitma-512[maoiz] wfruflnsl-nsyjwsfyntsfq-xhfajsljw-mzsy-jslnsjjwnsl-229[sjfln] sno-rdbqds-okzrshb-fqzrr-nodqzshnmr-781[xqzdf] yrwxefpi-tvsnigxmpi-veffmx-stivexmsrw-724[ixefm] hqtyeqsjylu-isqludwuh-xkdj-huiuqhsx-712[uhqsd] yhkpvhjapcl-ibuuf-zavyhnl-903[halpu] forwcoqhwjs-pogysh-gvwddwbu-818[wodgh] oqnidbshkd-dff-nodqzshnmr-573[ysdzb] gzefmnxq-dmnnuf-dqeqmdot-482[dmnqe] lnkfaypeha-oywrajcan-dqjp-zaoecj-576[ajcen] xtwtelcj-rclop-mldvpe-afcnsldtyr-899[dxnhp] rmn-qcapcr-hcjjwzcyl-umpiqfmn-522[cmjnp] egdytrixat-gpqqxi-tcvxcttgxcv-271[txcgi] njmjubsz-hsbef-fhh-tfswjdft-103[fhjsb] ugjjgkanw-tmffq-umklgewj-kwjnauw-996[jwgku] gifavtkzcv-gcrjkzt-xirjj-glityrjzex-737[jgirt] bgmxkgtmbhgte-unggr-xgzbgxxkbgz-137[gbxkm] xgvnndadzy-agjrzm-kpmxcvndib-317[yqtlw] nwilwcejc-zua-ykjpwejiajp-758[jwace] ykhknbqh-oywrajcan-dqjp-naoawnyd-264[anydh] iutyaskx-mxgjk-yigbktmkx-natz-yzuxgmk-904[imkry] vhkkhlbox-vahvhetmx-kxlxtkva-163[hkvxa] ktiaaqnqml-moo-amzdqkma-148[gklmn] shoewudys-sxesebqju-kiuh-juijydw-998[suejd] houngfgxjuay-ckgvutofkj-pkrrehkgt-cuxqynuv-410[ugkcf] aczupnetwp-mldvpe-xlcvpetyr-249[mcajd] zvyvgnel-tenqr-enzcntvat-wryylorna-znexrgvat-507[nertv] dyz-combod-oqq-bocokbmr-250[yvlka] qmpmxevc-kvehi-tpewxmg-kveww-qerekiqirx-880[eikmq] rflsjynh-xhfajsljw-mzsy-xmnuunsl-411[cpyxn] ibghopzs-qobrm-qcohwbu-qcbhowbasbh-740[yajfh] pinovwgz-zbb-yzndbi-291[rqzob] emixwvqhml-kivlg-ivitgaqa-278[ivagl] jchipqat-rpcsn-rdpixcv-jhtg-ithixcv-635[cihpt] xtwtelcj-rclop-ojp-wlmzclezcj-275[cljeo] cybyjqho-whqtu-sxesebqju-huqsgkyiyjyed-712[yqehj] htqtwkzq-xhfajsljw-mzsy-knsfshnsl-489[gbywx] ncjzrpytn-ojp-xlcvpetyr-405[pcjnr] enqvbnpgvir-onfxrg-ybtvfgvpf-455[qsbad] xgvnndadzy-ytz-yzndbi-967[dnyza] lujbbrornm-kdwwh-orwjwlrwp-615[wrbjl] yhwooebeaz-ydkykhwpa-bejwjyejc-368[eyjwa] hqtyeqsjylu-sxesebqju-tulubefcudj-894[sizkn] zbytomdsvo-mrymyvkdo-crszzsxq-458[mosyz] ojk-nzxmzo-agjrzm-yzndbi-343[zjmno] bdavqofuxq-oazegyqd-sdmpq-omzpk-oamfuzs-fdmuzuzs-664[zdmoq] dfcxsqhwzs-qobrm-fsoqeiwgwhwcb-792[wqsbc] dpssptjwf-kfmmzcfbo-sfbdrvjtjujpo-649[fjpsb] rgndvtcxr-tvv-detgpixdch-297[xnstm] tmrszakd-cxd-kzanqzsnqx-235[zadkn] zhdsrqlchg-fdqgb-frdwlqj-ghsduwphqw-725[dhqgw] tyepcyletzylw-dnlgpyrpc-sfye-pyrtyppctyr-405[yptce] ynukcajey-xwogap-zalhkuiajp-524[sgmwy] eadalsjq-yjsvw-kusnwfywj-zmfl-sfsdqkak-190[safjk] clotzlnetgp-ojp-cpdplcns-899[pclno] pbybeshy-onfxrg-phfgbzre-freivpr-507[rbefp] hwbba-rncuvke-itcuu-yqtmujqr-414[ubcqr] uiovmbqk-xtiabqk-oziaa-wxmzibqwva-902[aibqk] kgjgrypw-epybc-qaytclecp-fslr-pcacgtgle-288[cgpel] dmybmsuzs-rxaiqd-fdmuzuzs-664[dmsuz] jsvagsulanw-kusnwfywj-zmfl-esfsywewfl-528[swfla] jvuzbtly-nyhkl-ibuuf-mpuhujpun-149[ubhjl] zsxyfgqj-gfxpjy-xjwanhjx-307[jxfgy] wifilzof-wuhxs-womnigyl-mylpcwy-448[wilyf] dwbcjkun-kjbtnc-ujkxajcxah-537[jckab] ucynmlgxcb-afmamjyrc-pcyaosgqgrgml-652[cgmay] gpewwmjmih-mrxivrexmsrep-veffmx-pefsvexsvc-490[emvxf] wifilzof-vumeyn-mbcjjcha-682[cfijm] ujqgywfau-bwddqtwsf-ljsafafy-658[fawdj] ujqgywfau-usfvq-ugslafy-suimakalagf-788[aufgs] lgh-kwujwl-jsttal-ogjckzgh-294[gjlhk] votubcmf-qmbtujd-hsbtt-sfdfjwjoh-909[tbfjd] zntargvp-wryylorna-qrcnegzrag-221[ragny] nvrgfezqvu-jtrmvexvi-ylek-nfibjyfg-763[duyon] myvybpev-oqq-crszzsxq-276[qsvyz] nzcczdtgp-nlyoj-nzletyr-nfdezxpc-dpcgtnp-535[ncpzd] wyvqljapsl-jovjvshal-svnpzapjz-877[jvalp] lxuxaodu-lqxlxujcn-bqryyrwp-381[xluqr] iuxxuyobk-jek-iayzuskx-ykxboik-826[kxiuy] dmybmsuzs-omzpk-oamfuzs-efadmsq-690[mszad] ymszqfuo-dmnnuf-pqbmdfyqzf-300[fmqdn] xfbqpojafe-cvooz-xpsltipq-649[opfqx] mvkccspson-bknsykmdsfo-oqq-domrxyvyqi-536[oskmq] ykhknbqh-zua-iwjwcaiajp-420[ahijk] pbafhzre-tenqr-rtt-phfgbzre-freivpr-299[docru] pynffvsvrq-enoovg-fnyrf-585[fnvor] oaddaeuhq-qss-efadmsq-794[xjkyr]oaxadrgx-dmpuamofuhq-qss-oazfmuzyqzf-586[mfaud] yaxsnlcrun-ljwmh-ldbcxvna-bnaerln-173[nlabc] ksodcbwnsr-qcffcgwjs-qobrm-igsf-hsghwbu-714[sbcfg] chnylhuncihuf-vohhs-xypyfijgyhn-136[yzkfs] zgmfyxypbmsq-aylbw-dglylagle-236[lygab] zadftbaxq-anvqof-efadmsq-482[afqdb] jrncbavmrq-cynfgvp-tenff-fuvccvat-325[cfvna] veqtekmrk-fyrrc-xiglrspskc-880[tscqj] jsehsyafy-usfvq-ogjckzgh-814[sfghj] zilqwikbqdm-zijjqb-ivitgaqa-850[pjgiu] upq-tfdsfu-cvooz-dvtupnfs-tfswjdf-519[fdstu] dszphfojd-qmbtujd-hsbtt-ufdiopmphz-441[dhptb] bkwzkqsxq-pvygob-cdybkqo-198[bkqoy] nzcczdtgp-clmmte-ecltytyr-275[ctelm] vehmsegxmzi-gerhc-wxsveki-308[eghim] hvbizodx-xjgjmapg-kgvnodx-bmvnn-vivgtndn-421[museg] oxmeeuruqp-rxaiqd-mocgueufuaz-508[tysvw] vagreangvbany-pnaql-znantrzrag-559[angrv] qspkfdujmf-dboez-dpbujoh-qvsdibtjoh-441[dbjof] nzydfxpc-rclop-qwzhpc-pyrtyppctyr-847[bdick] iuruxlar-hgyqkz-xkikobotm-618[kioru] zilqwikbqdm-akidmvomz-pcvb-camz-bmabqvo-512[mbaiq] ohmnuvfy-wuhxs-wiuncha-nywbhifias-136[hinuw] myvybpev-mrymyvkdo-nozvyiwoxd-770[sinbh] sorozgxe-mxgjk-xghhoz-rghuxgzuxe-904[gxhoz] ujoon-rpcsn-detgpixdch-661[cdnop] nzwzcqfw-awldetn-rcldd-hzcvdsza-561[dzcwa] oknkvcta-itcfg-eqpuwogt-itcfg-dwppa-gpikpggtkpi-830[gptik] hcd-gsqfsh-suu-rsdofhasbh-454[shdfu] aczupnetwp-mldvpe-hzcvdsza-613[pzacd] hwbba-lgnnadgcp-fgrnqaogpv-128[xzspm] drxevkzt-vxx-dribvkzex-581[xvdek] esyfwlau-usfvq-ghwjslagfk-710[fsagl] zlkprjbo-doxab-pzxsbkdbo-erkq-obxznrfpfqflk-861[bkofp] mbiyqoxsm-mkxni-psxkxmsxq-536[xmsik] wihmogyl-aluxy-lugjuacha-wuhxs-uwkocmcncih-942[uchal] aoubshwq-gqojsbusf-vibh-difqvogwbu-116[boqsu] tfejldvi-xiruv-vxx-fgvirkzfej-321[vfixe] eqpuwogt-itcfg-hnqygt-uvqtcig-128[gtqci] forwcoqhwjs-foppwh-gozsg-376[owfgh] xjmmjndqz-wpiit-yzndbi-447[idjmn] ixccb-exqqb-ghsduwphqw-595[zxtyc] ynukcajey-ywjzu-hwxknwpknu-186[tsayq] jlidywncfy-mwupyhayl-bohn-guhuaygyhn-396[yhnua] wyvqljapsl-jovjvshal-lunpullypun-721[ljpuv] surmhfwloh-fdqgb-frdwlqj-fxvwrphu-vhuylfh-413[fhlru] cybyjqho-whqtu-kdijqrbu-sxesebqju-tulubefcudj-374[ubjqe] hqtyeqsjylu-vbemuh-fkhsxqiydw-842[inepa] rdggdhxkt-hrpktcvtg-wjci-apqdgpidgn-557[ahtds] bnknqetk-bgnbnkzsd-dmfhmddqhmf-339[dnbkm] bqxnfdmhb-cxd-bnmszhmldms-131[mbdhn] jsehsyafy-usfvq-ugslafy-jwsuimakalagf-788[asfuy] ltpedcxots-rpcsn-rdpixcv-hwxeexcv-609[cxepd] ojk-nzxmzo-pinovwgz-agjrzm-hvmfzodib-915[scjyr] krxqjijamxdb-kdwwh-jwjuhbrb-849[jbwdh] sbejpbdujwf-cbtlfu-vtfs-uftujoh-285[dsgnt] dkqjcbctfqwu-dwppa-fgukip-622[pcdfk] cvabijtm-kivlg-kwibqvo-aitma-200[iavbk] dsxxw-aylbw-dglylagle-652[gsakl] gpbepvxcv-gpsxdprixkt-eaphixr-vgphh-htgkxrth-453[phxgr] bnqqnrhud-rbzudmfdq-gtms-sdbgmnknfx-365[dnbmq] etyyx-qzaahs-lzqjdshmf-547[ahqsy] kpvgtpcvkqpcn-lgnnadgcp-ujkrrkpi-154[pkcgn] cvabijtm-ntwemz-bmkpvwtwog-226[mtwbv] guahyncw-mwupyhayl-bohn-uwkocmcncih-864[chnuw] aczupnetwp-mldvpe-nzyeltyxpye-171[bwvxh] ryexqpqhteki-sqdto-seqjydw-jhqydydw-920[qdyeh] aietsrmdih-hci-vigimzmrk-568[imhra] zilqwikbqdm-lgm-xczkpiaqvo-356[iqklm] zvyvgnel-tenqr-pubpbyngr-npdhvfvgvba-533[vnbgp] vrurcjah-pajmn-lxuxaodu-kdwwh-mnbrpw-875[fnqea] mrxivrexmsrep-jpsaiv-irkmriivmrk-958[rimve] mvhkvbdib-wvnfzo-omvdidib-733[stayi] ryexqpqhteki-kdijqrbu-zubboruqd-fkhsxqiydw-192[tsdpw] oxjmxdfkd-zxkav-zlxqfkd-xkxivpfp-497[smpbo] cebwrpgvyr-pnaql-znantrzrag-117[rangp] qfmcusbwq-qvcqczohs-obozmgwg-766[qcobg] dmbttjgjfe-ezf-bdrvjtjujpo-129[gbjwt] rflsjynh-hmthtqfyj-zxjw-yjxynsl-593[jyhfl] ncjzrpytn-awldetn-rcldd-afcnsldtyr-769[ntqrm] pdjqhwlf-fdqgb-frdwlqj-vwrudjh-699[dfjqw] slqryzjc-zsllw-yaosgqgrgml-210[lgsqr] bkwzkqsxq-oqq-vyqscdsmc-718[qsckb] lsyrkjkbnyec-oqq-vklybkdybi-224[kyblq] vkppo-rqiauj-skijecuh-iuhlysu-530[uihjk] guahyncw-wifilzof-zfiqyl-xyjfisgyhn-526[uhsvy] gsvvswmzi-hci-viwievgl-984[ivgsw] ftzgxmbv-vahvhetmx-vnlmhfxk-lxkobvx-345[vxhmb] eqttqukxg-hnqygt-rwtejcukpi-882[tqegk] ygcrqpkbgf-gii-rwtejcukpi-674[gickp] ibghopzs-pogysh-qcbhowbasbh-558[bhosg] ocipgvke-uecxgpigt-jwpv-ncdqtcvqta-544[cgptv] drxevkzt-sleep-ivjvrity-685[tkwzb] qekrixmg-gsvvswmzi-jpsaiv-hitpscqirx-256[isvgm] qjopwxha-bhksan-lqnydwoejc-862[ahjno] vjpwncrl-ljwmh-mnbrpw-277[wjlmn] zbytomdsvo-tovvilokx-nofovyzwoxd-796[ysvjp] ajyqqgdgcb-aylbw-amyrgle-pcacgtgle-522[gacly] zixppfcfba-zxkav-abpfdk-835[afpbk] gzefmnxq-oaddaeuhq-nmewqf-oazfmuzyqzf-924[fqzae] drxevkzt-sleep-glityrjzex-841[elrtx] yflexwxoalrp-yrkkv-zrpqljbo-pbosfzb-367[blopr] lugjuacha-dyffsvyuh-omyl-nymncha-578[yahuc] tpspahyf-nyhkl-jovjvshal-aljouvsvnf-175[vahjl] htwwtxnaj-rnqnyfwd-lwfij-jll-wjfhvznxnynts-567[nwjfl] tipfxvezt-avccpsvre-ivjvrity-503[vitce] myvybpev-bkllsd-yzobkdsyxc-198[ybdkl] cqwdujys-sqdto-seqjydw-vydqdsydw-348[asypt] bqxnfdmhb-qzaahs-otqbgzrhmf-339[hgfsm] jshzzpmplk-lnn-aljouvsvnf-175[lnjps] jxdkbqfz-zlilocri-pzxsbkdbo-erkq-zlkqxfkjbkq-679[kbqzl] irgyyolokj-hatte-xkikobotm-488[oktiy] buzahisl-jhukf-zavyhnl-123[haluz] odiih-lqxlxujcn-orwjwlrwp-823[qoruw] vhehkyne-utldxm-kxtvjnblbmbhg-293[bhekl] fmsledevhsyw-gerhc-gsexmrk-vieguymwmxmsr-282[emsgr] xgsvgmotm-igtje-lotgtiotm-852[qsejd] xfbqpojafe-cbtlfu-tbmft-311[fbtac] zlkprjbo-doxab-mixpqfz-doxpp-obzbfsfkd-601[bopdf] szfyrqriuflj-srjbvk-wzeretzex-789[rezfj] xjgjmapg-pinovwgz-xviyt-hvivbzhzio-759[wlrju] hjgbwuladw-usfvq-ghwjslagfk-918[gwafh] pbeebfvir-pubpbyngr-fgbentr-221[beprf] ujqgywfau-usfvq-ogjckzgh-164[gufjq] fkqbokxqflkxi-bdd-pqloxdb-497[bdkqx] froruixo-sodvwlf-judvv-vdohv-855[aijkw] oxaflxzqfsb-gbiivybxk-obzbfsfkd-601[bfxik] gsvvswmzi-gerhc-gsexmrk-hiwmkr-594[gmrse] xzwrmkbqtm-akidmvomz-pcvb-uizsmbqvo-252[wfzme] hdgdovmt-bmvyz-xjinphzm-bmvyz-zbb-pnzm-oznodib-109[zbmdn] pejji-myvybpev-pvygob-kmaescsdsyx-978[vqufp] hdgdovmt-bmvyz-agjrzm-vivgtndn-369[vdgmn] rkpqxyib-zelzlixqb-obxznrfpfqflk-835[bflqx] aczupnetwp-awldetn-rcldd-lnbftdtetzy-483[tdeln] rwcnawjcrxwju-bljenwpna-qdwc-anjlzdrbrcrxw-719[huwmx] gbc-frperg-pnaql-znantrzrag-637[ragnp] houngfgxjuay-xghhoz-jkvruesktz-306[nsazy] ugjjgkanw-kusnwfywj-zmfl-mkwj-lwklafy-918[wjkfl] ykhknbqh-nwxxep-bejwjyejc-992[sgbzr] drxevkzt-nvrgfezqvu-treup-ivjvrity-269[vreti] qfmcusbwq-gqojsbusf-vibh-ghcfous-272[zobty] pbafhzre-tenqr-qlr-znantrzrag-481[ranze] wpuvcdng-ecpfa-vgejpqnqia-154[paceg] mhi-lxvkxm-unggr-etuhktmhkr-605[hkmgr] bnqqnrhud-atmmx-sqzhmhmf-157[mhqna] vetllbybxw-vahvhetmx-hixktmbhgl-891[hbltv] dpssptjwf-gvaaz-ezf-fohjoffsjoh-597[fjosa] molgbzqfib-pzxsbkdbo-erkq-qoxfkfkd-289[zcjum] myxcewob-qbkno-cmkfoxqob-rexd-dbksxsxq-562[ysjzt] vhglnfxk-zktwx-xzz-xgzbgxxkbgz-215[sgtyf] jlidywncfy-xsy-xymcah-110[ycxad] ktiaaqnqml-kivlg-wxmzibqwva-330[aiqkl] etaqigpke-rncuvke-itcuu-fgukip-934[ueikc] ksodcbwnsr-qvcqczohs-oqeiwgwhwcb-922[cwoqs] raphhxuxts-gpqqxi-gtprfjxhxixdc-219[oytzu] fab-eqodqf-dmnnuf-emxqe-872[zsbvi] zlkprjbo-doxab-oxyyfq-rpbo-qbpqfkd-991[bopqd] drxevkzt-vxx-tfekrzedvek-217[lkyzs] qekrixmg-aietsrmdih-hci-qerekiqirx-412[tasnf] nsyjwsfyntsfq-idj-hzxytrjw-xjwanhj-463[jnswy] cxy-bnlanc-ljwmh-lxjcrwp-vjatncrwp-173[cjlnw] apuut-nxvqzibzm-cpio-nzmqdxzn-889[cvjhy] wsvsdkbi-qbkno-lexxi-wkbuodsxq-172[bksxd] clotzlnetgp-awldetn-rcldd-ecltytyr-327[ltcde] qspkfdujmf-dboez-dpbujoh-ufdiopmphz-571[dpfou] willimcpy-wuhxs-wiuncha-lywycpcha-266[gzrbt] jvsvymbs-ibuuf-ylhjxbpzpapvu-227[dbpkh] bnmrtldq-fqzcd-bgnbnkzsd-rsnqzfd-599[dnbqz] tbxmlkfwba-ciltbo-abmilvjbkq-549[blaik] ujoon-hrpktcvtg-wjci-sthxvc-115[cthjo] cybyjqho-whqtu-sxesebqju-ijehqwu-998[qehju] qcbgiasf-ufors-awzwhofm-ufors-pibbm-qighcasf-gsfjwqs-948[rfsbq] mvydjvxodqz-kgvnodx-bmvnn-mzvxlpdndodji-369[dvnmo] iutyaskx-mxgjk-ckgvutofkj-yigbktmkx-natz-xkikobotm-852[ktxgi] ohmnuvfy-yaa-lywycpcha-994[xwflv] xjinphzm-bmvyz-agjrzm-ncdkkdib-499[mzbdi] luxciuwncpy-dyffsvyuh-omyl-nymncha-630[fcgdy] rwcnawjcrxwju-ajkkrc-uxprbcrlb-511[rcjwa] oqnidbshkd-eknvdq-qdzbpthrhshnm-703[upwnl] vhglnfxk-zktwx-cxeeruxtg-lxkobvxl-761[xkleg] dmybmsuzs-yuxufmdk-sdmpq-rxaiqd-efadmsq-612[nlayh] fbebmtkr-zktwx-ynssr-vahvhetmx-inkvatlbgz-761[drsyx] xmrrq-tskcwl-klgjsyw-164[qbztu] tcrjjzwzvu-upv-uvgcfpdvek-945[nheck] vkrhzxgbv-ietlmbv-zktll-hixktmbhgl-839[lbhkt] drxevkzt-irsszk-crsfirkfip-971[riksf] tpspahyf-nyhkl-zjhclunly-obua-zavyhnl-201[hlyan] enzcntvat-enqvbnpgvir-enoovg-freivprf-403[nverf] iehepwnu-cnwza-ydkykhwpa-qoan-paopejc-888[apenw] laffe-vrgyzoi-mxgyy-xkgiwaoyozout-878[fzrnp] luxciuwncpy-wuhxs-wiuncha-xyjfisgyhn-812[uchin] houngfgxjuay-yigbktmkx-natz-ktmotkkxotm-358[ktgmo] qzlozfhmf-bgnbnkzsd-qdzbpthrhshnm-911[hzbnd] mvkccspson-tovvilokx-zebmrkcsxq-432[ckosv] pybgmyargtc-zyqicr-ylyjwqgq-652[gyezv] gvaaz-tdbwfohfs-ivou-mbcpsbupsz-129[ojwuz] ftzgxmbv-xzz-wxitkmfxgm-163[xmzfg] ujqgywfau-wyy-ksdwk-970[wykua] nwlddtqtpo-ojp-dezclrp-119[dplot] rgllk-qss-ymdwqfuzs-274[lzpkf] ugfkmewj-yjsvw-xdgowj-jwuwanafy-918[wjafg] lxaaxbren-bljenwpna-qdwc-ydalqjbrwp-537[amnfi] jfifqxov-doxab-mixpqfz-doxpp-obxznrfpfqflk-263[fxopq] ygcrqpkbgf-hnqygt-vtckpkpi-310[gkpcq] nzcczdtgp-nsznzwlep-opgpwzaxpye-353[kfyqu] iutyaskx-mxgjk-laffe-xghhoz-zxgototm-436[csnwy] jyfvnlupj-msvdly-yljlpcpun-617[xjyin] crwwv-zxkav-zlxqfkd-abmilvjbkq-809[kvabl] dkqjcbctfqwu-uecxgpigt-jwpv-tgceswkukvkqp-388[ckgpq] hjgbwuladw-tskcwl-vwkayf-632[waklb] gifavtkzcv-tyftfcrkv-jrcvj-607[vcftj] vcibutulxiom-lugjuacha-mwupyhayl-bohn-xymcah-110[zaukx] eadalsjq-yjsvw-tmffq-jwsuimakalagf-450[afjsl] pejji-mrymyvkdo-ecob-docdsxq-172[docej] tinnm-dzoghwq-ufogg-hfowbwbu-844[gowbf] szfyrqriuflj-upv-tljkfdvi-jvimztv-347[vfijl] emixwvqhml-xtiabqk-oziaa-abwziom-980[mzdxn] cvabijtm-kwvacumz-ozilm-lgm-mvoqvmmzqvo-382[mvoza] forwcoqhwjs-foppwh-gsfjwqsg-454[wfosg] lejkrscv-jtrmvexvi-ylek-glityrjzex-503[ejlrv] bjfutsneji-jll-qtlnxynhx-333[jlntx] xgvnndadzy-wvnfzo-nzmqdxzn-915[nzdvx] iuxxuyobk-yigbktmkx-natz-jkvruesktz-358[hkglx] yhwooebeaz-ywjzu-pnwejejc-602[ejwoy] gpsxdprixkt-rpcsn-hpath-115[phrst] qzoggwtwsr-xszzmpsob-fsoqeiwgwhwcb-766[qokpy] enzcntvat-pubpbyngr-pbagnvazrag-611[abzti] tmrszakd-dff-kzanqzsnqx-781[zadfk] gspsvjyp-tpewxmg-kveww-gywxsqiv-wivzmgi-880[wgvip] htwwtxnaj-xhfajsljw-mzsy-jslnsjjwnsl-151[jswln] mixpqfz-doxpp-absbilmjbkq-705[bjkty] ykhknbqh-oywrajcan-dqjp-opknwca-732[ulyzv] gspsvjyp-gerhc-wivzmgiw-932[gipsv] yaxsnlcrun-yujbcrl-pajbb-uxprbcrlb-407[brclu] kpvgtpcvkqpcn-lgnnadgcp-qrgtcvkqpu-128[nuklw] votubcmf-sbccju-fohjoffsjoh-571[focjb] zixppfcfba-zxkav-obzbfsfkd-549[fbzak] gbc-frperg-rtt-grpuabybtl-221[rbgtp] fhezusjybu-fbqijys-whqii-mehaixef-842[fyqxt] zlilocri-zloolpfsb-gbiivybxk-jxkxdbjbkq-497[bilko] kgjgrypw-epybc-zsllw-rcaflmjmew-964[lwceg] amjmpdsj-djmucp-qrmpyec-314[mjpcd] fruurvlyh-iorzhu-pdunhwlqj-413[ndqft] jchipqat-tvv-rjhidbtg-htgkxrt-193[mfnvi] vcibutulxiom-mwupyhayl-bohn-uwkocmcncih-968[cuhim] avw-zljyla-jovjvshal-zlycpjlz-721[ljavz] oazegyqd-sdmpq-nmewqf-pqbxakyqzf-352[qadef] rdggdhxkt-qjccn-prfjxhxixdc-297[xcdgh] hwdtljsnh-gzssd-knsfshnsl-281[shndl] tipfxvezt-nvrgfezqvu-treup-tfrkzex-rthlzjzkzfe-451[mezst] uiovmbqk-zijjqb-camz-bmabqvo-356[znrpy] zilqwikbqdm-kivlg-kwibqvo-xczkpiaqvo-876[ehjwb] shoewudys-rkddo-husuylydw-166[dsuyh] ytu-xjhwjy-jll-xfqjx-125[znmyk] zlilocri-ciltbo-cfkxkzfkd-107[ciklf] kfg-jvtivk-wcfnvi-kirzezex-581[xbemd] qvbmzvibqwvit-ntwemz-zmamizkp-356[mzivb] ajyqqgdgcb-pyzzgr-bcqgel-470[gqbcy] zgmfyxypbmsq-zyqicr-nspafyqgle-340[maipd] pxtihgbsxw-wrx-etuhktmhkr-709[htxkr] lxwbdvna-pajmn-ajvyjprwp-ljwmh-lxjcrwp-jwjuhbrb-303[jwpab] tyepcyletzylw-clmmte-pyrtyppctyr-613[ytpce] gspsvjyp-gerhc-gsexmrk-vigimzmrk-360[gmrse] tmrszakd-okzrshb-fqzrr-rghoohmf-599[rhozf] uwtojhynqj-hfsid-btwpxmtu-983[igebf] tpspahyf-nyhkl-wshzapj-nyhzz-zavyhnl-461[rhtdy] atyzghrk-xghhoz-iayzuskx-ykxboik-774[khxyz] nwlddtqtpo-qwzhpc-fdpc-epdetyr-847[hsouv] bpvctixr-snt-pcpanhxh-167[pchnt] bxaxipgn-vgpst-gpsxdprixkt-rwdrdapit-rdcipxcbtci-609[pixdr] jfifqxov-doxab-yrkkv-pxibp-991[ysvte] hqcfqwydw-rkddo-tuiywd-504[nlasz] ibghopzs-forwcoqhwjs-pibbm-twbobqwbu-792[csjyt] yrwxefpi-fmsledevhsyw-fewoix-erepcwmw-672[ewfim] jrncbavmrq-cebwrpgvyr-qlr-pbagnvazrag-533[rabgv] iwcjapey-fahhuxawj-naoawnyd-706[awhjn] houngfgxjuay-jek-ktmotkkxotm-358[kotgj] dsxxw-aylbw-amyrgle-bcnyprkclr-496[lryab] szfyrqriuflj-wcfnvi-glityrjzex-555[wpmhn] eqnqthwn-lgnnadgcp-gpikpggtkpi-544[cndbf] fnjyxwrinm-lqxlxujcn-uxprbcrlb-433[xlnrb] bwx-amkzmb-kwtwznct-kivlg-kwibqvo-bziqvqvo-772[yfklb] emixwvqhml-kivlg-zmkmqdqvo-824[mqvik] dpmpsgvm-dboez-qvsdibtjoh-181[iqunm] wlqqp-avccpsvre-tljkfdvi-jvimztv-451[neohc] ikhcxvmbex-ktuubm-mxvaghehzr-813[hmxbe] yhkpvhjapcl-ihzrla-wbyjohzpun-409[hpajl] ucynmlgxcb-kgjgrypw-epybc-zsllw-bctcjmnkclr-470[clbgy] gbc-frperg-pynffvsvrq-rtt-fgbentr-533[rfgtb] odiih-mhn-mnyuxhvnwc-693[yikst] pelbtravp-fpniratre-uhag-qrcnegzrag-897[eflsv] ojk-nzxmzo-mvwwdo-kpmxcvndib-811[qrbnz] hafgnoyr-qlr-erprvivat-949[ravef] nij-mywlyn-zfiqyl-lyuwkocmcncih-968[orsct] udpsdjlqj-udeelw-vdohv-179[dejlu] houngfgxjuay-hatte-xkgiwaoyozout-358[qeuts] zsxyfgqj-hfsid-htfynsl-uzwhmfxnsl-931[mcznp] ujqgywfau-hdsklau-yjskk-jwuwanafy-918[aujkw] buzahisl-kfl-thyrlapun-123[lahub] jshzzpmplk-ihzrla-klzpnu-591[zlphk] qmpmxevc-kvehi-fmsledevhsyw-hci-gywxsqiv-wivzmgi-984[ivemh] apwmeclga-djmucp-qfgnngle-262[vbozj] joufsobujpobm-ezf-mphjtujdt-545[enrth] wlsiayhcw-wbiwifuny-ijyluncihm-136[iwych] vehmsegxmzi-wgezirkiv-lyrx-vieguymwmxmsr-672[meigr] forwcoqhwjs-pogysh-kcfygvcd-870[cofgh] ryexqpqhteki-sqdto-seqjydw-bqrehqjeho-634[qehdj] buzahisl-jvyyvzpcl-qlssfilhu-vwlyhapvuz-591[lvhsu] vxupkizork-jek-zkinturume-852[tmzlr] xmrrq-vqw-mkwj-lwklafy-762[wklmq] irdgrxzex-tyftfcrkv-uvgrikdvek-555[rkvde] fab-eqodqf-bxmefuo-sdmee-fdmuzuzs-742[uzdoy] nij-mywlyn-vohhs-ijyluncihm-214[hwyfz] lgh-kwujwl-tmffq-esfsywewfl-190[fwles] pbeebfvir-pynffvsvrq-rtt-jbexfubc-611[izbpo] dkqjcbctfqwu-uecxgpigt-jwpv-vtckpkpi-518[cpktg] lejkrscv-srjbvk-jyzggzex-399[jegkr] cqwdujys-rkddo-huqsgkyiyjyed-322[dyjkq] apuut-xviyt-xjvodib-mznzvmxc-499[vximt] aietsrmdih-fyrrc-pskmwxmgw-776[gltyk] aczupnetwp-awldetn-rcldd-cpdplcns-743[cdpln] kpvgtpcvkqpcn-hnqygt-ncdqtcvqta-570[cqtnp] tcrjjzwzvu-sleep-uvmvcfgdvek-789[vecju] crwwv-zxkav-zlxqfkd-cfkxkzfkd-653[kfxzc] kgjgrypw-epybc-aylbw-cleglccpgle-366[cglep] sebehvkb-rkddo-udwyduuhydw-244[yxpql] wpuvcdng-ecpfa-eqcvkpi-ceswkukvkqp-648[ckpev] qcbgiasf-ufors-qvcqczohs-igsf-hsghwbu-818[qvnjb] sxdobxkdsyxkv-mkxni-mykdsxq-wkxkqowoxd-796[upngm] cxy-bnlanc-lqxlxujcn-vjatncrwp-355[cnlxa] ohmnuvfy-jfumncw-alumm-womnigyl-mylpcwy-240[biqdh] tyepcyletzylw-awldetn-rcldd-lylwjdtd-275[tsenk] vrurcjah-pajmn-yujbcrl-pajbb-fxatbqxy-511[drzlg] ikhcxvmbex-yehpxk-hixktmbhgl-397[hxkbe] kzgwomvqk-jcvvg-wxmzibqwva-824[mwzye] tfejldvi-xiruv-treup-vexzevvizex-295[evixr] frqvxphu-judgh-vfdyhqjhu-kxqw-pdqdjhphqw-361[hqdjp] yflexwxoalrp-mixpqfz-doxpp-bkdfkbbofkd-497[fpxbd] emixwvqhml-kivlg-bziqvqvo-382[nwsap] mvydjvxodqz-ytz-xpnojhzm-nzmqdxz-863[mitys] hcd-gsqfsh-gqojsbusf-vibh-ghcfous-844[shfgb] wfruflnsl-hfsid-htfynsl-hzxytrjw-xjwanhj-775[fhjln] tbxmlkfwba-zelzlixqb-qoxfkfkd-393[bfklx] xjmmjndqz-wpiit-adivixdib-395[idjmx] wyvqljapsl-jovjvshal-thuhnltlua-201[lahjv] pkl-oaynap-lhwopey-cnwoo-zalhkuiajp-446[aoplh] ugfkmewj-yjsvw-usfvq-kzahhafy-164[fahjk] sebehvkb-hqcfqwydw-sqdto-iqbui-738[qbdeh] mfklstdw-wyy-suimakalagf-814[afklm] htsxzrjw-lwfij-xhfajsljw-mzsy-uzwhmfxnsl-983[jswfh] chnylhuncihuf-vohhs-uhufsmcm-994[hucfm] otzkxtgzoutgr-kmm-iayzuskx-ykxboik-696[kotxz] htwwtxnaj-wfggny-ijufwyrjsy-307[mlrnu] wlsiayhcw-wuhxs-lywycpcha-916[wchya] htqtwkzq-gzssd-fhvznxnynts-931[nstzh] tcfkqcevkxg-ecpfa-eqcvkpi-eqpvckpogpv-570[zvtny] crwwv-yxphbq-obpbxoze-809[bopwx] xjgjmapg-wpiit-hvmfzodib-681[wtrmn] ksodcbwnsr-ibghopzs-qobrm-qcohwbu-gsfjwqsg-324[sbogq] jchipqat-hrpktcvtg-wjci-bpcpvtbtci-323[ctpib] lujbbrornm-npp-mnyjacvnwc-433[nbcjm] xgjougizobk-lruckx-zkinturume-488[ukgio] lxaaxbren-mhn-vjwjpnvnwc-459[najvw] kyelcrga-bwc-pcacgtgle-834[cgael] sgmtkzoi-vrgyzoi-mxgyy-sgxqkzotm-618[gmoyz] surmhfwloh-fdqgb-frdwlqj-uhvhdufk-777[fhdul] vxupkizork-hatte-ynovvotm-670[otvka] amlqskcp-epybc-afmamjyrc-amlryglkclr-704[aclmr] yaxsnlcrun-lqxlxujcn-jlzdrbrcrxw-719[pyomt] ohmnuvfy-vohhs-yhachyylcha-578[xkpiy] wdjcvuvmyjpn-ytz-jkzmvodjin-551[cairj] aflwjfslagfsd-tskcwl-vwhsjlewfl-892[lfswa] hcd-gsqfsh-aoubshwq-gqojsbusf-vibh-qighcasf-gsfjwqs-376[shqfg] gbc-frperg-pnaql-pbagnvazrag-767[agprb] emixwvqhml-jcvvg-wxmzibqwva-876[vmwiq] nuatmlmdpage-omzpk-oamfuzs-bgdotmeuzs-716[maouz] glrcplyrgmlyj-djmucp-mncpyrgmlq-340[acoxz] qczcftiz-dzoghwq-ufogg-hfowbwbu-818[fgowz] apuut-nxvqzibzm-cpio-yzkvmohzio-629[ziomp] gpsxdprixkt-bpvctixr-gpqqxi-prfjxhxixdc-323[jxkig] rmn-qcapcr-njyqrga-epyqq-bctcjmnkclr-704[cqrna] wlsiayhcw-zfiqyl-jolwbumcha-708[swavu] njmjubsz-hsbef-cvooz-usbjojoh-675[jobsh] kpvgtpcvkqpcn-dcumgv-ceswkukvkqp-492[kcpvg] egdytrixat-raphhxuxts-qphzti-steadnbtci-505[tahix] qcbgiasf-ufors-xszzmpsob-rsdzcmasbh-402[ijlzr] kfg-jvtivk-jtrmvexvi-ylek-uvjzxe-217[vejki] vetllbybxw-xzz-hixktmbhgl-917[blxht] htwwtxnaj-idj-fsfqdxnx-931[xdfjn] muqfedyput-fbqijys-whqii-skijecuh-iuhlysu-842[gsjin] dmybmsuzs-pkq-dqeqmdot-144[dmqsb] nvrgfezqvu-wcfnvi-jvimztvj-815[vfijn] aoubshwq-qvcqczohs-gsfjwqsg-272[qscgh] bknsykmdsfo-mkxni-nozvyiwoxd-510[knodi] bnmrtldq-fqzcd-dff-ehmzmbhmf-157[fmdbh] qczcftiz-pibbm-rsjszcdasbh-142[eafby] vagreangvbany-pnaql-nanylfvf-195[anvfg] oxjmxdfkd-zlilocri-yxphbq-abmilvjbkq-497[zvsko] lejkrscv-tyftfcrkv-uvjzxe-191[vcefj] qekrixmg-gerhc-gsexmrk-hitpscqirx-698[regix] xgsvgmotm-hgyqkz-xkgiwaoyozout-462[gokmt] dpssptjwf-dszphfojd-ezf-tupsbhf-961[zyots] jyfvnlupj-lnn-bzly-alzapun-123[uvkxg] jsehsyafy-hdsklau-yjskk-umklgewj-kwjnauw-840[kjsau] vdzonmhydc-bzmcx-bnzshmf-otqbgzrhmf-937[qxzpu] qmpmxevc-kvehi-jpsaiv-stivexmsrw-126[xdsef] ymszqfuo-vqxxknqmz-ymdwqfuzs-300[qmzfs] qfkkj-nsznzwlep-zapcletzyd-561[nxzqv] krxqjijamxdb-snuuhknjw-mnyjacvnwc-771[fgnhu] tfiifjzmv-tyftfcrkv-jvimztvj-529[cgbts] wfruflnsl-wfggny-qfgtwfytwd-957[fwgln] kdijqrbu-tou-vydqdsydw-218[rkftc] cebwrpgvyr-sybjre-freivprf-871[rebfp] fmsledevhsyw-gpewwmjmih-glsgspexi-ywiv-xiwxmrk-958[weims] yhtwhnpun-wshzapj-nyhzz-mpuhujpun-981[hnpuz] muqfedyput-fbqijys-whqii-tufbeocudj-166[ufiqb] vkrhzxgbv-utldxm-nlxk-mxlmbgz-137[xlmbg] jsvagsulanw-ugjjgkanw-wyy-vwhsjlewfl-398[wjagl] xtwtelcj-rclop-nsznzwlep-opawzjxpye-795[pelwz] wyvqljapsl-yhiipa-zopwwpun-383[smzin] ejpanjwpekjwh-xekdwvwnzkqo-oywrajcan-dqjp-oanreyao-264[ajwen] ugfkmewj-yjsvw-bwddqtwsf-ogjckzgh-736[wgjdf] yflexwxoalrp-bdd-qoxfkfkd-965[dfxkl] kdijqrbu-sbqiiyvyut-fbqijys-whqii-bewyijysi-660[iybqj] nzcczdtgp-mldvpe-hzcvdsza-743[tsrmc] eza-dpncpe-upwwjmply-dpcgtnpd-457[pdcen] iruzfrtkzmv-tyftfcrkv-dribvkzex-789[zcudt] tfejldvi-xiruv-srjbvk-crsfirkfip-451[irfvj] otzkxtgzoutgr-igtje-iugzotm-ykxboiky-280[tgoik] ohmnuvfy-luvvcn-ijyluncihm-682[nuvch] eadalsjq-yjsvw-usfvq-ugslafy-jwuwanafy-450[asfju] fkqbokxqflkxi-yxphbq-cfkxkzfkd-653[kfxqb] owshgfarwv-uzgugdslw-vwhsjlewfl-372[wglsf] ygcrqpkbgf-dcumgv-octmgvkpi-414[hzick] ujoon-ytaanqtpc-pcpanhxh-869[anpch] wlsiayhcw-vohhs-lymyulwb-682[areml] dlhwvupglk-zjhclunly-obua-zopwwpun-617[lupwh] iuxxuyobk-inuiurgzk-jkyomt-228[uikox] zuv-ykixkz-hgyqkz-ynovvotm-332[kvyzo] ujqgywfau-bwddqtwsf-kwjnauwk-190[wuadf] frqvxphu-judgh-udeelw-orjlvwlfv-361[luvde] vqr-ugetgv-dwppa-octmgvkpi-102[gpvta] iuxxuyobk-vrgyzoi-mxgyy-iayzuskx-ykxboik-410[yxiko] vhglnfxk-zktwx-ietlmbv-zktll-ltexl-995[ltkxe] ktiaaqnqml-kivlg-kwvbiqvumvb-746[vikqa] zlkprjbo-doxab-pzxsbkdbo-erkq-rpbo-qbpqfkd-601[bkopd] rdchjbtg-vgpst-rpcsn-rdpixcv-hidgpvt-973[pcdgr] ixccb-udeelw-ghvljq-803[celbd] uzfqdzmfuazmx-vqxxknqmz-fqotzaxask-872[uskol] qzlozfhmf-atmmx-cdoknxldms-833[mdflo] bpvctixr-ytaanqtpc-gtprfjxhxixdc-505[mainf] kgjgrypw-epybc-aylbw-bcnyprkclr-678[ybcpr] hqfxxnknji-hwdtljsnh-xhfajsljw-mzsy-fhvznxnynts-645[nhjsx] ymszqfuo-nmewqf-oazfmuzyqzf-352[fzmqo] yhwooebeaz-lhwopey-cnwoo-wjwhuoeo-862[owehy] muqfedyput-fbqijys-whqii-mehaixef-374[iefqh] xqvwdeoh-vfdyhqjhu-kxqw-vdohv-621[hvdqo] pybgmyargtc-qaytclecp-fslr-rcaflmjmew-990[cytzv] fnjyxwrinm-bljenwpna-qdwc-cajrwrwp-849[wnjra] fab-eqodqf-ymszqfuo-otaoaxmfq-pqbmdfyqzf-222[fqoam] drxevkzt-tyftfcrkv-kvtyefcfxp-685[ftkvc] pyknyegle-afmamjyrc-mncpyrgmlq-340[myace] ykhknbqh-ywjzu-ykwpejc-iwngapejc-914[ixmoc] ydjuhdqjyedqb-isqludwuh-xkdj-ijehqwu-530[cryum] dpssptjwf-kfmmzcfbo-mphjtujdt-207[fjmpt] jvuzbtly-nyhkl-yhiipa-zavyhnl-123[yhlai] eqttqukxg-dwppa-fgrnqaogpv-908[pntsf] tcorcikpi-hnqygt-fgrctvogpv-232[cgtio] zotts-wuhxs-qilembij-422[fazws] pelbtravp-sybjre-hfre-grfgvat-273[xwnyt] pbafhzre-tenqr-qlr-erfrnepu-117[refnp] luxciuwncpy-yaa-qilembij-734[iaclu] fbebmtkr-zktwx-wrx-kxtvjnblbmbhg-943[estfp] rflsjynh-hmthtqfyj-uzwhmfxnsl-827[hfjlm] ktwbhtvmbox-vahvhetmx-vhgmtbgfxgm-709[hmtvb] fodvvlilhg-mhoobehdq-vwrudjh-517[hdovl] lsyrkjkbnyec-lexxi-nozkbdwoxd-874[kxbde] njmjubsz-hsbef-gmpxfs-eftjho-597[fjsbe] qyujihctyx-luvvcn-fiacmncwm-604[cimnu] udskkaxawv-wyy-umklgewj-kwjnauw-190[wkauj] sebehvkb-zubboruqd-husuylydw-192[budeh] nzwzcqfw-upwwjmply-dpcgtnpd-795[pwcdn] zloolpfsb-bdd-qoxfkfkd-679[dfobk] fhezusjybu-rkddo-cqdqwucudj-816[enzjf] irgyyolokj-inuiurgzk-jkvruesktz-202[kirug] bnqqnrhud-hmsdqmzshnmzk-atmmx-btrsnldq-rdquhbd-599[dmqhn] avw-zljyla-jhukf-jvhapun-jbzavtly-zlycpjl-149[jlavy] sno-rdbqds-bnqqnrhud-eknvdq-sqzhmhmf-729[qdnhs] slqryzjc-aylbw-amyrgle-dglylagle-392[lyage] hqfxxnknji-hfsid-fsfqdxnx-151[fxndh] vehmsegxmzi-tpewxmg-kveww-pskmwxmgw-308[mwegx] dzczkrip-xiruv-gcrjkzt-xirjj-ljvi-kvjkzex-633[jikrz] mvhkvbdib-zbb-yzkvmohzio-915[bvzhi] ejpanjwpekjwh-xwogap-zarahkliajp-316[ajpwe] dwbcjkun-odiih-mhn-jlzdrbrcrxw-719[drbch] gifavtkzcv-sleep-jkfirxv-633[vefik] oxmeeuruqp-dmpuamofuhq-vqxxknqmz-oazfmuzyqzf-898[mquzf] myvybpev-mkxni-mykdsxq-nocsqx-432[mxykn] aczupnetwp-awldetn-rcldd-cpnptgtyr-431[ptcdn] fab-eqodqf-dmnnuf-geqd-fqefuzs-222[fqden] encuukhkgf-fag-ucngu-440[ugcfk] cvabijtm-moo-twoqabqka-980[aobmq] sawlkjevaz-lnkfaypeha-zua-opknwca-888[hlzus] wfintfhynaj-ojqqdgjfs-yjhmstqtld-281[ibnmv] kmjezxodgz-nxvqzibzm-cpio-gjbdnodxn-421[zdnox] dfcxsqhwzs-qobrm-qcohwbu-qcbhowbasbh-402[bhqco] joufsobujpobm-kfmmzcfbo-vtfs-uftujoh-441[orwsq] nvrgfezqvu-treup-rthlzjzkzfe-607[zerft] kfg-jvtivk-sleep-uvjzxe-555[evjkf] jfifqxov-doxab-oxjmxdfkd-avb-zlkqxfkjbkq-627[xfkbd] hcd-gsqfsh-qobrm-qcohwbu-rsgwub-350[bhqsc] xst-wigvix-hci-hiwmkr-464[ihwxc] yhwooebeaz-bhksan-odellejc-368[eoabh] sehheiylu-zubboruqd-sedjqydcudj-452[mvars] mybbycsfo-pvygob-cobfsmoc-302[amnsc] ziuxioqvo-xtiabqk-oziaa-lmxtwgumvb-746[iaoxb] gbc-frperg-sybjre-nanylfvf-377[xfjqz] zekvierkzferc-dzczkrip-xiruv-tyftfcrkv-tljkfdvi-jvimztv-191[rhqtz] lhkhszqx-fqzcd-idkkxadzm-cdrhfm-209[dhkzc] mvkccspson-pvygob-bokmaescsdsyx-224[lkdtm] vqr-ugetgv-dwppa-fgxgnqrogpv-336[nmitq] nzwzcqfw-clmmte-pyrtyppctyr-717[lvyuh] wsvsdkbi-qbkno-gokzyxsjon-lkcuod-bocokbmr-822[okbsc] pyknyegle-djmucp-umpiqfmn-158[mpenu] iqmbazulqp-rxaiqd-efadmsq-170[qadim] irdgrxzex-sleep-dribvkzex-789[erxdi] cxy-bnlanc-lxwbdvna-pajmn-yujbcrl-pajbb-orwjwlrwp-953[bajln] wdjcvuvmyjpn-wpiit-yzqzgjkhzio-317[mtbqs] rdchjbtg-vgpst-hrpktcvtg-wjci-hpath-661[zypto] bwx-amkzmb-kivlg-kwibqvo-kwvbiqvumvb-980[htfdv] sedikcuh-whqtu-zubboruqd-cqhaujydw-348[udhqb] mbggf-jhukf-jvhapun-ylhjxbpzpapvu-149[phjua] lzfmdshb-oqnidbshkd-cxd-sqzhmhmf-989[dhmsb] zbytomdsvo-lkcuod-bokmaescsdsyx-510[osdbc] iuxxuyobk-kmm-aykx-zkyzotm-384[nqfaj] ejpanjwpekjwh-xwogap-odellejc-654[ejpwa] dwbcjkun-yujbcrl-pajbb-anjlzdrbrcrxw-589[bjrca] diozmivodjivg-ezggtwzvi-hvivbzhzio-239[ivzgo] vqr-ugetgv-ecpfa-eqcvkpi-hkpcpekpi-362[peckv] sxdobxkdsyxkv-mybbycsfo-mkxni-cobfsmoc-926[fnpzo] yflexwxoalrp-zxkav-xkxivpfp-913[xpafk] frqvxphu-judgh-hjj-whfkqrorjb-569[hjrfq] sbqiiyvyut-rkddo-tufbeocudj-218[dubio] esyfwlau-tmffq-kzahhafy-112[sadtv] pbeebfvir-pubpbyngr-genvavat-715[zjqiy] rgllk-vqxxknqmz-etubbuzs-534[bklqu] nchhg-bwx-amkzmb-lgm-nqvivkqvo-486[mvbgh] ykhknbqh-xqjju-hkceopeyo-160[utmir] tmrszakd-okzrshb-fqzrr-sqzhmhmf-937[rzhms] zhdsrqlchg-fdqgb-frdwlqj-vwrudjh-127[dhqrf] eadalsjq-yjsvw-bwddqtwsf-ugflsafewfl-164[fswad] sbejpbdujwf-kfmmzcfbo-xpsltipq-883[bfpjm] kfg-jvtivk-vxx-rthlzjzkzfe-919[kvzfj] ltpedcxots-eaphixr-vgphh-gthtpgrw-349[hptge] bxaxipgn-vgpst-jchipqat-rpcsn-rjhidbtg-htgkxrt-531[tgphi] clotzlnetgp-ojp-lylwjdtd-743[cqzyk] zlkprjbo-doxab-zelzlixqb-pxibp-315[blpxz] etyyx-bzmcx-qdzbpthrhshnm-755[bksta] eqnqthwn-ecpfa-ceswkukvkqp-336[ekqcn] jvyyvzpcl-ihzrla-zlycpjlz-383[lzycj] wbhsfbohwcboz-pwcvonofrcig-suu-cdsfohwcbg-896[cobwf] nwzekwypera-bhksan-nayaerejc-186[aenkr] tmrszakd-eknvdq-lzmzfdldms-989[dmzkl] szfyrqriuflj-wcfnvi-rthlzjzkzfe-971[nhmbi] yflexwxoalrp-pzxsbkdbo-erkq-pbosfzbp-653[wctun] iehepwnu-cnwza-ywjzu-ykwpejc-zalwnpiajp-524[czsja] vkrhzxgbv-vtgwr-vhtmbgz-mktbgbgz-553[kweyh] vetllbybxw-vtgwr-vhtmbgz-mxvaghehzr-553[vzicb] rgllk-qss-etubbuzs-430[sblue] udglrdfwlyh-gbh-ghyhorsphqw-465[hgdlr] krxqjijamxdb-kdwwh-vjatncrwp-823[kvmoi] tpspahyf-nyhkl-kfl-aljouvsvnf-981[flahk] bxaxipgn-vgpst-qphzti-rdcipxcbtci-635[ipctx]"; | |
var sumId = countSum(dane); | |
// 89274 – zły wynik | |
// 361301 – też zły 😉 | |
console.log(sumId); | |
} |
Funkcja countSum(dane)
do podglądu tu. Poza tym, że przyjmuje argument ,to na końcu zwraca sumę za pomocą instrukcji return sumId;
Teraz mogę stworzyć funkcję test(dane)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function test() { | |
var data = "aaaaa-bbb-z-y-x-123[abxyz] a-b-c-d-e-f-g-h-987[abcde] not-a-real-room-404[oarel] totally-real-room-200[decoy]"; | |
if (countSum(data) === 1514) { | |
console.log("Wynik testu prawidłowy") | |
} else { | |
console.log("Wynik testu nieprawidłowy") | |
} | |
} |
Do funkcji countSum
przekazuję dane testowe i potem sprawdzam, czy wynik jest równy 1514. Wywołanie funkcji test dorzuciłam do HTML-a analogicznie do wywołania funkcji solution()
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<script type="text/javascript"> | |
test(); | |
solution(); | |
</script> |
Otworzyłam plik html w przeglądarce i odpaliłam konsolę developerską w Chromie (klawisz F12), żeby zobaczyć czy test wyszedł poprawny i jest ok 😉
W tym miejscu mogłabym sobie przygotować jeszcze więcej testów, które będą sprawdzać dane dla kłopotliwych przypadków jak na przykład ten z sortowaniem alfabetycznym.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function test_equal_occurence_of_letters() { | |
var data = "molgbzqfib-bdd-mrozexpfkd-289[bdfmo]"; | |
if (countSum(data) === 289) { | |
console.log("Wynik testu prawidłowy") | |
} else { | |
console.log("Wynik testu nieprawidłowy") | |
} | |
} |
Wiemy, że ten ciąg jest prawidłowy, więc suma powinna być równa 289.
Gdybym robiła to w metodyce TDD powinnam pisać takie testy do momentu aż znajdę przypadek, dla którego wynik testu będzie nieprawidłowy. Chcę się jednak skupić na tym co w kodzie można by było poprawić i liczę na to, że w toku refaktoryzacji znajdę ukryty błąd.
Więc, czym można się teraz zająć? Może na warsztat wezmę kawałek kodu:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
for (i = 0; i < instructions.length; i++) { | |
encrypted.push(instructions[i].substring(0, instructions[i].length – 10)); | |
id.push(parseInt(instructions[i].substring(instructions[i].length – 10, instructions[i].length – 7))); // od razu zmiana na liczbę, żeby nie było problemu przy sumowaniu | |
checksum.push(instructions[i].substring(instructions[i].length – 6, instructions[i].length – 1)) | |
} |
Ten kawałek odpowiada za to, że z instructions[i]
, który przedstawia pojedynczą instrukcję wyciągamy poszczególne części odpowiedzialne za zakodowaną nazwę, id i sumę kontrolną. Jednak jedyną stałą długością jaką mamy podaną w zadaniu jest długość sumy kontrolnej. Co by było gdyby ID różną długość? Możemy się przed tym zabezpieczyć wykorzystując wyrażenia regularne, które potrafią więcej niż tylko usuwać znaki ze stringa.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
for (i = 0; i < instructions.length; i++) { | |
var instruction = instructions[i]; | |
encrypted.push(instruction.match(/^[a-z]+/)[0]); | |
id.push(parseInt(instruction.match(/\d+/)[0])); | |
checksum.push(instruction.match(/\[([a-z]{5})\]/)[1]) | |
} |
Na początek tworzę sobie zmienną instruction
, do której przypisuję wartość z instructions[i]
– lepiej się czyta taki kod i zajmuje mniej miejsca 😉 Teraz za pomocą wyrażeń regularnych z funkcją match
wyciągam poszczególne części:
instruction.match(/^[a-z]+/)[0]
-> można to tłumaczyć jako „zacznij wyszukiwać od początku łańcucha (^), wyszukuj dopóki znajdujesz litery[a-z], tych liter będzie jedna lub więcej (+)”. Funkcja match zwraca w odpowiedzi tablicę, w pierwszym elemencie ([0]) jest to czego szukamy, czyli nasza zakodowana nazwa pokoju.- <
span class="pl-smi">instruction.match(/\d+/)[0]
-> „wyszukuj liczby (\d), będzie ich jedna lub więcej (+)” instruction.match(/\[([a-z]{5})\]/)[1]
-> „znajdź [, później będą litery, będzie ich 5, a potem znowu ]. Tutaj korzystamy z () w celu zaznaczenia, że te [] nie są brane pod uwagę w końcowym wyniku. Teraz pierwszym elementem wyniku będzie ciąg razem z nawiasami klamrowymi [abcde], a dopiero drugim elementem będzie nasza szukana grupka abcde.
Do zabawy wyrażeniami regularnymi polecam różne kompilatory online np. http://refiddle.com/. Można tam na żywo dopasowywać różne wyrażenia i sprawdzać co się dopasuje w każdym wypadku.
Teraz wezmę na warsztat kolejny kawałek kodu:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var x = encrypted[i].split(""); | |
var y = x.sort(); // tu będzie ["a", "a", "c", "c", "e", "e", "e", "f", "j", "l", "m", "n", "o", "p", "p", "p", "p", "t", "u", "w", "x", "y", "y", "y", "z"] | |
var a = y.byCount(); // tu uporządkowane wg częstotliwości ["p", "e", "y", "a", "c", "l", "m", "n", "z", "f", "t", "u", "w", "x", "j", "o"] | |
var b = a.slice(0, 5); | |
var c = b.toString(); | |
var re = /,/gi; | |
var d = c.replace(re, ""); //dostaniemy 5 najczęściej występujących liter | |
finall.push(d) |
Ten kod bierze zakodowany ciąg znaków, zamienia go na tablicę – elementem tablicy jest pojedyncza litera. Później sortujemy tablicę alfabetycznie. Metoda byCount
zlicza wystąpienia poszczególnych liter i zwraca tablicę, w której litery są posortowane po ilości wystąpień. Slice (0,5)
bierze 5 pierwszych elementów z tablicy. Metoda toString
łączy nam elementy w stringa rozdzielając każdy element za pomocą przecinka. Tworzymy wyrażenie regularne wyszukujące wszystkie przecinki i usuwamy je ze stringa. Wynik odkładamy do tablicy finall
.
Zacznijmy poprawiać kod od końca. Jeśli zamiast metody toString
na tablicy użyjemy join('')
dostaniemy od razu litery w oczekiwanej formie – bez ’,’ pomiędzy literami.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var x = encrypted[i].split(""); | |
var y = x.sort(); // tu będzie ["a", "a", "c", "c", "e", "e", "e", "f", "j", "l", "m", "n", "o", "p", "p", "p", "p", "t", "u", "w", "x", "y", "y", "y", "z"] | |
var a = y.byCount(); // tu uporządkowane wg częstotliwości ["p", "e", "y", "a", "c", "l", "m", "n", "z", "f", "t", "u", "w", "x", "j", "o"] | |
var b = a.slice(0, 5); | |
var c = b.join(''); | |
finall.push(c) |
Jako że na samym początku poprawiony został błąd z sortowaniem, to tutaj już to sortowanie nam się nie przyda i może zostać usunięte 🙂
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var x = encrypted[i].split(""); | |
var a = x.byCount(); // tu uporządkowane wg częstotliwości ["p", "e", "y", "a", "c", "l", "m", "n", "z", "f", "t", "u", "w", "x", "j", "o"] | |
var b = a.slice(0, 5); | |
var c = b.join(''); | |
finall.push(c) |
Na razie zostawię to tak jak jest i przejdę do metody byCount();
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Array.prototype.byCount = function () { | |
var itm, a = [], L = this.length, o = {}; | |
for (var i = 0; i < L; i++) { | |
itm = this[i]; | |
if (!itm) continue; | |
if (o[itm] == undefined) o[itm] = 1; | |
else ++o[itm]; | |
} | |
for (var p in o) a[a.length] = p; | |
return a.sort(function (a, b) { | |
if (o[b] !== o[a]) { | |
return o[b] – o[a]; | |
} | |
return a.charCodeAt(0) – b.charCodeAt(0); | |
}); | |
}; |
Na pierwszy rzut oka – dzieje się tutaj dużo.
- deklarujemy i initializujemy różne zmienne
- tworzymy słownik (dictionary) zawierający pary klucz-wartość, gdzie kluczem jest litera, a liczba wystąpień to wartość
- wyciągamy litery ze słownika
- sortujemy tablicę w zależności od częstotliwości występowania danej litery + alfabetycznie jeśli występują tak samo często.
Step-by-step. Deklaracja zmiennej powinna być przypisana jak najbliżej miejsca jej pierwszego użycia.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Array.prototype.byCount = function () { | |
var L = this.length, o = {}; | |
for (var i = 0; i < L; i++) { | |
var itm = this[i]; | |
if (!itm) { | |
continue | |
} | |
if (o[itm] === undefined) { | |
o[itm] = 1 | |
} else { | |
++o[itm] | |
} | |
} | |
var a = []; | |
for (var p in o) { | |
a[a.length] = p; | |
} | |
return a.sort(function (a, b) { | |
if (o[b] !== o[a]) { | |
return o[b] – o[a]; | |
} | |
return a.charCodeAt(0) – b.charCodeAt(0); | |
}); | |
}; |
Metoda troszkę się rozciągnęła, bo ja lubię mieć klamerki – lepiej wtedy widzę co się dzieje w kodzie 🙂
Punkt 3. wyciągamy litery ze słownika – linie 16:19, to nic innego jak wyciągnięcie kluczy ze słownika, które można by zamienić na Object.keys(o)
, od razu zmienna a może dostać bardziej adekwatną nazwę.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Array.prototype.byCount = function () { | |
var L = this.length, o = {}; | |
for (var i = 0; i < L; i++) { | |
var itm = this[i]; | |
if (!itm) { | |
continue | |
} | |
if (o[itm] === undefined) { | |
o[itm] = 1 | |
} else { | |
++o[itm] | |
} | |
} | |
var keys = Object.keys(o); | |
return keys.sort(function (a, b) { | |
if (o[b] !== o[a]) { | |
return o[b] – o[a]; | |
} | |
return a.charCodeAt(0) – b.charCodeAt(0); | |
}); | |
}; |
Jeszcze pozmieniam nazwy zmiennych żeby były bardziej czytelne co w nich siedzi i idziemy dalej:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Array.prototype.byCount = function () { | |
var array_length = this.length, dict = {}; | |
for (var i = 0; i < array_length; i++) { | |
var letter = this[i]; | |
if (!letter) { | |
continue | |
} | |
if (dict[letter] === undefined) { | |
dict[letter] = 1 | |
} else { | |
++dict[letter] | |
} | |
} | |
var keys = Object.keys(dict); | |
return keys.sort(function (a, b) { | |
if (dict[b] !== dict[a]) { | |
return dict[b] – dict[a]; | |
} | |
return a.charCodeAt(0) – b.charCodeAt(0); | |
}); | |
}; |
Wróćmy jeszcze na chwilkę do poprzedniego fragmentu:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var x = encrypted[i].split(""); | |
var a = x.byCount(); // tu uporządkowane wg częstotliwości ["p", "e", "y", "a", "c", "l", "m", "n", "z", "f", "t", "u", "w", "x", "j", "o"] | |
var b = a.slice(0, 5); | |
var c = b.join(''); | |
finall.push(c) |
zmienimy tu nazwy zmiennych i połączymy slice z join w jedną linijkę:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var letters_table = encrypted[i].split(""); | |
var sorted_letters_table = letters_table.byCount(); | |
var counted_checksum = sorted_letters_table.slice(0, 5).join(''); | |
finall.push(counted_checksum) |
Teraz możemy popatrzeć na kod całościowo. Możemy zauważyć, że wykonujemy 3 pętle po całości zbioru. Zbiór ma około 1000 elementów. Sprawdźmy, czy można by było to połączyć i zrobić wszystko podczas jednej pętli, bo tak naprawdę nie potrzebujemy przechowywać wszystkich pośrednich wyników parsowania i wyciągania nazw, sum kontrolnych i id. Potrzebujemy tylko sumy ID jeśli pokój jest prawidłowy. Innymi słowy, tylko sumId jest nam potrzebne poza pętlą 😉
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var sumId = 0; | |
for (var i = 0; i < instructions.length; i++) { | |
var instruction = instructions[i]; | |
var encrypted = instruction.match(/^[a-z]+/)[0]; | |
var id = parseInt(instruction.match(/\d+/)[0]); | |
var checksum = instruction.match(/\[([a-z]{5})\]/)[1]; | |
Array.prototype.byCount = function () { | |
var array_length = this.length, dict = {}; | |
for (var i = 0; i < array_length; i++) { | |
var letter = this[i]; | |
if (!letter) { | |
continue | |
} | |
if (dict[letter] === undefined) { | |
dict[letter] = 1 | |
} else { | |
++dict[letter] | |
} | |
} | |
var keys = Object.keys(dict); | |
return keys.sort(function (a, b) { | |
if (dict[b] !== dict[a]) { | |
return dict[b] – dict[a]; | |
} | |
return a.charCodeAt(0) – b.charCodeAt(0); | |
}); | |
}; | |
var letters_table = encrypted.split(""); | |
var sorted_letters_table = letters_table.byCount(); | |
var counted_checksum = sorted_letters_table.slice(0, 5).join(''); | |
if (checksum === counted_checksum) { | |
sumId += id | |
} | |
} | |
return sumId; |
Jeszcze wyjmę z tej funkcji funkcję byCount
na zewnątrz, bo w tym miejscu tylko mi to zaciemnia. Dodatkowo przeniosę dane do osobnego pliku, bo są one mi tutaj wcale nie potrzebne 🙂
Co jeszcze można tu zrobić – można poprawiać i poprawiać, jakby się człowiek uparł, to nigdy może nie skończyć. Ja bym zrobiła jeszcze tylko jedno – zamiast 3 wyrażeń regularnych użyję tylko jednego, połączonego:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var grouped_instruction = instructions[i].match(/([a-z]+)(\d+)\[([a-z]{5})\]/); | |
var encrypted = grouped_instruction[1]; | |
var id = parseInt(grouped_instruction[2]); | |
var checksum = grouped_instruction[3]; |
Zerowy element tablicy to dane wejściowe, a potem po kolei wszystkie dopasowane elementy z nawiasów okrągłych.
A gdzie był błąd? błąd był w danych wejściowych 😀