diff --git a/2022/03/01.py b/2022/03/01.py new file mode 100755 index 0000000..2478097 --- /dev/null +++ b/2022/03/01.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 + +INPUT_FILE = 'input' + +def main(): + content = map(str.strip, open(INPUT_FILE, 'r').readlines()) + score = 0 + for line in content: + c1 = line[:len(line)//2] + c2 = line[len(line)//2:] + for char in c1: + if char in c2: + print(char) + if char.islower(): + score += ord(char) - 96 + else: + score += ord(char) - 38 + break + print(score) + +if __name__ == '__main__': + main() diff --git a/2022/03/02.py b/2022/03/02.py new file mode 100755 index 0000000..2ed9ec3 --- /dev/null +++ b/2022/03/02.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 + +INPUT_FILE = 'input' + +def grouper(n, iterable, fill=None): + args = [iter(iterable)] * n + #return izip_longest(fillvalue=fillvalue, *args) + return zip(*args) + +def main(): + content = map(str.strip, open(INPUT_FILE, 'r').readlines()) + score = 0 + gen = grouper(3, content) + for r1,r2,r3 in gen: + for char in r1: + if char in r2 and char in r3: + print(char) + if char.islower(): + score += ord(char) - 96 + else: + score += ord(char) - 38 + break + print(score) + +if __name__ == '__main__': + main() diff --git a/2022/03/input b/2022/03/input new file mode 100755 index 0000000..fec6c82 --- /dev/null +++ b/2022/03/input @@ -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