diff --git a/package.json b/package.json index f6d1cb5..8b407da 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,6 @@ }, "scripts": { - "start": "nodemon src/2022/day2/index.ts" + "start": "nodemon src/2022/day3/index.ts" } } diff --git a/src/2022/day2/index.ts b/src/2022/day2/index.ts index 800750f..c5ec9c9 100644 --- a/src/2022/day2/index.ts +++ b/src/2022/day2/index.ts @@ -29,25 +29,45 @@ const day1 = input.split("\n").map(roll).reduce(sum); console.log("Day1:", day1); +const getWin = (opp) => { + if(opp === "A") return "Y"; + else if(opp === "B") return "Z"; + else if(opp === "C") return "X"; +} +const getDraw = (opp) => { + //console.log(" Draw", opp) + if(opp === "A") return "X"; + //console.log(" fuckmeee") + if(opp === "B") return "Y"; + else if(opp === "C") return "Z"; + +} +const getLose = (opp) => { + // console.log(" verlies dan", opp) + if(opp === "A") return "Z"; + if(opp === "B") return "X"; + if(opp === "C") return "Y"; +} + + +// X lose, Y draw, Z win const roll2 = (line) => { - const [opp, me] = line.split(" "); + const [opp, res] = line.split(" "); +//console.log(opp, res) + let me, points = 0; + if(res === "Z"){ me = getWin(opp); points = 6;} + else if(res === "Y"){ me = getDraw(opp); points = 3;} + else if(res === "X"){ me = getLose(opp); points = 0;} + + // console.log(me, points); + + if(me === "X") points = points + 1; + if(me === "Y") points = points + 2; + if(me === "Z") points = points + 3; + // console.log(points) + return points; - if(opp === "A"){ - if(me === "X") return 3 + 1; - if(me === "Y") return 6 + 2; - if(me === "Z") return 0 + 3; - } - if(opp === "B"){ - if(me === "X") return 0 + 1; - if(me === "Y") return 3 + 2; - if(me === "Z") return 6 + 3; - } - if(opp === "C"){ - if(me === "X") return 6 + 1; - if(me === "Y") return 0 + 2; - if(me === "Z") return 3 + 3; - } } const day2 = input.split("\n").map(roll2).reduce(sum); diff --git a/src/2022/day3/example.txt b/src/2022/day3/example.txt new file mode 100644 index 0000000..9919ffa --- /dev/null +++ b/src/2022/day3/example.txt @@ -0,0 +1,6 @@ +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw \ No newline at end of file diff --git a/src/2022/day3/index.ts b/src/2022/day3/index.ts new file mode 100644 index 0000000..608e8be --- /dev/null +++ b/src/2022/day3/index.ts @@ -0,0 +1,20 @@ +import path from 'path'; +import { readFile, sum } from "../../utils"; + +let input = readFile(path.resolve(__dirname, 'input.txt')); + +const day1 = input.split("\n").map(line => { + const first = line.substring(0, line.length / 2).split('') + const second = line.substring(line.length / 2).split('') + + const both = first.filter(ch => second.includes(ch))[0]; + const ascii = both.charCodeAt(0); + return ascii > 96 ? ascii - 96 : (ascii - 64 + 26); +}).reduce(sum); + +console.log(" Day1:", day1) + + +const day2 = input; + +console.log("Day2:", day2); \ No newline at end of file diff --git a/src/2022/day3/input.txt b/src/2022/day3/input.txt new file mode 100644 index 0000000..c5edf4a --- /dev/null +++ b/src/2022/day3/input.txt @@ -0,0 +1,300 @@ +DsPhSBQQQhqmBDhPDsFwjwsLjlRjlttvjvvtRb +rNJMNNbrHrtjHLHjvwtg +fNbNzZdrZnMnMPnQShFPDmnqFm +QWVCFfQffgQCVZzVVpHsHJBqtpspJFRHqq +mwDbmnnGNlNcwNDDNRbnNDlJTpBJBtJGtPTLsBGqTqqsqp +MlSdnScRnnmmDjSdNSdCzvggWzrgzjvfvrgVzW +gsMljbrjlZlWcWMJrWwTwbmwQbmmLDQQLhwL +CdgpzdgpgnfThHfFRwhfRf +SptgpSpnCNpVSGNPvPGSddcMWjMrjqBsJcWqMcBWcVlZ +JcJLQQFWhQJPJpWcwjHvMQvnnlMvzBHd +tCtGZrmVRmVGTVTtCfRTCHHNNvdNzmdMvMlNzvwdvw +CTGGRftfSGtGTGDLbFchSgSWWWcM +QcMFQrvrQbvtczbVbjbMzZzRpqmDDmqqnNzCDCDC +SHHfPJssGLPSdHThLhHdRmqNmNssnNmNCNnpjmsn +LhLJfTdLJwfgPTdfGccrtjcMrccwvcrrFr +jFLLLqDGjbtqLCChpMMhMBvpwMTmffpZ +ZnJHRncHHgnrsrZffTdMdMBfmMvfvR +NWWPnZrVHrZPCDDQtzDCPLCq +jpFjvBZhDFHZdwcmslcslBLLNl +dVtTVVCzzfrrMPNLLcnVcPLRns +CrzWzTqdWtGCzJtbJCrMjjDFHZQjZSpvFGFgHhHp +JjJqMctnhtDZDQtf +TrFFlrrCCHPwHwlPHFPzDhsffQQDsVfWwVJQJB +HHHGdFlHldTpCCFFlLHdCRJccMnqvqMgnNjjMjjvLMLcSv +cMfFcMFcrqgJLFZdrTDdthPGsGmtGs +WwjNwnjjBQzVVQHwRDnmtPGhPPsPnnTGld +bWHBjWVzpbRzbmScqgZMFcqf +RJjPTBJhTNNjfPhRBdqtlgdbGldwtCPgdb +ZmrHHmzpvSvvpzvmvDVCGlWVwCWtGtWCddggqf +QQpzFrHHQnzHvfTcNshcLRNFJhcR +QrPQDrppBQmCmFQm +TzqzsLfmsfSTfqzVLftNdJJNJGCwwGdgCwSGNC +TVHTfzWsfftsZstnbvrbWbrbppPbrmmP +BQrfqrLtJnttqqtQBJDDtBnDzRgldhVVpJlgzpzhpzsgslhV +TTNcPZCvZjmPFZjvPHLlWdNLghVhzzlllpVd +jcFPbTcZTFcmcjMjjFjbLwbnDBtfqbtBwfwSBnrbGw +SZJNJtrNzjjNCzlBBmqmQDBBmDBBjB +PGPbGwhLsnvwnVbGPVMZsDsTBBgcZgBBDBfDBf +pnnhhvphGVpvRPnJlSFRNNJHZHSdSR +hbmDDmwnnVGbhmjNrrWwLNLsWBrw +dMrgvcQqdjlBLlfW +HzzPSrcHqFHQgzpPcMpQqrtmbbbRhHHVGnZDnVHhVbVZ +RwtvdPRvSlTQmHHBQBRL +FjVSjrsFVnFQnTHmnT +VCVVMrWWjVGgbcNVGCCVdlvfdqfvwbSzwqfwZzwv +fmPDwJPDFRmRgPdwwwDNwgwPzhSQzVSzVTQdzHZzHhzQMQzQ +sWtGCWtpcqqpNnQjjzhVTTVQczhj +tWBGntsCNlqrWswDRfFrbFrPDbPf +dmzmjcbQjjQztFNqsqBcMJqNPF +nlTWnClWwQDTVnTrsMsCRBPZRJRJqRJq +wTrhwpVVvgvlDpTvVWVDdLfzgbLtbzSQLSzzjzLz +RWZdHvRdBRGbbvCjJnbn +pqqpSwzpSSbCwPwjlwjl +gDzzqSVzqrThpDBtRtCZdQRQLrQQ +GRqTGqtmTVdGHHVVNNlhPlMqbNqNDbqW +LzQSdFnfznfwBcLcnFppBBDDMPMPhDbhlwbWPlbWMjrD +QznFnLZFvVvHRgsddG +BBHBfBHFdSltmWJvqtNtHq +TQDrrVMzVDnWnNZDJc +gWzprTCrCMQzGGjjhwFwdffjfl +LLLSSSzBBlBLsszncCBZSPSMMMpdWTdrmmnfVGVmMfmrmm +DghttvwhHRvjJthNJwhVtDHGpddMWdMmrMmfGdppjWTfpq +gbJRthQDDRvwtDhQhDFPcVcbPczLzPBScBBF +sZsZpTtLCsbspZtTwrCwrwtDmNNdJmmqSJfqmfNGNmHqGdqb +nQvjTcjQglFVlllMFMVFqWfNqnNHHHdfSfHqfSJq +hFvvgFcFVzphpTrrwZDp +qJqfhsBpfSpchpqcrqwCDvvCDQndmpwDtnRQ +jWHPZWWjZsCmCWRDmQ +PPzMGHlzMNsPLPlZsllgsNrhNVBqhFVBbBSqFFBFrV +RnRsFFdSzmgwvQsqwc +lbgHGMBHlWWWlfWGGBtGwqDpDwmcpMrrqrQDZrMZ +GGJLBVJbVGjGtHVfJtWGHBLLPdzdCghnRnRnSShgNnhnddhj +VgzLFjjwhhSwFhVZgRhRgHHCCvdZdrqqCTvBCrqvvr +ncnNbGMcPpvHFrssdBHM +cnctcNNbQGWFJctftgVmzShzzwwVwgmwfR +pFWmSSFGQlvTbwWTwH +jdBgNhRgMftNBhPbhHnZHlTTZcwZ +lfBNRjCtCfMjsBfCjgfNBRMppGpJqsJQGrrmmJDpGmDDFG +GznngnhzccVdgjbbVjVjVbVLwwQJmQMrLTZhJmZLQTJWmm +pDBSslPCFPCpvCqvpPBQTlQLrdlJWrLJLmrlrr +psSsBptpCBdjtcjNVcGG +sssppsmchwspFLtvHhQJMtFb +rRLDqRVLNSMvFSSV +WDrLnzrDqzRqRzzfLgRnzrnsssZZZsZBgCwwmBppwBspZc +MtPbwvzzVtzfsqGGVpdSjsLd +DnNRCDJBnHJDHDnrDTRcnNZpZSsSLqjpdqqqSMqdddTj +CFRFRFHgDRnRgMtfFvvwzwvwvzWv +PNpFPncvvchPpNjpFhvPhPLmBwMgDRRwRgMDhBmLzBDD +trHSrdTtslWrSWmfzgmMnfBzmn +JsrQsJHHlsVqTjjpbbNnQNNpGG +sVQCdsmGlnlCmnGmQQhGCJJNvNjpgqhqhvPgpgPqjpcpcW +DMSfSbHLHbSDBBzLNvccWRcddvPjNj +FSwHfTFdFsmJlnTTmV +FctwtTTCScvShFqtwScrcTSCJQGNndGHWJNQHWHZdgJrJgGN +jspLlfPlpfsDjBspfllWgdWHQggZHngHNGdsWJ +lRMpBlPmSFRTcvZv +TVZpRRVvFRVpTZRfFhFvvzGVwrwwwdDBMwQrgcDtMtDDwZrL +jsNsWqWjNQCNWbjPMcBLPgBtrdMwdrdL +SJSsmqlSNljbmlNjsbQVffzGRvzmmVhQpVGz +BFFMvcwMwwpFFfpbDMqPVgLVgmLDPR +JtSsSzJssQJJWjRZzgLnDgqLPZgzbg +dsdtWQWdRGjTRNQNQvGfHCCFpvfGwlCfCp +zzWGqWnqnwWCvCrHffHRpBpBBRSJzRFFDhSQFR +VPVsZMNTLsMvPsmBJhllFpFBTJFQpl +sZtsNsZtdZgjbwggjnbvqr +QpTvrphmDvvddfcJJHTTncMlMG +bRZZPRwjgzzlSSjGlnlSJS +BZzBzssWgwzzwNBsgsPBgszmQptqrrGdvdWmqdhhFQDpQF +FfMtzSqlDlzfMhPFhPtffNRsCgSgCCGspRpRGSsgsg +WTcWLTTVnWmrVdLrcHmNGNCZwCCggpgDRwpCnR +JcdWJHTJWdJdjJccrLvlFltFQQvPFDMjqqlP +NfjFNNZPDQVJVWpCbQpJ +lcmdzlmzBtRSTlTTcncsVSbhpLWpWgsWghgsVS +mBTRRmGccRtBwDbrGPbrMMrF +VVQqlsGrVsMWBNFNMQHF +TfzZfDgjgnLGjjztTncCFwwNmdvNcwwNBvHNFwvd +jzjDgZzjntGJZzCnhrrSlPVsJslpslPq +dVhpjGPdjHhqHgtHJJ +sFzrzllQswDwFbcmBlgvZTCgvqTCfgHQJtqT +nDbBsFzzrrtFrlwzPdSVMWMVVMSnGNLd +wqJCjqChmwMLmMmprNgG +DNTtdsdWcHdNspGQggnrgLnQpc +SZvFftdddDsDTtttTDJNCCwJJZzbbCjwwVPj +VstwZCwslBZQDBjfDDBDfS +rvHnmMRrTzmMrmhRppbhDfpjfbjbctjD +rPFLRLmFvvLvHvTCtqsVVwldGZGPGV +SNZDJGfvwgMgfgmLmLcmBqgWgQWr +hPnPTnVGsPRqLWpTmQqQ +tsbnFhhjhSdGJNCjSf +QSbGgBjfTCMWFNPFFtDghPrP +JqHqJVzZzwJJHLlqQptDhPrctpPDtnLF +zZmwJwdwdvHddVJvZqdzHlfGBbsCmMTsWCBCjsGGBbMQ +gVmLtpWrFTFBLtpcFNbvhNNnTnvnQRlQQv +GHjjqsMqwZZJdqGfZjfZGjQDDhvQNzznzRzRwDNbvgzv +sZGPgssMqHZpPptmCcpCrP +CZCNNLmwzwCGMZQMQsFNWplvpsJBWpFHBp +SPbSbDRRbnDqggnbVbVrbRWHJFTlBBcTvWvsPvFpHTcl +tVgSvqVbnqDdgQzMQMGMmzthCw +mpbPQlblbwSlfSPGBpBGPpBFgMMtLFSHMLVVDVdtHLNctF +WnhZsrJhTnWrgZdZgHNLcLtt +hjCsCWRhjzhTjnWnQBbmPQQPLBGfqjwQ +BFrzdtmRmpFtFwwmjjzNQllPshqHvjNh +fWCLLCMJnCDbgfMJhPsPHvqvqVsssQ +WbLnCZnvprpmZrGd +gjMzTGBjWFBCCSSrBC +bddJJndbdJfwPPthrrSSSsFSSg +NJHbZbbvvWGgjWgT +dpfphMggHdQcwftMMgdtzWGfGWnDBnmvnVJVvfmn +CqPFTZPSNCTsZZZRLzGmcGVzDLGvLWBWJm +TCrTNSScPlplpHrQrQ +lqrCvhWFvMGWgfHPgLfjfdgG +zjmbjSnzRzVVRmzBRtwjVQnNLfdPgfLdfTtNLPHTNNpppf +mbSZRzQRBnnzbQJbmjmSbmVhlslZMrclWFrrqWCWsFhchF +mpfNshshflNthWfJCBBdmnQbQBZQdn +VFVRccgGTqTrHTbWBFjJBCFFJCCQ +PvTDHqHqPPGVqqhwfNlWlDhMltlh +HmLLgWVjJwhwWLgjjhmVHLLLlSzBlBlSvBvBFGvtdStJSSvq +TRRrPMsfQTbRRCZRnTMRZZTCcvSccqBqBBlzdFvBqFsGBcts +bRNPbRCZMCrQNfPLdhVpLDVgDhNHWV +sPJFDsSsVLgHjLHPbj +vCnRQhhRQdVQZlZdbHNMlqNNjgjbpbBL +ChhCCCWTWnnmvmGtztStzScwrcVcFW +NRBTNDBglSSgDwCClQQSFFHdLLsFbPFFLt +McpmWccMWHZPcLstbt +MWnWphVMvvzJzpWJWmVphjrDDBBTRwRDDDRRCnPDnqgg +hsnnhhLljLPTmZwvdZdZjmmz +RQNNDpNMSZwvsmqstN +QFMFRDVDsHSpRpHSMRHfGGGTLhCChBGhBhBFBJ +TTbltCvClzvzCZtwtwLTtQQQgjNgmjgQRRRQSjQLjR +HPpnZHcJsdnnfsdVHHSSqghhmqBSSqSmBfNj +VMJJdnMPrMGVrzvCZwZWCzCt +CcQnBBCfBvRzDlsS +PdbPPCbhGGpDSDlDDhvDJl +HmHWPWdbHnCwCHCr +JHlmJcMWHQcPmlmJMmMZPfwTTRDfgdDBfRtgQgdfBw +zVvFrqGjzWGVrqvjvNFpspvVBgNNddtTgghhRTwgdDwwwBfT +bVFrrvsvjWGVsCsqpSHZmMPJlJnCcLcPZZ +QrrQZFZnRtnFRTrnlFTtRZwpGGwzGszhjzbsGzzhmjjhhmhf +SgvpDSJSgPBSDPDNgpggmsMhMmffsMmzfJmzHHMj +WNVcCPgSSDCddSdWCpNBclCQQFRQQlnTLFLRZQnLtt +tgvqWqzvntdlzNzzHrbPrMhHMhhrVrjPmC +FGTGGRGTffcJRpQcJJwmjhPLhjnCQPrLPVQrMr +SppRSDRwFnJJwwswTDdtzBzqWWzZDldNgtvl +sjzPjLphMSrlppSp +fbGqgwTqgVTFFcgGTTGcQvfHQZRlSrSlSmMNMBRNNNrZmm +MVcFGTFtqjsJLjjtCd +jVJqTRHjjtDjZnVJVVjnNdwfCFPZmPgCCgCZGCFFrrFg +LSLBMBWsbBBCgfdrFd +ShbbzdzQRNNNVhDN +JwbSRqmSwRwcpmbSSVfhNBTVGGRnNNzRNh +ZPfQPjZZrffQZszhzTnVGBvntsNz +rLjggjQgQgFdPQjLFQZgwLMbWccLSwWHqHfSqpwc +cBhzNpztzHNrpHSHQrhZjZqdJRRgPqjhjqqP +bQwsMTswwVjdZMVRJM +vGWCTDCTQvvtlvQQ +mHVmTTsmzRmRHffmmfMGBzSPMhSWWdDWDSGB +VNcnNbtqqJbcbvgvWhShDBDPhjgPhSjB +FrrbCnqJcbCJcFFbnqJlppCTfQmfmZQTLVswRLZp +rWWppSStfRBLfHPdHHDzlldZ +QrTnQmmVCqvrvJvzJZPHvzHsDs +qgMMmrTTCcnQQmCNQNQmgTpwRWRtwtpcBWwjSRSSpttW +SzWQwwqVbQzwGSfVwffVwbqhFGFFMgGLGMlNMcnNgcvlMg +ddZHHsrCdBssDsHmChFLNNnMvmNnnnFncL +rpJJdHZJdZHQSRJbSfVhww +jLtFhNwNNvHnjFVvQLQLHhfbGDMPfffpllpttZMPPZZb +VmrqszVmgCWWggbPGclPlZbcZCbf +JdrTmVTVsqsRJHvQnnhwhBLH +vpdBvsvdVvSPhvQFCgrRmhjqqRgWcWWgmf +tJDGbZHbjRHNrrBj +DnMnzGJJwtzVSzzBzTBSTF +hZMDbQhMhlMDJrDrPMJRRqGJSvFvSwFSVdvGvwSFqq +HjjzcRTnpGVSGGFWHH +pssmjctLzpsRRnhlQbPfPrgDbZls +FJMhPhnTMGmBFdnmlrfqfCcwlwCwCv +pjHLsLbjjRHsHsjDjVsgDRjzCnfCfzqrqvwgflcvcvvgqz +njtpHZnLLQGhTtTWSSSh +NMddMTDrrjNnrnMWMrlnPwNwftBtGvptGjBHgBgpfCCSfgvf +mqRqLFZRVFbtgBSCbGWWHp +LZZRmQhVLLFzZdTQPndPNTTnQW +CprQrcpqhHhpppchpphdcdpLMRMGsVGGsMsLbZbtbfMRmtbG +DzlgTjwPTlSSSCDSlggNmMRtbsstsMfbwtVssMmt +TNCNSBNJJTNPJjCTBDzjlJrvvcQrrhphWBqHhHdqrnrr +ScbcbglMPRSmvclTlzMTdhVHhhjfdsdhrVDzfjrD +LJGtpQwpQBBCttJLGqtqGHhPfDdHwjjhrVrhdrdshr +WCpZQCGqtqQWtQWplZPcvMmgmvPccbvT +tGWqthqGVdzBWwdd +BZvZHFFHZrHZvZNRRHHZNHrMMTzRMTdTzbgDVMVssTDTwg +JnNmrHHNrCGBPPnGGc +wvFvZBmppBdSLcvshcLrgl +bTQqJJHJzJjDQjQtzRVJztDHslgNNVLcgSrsSsWrSslWgrgL +TqHHjQnbHTbbmZBBcFMpmBwn +ZFCqSlCPdCRTLWWTQQLLQS +GjggHcvsggHVTVBLnlcpBQ +hvGhlrtjmjrHHhjsMPFNPdtqMPqqRfCf +cgRwVfVzrgqqwZctTztFMFMTCdPmmF +bWJsSJHpTDRDTWMC +sHHNbshnlJhJjBsjsbnBHbZcqrZZQwqvvZcrwwvRcZnr +ttgVBtMbttngmHJVpzlzZlppzw +cPcsRPmPPQfGcccRQSSZzzvzlflzZHvJppzJzT +sQPSCPPWccWWWqsQqRCQFNRMmnbnjjNbgDdBjhBrdbdDbd +gSsZDSgdQZgWSgddwLDLLfCDBqvlhBlClqtqjhvBhB +RMcsVMcsbVsrPrmJcPHHVvfjjCnvvfCqhlqvqqqq +NFMRRpHPgzszGppG +WmmZZNJCgCBZCzPvmBCmjWjjqFtFqjFjbVwqwjtt +ppDMpdMfSfSSNtlwqbqwwq +dTGDhdnfLMLhfDDpQvZNZgmrmrQJgrLQ +jrqRqfNNhrVvcTVdpTscpd +tGWBlLggWGddTspZZd +JJzWtQgQsDbBgDWsgbFrPrRJNMJMPqMNfHjH +GdvVbbWsWdvWGDvWZcbFBTBZCzCjwzrhPBJjzF +nQPfSHnglfpnMSngnMgJTprJCCwwrwCwpTpCFj +SQQHSttRqggmlVsNcvWdRvbWPN +WLNLCWLsSJgHFrSHrM +gDbzRTcmbzPPgPPdtBctfHfrMMQfGFJrhQnMfGJR +dmmzzqZdDqqTLLwjgZgNljws +TCqsDHssmDsDGVGlVcMccGDV +FLntWWnnFzFgzzbtbznLBtlfjGZmcfFGVNFGlVZcMNlN +PpbLLmpgbRzqpCHwChQqwh +lVBPVgflgBVVrVTTwgwBPmgflDQjnnGvqjGDDFjGlGnvqHHJ +ScCLzdCZdbLSbFdFqvDDdGMQGQ +bchNCLRWSbzCbNRzbWRmsrhQwVVwBhmQpPwpgV +GmfHCCPqWqHLWLCfRJpbrrbQphwZbZ +STVDQzNnzMzNdstMDzzNtZwFhrlwVJJrJlFFJRFwFR +DzSvzstnszMnjQcqggjPqQBcqq +BzNwLTqwTjrBrljWpBlrQpBpsCGGCtpssCMttDtHsttMDCHp +mnrJVmRhhvJVcHtsGHMCnZCPZM +bvSmVbRhbgmmSJflzNLrzqzfWfqBWr +qsZLqqFNhfrGnJFv +DVjVmWlcjVjdDTDlbbTDTzmrCnMmJGnHnmCHfJGfvnfM +lVRdDglTlTgVlVjbWWVzVjvNZqSBsLZNtqRsLBqLqQtL +ffRRfLVHZHfJHVJcMrMZZwwTzGBBzBTBjGTwrwdSCj +qmWbWQbqnbvWhbQPGnGNnpvwSzltpBldtSdzllptCSjTTt +vWsbnbWnNvQQQQvsRRLfJRRVGfDcfV +PpqrvswPvvvPsNqmDLDttCCcHHZVrCtW +hgSddBhghQMdbhbwhgSdQgCCctZcDtLntLttCVLtSLCc +dGzdQMFzQMdgGGlGJMzBgBwRqNNfmmTsvfRfJTpwjmpP +pcphpdrWDmTgHWMtRWqHRVVH +SbGcGGQnvNQGvsjBtVHBLjvqVPVB +lzbQCzbZllSzQslpCJpJJDggcggfDT +ffrTlhrVrfCsDVTsWzGBBZcBRBqRBWtGtZcq +QNFmFHrHNSSmSLJdJrNGZLbGjbcBjBGjqcbgjc +ddQvPnHddnQJHSHSFPdnFfDDTfDMMCrwMlPTwDCsrC +NBnrNHQHBscvhfBM +bbGtgWWWqZFmnZGZbmVCdMzvvShfzfGcdcfMSS +WqbjnmbnjWgmFFgtWVbWZwNTNLjNprNwQLDwrTrHQr +lwwlcjlzQRBcBccbdLCVnNVWJJzfLndd +pZDMtZpSDMZpMZMsPtHVNJVfRCRddVndnJLSJd +mDTZvTqtDDHttRPcqhQlwgGlghbqBh +DTspTqssqTbdmCMwVmnmlfCD +PLPWjjrSjvPzqZvjvRqjLtPwnnHCmWVcncMnnwmncHcHll +RFztFjjqjQFQTbdTbQ +hTFSVSdhMMVMFjjgbthcbzczcg +DvwCJVJWWJDRnfmbDmccfmmgfb +QrJvPGWWnpVMqdZsZpqM +gRLcHbgnfpgpJjlqqp +SFwrTHFBqlZtBPZq +HTzDwmSvCvCmsmmvTSwvFwcfRRNRLcQRWNssNNbRWLWL +PpMgDMDnsWSnjBQnrjbn +LFcVVGChCFdhdVFZVpVCdVbvQbRrbvBBbBjQSJZrrJrR +FNwGNCCFHcVTHcFdHHHTDzMzfsgzwpPWMmPflmtt \ No newline at end of file