diff --git a/day03/input.txt b/day03/input.txt new file mode 100644 index 0000000..5f389f4 --- /dev/null +++ b/day03/input.txt @@ -0,0 +1,300 @@ +gfWpjRRQffQGCHHJsGqjsj +SclzJZZvmmnPbJtVSqqNBqVCBdSCsd +tlbvZJDZtmtPcJmlPnhMFQWWpMRFTfLDRRTWRp +HjMPgSWjVrjgbHRRSSMRgjRdpdbGdlcdCvQfcCdlwQJfdf +LNDnhtNtLNFFZDtFnhzvdldDflvvDCdlJfldpJ +ZFLFZZmFtFtTNTSPRrVPWWMpRP +qLBSBLRwmgzqCbzCffDlrfCV +TFFFHNWFMFFMpHpGHMTHGNhrldWZCsdZsslZlZfrflDVss +PTMcPGntTThHhTGctnMvSwjjvmmqLBmnjqqgCR +nClJtMwwntqVVPJcgZqq +mjpsDcrcSSFFPZqFBWWgVP +vQcjsvhrvvrmhbmNHMNnlHbNMtCtNM +bgvvhnTQtjrrrhsDDf +pLSMltLzLLSjFrSSjrSJHD +zNWRLBdZPllPQtCvttgCqb +DRlDrrFTNDNlgzsGTBfcnqhhcnJfcrCSqc +MMmmdWtdLmvtldHjMmQfPBqSJWnfCCCqcWSSPJ +vjHMjLmjpLtHptQLmHvwTRgNVVpTzZFZgZRlsVTN +rzpMpDCGFCFFjRFsRPFRNFPv +fWclbHCHtSmfvjnmfsvZ +wTcTlSwwtQtWclBQBLGMLMCLVzVLwJGqLd +MQSjLNjPPLLSBPjfQhSPHjDVCjDtVVpDHwbwVpbD +RcmWzsRrzZrmTszWRqWlmRJscbtHwCbndCtcDVddDpdnVnbt +JTsrGGTqmwTlWmTzJzWmhhPLLGgPFgBffSSPhFFM +qMMRNZMDDNWLPqfzCgDcGncVDCgG +wwBFhwhhBgmcVzhghG +tbJbjjtJvwtdtwjpFtlbvtdTLNSMqNqMMgqNHPlZRTNggL +qmjMHsZmZSbjbZMjSLFFFFwgsgvFswpwww +hRJBhmnhhvFFwhcv +llfWDWzrzBNTRfNBrWzzTmZbGTMjPqMmZPjVbSZGSP +CRRPLwwcclcGVppQ +SHFjDjjHDTfSDNTTHfSHjQVGrpmllQQWltVVVZGp +HFlqzDTfqlzwbgPJLwCP +WRCNLphpLppSCWVHNfLRzVnQMnBnMddPMQDFQgrhPQFM +jTjJqvqjvPVJFJFBJF +qTsZbvGqqZlstsmZVljtwqwSHHNWczHSSRcWNSRHzzNfbW +glgzDzHjSrVHcVgbrjmNsscNGmNWssGNNtst +hHPQLHJpwdLpdHfQQtnZmNMwnZGZWwsFZM +QpdhPJRTJfPphJfhCBlVqVvgvVDBbvVqDbHD +VtHzjZpjVtHrprgGmjHsGHNdSJFQRcLJqCdQcSqJNpcq +bBWfTPwhbfDlMnhffRwQJQNdqJcLFQLSdR +bhBhvfMWTnlDnTBfPSmvmjsjmmGtzHtsHm +pcRPRPWrSDcJGZSStmwZZS +VnLfCfTlfVzfnMMBCqVNZJdtjNtJjhJdGNNbwT +BLvqCCMVsnRQsPQgDcZH +cQbqqQhDGhlQfQlhQrqGsTNgLgCpRgLTPPPLNbpg +wtHVddVFwSHznZwwznCpRBdjppNBNTTdCjRR +ZtWFwWtSmvVnwZDrCMGfQlDDJQmD +PzPZGCZzrZrlhdjdCqfCsqQdRD +cbvZLVVFvbbNSNFHSDnsDQdnfqNQDRngsR +FJHSLSFSScJJbWHFmFVFSZmrrzBmhtBwmzBMPMPzPh +nlpFcLBgcVcLbssGVBGGrlpGPhJJJJJqPBZPDNMQMJJhJQZZ +SSTjHzfHwtZSPVQVQMRQ +TzVHwWfTtzwdVzsbFnGgsbdcGrLc +FppVBRVZDdLmrDGmmfrQ +NtNMPNshJCzznLGJSrqRrRrr +tRssthhPlCWhPzsWtzhzCbVVjwTpVwdZZTpwjbdBbwBc +TTWblHWScvPCCHTWFzSrqqsNNSmdmqrrpz +RLRwjjnjZNprzmmZcq +QQgtQnccQDGjgLDRRcLthQhFBvCbMtMHTWlBFllBbFCMTW +WnBVNvDnVsNvZWdrWDLVDMbsHpTjpHCSSClsbSCCMH +GPFtmztzgPhRFtJTdbTwjppSCjpgSl +hJcfPtQhdtWNVZqNnqNQ +GLcqZPPsnqQcFsmBBrqRvrddNqrC +MtHthJwLllwvjRvvtrvBRS +VHMfDLbpfznszZQG +WBSdPlQPRfBtGQPfBGPBJgzgjwsJzsszJwCrdwCT +ZpppVpMVpnVHMVVbZRJrCgwRzTJrwNJw +MvhmnpLqLmhVmBlftRQBFSlR +hhQlSJqhtCSnqZJnqShSlNDwRzpvdwRlMBMMdcjRjMpMRc +frrGmLmWbfFrsmFHmBzBvBcwdJbvpjzbMM +mmgFrVGLWJLFGsgfhSVtVPqntqnnSStN +SFJTJTSqswwFQbwf +cDtcWPclrtPwVsfssQmN +HDtwWCgWdggdzSGJMSzGMq +JpqJtWRJMhCMJpMQCWtFrjgHdgdlgllwNjlQjldH +fBzPZcZvnBmDnZvZBZDmPvglVVVdgHHSwrNRgVgwNPRH +GbZnZccfvcsZmccsmnnZTRbCCMWFTWJqFCCMJFRT +vrrFqrFTBTmLmNrLMqMTHddJbHpWnhdWdWbHhJGM +wBzfwzcQSzWSSshpdWGp +gwjPPPDQtzQlzQDPqTgLBRmRqZBvqFNR +bWVptFFsbPcZsGLhsZGmLB +qnWrnrHdMCDCNqfWmvRRZSSRLdRGZGRG +nNqqNDfMrMWHDQNHzWfHNDnwzblpzFlbwtFbVVlwVcPJpP +BHJhlHdJQggvddglJBBhglhQzZHPZpFFPDMzFDDRDFZZDFZD +rSTfqnCffMfCVfCLNqbzbjWNDbbWDPFpPFbP +nfnnrSfCTVSwrqSLCGfTGlgQhlvsGMJQJBhhssJhGc +tBjjDjjqfDjLfJlrLgglvmrlmrcc +TwNNTVhwwpgvGSNNSssS +TbwhnvvChhbVRTPPRJBJQQfJttMQQJCQfW +mWSvSQVgmWQsQvspQJlrlLnJLLpCClhhlp +bFHRjZdNjjBZzFzhtnCllCcJLrCBll +HFFNHbdZZLZjfPFjHVQmWDDVsvsmTqVqDf +JJPllQQClqgBCgdHwHbpjVTwHd +tmGZtjGjHZpVbfMT +ShGjNGWmDSNcNRtGmshDRzzCvzQJJRBLrvlrBPJv +cTpqsTWqVVpsNLfvCDFlMFDVFL +JnndJPddQgzHlvMJFDhLCG +BjtntgdRnQgzjdBRQBlpNWrTTlNTSwNpWS +qHmqLVLjmVqsDBLtmjmbtPwCTwwPzGWRgGwGwMwW +ZhcCNCSprRTWTwSnWW +hflhZvvQhppZfcNpvrhpQHjVjLmbVmmVHVCFDvqVFb +nnNrwDnZrspwDNnZsNSDsNbCmpjvMTPQjLMmPmmQPGBTQP +FdVtRdRfctBQPmTtTLQB +qhzWVWJqVHwbhlLSsS +htWmhDhFztnztDhtBmBtghPRSrpfjVwPdfPwpwnRSVrr +cbCHvgJGcTqbqcbqqqcqsMsRVrSCwffdRPPpVpwCRSwfjj +GlgGQqTqbgQzttmBNNFz +NWQNQgdTgjQNddTZfrCQWRDnnnbqnLqnRcjJlqqvDj +FtSSmSmJhpllcclDvpln +JBVVSsSFBVBttShFGSPQfCGNdrMfZZTQTZNNdC +HgHthMhphcbfbMMfHhsGGDCRRVlcVSScsCRz +nWvPFqLqPNdjnNLnjdJnPdWjGlssDPSsllVCRzlTCTGlSDzS +RvddJRJQHwQwpZZb +gdZwgpjZZQtHTdrWrwdpWRnlhNBRlLbFthNhflhBnL +CVzDCPGMVqVmGsGGbJCmCDvMcRcqnBFFFnRBBNRBBNqhnFfF +DsmSGsGPzvMGJvdbgTSTbjbSSdgH +jBGmbNBQGdBNNDJNQRLLVDsHtDRzHHZZcH +wCWPFWPCrPhPrplvprhwpCHHtszttqZslRVHLtzVlJZL +vprMMvMnJCwnnPShNGSTfGSfNmmgdNff +bPtLbvVWWztbLSVVnbszpzQsrcDDBdpRcDrs +llZmgCZqgCFgmdRdJcscBdJsmQ +FZlgfqCFfgZHlqCMCglwCFGWntLLSMRSPGPVttWRtVGL +vtnDsDtrnrSvrMVmbrrJgPCmBm +FpQHzFclLVzWHhwHLQLlHLzPmMBQCJTdTmCTmBTJTTmgQg +pllcVWqlffZqZtZD +TSSZWpsQmZWcTZSvsTTTppNPzrBPrNBrzQNVFrBBNPqP +CgjmCbtGgftMmLtLmffzBzJJJNVVMNzNBqJrFN +gjgjLgtLwgbGjHdhhGdvmlnllnpWnplZvcvwTl +htLrRFRtbbhlGSLRtbJBJsjBmgMMgJgtmBzz +pZQWddQQfpZZffcDQZwddQwDMqDDsPgGJJzzjqzgJMBJgmms +QdcQTdwpGNwfrCRlRVlNLSbb +wrdvpVBVpMGPPjWjGZJJZT +tChCSlNfCCHtvHHWPHPZ +RbRRNvmcqcblfMwwdVBQQqqdpL +qcctqRcqmcHWzHBdDMZhfwthBnwt +JFsSNMSgNSNJJMGJBBdjhFDfhwhBrwnZ +TbgbsSgJMTJllblLCSPlsTCVQmRVVWpQzzqpqzVzHLQzcc +CVcWbjjSSCSSnpjWpCpprhHZlHtHGzHrZrHGclrl +gqZqdddLgmgNqvTGGHvvmrrGHT +FFDgZfZNLMgNfdDqDRnsnjBpbSbnMBBWpQpB +qwpQFwRnqFFfSBSfFt +LJJLGLWWtZlbgWHgGshhSdSVzmhHmfVzzC +lrbrbrNNJgDMLLbblGctvvvDqPcqctTTTcqP +vnblvbfHvlcHMlHlZbSPLTPLwCMBRRPRRFFR +tszzBqtzDsWVPRSmzLVmVL +tsNsDDNgGsqBrgBpgdHQbfhflcHdpZvdbh +cCpLtpGGLsgsppcpmGGHMtjfHRVhvvVVFRfhjV +NWnnnNNndQnQZdCdzzRVMHzvhhHWWWjj +CPJJrnSZpGDJLGTL +cnJzpcnmnQVFbzTlvTHBlb +tWCDPjfsDGfZhddhjjdTvFTgFgvbnFHvdHqT +hjfCjwDDGjPthsfhsnGNrJcQcRmJMLVJrJNMLw +CPPRrSlRccPcwTHwfdwTHdfl +mLQLLjhQhhQLZvpzssHDhdTswzzTJD +gmjbBvQLWmgbQZBCSRnnnSMVCBHnBS +sWrBJbsVqschzhQzHh +gtFmztnSlSfdlmnZSdSwcwGRTjcTcwwTcHccRg +FzFDzMZCdDZtCSrJVBMqWVrqNBqN +TvWlhhfhZJVgtSSl +ddBdGGdFmmBbdzqqPDDGGmdDZSgttHtZppSgzZHSgMhtMgtz +PGqdrbbbdPnrcjjhTRWLLc +trrmJWcrVwVbcPScdcBdGPHH +JTQnfjlJTpQFfMLlNJHHGDPdGsSdDjHGDPPH +ffFfnCTTCfTlplTMvNVzqWvwVzrrhwmWhJbW +hVtDtgcghzJpmmhlwp +srsnrqqsPqsBPvnqRBRMPbnwlplpmCStJwmzJPtJzJfwSw +bbrqjBbvGsjGGBWqMVFFVDNVNjZjgtgFgZ +mnmhBDHhwWCHsTgRsH +dcSlFvccMFMMFFggNsTzzvvzWnVW +llQdllZScFplJPpdcZSqBqjhmtnrwrDGnQGhrq +ZffVNgfTdmPVltsnnGwgQDnB +rMCFLMHpzCMFzHpzbrcHFLzBwsDsDDnlDBJrDDBBSJSnBn +MLMjMzqpCzvwqTmwZdvq +DDNlWPRqgPRPsRFjJQZbchJZbgQJ +zzrLLznpLbHnjcBHvVvHvJcZ +ndmrTzbMMTfzrTfnTLrzdpmsPPPqlqGDNNsPCRDRqRsD +zzdqTNfTfdfhgQhgqMFSjRDtDRWHqtWlwtqDRS +ssBCrcmpVGZvVRDdSDRwtmWdDb +rvGPCZLCVCPVBZFdnfThgNgLJNhf +bslcrssQwDPbQrrcsbsnQrjMLthPMMRhLRhLRgzmgPhRgM +DffvDfHGfNFdpfTdMtghLBThzVmBhBtM +SNvJNJdflDDbcDWJ +HFlHNpWsTlGWbFsGFTGHFLLNzPPhLVPMzVzMNPhhzP +jSvZtmrqqpcrCpPVzw +dddQvqDgDmjdSQQdqZjStpffWGgBRWTGfGsRlWBlHF +THnTbNrdBnLTHHnTnBrWRTndsccZsLZcDqmLDPcDlQDsmmsZ +ptwzzhpvGSVdqQlmszqmqPqc +wGVjSddCBggCHFWN +LFFbdbhhhvwvfTNdRhhRRvMbHDGjcfcGfDjtDHHcHqGjDqqj +WlQnVpWSSWWsPsgDqDzHDLHjJcttGP +rrWsZrgVnWrWSlmSlmSBFFbvTThhBFvvZLBhRw +BgBdcjThvjFcTggrqvVfzlnnPlrqLt +JpwJGPsQwpwSssHpPLlzlnNlzLLNNLVtsN +JPMmWGmWPmHbHpJbWGJmDmwbBTRZMBBdZCRTRjFjhCZCCBTT +BjbcLFRfBRhnbGjCVVvPllpcPtcDmdlPpvPP +WrMQqCNgsqWWsTNCMZMWWsWPvJDJDddvlpDtZDpDDDDwvP +qNMzzSzSQsGLbFCSCnVR +tTRpHJQpQBZcddhhMhvhJN +zswljflgMFbwPqmNmSdvShLNfLhm +qFbsMCVgsqMwRWHCWDDBDWpt +VSTCCWsJvGpHHCNC +GrqzZrrZjDljcDDlfjMqgRPfPvQPpBHNvHvBpvNQ +rljncDcznjMqhlhZDnltrzhTsGWtbVLFTTWGsbdWJdFTmL +mJPDSJJPZPJNrprSNrDmpZGrhFFhBqjGbGGVbFjhhfqBjBRV +cgnTQHdMQdTHdhqfggBhVqVfVS +nQdLLddssSJrmsNvZrPz +jfjffQzZQQMzZZfZZQFgjDWBCRlCBdTTBGGGRpBCgdhdBG +LrstWtNsbHLsprRBdlGpCwlh +HLnntbnscqLvvPNNfMWSSmDMDPjzjDzS +vhcGwWVvglltcfBn +BBSLrzSJLzJNJrLfPfPRsmDRmflD +jMjFZJNMqzrzZzFNFjNQqJzbCpBBvWdpvTCWhpVwdvHVCGbG +HlrnFmRmtRBQPVBTQHHQ +psSLJsLpTTdPdLTv +fCGgTgfSSCtRtFFzql +pfTpStppcDlWfbpDdzQRsQGJhfffQgJHzN +ZFZFZmBFwVwBVmLmLsRLRhHNzRLRNNzJ +FnnjwVPmnqqqjBjrTdblldCTpcPJtbTD +bdZHdWlrjslMMwGG +rDDTRBTqSqmJLBJRBTSJpmMsMMjhwvfMhjjfVGsLshhC +BqQFRPFRQBJgzrcZNHFdZt +wrDdLlDdPWZPTTrwlZpSsPsHVHsSCHnbzMHM +JtNFttNCjFvpppnMpJgSVS +NFFqFcCQCvfrZmGdZdmqrW +GMNNfJnNddJFJWsv +HSDwCmmghLmwmmHDpsvdFpMWpppptSbp +zCzBCgzhwmhzLrPnVrMqZBNfGf +DrHGtbltbCjjjffPrgsmzmcqsgDczdsmgJ +VZLwQLZLLVwLBQZnLVphhLQQqsTNmzJdcNTzzmJNqlNBsszz +wZLhVMplpQVRRlpVGPfjCjMGCrbHGWWb +BHpFrHHbBNTWWTWNhCPwPLNPjCdjLV +zJRRzJvZlcZsSMJdzSDjDtfDCtDtjDjjjj +dcJcszQJJGRJzRllMpGHpFTWmrTmBTbWWB +qnWWqhDhnjmjCMBlNRrfVfRNCB +vvBLBtGHJTHBddrNVJrVSVdr +BZLTHbgvHvTFBgTFFvhmWmmZDPmmZDsnqncs +WBvmjDbSzTMmHHdpNHNF +ttlflZRfGtfWVRltGtflCdHnJrNJHNHnJddNMNCnpF +VVwssWQQfRGZcszBQzDbjSBvSBDP +lSlQqQVqWWVWfqQWVJSTscdmPPwwTTmjjfpjPp +FCbzHbvHvtgrtFCvbvbbwdTwmsrwnTTpmdswmwcc +DtZbHdghztlLMQlWWhVQ +pqzzFSmdFqbQvlpdDGGrGBWPPBVNQnVttZ +cgcjwfBMhHCjjLMCrtcnPcsnsPGVnrVs +JgCChjjjBHhRRLLjjhplzvzpSFJvzzlDbSqm +mZzVQZMhmrffwfQhWhzmrmpBtRcdbnbcdcMpBbDbncdD +jsLTSlTWRBSDpnDn +GLTsGWGFsfmJGZVJZm +BGWshBGnsFWSLWBLlSSLWRJHnrVPrPcNHCNHctnPPJ +QmvQCqqMTZqvgmvTjpZCMgMtrVctPptHtrNVrptbJJbrRP +CzjCZfCwDzShDWdF +HmQlQHmJnpmptmzt +MTqMjMPvTvVvhpdztZnSwzwZqS +CcbLLPTMtCCsjHNHQFLRRFlRNN +GDFwLLLLSrbdPlFBMFsslFHmZH +TnJCgthHpVTfZMQZQmzWnZ +hjvtjtghtqJvVjhTgNhJTvdvdDDRbbccrwPdcGwrHS +MQQMBPzMGQBPBbDQPMhpnRwsGnRhNrFFpRnF +vmgHcmCTTlvvvZvTmqcTfmCRdddFnwdRdnVwFpVfpRnwNw +gvmqJTcHclCQJNzjMLWbLj +DbqqDDbQFqfNtZSLSq +RrdjPdmrpWBdmWRdccfLtNttSDMZBfftLMLf +dCcgmgRrWcgcppjCVVVVFHFnDnbJnb +fZMFfrtVdZSDVwTgjRMLhwTCLj +cNzPBNpclllzHbmTNRhqCRTgjC +nhhWJzhGPlQcGvsvfJtSfZfrtt +PSzrBWQBBGzBlnSnWtDrqHfNfwVwHcLNjHjwcDNmFH +hbRhtRCRpRvsRgVVVcNHNNNCwLwc +ZtRTRvttWWzBPlGZ +tcLnctNsJrWWNDTN +pwPPSjHSHHfzvmSvvvFVVGqGVqGmFqrDWgDr +pPSvfPQMzCQCSbhllLnQDhbtQZ +DmLffDhpVhjjVwvbwNVFbbNSNH +JRPBgMPRHBrMHMHqrBMqWJBSQQNbCvndNrdvCNCFwFrQnv +WcqJcPGMGtWRRBtgZjjspGHTLHGHTppm +ptJtWJpqRwDZZDVWpbDWqlvvflfMjlfCMjdCCdtslv +rLwTBGBzBBQTzmwCCjvdvlLllddsMl +NBwTmrGNgrTrcgPpWgWPDSVVPW +CdglMnrlSSqDPpcsZb +ccwmVJtvVvVtNhBpBFPDVpqbbD +TRGQjJjGTmtrTCgHWLfrcn +JNNhLwWwWQHNPDmmjHpc +zMqZCvVCSMVqMSTVvZVGsBnlslpmsmzlPmsHPsPB +qTVqrgdCCbhfHJQFtg +wNwCBBCZsfQWfmLCGSmmFRGSSF +zjnPHPVqMhhZLTcbpbSncp +lVlhlgzlPZlwtgBddJdfvf +JWRWRRLWJLnjtjnLzGzznflBvfPvPMqMDqdbzblCzC +TTScTVbHmTsVFrmcsgcHFlPMMvlvrDPdlrDDqdldvl +bVpcpchgsFZHbhSmSTsHFFjwtZjnjLttntNjLjNLWtjw +rffjPJzWzrgPpGWHVNqTtmqFTVRH +cswhvlLBvSLsCtbFccmqVFNTbb +wwZSCZSnCLsSDGgDmpGnfmmr +rTfJTNtjfNljlrWSlzRtNlTqsddwGnsnHHwwhssTsnqw +VpbpZZbvPLbZbbBhwqMHhsGMnJdVwV +mgQZJDLBJbbbcbgZClCSfWlrCjRjlDCR +fSpwcVfzsztcSSWNNMbnMRqTvtTv +mJFmGDDDhGhBJHCQddllqTvCllqTRRWNnMbT +FdFDGdDDDhhHdZDjhDmpwSPVZszpwZsVgsPRZs diff --git a/day03/part1.min.py b/day03/part1.min.py new file mode 100644 index 0000000..0b93b47 --- /dev/null +++ b/day03/part1.min.py @@ -0,0 +1,4 @@ +#!/usr/bin/env python3 + +print(sum(map(lambda o:o-96if o>96else o-38,(ord(set(l[:len(l)//2]).intersection(set(l[len(l)//2:])).pop())for l in open("input.txt"))))) + diff --git a/day03/part1.py b/day03/part1.py new file mode 100644 index 0000000..3817cf5 --- /dev/null +++ b/day03/part1.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 + +lines = (x.strip() for x in open("input.txt")) +s = 0 + +for line in lines: + a = set(line[:len(line)//2]) + b = set(line[len(line)//2:]) + i = a.intersection(b) + o = ord(i.pop()) + s += o-0x60 if o > 0x60 else o-38 + +print(s) diff --git a/day03/part2.py b/day03/part2.py new file mode 100644 index 0000000..f3b40a0 --- /dev/null +++ b/day03/part2.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python3 +from itertools import chain, islice + +lines = (x.strip() for x in open("input.txt")) +s = 0 + +for line1, line2, line3 in (chain([first], islice(lines, 2)) for first in lines): + i = set(line1).intersection(line2).intersection(line3) + o = ord(i.pop()) + s += o - 0x60 if o > 0x60 else o - 38 + +print(s)