diff --git a/2022/03/README.md b/2022/03/README.md new file mode 100644 index 0000000..09e92a6 --- /dev/null +++ b/2022/03/README.md @@ -0,0 +1,11 @@ +# 03 + +The first part is easily done by using the ascii number of the characters and 2 offsets. The second part I first though we need to find the groups on our own, but (RTFM...) it's just every 3 lines, so it's just a matter of using pythons `set`. + +
+ Solutions +
    +
  1. 7746
  2. +
  3. 2604
  4. +
+
diff --git a/2022/03/input.txt b/2022/03/input.txt new file mode 100644 index 0000000..8f46366 --- /dev/null +++ b/2022/03/input.txt @@ -0,0 +1,301 @@ +RCMRQjLLWGTjnlnZwwnZJRZH +qnvfhpSbvSppNddNdSqbbmmdPrwttJVrVPDVrJtHtwPZhrPJ +BFpFzSSqSFFSvQsnWgCMjTLzng +DbWVcVRRdlLffvtqjTWNgQ +mJJMpsmrMrJSHJpsHrFHvBvgHvqfNvzffgTvfj +mMhPjmjmFPJhMSGGcDRlwRdcLGPc +qFcbmWFJqqWpRJcQWpqsQQQwSPCPrHRHCPdNZtSrSHwrNZ +jGMjGLhhhgTvghgtGVjnNCrPVwZSZffSNSwHZZdH +DvzDlvvhnjlMlglglGGhDLpqqcJWWtsmszpWbBBBmQmb +SPLPHQbJSbPsvTLmfDvVDctvWhcDlD +jdRRzzGgJqwrpMRMgdjlcVcWqfWWlfDlmmlWhB +rwgRGdpGprNNLQLsbZJPsn +GZhTVLztHrSzrRBz +MJWjMvsfSCLSnrJn +MjglcgWMdccvZGFtTDchLLLh +rgDHBgBjRgRTgwzwthBnQwmBtB +MsMpSfMsTGTFFLdFFFMFsnNmthNnzhthtwmWnznz +pZMpJdvJMGRHVJJTVHjb +TQVqZVBcBBdBfbpN +zvzrtCshrntCHslPMMMFpZHbNSpb +hLWhGLttsvLvrrWvhzVmQgwJZTRcggTjGcgT +SqRGLHtSbtNTbhjFTjDDpF +WwgJgmdmMdwPDVQQBBhSBFwV +JMPlmlSldWZmRqtLsRGRtvls +mZvmvPNmlNJPJzzmgNvNgdqqdBSpfHBqSsHqHfwpsffq +nhDQDrwLrVVnqfGnsBGBGGsH +VjCDMhbDjLjtFhtLhLhQjNZcZPwWWcczmvglgJJN +wwqnwZGGZqqMpMprpZqwGlLDtNDffdBdNVBmNGBN +TSTchTFbRLfLmVhNDm +SCLRvJQvRFTSRjqMqPZrZnrzZzjp +cJfqGjgGJcsgsPnghgBm +FHHbQQHLWLbPQThqQQRnZs +lLLMSCvrlFMwlSlFcNwqDVVpJcfjzVDf +cRdRDhsDFzPztwJdGP +CVqpCqCgSNfCSQBpjtBwtlBBHLlmGjGG +qfQfCVQfgQnVNpQCMqfcrFrwWDhrDnsvcRDsbc +nFWWzqWZQSqnJzNJzslJVsdV +vBBvsLvbBmBmRlGTNJJvRRTD +tBbpmmPwCmHpMHHMrPCCcSnZSgcFcZgWFscSfgth +LLssTJrqrpvrvvpJvdjggMlgzVgVggPlFPqz +HwZwCZfHNtbMzjgVnFPC +RSttfRwZDtBcZwQMQdrQsdTBQQmW +lJnNhMJqljlNhSrdWlGGGQHwwH +vbTpbCsTFCTmbSmcRfVCfRpwcPdwWQQrdwHwBHrPdwrLLB +sVTmDfmCTVmJjgSzzntDtt +DQtMjZHZHvMbwwTSpqLtpJ +FzVFlsNdVczWPzWcslVfSLqLsqJpSwwsJswLrf +dNFFWcmzWFGLWcdcFgvZvvRHQvjMHDMBGD +MVPTmPvbMgrTmmmmMRMvPvBwFGhhDCdFFwLCLdJhDGFRhG +fqqWfpZWzWsDwhwdhwqGLD +ZWSSftStnnplcQLSbVMBvTbrMlbrBvvl +FSsHDmtFLbbFbLGg +vrvzTzWzzzvppzSzTMnfTggjVgbgjbLjgPPnbGbVGL +pdMwrBpfwfSMTTWdMTpBDCBtmsmltslcBDCshDHs +RgbmfGtmRVgLLSVSnSrWWSHhnh +ccTvlvNppsFnbFnhnWnPHJ +pqNjDBjNNjvpZfmtjbCLbCmb +qsSVpSVfWqgNrVtWptpmSfqbPQljbHPHlDnljRSlwSnwQn +dcGBrMFMdLTGGdlwDwMRHwwMbjHP +CFBvhFhTLFCGvFchChBdBTJtsNpWqfVgtszprmVWNqNgvV +sjsTgNSNqSjgMmVPmmmrpH +RftCcWddRCZfPtCfcQZdcZDcrBllBFpVHprHWlHHpHJJmlFp +thPZRtLcDRdDCTTsqbnwjhvNjq +TQPtgfgdPcdSQhjwHhHBLS +RrqCqVVbJmVRJmsrzmJpWljlSHLSBwSSRWllWv +CVrDNbHrJHVMCbrDJsdFdFcPFZngMfFdTPfP +NNlZgndqmGVGGVZNWQmWmbhbbhpbbhtCbhtgCpCtMF +THfLPTzwJTJrvHRwwsbFbhfbMCpphVtBbB +RjrvzHLzPDvLzPHrTJVrwPndZQNlDZGndZWDdNNcmlQq +tjDsjDGtTjVVbQVCggvrbg +qrWWRBllRFrdlSMCdbSJCP +cZcncRnhphpZWRNtrmsrGpHffmwH +qpRjdcqTcMbbMRTwtnplnwnhPzhBhw +FSFLvNrsPNrsGSLsrFSGfnwBQwZnZwhQQLwwQhnn +sWNVmVmCFNWGsCrrjRTmMjRjPRqgJqJg +sVCnzVpmFpVSnNFCmnmzwRFDWDdMllDccMdwDMjWjWlWjg +BJbPJGGGHPZqZQbpMlWWMWlBljjjgDjh +tGQPpZtfTPpqrHsVLSzmRNLtSFsN +WCDlBWWlvMFWlQWpmSZdZnNmGfJZFZ +LqjTjgtjPcHTTJgLThztcLTLnHnmdSpZdpdffnmZSppfGpSn +PtzqzjtqJgggzhqqccqhrQMsMvMwrCwMlBvMwvvsvs +NMsJfsHTMVbjnLnVsC +htWllhmZcWDWBwhZPcmpVRjnVMRLCCjLFpCwRb +PmZMrBtcPmZWhzDWBtMmJQdddHfQGNSqHqQGGTgr +NmfnnsPlHnGqnlsNNmRPltRLvrhvrSGJSJjvFFFSSFJLhb +PzQZccVPVwgPjrJSJjhFFpQr +TdwBgdTVwzdwzlmNfRqPmqqTql +BVLLBPmPmWBlMlLJnJlBlFQVgdRDdRZRZHpZjQzdRdZQdzQZ +trGTsfbTTgHZptzSZW +fsfTNcCqqNhhVhVFVhVBWLLB +LJwgJNfbCvwCJCwBCCNhhHmGHWWSMWmWmbMmTmmGdS +lzRnnltsstZzzRTfHtHWHGWftfHW +ZFFzVFqzqlFcZscZpRZsNphjhjvjfgJhQgQvwvhC +HHzcFNcHFjhjZjlrghLL +pMZJptpZWCmpttRMCWnnDnBGGDLhlLQrhl +MJsMCTZTTpTJRmMCJzfNsNcfNHqzvvfcww +ZDtllsDlVsrQBqQqRfWl +wvJgpPhhscgvpJFNrRjRrWRjqrRjdjRv +zpsNzCsNCJCCPPHSLzznMnDSLGLM +rfrJjFWrwjpnJjjjfrjJJnFVTgTggRWRRRPPLQgCgQcPPT +sSNbSvqmsSZDZZBtNTTPGgMLMRVcgPCMRb +zZDZzNNSmrfpjFCjzj +dbbNJPBbbrFqNqttqrGbqDcmDQRmFmwcwSnQSDcpwS +ZMMTsHjzLlLcnSVwpRRQ +hZTWjWvTZzTTWhszfwbJhrgJqtBbJGdqNPqt +rrqgHrgtcHJRRjWZlRvnnWBn +QbhVmdFppwbdjnMvlnBwMWZP +TpFDdVTFTDfhHfJcSJSzGZGf +sqNTNZHsHjjFBBwJMMNMcCJD +WGLQPjfWfQWPWmtLSRRRLwBJDbtCCJJCbbwCMBbMBc +RnPdLQfPLRdndGGRvfjlgdrTTgTsrgTrZFzF +BfHbjVVqSBFfMSlCLCDrGSQssvlr +tTpnnzpcPnwzhcnJTDtTPRprGlRGGGCWlQsWvrlvrQGQrC +DPwhghDTpPVHqqdgZbZq +ZzPqfGPtRtqfqPbqfGgGZbrhMjmjBCpHpHNCmHtHjmBHnj +QJwllvFWwDvnwCBBzjwwpC +ccJLVQzWFJvVJlVbgrZZLZLRRPSgdr +rBGbLbnTfnZrQbTnHldqsMmHsqlsWfMd +JcJjCCPzPtjCNHdlGGMlll +jjgpRRvcGbwpThVppT +ttDfjtqfjtpTWWwfTbtlWccNGRSZNGPGhZGhGhcwRh +LbCrHdvzLSSHmSRNmc +JCsBvrvBLzFQbbvlVVnpQpDtWlDqfq +vvdvJBfvdTvRBflBJPNmmffmgPCMwDgsss +rFjqLnMcnqrrtMLtjNgCPCsNzzgsPCGFNs +VqLqnLVZqjMZqWnrVtWlZJJSvHvBdRSvBdRvvJ +zZBDzgQQZLlcglzjrCrCMFjGZbMsHm +PnnJVRfttTtwVnnVFGHVsjCFCjrsMM +wPRpRpRnNTpPNlBdQQDdgDNMhN +bNQpFpnwgtDHpbnhWtffmfmhvhhfsZ +LcdLdwCLPPSVSqqwZGhWdJhGJZhlGlsm +TBwSLPSPVRSVqSVqVrcnpMDDngMgnQpbRQFDNH +vPSvBJZSSdJgpJJZBDGDGrdqGdllGrGDrh +HMtsltFlRVVFtlscRjjMcsWwWChWmrnwDWGwChmjGCWq +MQHNlTVHNVHpbbpbTvvBvf +VsbPMwhbWhzdpzNNggnBcTBWNngQ +RmtZZFZqSjqVHmGQNcBHNLGLGHQH +JjRClqCjZlDZmqSqljFZZqRCvsvPfshhMdwsDwbVwzMzhffb +bfGtRgfDtVmsMzTbmz +LjGZwQLLdjFdHLNMhmzBzMNHNmzN +wjQLCFvnnQGdZLGWSjdqWDfPlrRpqRDDRqrpPr +pqnBZqjCNCqQqmllpHGMGdTfML +PsFgrRvSPsWTwWWQwGHLHW +SrvgsFbrrPJJFsrFPtFSCChBDQjqCqtNhDqhCqNC +RJZRWZWMWZPZffRCPWMdRdfQQQjJzHQsssjrSQFVschVHr +NgpnDgvGTNTVFHFFjVFF +jntvgljpGvlnbLtLbBvnLRPlCCwwCfRqMCCqqqddqw +PFBMVDSVPHMTThtMtSBMMVNbQprHbNRgNRRgLnvpnjnN +scGcrcwlswdGlcqvbQgnnpQnqLjnpp +ffwswWzcmlcWWsmcZhrDFrZMFZBMFzhM +LMdZGqdRSSZmCZMRfQjnggvlvggRcznz +tjjFhBrtpthpslcvvlcQzFnFvQ +jrhbjtpJtbZqCLdWLq +HBGBfBttZzbGbljPdpFddFqRmqRzRN +JDWghDDSDqmmDDpc +CLvgMvChCvLphCTSShhMhQsBbfTfsGsrBfjfrljrZZff +RgHgDqDzqQqgcdHqcZGTNlGffGBDGZBTGZ +LFLPWsmvrbwhwwswrTlTTCBNGFfGlNJZNS +vhrLnvhNmWvMsrvwqMdRcptQtztcjptz +sLMLsThhjgqLlsnsLgTLtMFcRbcPcJSwJbbSbtSWScSt +fvrjjDjvNprdPwwJCCSrWPFP +vfZdGzVzfvGGVGpBjnnMglTsgZlqsMlM +TCVMfCfBnHHfLLPFWb +GgQlGJzNzbzHcHHLlcPLHL +tQbNQGgRZZCVtVMZ +QFFMzwjwngsvsBjGGJWbBbBWbB +QdmVDmVDWRPWVPVV +QHtHSdDpLQCCSHrtqrdrttDfLgvnFvFghNszzwgngFwsNF +RzzTNpSRBzSBVpSRlHNSHBSSGPcLNGtjhPPcbcGhPPhcrnct +CCmmCwwdfFJqDmdwsddhsmvdcMbLfcftttbPnjMPbcjPMPbP +mdZQmvssFdqsFZvsZQmvDvmWzgQBWTRzTzHlppWRglHBQh +VWmnfQWzWWnHWMfmmMVNMfWjtBtBNSNSrlStlpjJBBlgBS +cZZvbwsZsbbZvvscCRdFTTTQrBStdBJgSdhjgBjBjJjpJJ +wCFTCbZbFwwCTvFTwsPGccMzMDWVWfzLGmqHnnDHGLQL +sNQQHbbhdlpdrQllqpsqSpGjZDZGgDnVcnjjnnDZ +WWRLGFvJBJPvzzWjnTncDVZTTPgDff +FLRLGRFRJLBWJmJzMRLCvldrMrbbltdhQQlNqtMbsb +HZllwlZSlSZwhvmQjcZhTqcT +sPzzdgpszpzsBdvvMccvcqPThjhM +JDdsDspLzsdzBgVdBGBzCLlwbbwWSnlnnWffHwJcNlHw +nzCTCnpqJqfCnvvjZjWjPcZrmcmZfW +GNdwgVjwRdRglMrPWLPWZWcNWW +dVblgtRwQgSGVBldbQBbBRJnQJTsJHTqnzzJFpjvHnnn +dqpQQrdqQpLfqcGSdggQdgRMmwHBMMBVNRNDFFBDBgNt +vTzsnZCnlCnshbPlvZJbBzVmmVRDNwtHFBwMDVBR +lJCshjTJbVqfVdjjjG +WlLCJlHLcZcJWcWZJnLHnPqlFtSthTnFNThVtNhVhvNVzVtF +QfbgRsspfDRsgfjqqRRpDbSNSTFzBbTbhttVBhVNBzzT +fwgfRdpdfQDqgPHHZJZCcdGddH +sbrbmVmfddzJntZZtwtMMf +PvhwPRlvvWhFvSRhpFMMJGMFppnBTBGJ +RPlCCLDPDClwHbrdzsdNLzgs +HZgqtgbqRZvzwzCh +BFqmGfrNLQfhzJWBhRJwJR +LFqFQjrcrcqFNMmMdHggntDPMnsDbn +NmWmPblGnnTTNlFGPmNWfwdchdlHdBdwcfCfZppZ +rzqzRjgVrJrzzcFdqdCBFBhZhH +VDRsRMjRJJrQsJPTGFNvsbnsnLGm +nrbrBLTffjNRzGQSJHJQGT +tcZqMcppCmHRQPGGCG +pMDcZhpgcpFDfrwNDDrLVjGj +LWlmlmWqvrBMWWBlmjLThBrfPJZfZZCwPCJJwPCTcggCsd +pSbRHbzpHDVFRQRfPdfnZswgcJcppp +SzRNGbzSWNPLWqLv +vqslblpspsvqBFSqcrrZZDdTfFPHccrf +GWRhWmjwhRcQdCDrPjDP +mcWLVnnWJgGRzVSsVSpSSptNpMvb +wHTPfdTvHlPHGpdvvTddGfcJLLWWwWWcCWrqrVMWCVLL +zhsSNZhnshNSnvZmvsCWWSLrVMcrSCLWJcrq +snDnshmNsjnTdHPfDGvdDT +CfrnFFMnnsRNrNCwFCrdssgqgqvVZvZqlTWBNWZqlJBW +htDhDLhwPWWBqTghgB +DPLPzHDtSPStjLGLtzSMwbdMdnCHrRdCFsmfnR +nBNWCvJmVPNnCPNDJWbtmSwqTttcQsSqtqTjQQ +pMflzLlffRRMRdFlflpLddGdsTjwHqzcvwTqtsStQQjtwwsQ +ZhGlphlpvvLLfFGvMLhfrfWNJNNPVPbnPhnDgDbDDNbJ +ZCpCmVlZvlpBBwvvMCrJhrfhMfjjWMSG +qhstFzFFqzHGzNfSMJSGzM +QnHRPRgRQPtPhtnDsqsbDQPBlTcpBwmVmTvbwdwBTVZVpl +PHmqHdddqBWMmTvMvTGMBWPdwhssnnHlhgsNwhwNHQzwrswh +cSbVcDLtbfLSFzhlhJswgtrsww +bSLlFLFFLDZVLpZVjFLdPMdBBqGGPmmqWGdGjM +FQCnQwFRbnrSfgQgwFRCnswmPLpMppPdMMllpLMptMLldPSZ +cJhhJcJVBJjhfHDvJqThvVDcpdGGqdZGdlltpqWdMqpdGWtG +HhzTjJBzJTvNJHvzvvNBzBFnFCNCbCwrbnRbgRwfwQsg +jRzDgbDDQDgVqqDGsjttNdwqNJZNwNdTWrpB +MHvvvlSHFllMhhMrpWBJtlWdpJrTwZ +mFcFFHmCmtcvfvFFHHLDGnRVzjDgnmgmnzGgGg +JJhDpDdmsJJdgmhrpPjGjFLPPSNpjL +WbznbRGnPfrfRSrN +WqGnnVGVMGHtWTCgJvZHggBggZCg +wlrPQtZQvwrzlvNfZLMZBjbbqjqLbSBjTg +PGJDVdsdhsPVPjbTcLcGLgjqbM +VPDRHWRdsRQvpfmmlw +pvTZTSpTZvGGphNvvbDpdrMqrjlWdPqqjWdldNrd +gmmJmsQfJgcRQJQJJncVQjMWllSnqljqBlPPjPHHHH +QVJQRVcwmJcchwpSZLwGbSZZ +zjrDMWcjDzQjDlWrnqqRBRNhBJRBhBJqnf +TTGPPdgGLwdHGwGPTgLbbvhHtRRNRRSfchqRvSqHRJ +TZTccPpdZwPQjllsspjVzD +jHLHhHFRjhcblDRRWbWTdtppLTntTnMmGLMvTp +BBQBgBBCrrgqJqTtMZMpngdtpvpG +QJJJQrsVsQQfQVPCNqsNSjHdhhdRHDNHFHFclh +RbCLnvdtnLRLRbmLPpHdQCvmNJpJSZSJlgDzglGlzcclcDGD +qBBwMjfsFMjsMbfWbwjlzDZlcWclJczgNDGNDl +wqjhrwwhhCvbQPrRnC +vpWDDDWZQQNGllwHlwWVGj +LCPdqdcdtsvdsCtsddvmVrVjjrBwHlmswmBnmw +fLfvSgvMfdCPqzZNThfNNpTJJQ +CVVVLbNVmGNQbGbGHHbHbvdwgQlwJDTFgJQdDZDJFD +ssWBsBWrjSzWrPtBjnSCTwvFZlDjwZDdgwTDwggv +nntPBqBrPsBfnCRCBWzCVcGVHMLNcbHLNmHqGphp +sbbwwzdsbqQQbQnnNbPNGbznHHRdLTggMVHFVvRZTRVRHMZF +mWffDWfflBpfmcWjWrrJVvgRLlMZVVhMFFTlHhMM +rJJCctmjcfvzsqsqbtbqPP +HGWjHWzVctQVcJVtjvRsvLTddqDDDsjRLg +bbMnlNChZQLZhdDs +SMMMMMMNmMllSlrmCczGcVzBcGWFBQGcrt +VwQlqcLfdLGqdqDjjgZrjZBdttjd +zSPPPJzJGjJjZrCBDt +WMTMsTWsccsvGGwH +hZvbQrjTTZjZcjWNrjnQrcTRpGMqcRfRRGzHfHfpfRMqRz +mDJlFmwCVVwbCVbPBRLMMLpRLwRLHqpR +gsCmgJsPDCtCVlvbhgQjhgQbnQbd +fSgbhhGPGJGhRDmlhhHcHDBH +LsMwQWFswsQMsQMvjslcBcDldBTWfDcHRRdl +ZpVFwLQwVLQvCVsMjrJbbCNPbzSJtPbPPf +VDzWMCpfCcCRDzqDzqNnvLZnfntHQnPPLQlt +sJmdbTBdmmGhFhhbJNNQlJnQlQLHPZNn +sdwmwsdrmMRpDRMLcw +JpWmSWpCnCbJBZHZVldbdfZf +rgdrgNdrjgNPrMjwTssrPdfDZqsVfQHDFlQDDHQVsZfB +TRPdNNLgjNwrRTrJpppzCmzmCLSnvS +QbtQJHQmbmfmBRvbQRzBvldqcFljsGcFdGdvsqqGls +ChCPWhDhWZWJVnZpCNChhVDcMcDdcdgGscjgFjGFlsjjGq +WZNTWNhNZfJJbTJTmR +CHGCHFcZvCrchrZrhsVtsBQjMstfZMMBgg +NNqwDLmDjJgQBmVQ +wdWLLTgWRTWcCcbrHCHhGW +bTZZvNjNjLgTCHcWhccfhWJdhvnc +mnFFmPGSwRPShzVPPWPdhhzr +FRtBFGBMFQFttRwtZgTjCTnQNbNLjTCH +bJSqrSpDJbSNbFjSFCfPWGcwGWPrcTCfwr +tRtLhDsvhQZlHRhRtQQnCnCcdwCPwTwdGcGP +HsHvsmBZvmvsmBhHvLssVqDSNgFMDzgbbDVJzbpMVq +nSSDHRRRQRBCLCQC +qGmfPzGmGlrrrpfrqlzrJtLvBlhQbSCvbtCtlFhLFC +zzpmqqJJVVfJfPfMpfdHNndsNwDSMSDDNcsc +CscQsVMhCsMsMHhhVthtwmgZNRqzWLBRLRLmBWmZWBND +JQJdddrjrLqBgDBq +QbFlTffpMbMnsPCh +gDdbVbVDddDfVfWQfBRLQZsZLRQQ +FCCTrGCMStwGHTtTWLQhLZrlRssRhRhp +FSHqtFTmFwmCsSwGTHtMTSdjjcdnVddgzmbVmjmndbbD +JtBBMcLWLdfFLhMttcWWhfWLrTRGFsbwTmRGwmwbbCTGGsbD +PzQpSQQQvzVvpzHqjvNvQSvGRmmTDVRDmsGsRGsrcDcDGC +cQPHSPvPvZHqcZjzpZjnZNtWlLdtldJWfnfhlJJtLdMg +nPPssTBnMJPdtHPVHtRhpv +bSSgGFWDgWwDFFlmWlcShqdpRqpVcHvvnqpvpRHd +bGFnGljgSsjBCTBszz + diff --git a/2022/03/python/main.py b/2022/03/python/main.py new file mode 100644 index 0000000..8db8094 --- /dev/null +++ b/2022/03/python/main.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python + +from os.path import dirname, join + +# Day 03 + +# Common + + +def read_input(filename): + data = join(dirname(__file__), '..', filename) + with open(data) as f: + return f.read().strip() + + +test = read_input('test.txt') +data = read_input('input.txt') + + +def score(char: str) -> int: + offset = 97-1 if char.islower() else 65-27 + return ord(char) - offset + + +class Rucksack: + def __init__(self, items: str): + self.l = len(items) // 2 + self.items = items + + def find_common(self) -> str: + front = self.items[:self.l] + back = self.items[self.l:] + intersection = set(front).intersection(set(back)) + return list(intersection)[0] + + +class Supplies: + def __init__(self, rucksacks: list[Rucksack]) -> None: + self.rucksacks = rucksacks + + def get_common(self): + return sum([ + score(rucksack.find_common()) + for rucksack in self.rucksacks + ]) + + def groups(self): + group_size = 3 + total = 0 + for i in range(len(self.rucksacks)//group_size): + i *= group_size + subset = self.rucksacks[i:i+group_size] + sets = [set(rucksack.items) for rucksack in subset] + chars = sets[0] + for s in sets[1:]: + chars = chars.intersection(s) + total += score(list(chars)[0]) + return total + + @staticmethod + def parse(data: str): + rucksacks = [ + Rucksack(item) + for item in data.split('\n') + ] + return Supplies(rucksacks) + + +# 1 +print('1.') +supplies = Supplies.parse(test) +print(supplies.get_common()) +supplies = Supplies.parse(data) +print(supplies.get_common()) + + +# 2 +print('\n2.') +supplies = Supplies.parse(test) +print(supplies.groups()) +supplies = Supplies.parse(data) +print(supplies.groups()) diff --git a/2022/03/test.txt b/2022/03/test.txt new file mode 100644 index 0000000..f17e726 --- /dev/null +++ b/2022/03/test.txt @@ -0,0 +1,6 @@ +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw